如何确定ARFaceAnchor是否未在ARSession中更新

时间:2018-02-22 21:47:40

标签: ios sprite-kit arkit iphone-x

我有应用,其中ARSession使用了ARFaceTrackingConfiguration。我在session(_ session: ARSession, didUpdate anchors: [ARAnchor])更新锚时保存了锚的副本。

但是当脸部不再出现在框架中时,应用程序无法知道。因为不会调用此函数。

我已经尝试在session(_ session: ARSession, didRemove anchors: [ARAnchor])中写一个标记,但是没有调用它,因为当面部不再来自相机时,锚点不会被移除。我使用会话的当前帧frame.anchors.count进行了检查。

我在ARSessionDelegate协议中找不到其他相关功能。当应用程序在调试器中暂停时,我看到一个名为detectedFaces的当前帧的私有属性,当您将手机放下时,该属性已正确设置为0。但由于它是私密的,我无法访问它。

1 个答案:

答案 0 :(得分:7)

ARFaceAnchor采用ARTrackable协议,其唯一目的是告诉您ARKit是否自动更新主播。如果锚点的变换已在当前帧中更新,则isTracked属性为true,否则为false。

知道 当前不再跟踪某个锚点是解决问题的一半 - 您可能想知道的另一件事是 时。你有几个选择。

  1. 保持对您一直使用的面部锚点的引用。当您获得session(_ session: ARSession, didUpdate anchors: [ARAnchor])之类的委托回调时,任何不在更新列表中的锚点都可能过时,您可以检查其isTracked属性进行验证。

  2. 订阅每帧更新的“第一个”回调session(_ session: ARSession, didUpdate frame: ARFrame),或检查会话的currentFrame,并遍历框架的anchors列表以查看哪些锚点符合ARTrackable但对isTracked报告为false。