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四元数方法对我来说非常有效。希望这有帮助 回答得好!如果有实现的源代码,您可以共享它吗?