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);
}
Глубина есть, хорошо. Но как теперь с его помощью удалить фон изображения и заменить его любым другим изображением?
Все примеры, которые я нахожу, отображаются только до тех пор, пока не будут получены данные о глубине. Любая помощь будет оценена.