我可以使用 ARKit 2 获得眼睛的测量值吗

Piy*_*hur 5 ios swift arkit iphone-x ios12

我正在开发一个项目,该项目需要每只眼睛的大小和眼睛之间的距离,在 iPhone X 上使用 ARKit 和真实深度相机,在 Xcode 10 beta 4 上使用 iOS 12 beta 4。

由于我是 ARKit 的新手,我在网上搜索解决方案时几乎没有什么了解。然而,我在苹果开发者门户网站上看到了一个演示代码。在该代码中,我尝试获取所需的值。

也参考@rickster的回答

我在 ARSCNFaceGeometry 和 ARFaceAnchor 上工作以获取几个值。

func update(withFaceAnchor anchor: ARFaceAnchor) {
    let faceGeometry = geometry as! ARSCNFaceGeometry
    faceGeometry.update(from: anchor.geometry)
    print("\nLook at Point :", anchor.lookAtPoint, "\nLeft :", anchor.leftEyeTransform, "\nRight :", anchor.rightEyeTransform)
}
Run Code Online (Sandbox Code Playgroud)

输出:

看点:float3(0.14502259, 0.2905016, 0.97809345)

左:simd_float4x4([[0.99312633,-0.030915117,-0.11289084,0.0)],[0.0,0.9644885,-0.26412484,0.0)],[0.11704737,0.26230934,0.9578589,0.0)],[0.03311049,0.028666705,0.028539032,1.0) ]])

右:simd_float4x4([[0.9830616,-0.047965277,-0.17688738,0.0)],[0.0,0.96514606,-0.26171172,0.0)],[0.18327524,0.25727874,0.94879806,0.0)],[-0.032072492,0.028482603,0.028181288,1.0 )]])

问题

  1. 如何转换这些值以利用它并获得一些坐标?

  2. 这段代码会帮助我实现每只眼睛的大小和眼睛之间的距离吗?如果不是,那么我该怎么做才能获得测量结果?

Rom*_*4in 1

你可以从变换中得到向量3:

var leftEyePosition = SCNVector3(leftTransform.columns.3.x, leftTransform.columns.3.y, leftTransform.columns.3.z)

var rightEyePosition = SCNVector3(rightTransform.columns.3.x, rightTransform.columns.3.y, rightTransform.columns.3.z)
Run Code Online (Sandbox Code Playgroud)

那么你可以像这样得到2 SCNVector3 形式的距离。

let d = distance(float3(leftEyePosition), float3(rightEyePosition)) 
Run Code Online (Sandbox Code Playgroud)

结果将以米为单位,因此您可能需要将 d 除以 100