iOS заменяет фон изображения с помощью depthData

Я смог получить данные о глубине, выполнив следующие действия:

      AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithDeviceType:AVCaptureDeviceTypeBuiltInTrueDepthCamera mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionUnspecified];

AVCaptureDeviceInput *input = [[AVCaptureDeviceInput alloc] initWithDevice:device error:nil];

Потом:

          if ([captureSession canAddInput:input]) {
        [captureSession beginConfiguration];
        captureSession.sessionPreset = AVCaptureSessionPresetPhoto;
        [captureSession addInput:input];
        
       photoOutput = [[AVCapturePhotoOutput alloc] init];
        
        if ([captureSession canAddOutput:photoOutput]) {
            [captureSession addOutput:photoOutput];
            
            videoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:captureSession];
            videoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspect;
            videoPreviewLayer.connection.videoOrientation = AVCaptureVideoOrientationLandscapeRight;
            [_previewView.layer addSublayer:videoPreviewLayer];
            
            [captureSession commitConfiguration];
            
            [photoOutput setDepthDataDeliveryEnabled:photoOutput.isDepthDataDeliverySupported];
            
            [captureSession startRunning];
        }
    } else {
        NSLog(@"Cannot add input.");
    }

Затем при захвате:

      AVCapturePhotoSettings *photoSettings;
if ([[photoOutput availablePhotoCodecTypes] containsObject:AVVideoCodecTypeHEVC]) {
    photoSettings = [AVCapturePhotoSettings photoSettingsWithFormat:@{AVVideoCodecKey: AVVideoCodecTypeHEVC}];
} else {
    photoSettings = [[AVCapturePhotoSettings alloc] init];
}
[photoSettings setDepthDataDeliveryEnabled:photoOutput.isDepthDataDeliverySupported];
[photoOutput capturePhotoWithSettings:photoSettings delegate:self];

Затем в делегате:

      - (void)captureOutput:(AVCapturePhotoOutput *)output didFinishProcessingPhoto:(AVCapturePhoto *)photo error:(NSError *)error {
    NSLog(@"%@", photo.depthData);
}

Глубина есть, хорошо. Но как теперь с его помощью удалить фон изображения и заменить его любым другим изображением?

Все примеры, которые я нахожу, отображаются только до тех пор, пока не будут получены данные о глубине. Любая помощь будет оценена.

0 ответов

Другие вопросы по тегам