---
title: "ML Kit Pose Detection: Base vs Accurate SDK, Landmarks and Limits"
canonical: "https://aifitnessapi.com/motion/ml-kit-pose-detection"
cluster: "AI Motion"
primary_query: "ml kit pose detection"
last_reviewed: "2026-10-17"
description: "Google's ML Kit pose API on Android and iOS: base vs accurate SDK sizes and speeds, the 33 landmarks, the experimental Z value and the one-person limit."
publisher: "AIFitnessAPI — independent, not sponsored"
cite_as: "\"ML Kit Pose Detection: Base vs Accurate SDK, Landmarks and Limits\", AIFitnessAPI, https://aifitnessapi.com/motion/ml-kit-pose-detection"
---

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

> 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.

- Canonical: https://aifitnessapi.com/motion/ml-kit-pose-detection
- Last reviewed: 2026-10-17
- Publisher: AIFitnessAPI (https://aifitnessapi.com) — independent, not sponsored
- Cite as: "ML Kit Pose Detection: Base vs Accurate SDK, Landmarks and Limits", AIFitnessAPI, https://aifitnessapi.com/motion/ml-kit-pose-detection

---

Choosing between ML Kit, MediaPipe and the rest happens in [pose estimation models compared](/motion/pose-estimation-models-compared). ML Kit is governed by service terms rather than an open-source licence, read in [pose estimation model licenses](/motion/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

| Platform | SDK | App size, per Google | Speed, per Google |
| --- | --- | --- | --- |
| Android | `pose-detection` | About 10.1 MB | Pixel 3XL: about 30 FPS |
| Android | `pose-detection-accurate` | About 13.3 MB | Pixel 3XL: about 23 FPS on CPU, about 30 FPS on GPU |
| iOS | `PoseDetection` | Up to 29.6 MB | iPhone X: about 45 FPS |
| iOS | `PoseDetectionAccurate` | Up to 33.2 MB | iPhone 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:

```text
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](/pose-keypoints/ml-kit). 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](/motion/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](/motion/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](/motion/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](/motion/mediapipe-pose-landmarker-models).

## Sources

- [developers.google.com/ml-kit/vision/pose-detection](https://developers.google.com/ml-kit/vision/pose-detection) — Beta status, 33 landmarks, face required, one person, in-frame likelihood, base vs accurate SDK, the Z coordinate, and no meaning attached to landmarks. (checked 2026-10-17)
- [developers.google.com/ml-kit/vision/pose-detection/android](https://developers.google.com/ml-kit/vision/pose-detection/android) — SDK names, sizes and Pixel 3XL speeds, API level 23, the 18.0.0-beta5 dependencies, detection modes, hardware configs, 480x360 and 256x256 guidance, and out-of-frame landmarks. (checked 2026-10-17)
- [developers.google.com/ml-kit/vision/pose-detection/ios](https://developers.google.com/ml-kit/vision/pose-detection/ios) — PoseDetection and PoseDetectionAccurate sizes and iPhone X speeds, pods at 8.0.0, Xcode 13.2.1, stream and singleImage modes. (checked 2026-10-17)
- [developers.google.com/android/reference/com/google/mlkit/vision/pose/PoseLandmark](https://developers.google.com/android/reference/com/google/mlkit/vision/pose/PoseLandmark) — The 33 constants and their values, the in-frame likelihood range, the getPosition3D Z notes, and the RIGHT_EYE descriptions that say left. (checked 2026-10-17)
- [developers.google.com/ml-kit/reference/swift/mlkitposedetectioncommon/api/reference/Classes/PoseLandmark](https://developers.google.com/ml-kit/reference/swift/mlkitposedetectioncommon/api/reference/Classes/PoseLandmark) — Z values are less accurate than x and y, and facial landmark z-values are not calculated. (checked 2026-10-17)
- [developers.google.com/ml-kit/terms](https://developers.google.com/ml-kit/terms) — Last modified May 14, 2025: input processing fully on-device, and the performance and utilization metrics the APIs send to Google. (checked 2026-10-17)

## FAQ

### 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.

[Permalink](https://aifitnessapi.com/motion/ml-kit-pose-detection#faq-1)

### 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.

[Permalink](https://aifitnessapi.com/motion/ml-kit-pose-detection#faq-2)

### 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.

[Permalink](https://aifitnessapi.com/motion/ml-kit-pose-detection#faq-3)

### 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.

[Permalink](https://aifitnessapi.com/motion/ml-kit-pose-detection#faq-4)

### 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.

[Permalink](https://aifitnessapi.com/motion/ml-kit-pose-detection#faq-5)
