Skip to content
AF
AI Motion

ML Kit Pose Detection: Base vs Accurate SDK, Landmarks and Limits

Last verified October 17, 2026 · 4 min read

Sources checked (6) · October 17, 2026
ML Kit Pose Detection is Google's on-device pose API for Android and iOS: it returns 33 landmarks for one person, each with an in-frame likelihood and an experimental Z value measured from the hips. It ships as a base SDK, which Google describes as real time on phones like the Pixel 4 and iPhone X, and an accurate SDK that is slower but returns more accurate coordinates; Google's guides put the added app size between about 10 MB and 33 MB depending on SDK and platform. Google states the API is in beta with no SLA or deprecation policy, detects only one person, and needs the user's face in view.

Covered here:MediaPipe

Choosing between ML Kit, MediaPipe and the rest happens in pose estimation models compared. ML Kit is governed by service terms rather than an open-source licence, read in pose estimation model licenses. This page covers what Google's ML Kit guides and API reference say about the pose API, as read on October 17, 2026.

Base vs accurate SDK#

PlatformSDKApp size, per GoogleSpeed, per Google
Androidpose-detectionAbout 10.1 MBPixel 3XL: about 30 FPS
Androidpose-detection-accurateAbout 13.3 MBPixel 3XL: about 23 FPS on CPU, about 30 FPS on GPU
iOSPoseDetectionUp to 29.6 MBiPhone X: about 45 FPS
iOSPoseDetectionAccurateUp to 33.2 MBiPhone X: about 29 FPS

Google's overview says the base SDK "runs in real time on modern phones like the Pixel 4 and iPhone X" while "the precision of the landmark coordinates may vary", and that the accurate SDK "returns results at a slower framerate, but produces more accurate coordinate values". On Android the code and assets are statically linked into the app at build time, and the guide requires API level 23 or above; on iOS the detector's assets are statically linked. The guides printed these dependency versions on the day we read them:

com.google.mlkit:pose-detection:18.0.0-beta5
com.google.mlkit:pose-detection-accurate:18.0.0-beta5
pod 'GoogleMLKit/PoseDetection', '8.0.0'
pod 'GoogleMLKit/PoseDetectionAccurate', '8.0.0'

The iOS guide asks for Xcode 13.2.1 or higher.

What it returns#

When a person is detected, the Android guide says the API returns a Pose with 33 PoseLandmark objects, and an empty list when nobody is. Each landmark has a type, a 2D position, a 3D position and an in-frame likelihood from 0.0 to 1.0. When part of the body is outside the image, Google says the missing landmarks get coordinates outside the frame and low in-frame values.

The 33 types are listed with their integer values in the ML Kit landmark map. They use the same 33 values as MediaPipe's PoseLandmark enum, and every name matches except the mouth corners: ML Kit's LEFT_MOUTH and RIGHT_MOUTH against MediaPipe's MOUTH_LEFT and MOUTH_RIGHT. One quirk of Google's Android reference: it describes RIGHT_EYE, RIGHT_EYE_INNER and RIGHT_EYE_OUTER with the word "left".

Google's overview adds that "Pose Detection does not attach any meaning to the landmarks in a pose or the pose itself". Classifying a pose or counting a rep is your code's job, which how rep counting works covers.

The Z value#

Google calls Z "an experimental value". The overview says it is measured in image pixels like X and Y but "is not a true 3D value", that its origin is approximately the center point between the hips, that negative values are toward the camera, and that it has no upper or lower bound. The Android reference adds that Z is less accurate than X and Y.

Two of Google's pages differ on one point. The overview says the Z coordinate "is calculated for every landmark"; the iOS Swift reference says "z-values for facial landmarks are not calculated, so please disregard them". Treat facial Z as unusable either way. For depth you can lean on, see 2D vs 3D pose estimation.

Detection modes and inputs#

STREAM_MODE, the default, detects the most prominent person, then tracks them and re-runs person detection only when they are obscured or lost; Google recommends it for video. SINGLE_IMAGE_MODE runs person detection on every image, with higher latency and no tracking, for static images. On Android, setPreferredHardwareConfigs chooses between CPU and CPU_GPU, and ML Kit falls back to CPU when no preferred configuration works.

Google asks for input images of at least 480x360 pixels and says the person should be represented by at least 256x256 pixels for best performance. For real-time use it recommends the base SDK with STREAM_MODE.

The limits Google states#

  • One person. "Pose detection can only detect one person in an image." With two people, the landmarks go to the person detected with the highest confidence.
  • The face must be visible. "The user's face must be present in order to detect a pose."
  • Beta. The API "is offered in beta, and is not subject to any SLA or deprecation policy", and Google warns that changes may break backward compatibility.

The ML Kit Terms of Service, last modified May 14, 2025, say processing of the input data "fully happens on-device", and that the APIs "send metrics about the performance and utilization of the APIs in your app to Google". For more than one person in frame, start from multi-person pose tracking.

When it fits#

Our reading: ML Kit suits an Android and iOS app that wants one person's skeleton without shipping and versioning a model file, and that can accept beta terms. If you need the model file itself or an open-source licence, MediaPipe Pose Landmarker outputs 33 landmarks at the same indices; its variants are compared in MediaPipe Pose Landmarker models.

Frequently asked questions

What is the difference between ML Kit's base and accurate pose detection SDKs?
Speed against coordinate accuracy, and size. Google's Android guide lists pose-detection at about 10.1 MB and about 30 FPS on a Pixel 3XL, and pose-detection-accurate at about 13.3 MB and about 23 FPS on CPU or 30 FPS on GPU. On iOS, PoseDetection is up to 29.6 MB at about 45 FPS on an iPhone X and PoseDetectionAccurate up to 33.2 MB at about 29 FPS. Google says the accurate SDK produces more accurate coordinate values at a slower frame rate.
Can ML Kit pose detection track more than one person?
No. Google's overview says pose detection can only detect one person in an image, and that with two people in frame the model assigns landmarks to the person detected with the highest confidence. In STREAM_MODE it tracks the most prominent person across frames. For group scenes you need a multi-person model instead.
Is the Z coordinate from ML Kit pose detection real depth?
No. Google calls it an experimental value measured in image pixels like X and Y that is not a true 3D value, with its origin approximately at the center between the hips, negative toward the camera and no fixed bound. The Android reference says it is less accurate than X and Y, and the iOS Swift reference says Z values for facial landmarks are not calculated and should be disregarded.
What image resolution does ML Kit pose detection need?
Google's Android guide asks for images of at least 480x360 pixels and says the person should be represented by at least 256x256 pixels for best performance. For real-time use it suggests capturing at a lower resolution to cut latency while keeping to those minimums, and using the base SDK with STREAM_MODE.
Why does ML Kit return pose landmarks outside the image?
Because it always returns all 33. When the person is not completely inside the image, Google's Android guide says the model assigns the missing landmarks coordinates outside the frame and gives them low in-frame likelihood values. Check getInFrameLikelihood, which runs from 0.0 to 1.0, before using a landmark.

All 121 questions in AI Motion →

Keep reading

Elsewhere on the site

Pages that share this one’s concepts and sources, from other sections.

Next steps

Was this page useful?

Independent comparison, last reviewed October 17, 2026. Pricing, rate limits, and feature availability change often — confirm current details in each provider’s official documentation before you commit. Product and company names are trademarks of their respective owners; AIFitnessAPI is not affiliated with, endorsed by, or sponsored by any product listed here.

← All ai motion · by AIFitnessAPI