我可以使用 ARKit 2 获得眼睛的测量值吗 [英] Can I get the measurements for eyes using ARKit 2

查看:33
本文介绍了我可以使用 ARKit 2 获得眼睛的测量值吗的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am working on a project which requires size of each eye and distance between the eyes using ARKit and True depth Camera on iPhone X with iOS 12 beta 4 on Xcode 10 beta 4.

由于我是 ARKit 的新手,我在网上搜索解决方案时几乎一无所知.但是,我在苹果开发者门户网站上看到了演示代码.在该代码中,我尝试获取所需的值.

As I am new to ARKit, I am searching the solution online with very little understanding. However, I came across a demo code on apple developer portal. In that code, I tried to fetch the required values.

也参考@rickster 的答案

我使用 ARSCNFaceGeometry 和 ARFaceAnchor 来获取少量值.

I worked on ARSCNFaceGeometry and ARFaceAnchor to fetch few values.

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)
}

输出:

看点:float3(0.14502259, 0.2905016, 0.97809345)

Look at Point : 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)]])

Left : 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)]])

Right : 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. 如何翻译这些值以利用它并获得一些坐标?

  1. How to translate these values to make use of it and get some coordinates?

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

Will this code help me to achieve the size of each eye and distance between the eyes. If no, then what can I do to get the measurements?

推荐答案

在 ARKit 2/Xcode 10 beta 6/iOS 12 中lookAtPoint"为空;但我能够获得leftEyeTransform"和rightEyeTransform",然后可以使用此代码计算眼间距离(在不同距离的两个人身上进行测试并用尺子验证!):

In ARKit 2 / Xcode 10 beta 6 / iOS 12 "lookAtPoint" is nulled; but I am able to get the "leftEyeTransform" and "rightEyeTransform", and can then calculate the inter-eye distance using this code (tested on two people at varying distances and validated with a ruler!):

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

var leftEyePosition = SCNVector3(anchor.leftEyeTransform.columns.3.x, anchor.leftEyeTransform.columns.3.y, anchor.leftEyeTransform.columns.3.z)
var rightEyePosition = SCNVector3(anchor.rightEyeTransform.columns.3.x, anchor.rightEyeTransform.columns.3.y, anchor.rightEyeTransform.columns.3.z)
let d = distance(float3(leftEyePosition), float3(rightEyePosition))
print("\nInter-eye distance in centimeters: ", d * 100)

}

一些示例输出:

Look at Point: float3(0.0, 0.0, 0.0) 
Left: simd_float4x4([[0.9997796, -0.0031222918, 0.020761598, 0.0)], [0.0, 0.98888004, 0.14871553, 0.0)], [-0.020995062, -0.14868274, 0.98866206, 0.0)], [0.031608228, 0.031428084, 0.026632207, 1.0)]]) 
Right: simd_float4x4([[0.99887705, 0.007054036, -0.04684897, 0.0)], [0.0, 0.9888536, 0.14889139, 0.0)], [0.047377057, -0.1487242, 0.98774314, 0.0)], [-0.031623494, 0.03171173, 0.02669965, 1.0)]])

Inter-eye distance in centimeters:  6.32324

注意:

这篇关于我可以使用 ARKit 2 获得眼睛的测量值吗的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