使用 iPhone TrueDepth 传感器检测真人面部与照片?

2024-01-01

如何使用 iPhone 捕获的深度数据true-depth相机可以区分真实的人类 3D 脸部和相同的照片吗? 要求是使用它进行身份验证。

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


Theory

除了通过常规自拍相机捕获的 RGB 通道之外,TrueDepth 传感器还可以让 iPhone X ... iPhone 14 生成高质量的 ZDepth 通道。 ZDepth 通道使我们能够在视觉上做出区分,无论是真实的人脸还是照片。在 ZDepth 通道中,人脸表示为渐变,但照片几乎具有纯色,因为照片平面上的所有像素与相机的距离相等。

AV基金会

目前 AVFoundation API 没有 Bool 类型的实例属性,可以让你判断它是真人脸还是照片,但 AVFoundation 的捕获子系统为你提供了AV深度数据 https://developer.apple.com/documentation/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 }
}

像素缓冲区能够包含深度数据的每像素深度或视差图 https://learn.foundry.com/ocula/Content/user_guide/disparitygenerator/DispGen_Generating.html.

var depthDataMap: CVPixelBuffer { get }

ARKit

感谢 AVFoundation 和 ARKit 的心跳芯动 https://developer.apple.com/documentation/coremotion会话(在某种程度上它也使用Vision)。当然,您可以使用此框架进行人脸检测,但请记住,由于其“重金属”跟踪子系统,ARKit 是一个计算密集型模块。要成功检测真人脸(而不是照片),请使用ARF面锚 https://stackoverflow.com/questions/52893075/what-is-aranchor-exactly/52899502#52899502允许您以 60 fps 记录头部的运动和方向,面部混合形状 https://developer.apple.com/documentation/arkit/arfaceanchor/2928251-blendshapes允许您实时记录用户的面部表情。为了使无法使用视频而不是真人来模拟面部表情,请使用 AR 应用程序的随机文本命令强制您显示特定的面部表情。

Vision

实施苹果视觉 https://developer.apple.com/documentation/vision and CoreML https://developer.apple.com/documentation/coreml识别和分类包含在其中的人脸的技术CVPixelBuffer。但请记住,您需要 ZDepth 到 RGB 的转换才能与 Apple Vision 配合使用 - AI / ML 移动框架目前无法直接使用深度图数据。当您想要使用 RGBD 数据进行身份验证,并且只需要识别一两个用户的面部时,它会大大简化模型学习过程的任务。您所要做的就是创建一个mlmodel用于包含 ZDepth 面部图像的许多变化的 Vision。

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

有用的链接

