Улучшение сохраненного изображения данных глубины от датчика TrueDepth

Я пытаюсь сохранить данные о глубине с сенсора FaceId TrueDepth на iPad Pro. Я взял этот демонстрационный код и добавил следующий код простой кнопкой :

    @IBAction func exportData(_ sender: Any) {
        let ciimage = CIImage(cvPixelBuffer: realDepthData.depthDataMap)
        
        let depthUIImage = UIImage(ciImage: ciimage)
        let data = depthUIImage.pngData()
        
        print("data: \(realDepthData.depthDataMap)")
        
        do {
            let directory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0];
            let path = directory.appendingPathComponent("FaceIdData.png");
            
            try data!.write(to: path)
            let activityViewController = UIActivityViewController(activityItems: [path], applicationActivities: nil)
            activityViewController.popoverPresentationController?.sourceView = exportMeshButton
            present(activityViewController, animated: true, completion: nil)
        } catch {
            print("Unable to save image")
        }
    }

realDepthData - это свойство класса, которое я добавил и обновляю в dataOutputSynchronizer:

   func dataOutputSynchronizer(_ synchronizer: AVCaptureDataOutputSynchronizer,
                                didOutput synchronizedDataCollection: AVCaptureSynchronizedDataCollection) {
        
        ...

        let depthData = syncedDepthData.depthData
        let depthPixelBuffer = depthData.depthDataMap
        
        self.realDepthData = depthData
        
        ...
    }

Я могу сохранить изображение (серая шкала), но теряю некоторую информацию о глубине, особенно на заднем плане, где все объекты полностью белые. Вы можете видеть это на изображении ниже, стена и второй человек позади не отображаются должным образом (все белые). Если я не ошибаюсь, из того, что я видел в приложении, у меня должна быть дополнительная информация!

Захват TrueDepth

Спасибо!


person Aurelien Montmejat    schedule 09.12.2020    source источник


Ответы (1)


Имеет смысл только 32-битная глубина - вы можете увидеть глубину изображения, задав его гамму. Форматы файлов .exr и .hdr поддерживают 32-разрядную версию. .png и .jpg обычно 8-битные. Вы также должны учитывать порядок каналов при конвертации.

person Andy Fedoroff    schedule 10.12.2020
comment
У вас есть примеры кода? Могу ли я напрямую экспортировать мой CIImage в формате .exr или hdr? Я не смог найти много информации о том, как это сделать. - person Aurelien Montmejat; 11.12.2020