使用 iPhone TrueDepth 传感器检测真人脸与照片?
Posted
技术标签:
【中文标题】使用 iPhone TrueDepth 传感器检测真人脸与照片?【英文标题】:Using iPhone TrueDepth sensor to detect a real face vs photo? 【发布时间】:2019-09-14 17:21:15 【问题描述】:如何使用 iPhonetrue-depth
相机拍摄的深度数据来区分真实的 3D 人脸和相同的照片?
要求是将其用于身份验证。
我做了什么:创建了一个示例应用程序来获取摄像头前面的AVDepthData
的连续流。
【问题讨论】:
【参考方案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 Vision 和CoreML 技术来识别和分类包含在CVPixelBuffer 中的人脸。但请记住,您需要 ZDepth 到 RGB 的转换才能与 Apple Vision 一起工作——目前,AI / ML 移动框架不能直接处理深度图数据。当您想使用 RGBD 数据进行身份验证时,只有一两个用户的脸需要识别,它大大简化了模型学习过程的任务。您所要做的就是为 Vision 创建一个 mlmodel
,其中包含许多 ZDepth 面部图像的变体。
您可以使用 Apple Create ML 应用程序来生成轻量级且有效的mlmodel
文件。
有用的链接
您可以找到 here 和 here 使用 Vision 检测和分类图像的示例代码。您也可以阅读this 帖子了解如何将 AVDepthData 转换为常规 RGB 模式。
【讨论】:
我已经意识到这一点,我确实有深度数据。但是,我还获得了 2D 照片的深度数据。那么,您能否提供代码来处理接收到的深度数据以区分 3D 对象和 2D 对象? 我已经使用 ARKit 实现了人脸检测。但我无法区分 3D 人脸和 2D 人脸。 ARKit 没有使用所有必要的工具(AVFoundation 和 Vision 框架拥有的工具)。 此外,ARKit 使用 CPU 密集型跟踪,并且会很快耗尽您的电池。如果您需要 TrueDepth cam 身份验证,最可靠的想法是不要使用 AR 框架。【参考方案2】:您可以利用 AVCaptureMetadataOutput 和 AVCaptureDepthdataOutput 来检测人脸,然后采取所需的操作
【讨论】:
以上是关于使用 iPhone TrueDepth 传感器检测真人脸与照片?的主要内容,如果未能解决你的问题,请参考以下文章
想要Mac电脑上的面部识别码?MacOS Big Sur暗示TrueDepth摄像头即将推出