如何使用 iPhonetrue-depth
相机拍摄的深度数据来区分真实的 3D 人脸和相同的照片?要求是将其用于身份验证。
我做了什么:创建了一个示例应用程序来获取AVDepthData
相机前面的内容的连续流。
如何使用 iPhonetrue-depth
相机拍摄的深度数据来区分真实的 3D 人脸和相同的照片?要求是将其用于身份验证。
我做了什么:创建了一个示例应用程序来获取AVDepthData
相机前面的内容的连续流。
TrueDepth 传感器让 iPhone X / 11 / 12 / 13 除了通过常规自拍相机捕获的 RGB 通道外,还可以生成高质量的 ZDepth 通道。ZDepth 通道让我们在视觉上有所作为,无论是真实的人脸还是照片。在 ZDepth 通道中,人脸表示为渐变,但照片几乎是纯色,因为照片平面上的所有像素都与相机等距。
目前 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 }
}
像素缓冲区能够包含深度数据的每像素深度或视差图。
var depthDataMap: CVPixelBuffer { get }
多亏了 AVFoundation 和CoreMotion会话(在一定程度上它也使用了 Vision),ARKit 的心脏正在跳动。当然,您可以使用此框架进行人脸检测,但请记住,ARKit 是一个计算密集型模块,因为它具有“重金属”跟踪子系统。对于成功的真实面部(不是照片)检测,使用ARFaceAnchor允许您以 60 fps 记录头部的运动和方向,面部混合形状允许您实时记录用户的面部表情。
实施Apple Vision和CoreML技术来识别和分类CVPixelBuffer中包含的人脸。但请记住,您需要 ZDepth 到 RGB 的转换才能与 Apple Vision 一起工作——目前,AI / ML 移动框架不能直接处理深度图数据。当您想使用 RGBD 数据进行身份验证时,只有一两个用户的脸需要识别,它大大简化了模型学习过程的任务。您所要做的就是创建一个mlmodel
包含许多 ZDepth 面部图像变体的 for Vision。
您可以使用 Apple Create ML 应用程序来生成轻量级且有效的mlmodel
文件。
您可以在此处和此处找到使用 Vision 检测和分类图像的示例代码。您还可以阅读这篇文章以了解如何将 AVDepthData 转换为常规 RGB 模式。
您可以使用 AVCaptureMetadataOutput 和 AVCaptureDepthdataOutput 来检测面部,然后采取所需的操作