要可视化来自 TrueDepth 相机的深度数据,请使用以下命令示例代码 https://developer.apple.com/documentation/avfoundation/additional_data_capture/streaming_depth_data_from_the_truedepth_camera。您可以找到使用 Vision 检测和分类图像的示例代码here https://developer.apple.com/documentation/vision/detecting_objects_in_still_images and here https://developer.apple.com/documentation/vision/classifying_images_with_vision_and_core_ml。另外,看看this https://stackoverflow.com/questions/49589495/map-avdepthdata-to-rgba-from-pixelbuffer-in-swift发帖了解如何将 AVDepthData 转换为常规 RGB 模式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 iPhone TrueDepth 传感器检测真人面部与照片? 的相关文章

  • 使用 SceneKit 实现 ARKit 广告牌效果

    我希望添加与此应用程序类似的广告牌效果 https twitter com marpi status 897130955105644544 https twitter com marpi status 897130955105644544
  • 在 Firebase 中为 TextView Swift 保存字体和大小的方法是什么

    我想在 Firebase 中保存 Swift 中 TextView 的字体 大小和对齐方式 这样我就可以在另一个视图中调用它 我只能将颜色保存在 Firebase 中 这是显示我是如何做到的的代码 IBAction func SendBtn
  • 如何快速防止标签中出现孤儿?

    我有一个可以有一两行的标签 如果它有两行 我希望第二行至少有两个 或者可能三个 单词 而不仅仅是一个 关于如何使用 swift 实现这一点有什么想法吗 提前致谢 Daniel 编辑 我删除了我愚蠢的第一个想法 这些想法并没有真正的帮助 好吧
  • CIAdditionCompositing 给出不正确的效果

    我正在尝试通过平均其他几个图像来创建图像 为了实现这一点 我首先将每个图像变暗 其系数等于我平均的图像数量 func darkenImage by multiplier CGFloat gt CIImage let divImage CII
  • SwiftUI - 从 NSObject 继承的 ObservableObject 在 iOS 13 中不会更新

    我知道 这是 无法在 iOS XX 中工作 问题之一 但我完全陷入困境 所以我有一个ObservableObject继承自的类NSObject 因为我需要听委托方法UISearchResultsUpdating class SearchBa
  • 在completionHandlers中存储值 - Swift

    我正在创建一个completionHandler它返回一个字典 但是当我在另一个类中调用这个方法时 它的值是零 func fetchLatestPosts completionHandler responseDict NSDictionar
  • 如何无限地每1分钟运行一个iOS应用程序?

    我制作了一个应用程序 需要每 1 分钟向服务器发送一次位置和状态更新 我尝试了以下方法 但没有一个能帮助我 有什么解决办法吗 1 NSTimer 很多人建议这样做 但问题出在后台模式上 它只能工作 20 分钟 该应用程序停止发送数据后 2
  • skView.ignoreSiblingOrder 在 swift 中的重要性/效率?

    这样做有多重要 高效skView ignoreSiblingOrder true初始化场景时 现在 我将其设置为 true 但由于某种原因 当我从 MainMenu 场景启动 GameScene 时 它 会在我的角色之前加载背景 即使背景的
  • 删除具有estimatedItemSize 的项目时 UICollectionView 单元格大小会调整

    我有一个简单的项目 其中的故事板仅包含一个UICollectionViewController 使用 Xcode 7 1 1 为 iOS 9 1 构建 class ViewController UICollectionViewControl
  • iOS 11 浮动 TableView 标题

    有一个应用程序包含多个部分 展开 时每个部分有几行 折叠 时没有 每个部分都有一个部分标题 使用以下子类重用它们UITableViewHeaderFooterView等等 到目前为止一切顺利 然后在 iOS 11 中 我使用了可视化调试器
  • 如何在 Swift Playgrounds 中获得弹出对话框

    我想知道如何在 Swift 中弹出一个对话框游乐场 是的 必须在 Playgrounds 中 我尝试了以下代码 直接来自 AppleDevs 站点 然而 无论我如何尝试 self tag always抛出错误 谁能帮我这个 import U
  • 使用prepareForSegue传递数据

    我试图将数据从viewController 1传递到viewController2 我有2个按钮和1个segue 因此有一个segue标识符 这2个按钮 按下时每个按钮应显示 1个标签用于显示标题 1个textView用于显示定义 我很难显
  • 如何在 Swift 中创建 UIAlertView?

    我一直在努力在 Swift 中创建 UIAlertView 但由于某种原因我无法得到正确的语句 因为我收到此错误 找不到接受提供的 init 重载 论点 我是这样写的 let button2Alert UIAlertView UIAlert
  • let/var 如何解决可变性? [复制]

    这个问题在这里已经有答案了 我没有任何问题 我只是想对有关可变性的问题进行一些澄清 在 Objective C 中我们会使用例如NSMutableArray得到一个可变数组和NSArray得到一个不可变的 我对两者的内部运作了解不多 但据我
  • iOS 13 检查 CLLocationManager 的临时授权状态

    根据 WWDC 视频 https developer apple com videos play wwdc2019 705 https developer apple com videos play wwdc2019 705 当你要求 Al
  • 在 UITableViewController 中重新排序行后 UI 更新不正确

    因此 我对表中的行重新排序 用户界面最终结果不正确 场景如下 表内容原文 a b c d e 如果我移动第 0 行 当前a 到第 4 行 当前e 我看到的最终结果是 c d e a a 一些背景 该表正在读取 Realm 对象的列表 我确认
  • XCode 7 中的 AWSS3TransferManagerUploadRequest

    我今天升级到 Xcode 7 Swift 2 0 我的项目正在使用 CocoaPods 我正在 POD 文件中导入所有与 AWS 相关的文件 我已经设置了桥接标头 并导入了 Amazon 告诉我的所有文件 在升级到 Swift 2 0 之前
  • 在 UITableView 的部分标题文本下方添加一些边距

    我已经设计了标题文本的样式 func tableView tableView UITableView cellForRowAtIndexPath indexPath NSIndexPath gt UITableViewCell let ce
  • 检查 Swift 中关联类型是否符合协议

    在类似情况下 如何检查对象是否符合 可表示 协议 protocol Representable associatedtype RepresentType var representType RepresentType get set cla
  • 如何观察UserDefaults的变化?

    我有一个 ObservedObject在我看来 struct HomeView View ObservedObject var station Station var body some View Text self station sta

随机推荐