Reason for innacurate ARKit face vertex projection

After setting up ARSession, I save the current frame's:

  1. image
  2. face vertices (https://developer.apple.com/documentation/arkit/arfacegeometry/2931116-vertices)
  3. camera intrinsic parameters (https://developer.apple.com/documentation/arkit/arcamera/2875730-intrinsics)
  4. orientation of camera with respect to world coordinates (https://developer.apple.com/documentation/arkit/arcamera/2866108-transform)
  5. orientation of face with respect to world coordinates (https://developer.apple.com/documentation/arkit/aranchor/2867981-transform)

Then, I transform the face vertices to world coordinates using 5, then to camera coordinates using 4, and then to image coordinates using 3.

However, the projected vertices are sometimes inaccurate (for example the vertices around the eyes). Is this normal behavior or do I have to tweak some of the session configurations to get this right?

Notes:

  1. Image is retrieved from self.sceneView.session.currentFrame?.capturedImage
  2. after setting faceAnchor to self.sceneView.session.currentFrame?.anchors.first, vertices are obtained as faceAnchor.geometry.vertices
  3. similarly, face anchor's transform is obtained as faceAnchor.transform
  4. camera transform is obtained as self.scceneView.session.currentFrame?.camera.transform
  5. camera intrinsics are obtained as self.sceneView.session.currentFrame?.camera.intrinsics

Hello, how do you get these data to project?

Reason for innacurate ARKit face vertex projection
 
 
Q