我在iOS 12(16A5288q)下使用ARKit 2,使用Xcode 10 beta 6构建,在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
做了一个简单的测试。我把脸移近手机,然后再往前走,然后再闭上;反复。 lookAtPoint的最小z为38.59英寸,最大值为39.17英寸(从米转换)。
用卷尺测量的实际距离为~4.5英寸和~33英寸。
苹果声明lookAtPoint
将“[......]估计相对于脸部,用户眼睛关注的重点。”似乎不正确。
是的,我在一个月前尝试过,我可以说你是完全正确的 - 目前lookAtPoint
实例属性不起作用甚至没有删除。现在它总是返回float3(0.0, 0.0, 0.0)
。
我猜Apple还没有实现它(它处于测试状态)。 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 }
}
希望能帮助到你!
今天iOS 12与XCode 10一起发布(取代测试版)。我测试了使用这些新版本访问lookAtPoint
,现在我正在填充填充的载体。
SWIFT代码:
func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {
guard let faceAnchor = anchor as? ARFaceAnchor else { return }
let lookAtPoint: simd_float3 = faceAnchor.lookAtPoint
os_log("lookAtPoint: %.12f,%.12f,%.12f", type: .debug, lookAtPoint.x, lookAtPoint.y, lookAtPoint.z)
日志输出:
2018-09-17 16:17:12.097369-0700 EyeSync[512:41060] lookAtPoint: 0.049317009747,-0.004630976822,0.981833696365
2018-09-17 16:17:12.113925-0700 EyeSync[512:41060] lookAtPoint: 0.050239805132,-0.006484962534,0.981752157211
2018-09-17 16:17:12.130867-0700 EyeSync[512:41060] lookAtPoint: 0.051697697490,-0.011350239627,0.981206715107
2018-09-17 16:17:12.147272-0700 EyeSync[512:41060] lookAtPoint: 0.052744854242,-0.012763299979,0.981896817684
2018-09-17 16:17:12.163683-0700 EyeSync[512:41060] lookAtPoint: 0.054889015853,-0.015469233505,0.982917487621
2018-09-17 16:17:12.180636-0700 EyeSync[512:41060] lookAtPoint: 0.056391790509,-0.017265520990,0.983718335629
2018-09-17 16:17:12.197387-0700 EyeSync[512:41060] lookAtPoint: 0.059109147638,-0.018527992070,0.983208477497
2018-09-17 16:17:12.214021-0700 EyeSync[512:41060] lookAtPoint: 0.061453290284,-0.019032688811,0.981536626816
2018-09-17 16:17:12.230689-0700 EyeSync[512:41060] lookAtPoint: 0.063107110560,-0.019657038152,0.978309571743