【发布时间】:2020-04-22 04:22:29
【问题描述】:
我们在应用商店中有几个应用程序使用ARFaceTrackingConfiguration 来检测带有 FaceID 摄像头的 iOS 设备中的用户面部。
您可能已经看到,ARKit 还会跟踪您放在 iPad Pro/iPhoneX 前的人脸图片,就好像它们是人脸一样。例如。从our apps 之一拍照(复制一个可以下载和运行苹果example app for ARFaceTrackingConfiguration):
现在我注意到 ARKit 在内部处理真实面孔的方式与处理面孔图片的方式不同。因为通常(ARWorldTrackingConfiguration 和 ARFaceTrackingConfiguration)ARKit 会尝试匹配真实世界的大小和虚拟对象的大小,即 3D 编辑软件中 10x10cm 的对象将匹配相同 10x10cm 的真实世界对象.
但是当使用面部跟踪时,手机检测到异常大小的脸(如上图所示的 4 厘米宽的小脸或脸大得多的人的海报),它会缩放 FaceGeometry,就好像检测到的脸是一个正常大小的头部,即头部宽度的测量值约为 14 厘米。然后,所有虚拟对象都将被相应地缩放,这将在现实世界中产生错误的大小。参考文献下一张图片:
眼镜 3D 模型大约 14 厘米宽,但它们仅呈现为 4 厘米物体。
相比之下,如果您将眼镜戴在真正的 3D 脸上,它们的尺寸会正确,戴在小人头上(如 12 厘米)会稍大,戴在大人头上(如 16 厘米)会稍微太小(因为在这两种情况下它们都是真正的 14 厘米)。
我什至可以看到 ARKit 在以下之间切换:
- 仅使用相机图像进行平面人脸检测
- 使用 FaceID TrueDepth 摄像头进行人脸检测。
当您将婴儿抱在应用程序前时,这一点尤其突出。
对于婴儿头,ARKit 将首先尝试放大所有东西,使虚拟场景中婴儿头宽 14 厘米,并且眼镜适合成人。
然后,通常头部出现在相机中的 1-2s ARFaceTrackingConfiguration 会从模式 (1) 切换到模式 (2) 并显示 3D 的真实大小对象,这会导致带有成人眼镜的小婴儿头部的超可爱照片(此处未显示,因为 SO 不用于分享婴儿照片)。
所以,现在问题来了:
有没有办法确定 ARKit 是处于 1 模式还是 2 模式?
【问题讨论】:
-
您好,您对此有什么发现吗?我也有同样的问题。除了这个问题,我什么也找不到。
-
遗憾的是,仍然没有官方 API,@Andy 下面的回答仍然是你最好的选择。
标签: ios swift scenekit augmented-reality arkit