ML Kit pose landmarks: the 33 PoseLandmark constants
33 landmarks · from ML Kit PoseLandmark (Android reference), page last updated 2024-10-31 · read 2026-10-17
ML Kit 33 has 33 landmarks, numbered from 0 NOSE to 32 RIGHT_FOOT_INDEX, as the int constants of com.google.mlkit.vision.pose.PoseLandmark (Android reference) defines them. The sources tie it to ML Kit Pose Detection (base and accurate SDKs). 31 of the 33 names match a point in another scheme once lowercased with separators removed; the other 2 stay unmapped. Read from the sources on 2026-10-17.
Models that output it
- ML Kit Pose Detection (base and accurate SDKs) · ML Kit Pose DetectionEvidence: Detect poses with ML Kit on Android says “the pose detection API returns a Pose object with 33 PoseLandmarks.” (source).
All 33 landmarks
Names are copied exactly from the int constants of com.google.mlkit.vision.pose.PoseLandmark (Android reference). The index is the position the source assigns. The last column says whether another scheme on this site spells the same name, by the crosswalk rule.
The source’s description of RIGHT_EYE_INNER, RIGHT_EYE and RIGHT_EYE_OUTER names the opposite side from the constant’s own name. The descriptions are copied as printed; the name and index are what the source defines.
What the sources say about the output
Copied from the sources, whitespace collapsed.
- getPosition3D(): The Z value is an experimental feature that returns an extra Z coordinate along with X and Y. Please note that this value is less accurate than the X and Y values. (ML Kit PoseLandmark (Android reference))
- getPosition3D(): The unit of measure for the Z value is the same as X and Y. (ML Kit PoseLandmark (Android reference))
- getPosition3D(): The smaller the Z value, the closer that landmark is to the camera. (ML Kit PoseLandmark (Android reference))
- getPosition3D(): Different from X and Y, Z does not have a fixed origin in the image space. The Z origin is approximately at the center of the subject’s hips. Z value will be negative if the landmark is in front of the Z origin and will be positive if the landmark is behind the Z origin. (ML Kit PoseLandmark (Android reference))
- getPosition3D(): The Z value does not have a fixed lower or upper bound. (ML Kit PoseLandmark (Android reference))
How this list was checked
- the Constant Values run 0 to N-1 with no gaps
- 31 of the 33 constants have the same name and value as MediaPipe's PoseLandmark
- 31 of 33 names are shared with another scheme; the rest are listed as unmapped.
Other schemes
Questions
What are the 33 ML Kit landmarks in index order?
The int constants of com.google.mlkit.vision.pose.PoseLandmark (Android reference) numbers them 0 NOSE, 1 LEFT_EYE_INNER, 2 LEFT_EYE, 3 LEFT_EYE_OUTER, 4 RIGHT_EYE_INNER, 5 RIGHT_EYE, 6 RIGHT_EYE_OUTER, 7 LEFT_EAR, 8 RIGHT_EAR, 9 LEFT_MOUTH, 10 RIGHT_MOUTH, 11 LEFT_SHOULDER, 12 RIGHT_SHOULDER, 13 LEFT_ELBOW, 14 RIGHT_ELBOW, 15 LEFT_WRIST, 16 RIGHT_WRIST, 17 LEFT_PINKY, 18 RIGHT_PINKY, 19 LEFT_INDEX, 20 RIGHT_INDEX, 21 LEFT_THUMB, 22 RIGHT_THUMB, 23 LEFT_HIP, 24 RIGHT_HIP, 25 LEFT_KNEE, 26 RIGHT_KNEE, 27 LEFT_ANKLE, 28 RIGHT_ANKLE, 29 LEFT_HEEL, 30 RIGHT_HEEL, 31 LEFT_FOOT_INDEX, 32 RIGHT_FOOT_INDEX.
Which pose models output ML Kit landmarks?
ML Kit Pose Detection (base and accurate SDKs): Detect poses with ML Kit on Android says “the pose detection API returns a Pose object with 33 PoseLandmarks.” Only models a fetched source ties to this scheme are listed.
How do ML Kit landmarks map to other pose keypoint schemes?
By name only. 31 of the 33 share an identical name, once lowercased with separators removed, with a point in BlazePose 33, COCO 17, Halpe26, COCO-WholeBody 133, OpenPose BODY_25, OpenPose COCO 18, Apple Vision 2D and Apple Vision 3D; 9 LEFT_MOUTH and 10 RIGHT_MOUTH do not and stay unmapped. A shared row means the names match, not that two models place the point in the same spot.
What coordinates come with ML Kit landmarks?
In the sources' words: “getPosition3D(): The Z value is an experimental feature that returns an extra Z coordinate along with X and Y. Please note that this value is less accurate than the X and Y values.” (ML Kit PoseLandmark (Android reference)); “getPosition3D(): The unit of measure for the Z value is the same as X and Y.” (ML Kit PoseLandmark (Android reference)); “getPosition3D(): The smaller the Z value, the closer that landmark is to the camera.” (ML Kit PoseLandmark (Android reference)); “getPosition3D(): Different from X and Y, Z does not have a fixed origin in the image space. The Z origin is approximately at the center of the subject’s hips. Z value will be negative if the landmark is in front of the Z origin and will be positive if the landmark is behind the Z origin.” (ML Kit PoseLandmark (Android reference)); “getPosition3D(): The Z value does not have a fixed lower or upper bound.” (ML Kit PoseLandmark (Android reference)).
Sources
- ML Kit PoseLandmark (Android reference) · read 2026-10-17 · page last updated 2024-10-31 · sha256 211ef8c098c3
- MediaPipe Tasks pose_landmarker.py · google-ai-edge/mediapipe, branch master · read 2026-10-17 · sha256 bb49f0c12742
- Detect poses with ML Kit on Android · read 2026-10-17 · page last updated 2026-10-15 · sha256 dfe15ff2410d
Generated by scripts/fetch-pose-keypoints.mjs and compiled by AIFitnessAPI. The sources remain the authority.