0

我正在使用 ARCore-IOS 创建 AR IOS 应用程序。 https://github.com/google-ar/arcore-ios-sdk/tree/v1.25.0 我可以从这个模块获得鼻子、左前额和右前额区域点以及面部旋转。

但我需要文档中提到的所有 468 个面部标志点。但是没有返回 468 点的特定方法或类。那么,我们如何在 IOS 原生或 Flutter 中获得 468 个人脸标志点,使用或不使用 ARCore。

4

1 回答 1

0

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

顶点位置是相对于面部中心变换的。如果您想要原始位置,则必须使用中心变换进行计算。

于 2022-01-21T22:47:17.357 回答