13

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

我做了什么:创建了一个示例应用程序来获取AVDepthData相机前面的内容的连续流。

4

2 回答 2

9

理论

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

在此处输入图像描述

AV基金会

目前 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 }

ARKit

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

在此处输入图像描述

想象

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

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

有用的链接

您可以在此处此处找到使用 Vision 检测和分类图像的示例代码。您还可以阅读这篇文章以了解如何将 AVDepthData 转换为常规 RGB 模式。

于 2020-06-09T07:39:10.270 回答
-2

您可以使用 AVCaptureMetadataOutput 和 AVCaptureDepthdataOutput 来检测面部,然后采取所需的操作

于 2019-04-25T10:59:48.420 回答