gpt4 book ai didi

swift - ARKit:如何判断用户的脸是否与相机平行

转载 作者:搜寻专家 更新时间:2023-10-31 22:04:13 25 4
gpt4 key购买 nike

在我的 Swift/ARKit/SceneKit 项目中,我需要判断前置摄像头中用户的脸是否平行于相机。

我能够通过比较左眼和右眼与相机的距离(使用 faceAnchor.leftEyeTransformworldPosition 属性)来判断水平平行。

但我被困在垂直平行上。有什么想法,如何实现?

最佳答案

假设您在应用中使用 ARFaceTrackingConfiguration,您实际上可以检索 ARFaceAnchor 和相机的转换以确定它们的方向。您可以使用 ARFaceAnchor.transform 属性获取头部在世界空间中方向的 simd_float4x4 矩阵。同样,您可以获得场景的 SCNCameraARCamera 的变换。

为了在 SceneKit 应用程序中比较相机和面部相对于彼此的方向(尽管在 ARKit 方面有类似的功能),我得到了附加到它们每个节点的世界变换,让我们调用它们 faceNode 附加到 ARFaceAnchorcameraNode 代表 ARSCNView.pointOfView。例如,要找到相机和你的脸之间的角度,你可以这样做:

let faceOrientation: simd_quatf = faceNode.simdWorldTransform
let cameraOrientation: simd_quatf = cameraNode.simdWorldTransform
let deltaOrientation: simd_quatf = faceOrientation.inverse * cameraOrientation

通过查看 deltaOrientation.angledeltaOrientation.axis,您可以确定面部和相机之间每个轴上的相对角度。如果您执行类似 deltaOrientation.axis * deltaOrientation.angles 的操作,您将获得一个 simd_float3 向量,让您了解头部的俯仰、偏航和滚动(以弧度为单位)相对于相机。

有多种方法可以使用面部 anchor 和相机变换来执行此操作,但这种 simd 四元数方法对我来说效果很好。希望这可以帮助!

关于swift - ARKit:如何判断用户的脸是否与相机平行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53027049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com