我有在ARSession
和ARFaceTrackingConfiguration
一起使用过的应用程序。每当在session(_ session: ARSession, didUpdate anchors: [ARAnchor])
中进行更新时,我都会保存 anchor 的副本。
但是,当面部不再在框架中时,应用程序将无法知道。因为不会调用此函数。
我尝试用session(_ session: ARSession, didRemove anchors: [ARAnchor])
编写一个标志,但未调用该标志,因为当不再从相机中移出面部时,不会删除 anchor 。我使用了 session frame.anchors.count
的当前框架进行了检查。
我发现ARSessionDelegate
协议(protocol)中没有其他相关功能。当应用在调试器中暂停时,我看到了当前帧的私有(private)属性detectedFaces
,当您放下电话时,该属性正确设置为0。但是由于它是私有(private)的,所以我无法访问它。
最佳答案
ARFaceAnchor
采用 ARTrackable
协议(protocol),其唯一目的是告诉您ARKit是否正在自动更新 anchor 。如果 anchor 的转换已在当前帧中更新,则 isTracked
属性为true,否则为false。
知道当前不再跟踪 anchor 是解决问题的一半,而您可能想知道的另一件事是何时。您在那里有两个选择。
session(_ session: ARSession, didUpdate anchors: [ARAnchor])
的委托(delegate)回调时,不在更新列表中的所有 anchor 都可能已过时,您可以检查其isTracked
属性以进行验证。 session(_ session: ARSession, didUpdate frame: ARFrame)
或检查 session 的currentFrame
,并遍历该帧的anchors
列表以查看哪些 anchor 符合ARTrackable
,但对于isTracked
报告为false。 关于ios - 如何确定ARSession中的ARFaceAnchor是否未更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48937788/