Swift ARKit:如何判断用户';他的脸和照相机平行

Swift ARKit:如何判断用户';他的脸和照相机平行,swift,scenekit,arkit,Swift,Scenekit,Arkit,在我的Swift/ARKit/SceneKit项目中,我需要告诉用户前向摄像头中的脸是否与摄像头平行 我能够通过比较相机的左眼和右眼距离(使用faceAnchor.leftEyeTransform和worldPosition属性)来判断水平平行 但我被困在垂直平行线上。有什么想法,如何实现吗?假设您在应用程序中使用ARFaceTrackingConfiguration,您实际上可以检索ARFaceAnchor和相机的变换来确定它们的方向。您可以使用ARFaceAnchor.transform属性

在我的
Swift
/
ARKit
/
SceneKit
项目中,我需要告诉用户前向摄像头中的脸是否与摄像头平行

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


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

假设您在应用程序中使用
ARFaceTrackingConfiguration
,您实际上可以检索
ARFaceAnchor
和相机的变换来确定它们的方向。您可以使用
ARFaceAnchor.transform
属性获取头部在世界空间中的方向矩阵。类似地,您可以获得场景的
SCNCamera
ARCamera
的变换

为了在SceneKit应用程序中比较相机和人脸的相对方向(尽管在ARKit方面有类似的功能),我得到了连接到它们的节点的世界变换,让我们将它们称为
faceNode
,附加到
ARFaceAnchor
cameraNode
上,表示
ARSCNView.pointOfView
。例如,要找到相机和脸部之间的角度,可以执行以下操作:

let faceOrientation: simd_quatf = faceNode.simdWorldTransform
let cameraOrientation: simd_quatf = cameraNode.simdWorldTransform
let deltaOrientation: simd_quatf = faceOrientation.inverse * cameraOrientation
通过查看
deltaOrientation.angle
deltaOrientation.axis
可以确定面部和相机之间每个轴上的相对角度。如果您执行类似于
deltaOrientation.axis*deltaOrientation.angles
的操作,则会有一个
simd_float3
向量,让您能够感知头部相对于相机的俯仰、偏航和滚动(弧度)


有很多方法可以使用面锚定和摄影机变换来实现这一点,但是这个simd四元数方法对我来说非常有效。希望这有帮助

回答得好!如果有实现的源代码,您可以共享它吗?