0

我已经使用 AVFoundation Camera 库开发了一个自定义的 Camera ViewController,以便获取具有嵌入式深度数据的高质量图像,如此处所述https://developer.apple.com/videos/play/wwdc2017/507/

为此,我已经使用这些与深度相关的设置配置了AVCapturePhotoSettingsAVCapturePhotoOutput对象,如文档中所述:

    let photoOutput = AVCapturePhotoOutput()
    photoOutput.isHighResolutionCaptureEnabled = true
    photoOutput.setPreparedPhotoSettingsArray([AVCapturePhotoSettings(format: [AVVideoCodecKey: AVVideoCodecType.jpeg])], completionHandler: nil)
    if photoOutput.isDepthDataDeliverySupported {
       photoOutput.isDepthDataDeliveryEnabled = true
    }

   let photoSettings = AVCapturePhotoSettings()
   if photoOutput.isDepthDataDeliverySupported {
      photoSettings.isDepthDataDeliveryEnabled = true
      photoSettings.embedsDepthDataInPhoto = true
      photoSettings.isDepthDataFiltered = false
   }

我所取得的成就是深度捕获有效,在 jpeg 中提供了 16 位深度图,但在某些特定情况下,例如:

  • 统一的无纹理背景(例如墙壁),物体靠在上面
  • 前景主体距离双摄像头比 25/20 厘米更近

根本不生成深度图,即AVCapturePhoto对象设置了depthData对象但没有depthDataMap CVPixelBuffer 可用。结果,获得的 JPEG 没有嵌入深度数据。

有人已经遇到过这个问题吗?如果有办法解决它?

预期的行为?

正如评论中所写

[..] 深度图可能有洞。但对于静止图像 (AVCapturePhotoOutput),DualCamera 能够花费更多时间并产生更高质量的图像(高达 768x576)。与 DepthDataOutput 相比,DualCamera 对照片使用不同的(更高质量、更高延迟)算法。更高质量的视差生成是一个全有或全无的命题——它不会像实时 DepthDataOutput 算法那样产生稀疏深度。因此,它永远不会有任何孔洞,过滤和未过滤之间没有区别。[..]

这似乎是一种预期的行为,即如果系统无法生成足够好的深度图,它将不会给出任何结果,而不是生成带有标记为“孔”的某些部分的深度图,但我想要一些在确定这一点之前反馈。

4

0 回答 0