我正在使用ARCore IOS创建AR IOS应用程序。https://github.com/google-ar/arcore-ios-sdk/tree/v1.25.0我可以从这个模块中获得鼻子、左前额和右前额区域的点以及面部旋转。
但我需要所有468个面标志点,这些都在文档中提到过。但是没有一个特定的方法或类可以返回468分。那么,无论是否使用ARCore,我们如何在IOS原生或flutter中获得468个人脸标志点。
GARAugmentedFace类包含一个网格,该网格包含三维顶点位置。例如,在SCNSceneRenderDelegate方法中:
if let face = frame.face {
print(face.mesh.vertices[467])
}
https://developers.google.com/ar/reference/ios/interface_g_a_r_augmented_face_mesh
所有顶点位置都在其默认位置,即在canonicl_face_mesh中。如果你想从相机中的单个面获得顶点位置,你需要从场景几何体中获得信息,该信息可以方便地存储在faceTextureNode中。提取数据有些不方便。
faceTextureNode.geometry = faceMeshConverter.geometryFromFace(face)
faceVertices = vertexPositionFromSCNGeometry(geometry: faceTextureNode.geometry!)
private func vertexPositionFromSCNGeometry(geometry: SCNGeometry) -> [SCNVector3] {
let geometrySources = geometry.sources(for: SCNGeometrySource.Semantic.vertex)
var geometryVertices = [SCNVector3()]
if let geometrySource = geometrySource.first{
let stride = geometrySource.dataStride
...
let vector = SCNVector3Make(buffer[0], buffer[1], buffer[2])
return vector
})
geometryVertices = vertices
}
return geometryVertices
}
函数的其余部分可以从下面的详细答案中填写:https://stackoverflow.com/a/66748865/14437826
顶点位置是相对于面中心变换的如果您想要原始位置,则必须使用中心变换进行计算。