我在iOS 12下使用ARKit 2(16A5288q),使用xcode10beta6构建,在iPhone X上运行,lookAtPoint
总是零。
我通过以下方式访问面部数据(以Swift格式):
func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {
guard let faceAnchor = anchor as? ARFaceAnchor else { return }
FaceAnchorsProcessedCount = FaceAnchorsProcessedCount + 1
let rightEyeTransform: simd_float4x4 = faceAnchor.rightEyeTransform
let leftEyeTransform: simd_float4x4 = faceAnchor.leftEyeTransform
let lookAtPoint: simd_float3 = faceAnchor.lookAtPoint
}
我得到的数据是:
rightEyeTransform simd_float4x4 \n[ [9.999874e-01, 0.000000e+00, 5.010252e-03, -3.208227e-02],\n [2.375229e-04, 9.988756e-01, -4.740678e-02, 2.703529e-02],\n [-5.004618e-03, 4.740737e-02, 9.988630e-01, 2.525132e-02],\n [0.000000e+00, 0.000000e+00, 0.000000e+00, 1.000000e+00] ]\n
leftEyeTransform simd_float4x4 \n[ [9.978353e-01, 0.000000e+00, -6.576237e-02, 3.208223e-02],\n [-3.110934e-03, 9.988804e-01, -4.720329e-02, 2.703534e-02],\n [6.568874e-02, 4.730569e-02, 9.967182e-01, 2.525137e-02],\n [0.000000e+00, 0.000000e+00, 0.000000e+00, 1.000000e+00] ]\n
lookAtPoint simd_float3 (0.000000e+00, 0.000000e+00, 0.000000e+00)
我做错什么了?或者这是一个已知的错误?
2018年10月4日更新
我今天做了一个简单的
lookAtPoint
测试。我把脸移近手机,然后再移远一点,然后又合上;反复地。观测点的最小z为38.59英寸,最大z为39.17英寸(从米换算)。
用卷尺测量的实际距离约为4.5英寸和33英寸。
苹果公司的声明称,
lookAtPoint
将“[…]估计用户的眼睛相对于脸部的哪个点。”这似乎是不正确的。 最佳答案
是的,我一个月前就试过了,我可以说你是绝对正确的,lookAtPoint
实例属性目前不起作用,甚至没有问题。现在它总是返回float3(0.0, 0.0, 0.0)
。
我想苹果还没有实现它(它处于beta状态)。Cross eyes' detection
是ARKit的一个特性,我们似乎会在iOS 12最终的稳定版本中看到。
目前我没有Mac,也无法检查,所以请尝试将open class
与以下开放实例属性一起使用:
open class ARFaceAnchor: ARTrackable {
open var leftEyeTransform: simd_float4x4 { get }
open var rightEyeTransform: simd_float4x4 { get }
open var lookAtPoint: simd_float3 { get }
}
希望有帮助!