【问题标题】:Find distance between iOS Device Camera and user's face查找 iOS 设备摄像头与用户面部之间的距离
【发布时间】:2019-03-30 17:13:04
【问题描述】:

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

到目前为止,我已经尝试过ARKit/SceneKit,并且使用ARFaceAnchor 我能够检测到用户与相机的面部距离;但它只能在很近的地方工作(最多约 88 厘米)。我的应用程序要求人脸距离检测高达 200 厘米。

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

你能告诉我正确的方向吗?

【问题讨论】:

  • 关于 ARFaceAnchor 88cm 的限制很有意思!我会建议使用 VNDetectFaceRectanglesRequest 来检测面部,并在必要时使用 VNTrackObjectRequest 来跟踪它们。虽然不确定它们在更远距离上的表现会更好。
  • 你是对的,它可以在没有真实深度数据的情况下完成。我没有看到任何应用程序对后置摄像头做同样的事情。我也在寻找同样的东西,但没能成功祝你好运!!

标签: ios swift scenekit arkit


【解决方案1】:

为了获得设备和用户面部之间的距离,您应该将检测到的用户面部的位置转换为相机的坐标系。为此,您必须使用 SceneKit 中的 convertPosition 方法来切换坐标空间,从人脸坐标空间切换到相机坐标空间。

let positionInCameraSpace = theFaceNode.convertPosition(pointInFaceCoordinateSpace, to: yourARSceneView.pointOfView)

theFaceNode 是由 ARKit 创建的代表用户面部的 SCNNode。 ARSCNView 的 pointOfView 属性返回查看场景的节点,基本上是相机。

pointInFaceCoordinateSpace 可以是面部网格的任何顶点或只是 theFaceNode 的位置(这是面部坐标系的原点)。在这里,positionInCameraSpace 是一个 SCNVector3,表示您给定的点在相机坐标空间中的位置。然后您可以使用此 SCNVector3 的 x、y 和 z 值(以米表示)获得点与相机之间的距离。

这些链接可能对您有所帮助:

-Distance between face and camera using ARKit

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

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

-How to measure device distance from face with help of ARKit in iOS?

【讨论】:

  • 奖励赏金,因为社区似乎认为这就是答案。但是,我现在正忙于另一个项目。一旦我回来,我会验证答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-20
  • 2020-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多