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

use*_*492 4 ios sprite-kit arkit iphone-x

我的应用程序,我使用了ARSessionARFaceTrackingConfiguration.每当更新时,我都会保存锚的副本session(_ session: ARSession, didUpdate anchors: [ARAnchor]).

但是当面部不再出现在框架中时,应用程序无法知道.因为这个函数不会被调用.

我已经尝试过写入一个标志,session(_ session: ARSession, didRemove anchors: [ARAnchor])但是没有调用,因为当面部不再出现在相机上时,锚点不会被移除.我使用会话的当前帧检查frame.anchors.count.

我发现ARSessionDelegate协议中没有其他相关功能.当应用程序在调试器中暂停时,我看到一个当前帧的私有属性,detectedFaces当你把手机放下时,它被正确设置为0.但由于它是私人的,我无法访问它.

ric*_*ter 8

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

知道那个锚不再当前跟踪是成功的一半解决您的问题-你可能想知道另一件事是.你有几个选择.

  1. 保持对您一直使用的面部锚点的引用.当你获得一个委托回调时session(_ session: ARSession, didUpdate anchors: [ARAnchor]),任何不在更新列表中的锚都可能是陈旧的,你可以检查他们的isTracked属性来验证.

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