我如何使用iPhone true-depth相机捕获的深度数据来区分真实的人类3D人脸和同一人脸的照片?要求是使用它进行身份验证。
我做了什么:创建了一个示例应用程序,以获得相机前面的连续AVDepthData流。
发布于 2020-06-09 15:39:10
理论
TrueDepth传感器让iPhone X/ 11 / 12 / 13除了通过常规自拍相机捕捉的ZDepth通道外,还可以生成高质量的RGB通道。ZDepth频道允许我们在视觉上做出改变,无论是真实的人脸还是仅仅是一张照片。在ZDepth通道中,人脸被表示为渐变,但照片几乎是纯色的,因为照片平面上的所有像素与相机的距离相等。

AVFoundation
目前AVFoundation没有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会话,ARKit的心脏开始跳动(在某种程度上,它也使用了视觉)。当然,您可以将此框架用于人脸检测,但请记住,由于其“重金属”跟踪子系统,ARKit是一个计算密集型模块。对于成功的真人脸(而不是照片)检测,可以使用ARFaceAnchor和facial blendshapes,前者允许你以60fps的速度记录头部的运动和方向,后者允许你实时记录用户的面部表情。

愿景
实现CVPixelBuffer.中包含的人脸识别和分类的Apple Vision和CoreML技术但请记住,你需要ZDepth到RGB的转换才能使用Apple Vision - AI / ML移动框架目前还不能直接使用深度图数据。当您想要使用RGBD数据进行身份验证,并且只有一个或两个用户的面孔需要识别时,它极大地简化了模型学习过程的任务。您所要做的就是为视觉创建一个包含许多ZDepth面部图像变体的mlmodel。
您可以使用苹果创建ML应用程序生成一个轻量级和有效的mlmodel文件。
有用的链接
使用视觉检测和分类图像的示例代码您可以找到here和here。你也可以阅读RGB来了解如何将AVDepthData转换成常规的this模式。
发布于 2019-04-25 18:59:48
您可以使用AVCaptureMetadataOutput和AVCaptureDepthdataOutput来检测人脸,然后采取所需的操作
https://stackoverflow.com/questions/55846523
复制相似问题