【问题标题】:How to get 468 face landmarks points using ARCore - IOS如何使用 ARCore 获得 468 个面部标志点 - IOS
【发布时间】:2021-09-27 17:10:51
【问题描述】:
【问题讨论】:
标签:
ios
flutter
tensorflow
arcore
mediapipe
【解决方案1】:
GARAugmentedFace 类包含一个网格,其中包含 3D 顶点位置。例如在 SCNSceneRendererDelegate 方法中:
if let face = frame.face {
print(face.mesh.vertices[467])
}
https://developers.google.com/ar/reference/ios/interface_g_a_r_augmented_face_mesh
所有顶点位置都在它们的默认位置,即在 canonical_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
顶点位置相对于面部中心变换。如果您想要原始位置,则必须使用中心变换进行计算。