我有应用,其中ARSession
使用了ARFaceTrackingConfiguration
。我在session(_ session: ARSession, didUpdate anchors: [ARAnchor])
更新锚时保存了锚的副本。
但是当脸部不再出现在框架中时,应用程序无法知道。因为不会调用此函数。
我已经尝试在session(_ session: ARSession, didRemove anchors: [ARAnchor])
中写一个标记,但是没有调用它,因为当面部不再来自相机时,锚点不会被移除。我使用会话的当前帧frame.anchors.count
进行了检查。
我在ARSessionDelegate
协议中找不到其他相关功能。当应用程序在调试器中暂停时,我看到一个名为detectedFaces
的当前帧的私有属性,当您将手机放下时,该属性已正确设置为0。但由于它是私密的,我无法访问它。
答案 0 :(得分:7)
ARFaceAnchor
采用ARTrackable
协议,其唯一目的是告诉您ARKit是否自动更新主播。如果锚点的变换已在当前帧中更新,则isTracked
属性为true,否则为false。
知道 当前不再跟踪某个锚点是解决问题的一半 - 您可能想知道的另一件事是 时。你有几个选择。
保持对您一直使用的面部锚点的引用。当您获得session(_ session: ARSession, didUpdate anchors: [ARAnchor])
之类的委托回调时,任何不在更新列表中的锚点都可能过时,您可以检查其isTracked
属性进行验证。
订阅每帧更新的“第一个”回调session(_ session: ARSession, didUpdate frame: ARFrame)
,或检查会话的currentFrame
,并遍历框架的anchors
列表以查看哪些锚点符合ARTrackable
但对isTracked
报告为false。