找到iOS设备相机和用户面部之间的距离

16

我正在尝试寻找iOS设备前置摄像头和用户面部在现实世界中的距离。

到目前为止,我已经尝试了ARKit/SceneKit,并使用ARFaceAnchor检测用户面部距离摄像头的距离;但它只在近距离(约88厘米)内有效。我的应用需要识别面部距离长达200厘米。

我认为这可以在不使用trueDepth数据(在ARFaceAnchor中使用)的情况下实现。

你能指导我正确的方向吗?


2
请查看此链接:https://github.com/evermeer/EVFaceTracker - V D Purohit
了解ARFaceAnchor的88厘米限制真是有趣!如果需要,我建议使用VNDetectFaceRectanglesRequest来检测面部,并使用VNTrackObjectRequest来跟踪它们。不过,我不确定它们在更远的距离上是否表现更好。 - Maxim Volgin
你说得对,它可以在没有TrueDepth数据的情况下完成。我看过很多应用程序都是使用后置摄像头完成同样的功能。我也在寻找同样的解决方案,但没有成功,祝你好运!! - Prashant Tukadiya
1个回答

9
为了获取设备与用户脸部之间的距离,您需要将检测到的用户脸部位置转换为相机坐标系。为此,您将需要使用SceneKit中的convertPosition方法来切换坐标空间,从面部坐标空间切换到相机坐标空间。
let positionInCameraSpace = theFaceNode.convertPosition(pointInFaceCoordinateSpace, to: yourARSceneView.pointOfView)

theFaceNode是由ARKit创建的SCNNode,代表用户的面部。你的ARSCNView的pointOfView属性返回从场景中观察的节点,基本上是相机。
faceCoordinateSpace中的pointInFaceCoordinateSpace可以是面部网格的任何顶点或者只是TheFaceNode的位置(即面部坐标系的原点)。在这里,positionInCameraSpace是一个SCNVector3,代表您提供的点在相机坐标空间中的位置。然后,您可以使用此SCNVector3的x、y和z值(以米为单位表示)获取点与相机之间的距离。
以下是一些可能对您有帮助的链接:
-使用ARKit计算面部和相机之间的距离

-https://github.com/evermeer/EVFaceTracker

-https://developer.apple.com/documentation/arkit/arfacetrackingconfiguration

-如何使用ARKit在iOS中测量设备与面部的距离?


由于社区认为这是答案,因此授予悬赏。但是,我现在正忙于另一个项目。等我回来后,我会验证答案。 - Kashif

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接