在没有iPhone 7+的情况下使用AVDepthData获取媒体

时间:2017-06-28 18:24:26

标签: image depth ios11 iphone7plus

在没有拥有iPhone 7 +的情况下,为AVDepthData构建应用程序的最佳方法是什么?

深度数据只能在配备双镜头相机的iPhone 7+上拍摄。但我想任何iOS11设备都可以处理深度数据,前提是它可以访问包含它的照片。我无法在线找到Apple或其他方面的任何此类媒体资源。有人有吗?或者有更好的方法吗?

我试图调查iPhone 7+模拟器库,但模拟器崩溃,因为它不支持深度演示应用程序正在使用的Metal。

3 个答案:

答案 0 :(得分:2)

你需要一个拥有iPhone 7+和iOS 11的人(比如我)给你一个图像。

在iOS 11上使用Safari访问此链接,然后点按more... - > Save Image

http://hellocamera.co/img/depth-photo.heic

注意:我从此图片中删除了gps数据。

答案 1 :(得分:1)

虽然是非繁琐任务,但可以生成AVDepthData并将其添加到您自己的图像中。

  1. 创建一个深度/差异词典,如CGImageSource.h CGImageSourceCopyAuxiliaryDataInfoAtIndex中记录的那样 - 但是,以下是更多详细信息:
  2. kCGImageAuxiliaryDataInfoData - (CFDataRef) - 深度数据

    仅包含二进制像素缓冲区。因为它是通过读取CVPixelBufferLockBaseAddress中的指针从像素缓冲区中提取的数据。您可以使用以下支持类型之一的格式创建CVPixelBuffer:

    • kCVPixelFormatType_DisparityFloat16 ='hdis',/ * IEEE754-2008 binary16(半浮点),描述比较两个图像时的标准化移位。单位为1 /米:(pixelShift /(pixelFocalLength * baselineInMeters))* /
    • kCVPixelFormatType_DisparityFloat32 ='fdis',/ * IEEE754-2008 binary32 float,描述比较两个图像时的标准化偏移。单位为1 /米:(pixelShift /(pixelFocalLength * baselineInMeters))* /
    • kCVPixelFormatType_DepthFloat16 ='hdep',/ * IEEE754-2008 binary16(半浮动),描述深度(到物体的距离),以米为单位* /
    • kCVPixelFormatType_DepthFloat32 ='fdep',/ * IEEE754-2008 binary32 float,描述深度(到对象的距离),以米为单位* /

    要将任意灰度图像转换为伪深度缓冲区,您需要逐像素地将您的灰度像素值(0 =黑色到1 =白色,z接近zFar等)转换为米或1 /米取决于您的目标格式。并将它们设置为正确的浮点格式,具体取决于您从哪里获取它们。

    kCGImageAuxiliaryDataInfoDataDescription - (CFDictionary) - 深度数据描述

    告诉你如何解释我们给你的缓冲区,或告诉我们如何解释你给我们的缓冲区:

    • kCGImagePropertyPixelFormat是CoreVideo / CVPixelBuffer.h深度/差异格式之一
    • kCGImagePropertyWidth / Height是像素尺寸
    • kCGImagePropertyBytesPerRow是正确的说法

    kCGImageAuxiliaryDataInfoMetadata - (CGImageMetadataRef) - 元数据

    此值是可选的。

    1. 创建AVDepthData,init(fromDictionaryRepresentation: [AnyHashable : Any])传递上面创建的字典。
    2. 使用ImageI / O创建图像:

      // create the image destination (not shown)
      
      // add an image to the destination
      CGImageDestinationAddImage(cgImageDestination, renderedCGImage, attachments)  
      
      // Use AVDepthData to get auxiliary data dictionary          
      

      VAR auxDataType:的NSString?

      让AUXDATA = depthData.dictionaryRepresentation(forAuxiliaryDataType:安培; auxDataType)

      // Add auxiliary data to image destination  
      CGImageDestinationAddAuxiliaryDataInfo(cgImageDestination, auxDataType!, auxData! as CFDictionary)  
      
      if CGImageDestinationFinalize(cgImageDestination) {  
          return data as Data  
      }  
      

答案 2 :(得分:0)

我猜您可以在任何iOS设备上处理照片的深度数据。您只需要iPhone 7+拍摄的照片样本即可。 Here是他们中的一小部分。