【问题标题】:Using iPhone TrueDepth sensor to detect a real face vs photo?使用 iPhone TrueDepth 传感器检测真人脸与照片?
【发布时间】:2019-09-14 17:21:15
【问题描述】:

如何使用 iPhonetrue-depth 相机拍摄的深度数据来区分真实的 3D 人脸和相同的照片? 要求是将其用于身份验证。

我做了什么:创建了一个示例应用程序来获取摄像头前面的AVDepthData 的连续流。

【问题讨论】:

    标签: swift avfoundation arkit coreml truedepth-camera


    【解决方案1】:

    理论

    TrueDepth 传感器让 iPhone X / 11 / 12 / 13 除了通过常规自拍相机捕获的 RGB 通道外,还可以生成高质量的 ZDepth 通道。 ZDepth 通道让我们在视觉上有所作为,无论是真实的人脸还是照片。在 ZDepth 通道中,人脸表示为渐变,但照片几乎是纯色,因为照片平面上的所有像素都与相机等距。

    AVFoundation

    目前 AVFoundation API 没有 Bool 类型的实例属性,可以让您找出它是真实的脸还是照片,但 AVFoundation 的捕获子系统为您提供了AVDepthData 类 - 用于每像素距离数据的容器(深度图)由相机设备捕获。深度图在每个像素处描述到对象的距离,以米为单位。

    @available(iOS 11.0, *)
    open class AVDepthData: NSObject {
    
        open var depthDataType: OSType { get }
        open var depthDataMap: CVPixelBuffer { get }
        open var isDepthDataFiltered: Bool { get }
        open var depthDataAccuracy: AVDepthDataAccuracy { get }
    }
    

    像素缓冲区能够包含深度数据的每像素深度或disparity map

    var depthDataMap: CVPixelBuffer { get }
    

    ARKit

    感谢 AVFoundation 和 CoreMotion 会话(在一定程度上它也使用了 Vision),ARKit 心跳加速。当然,您可以使用此框架进行人脸检测,但请记住,ARKit 是一个计算密集型模块,因为它具有“重金属”跟踪子系统。要成功检测真人脸(不是照片),请使用ARFaceAnchor 允许您以 60 fps 记录头部的运动和方向,使用facial blendshapes 允许您实时记录用户的面部表情。

    愿景

    实施Apple VisionCoreML 技术来识别和分类包含在CVPixelBuffer 中的人脸。但请记住,您需要 ZDepth 到 RGB 的转换才能与 Apple Vision 一起工作——目前,AI / ML 移动框架不能直接处理深度图数据。当您想使用 RGBD 数据进行身份验证时,只有一两个用户的脸需要识别,它大大简化了模型学习过程的任务。您所要做的就是为 Vision 创建一个 mlmodel,其中包含许多 ZDepth 面部图像的变体。

    您可以使用 Apple Create ML 应用程序来生成轻量级且有效的mlmodel 文件。

    有用的链接

    您可以找到 herehere 使用 Vision 检测和分类图像的示例代码。您也可以阅读this 帖子了解如何将 AVDepthData 转换为常规 RGB 模式。

    【讨论】:

    • 我已经意识到这一点,我确实有深度数据。但是,我还获得了 2D 照片的深度数据。那么,您能否提供代码来处理接收到的深度数据以区分 3D 对象和 2D 对象?
    • 我已经使用 ARKit 实现了人脸检测。但我无法区分 3D 人脸和 2D 人脸。
    • ARKit 没有使用所有必要的工具(AVFoundation 和 Vision 框架拥有的工具)。
    • 此外,ARKit 使用 CPU 密集型跟踪,并且会很快耗尽您的电池。如果您需要 TrueDepth cam 身份验证,最可靠的想法是不要使用 AR 框架。
    【解决方案2】:

    您可以利用 AVCaptureMetadataOutput 和 AVCaptureDepthdataOutput 来检测人脸,然后采取所需的操作

    【讨论】:

      猜你喜欢
      • 2017-07-30
      • 2020-06-03
      • 2012-04-15
      • 2015-09-08
      • 2021-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-28
      相关资源
      最近更新 更多