【问题标题】:How do I know when a face has left the scene?我怎么知道一张脸什么时候离开了现场?
【发布时间】:2018-08-24 16:33:35
【问题描述】:

我正在使用带有 ARFaceTrackingConfiguration 的 ARKit。当我看着相机时,它会检测到我的脸,这很棒。但是,当我移出相机视野时,我没有收到renderer:didRemoveNode:forAnchor:

我想做的是检测人脸何时消失,以便我可以重置会话并开始寻找(可能)新人脸。

编辑:似乎我可以这样做:

- (void)renderer:(id<SCNSceneRenderer>)renderer updateAtTime:(NSTimeInterval)time {
  SCNVector3 location = [renderer projectPoint:self.faceNode.position];
  CGPoint point = CGPointMake(round(location.x), round(location.y));
  BOOL isNodeVisible = CGRectContainsPoint(self.view.frame, point);
  // ... do stuff ...
}

虽然我不确定这是正确的做法。

【问题讨论】:

    标签: ios arkit object-recognition


    【解决方案1】:

    我没有iPhoneX所以无法准确测试。

    但我相信你可以使用isNodeInsideFrustum:withPointOfView 方法:

    返回一个布尔值,指示节点是否从指定的角度可见。

    在一个简单的测试中,我创建了一个SCNNode,我称之为faceNode

    然后使用委托回调:

    renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval)

    我能够确定节点是否在摄像头的视野中,例如:

    func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
    
            if let currentPointOfView = augmentedRealityView?.pointOfView{
    
                let faceIsVisible = augmentedRealityView.isNode(faceNode, insideFrustumOf: currentPointOfView)
    
                if faceIsVisible{
                    print("Face Is In View Of The Camera")
                }else{
                    print("Face Is Not In View Of The Camera")
    
                }
    
          }
    }
    

    希望这对您目前的情况有所帮助....

    【讨论】:

    • 我会试一试。谢谢。
    • 嗯,不完全有效。 sNode(_, insideFrustrumOf) 确实在我将手机转开时返回 false,但随后又返回 true。然后它似乎随机地在真假之间切换。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    相关资源
    最近更新 更多