---
title: "ML Kit vs MediaPipe Pose: Same 33 Landmarks, Different Packaging"
canonical: "https://aifitnessapi.com/compare/ml-kit-vs-mediapipe"
cluster: "Comparisons"
primary_query: "ml kit vs mediapipe pose"
last_reviewed: "2026-10-27"
description: "ML Kit Pose Detection vs MediaPipe Pose Landmarker from Google's docs: same 33 landmarks, beta SDK vs Apache-2.0, platforms, 3D, people, sizes and speed."
publisher: "AIFitnessAPI — funded by KinesteX, the subject of this page; disclosure in body"
cite_as: "\"ML Kit vs MediaPipe Pose: Same 33 Landmarks, Different Packaging\", AIFitnessAPI, https://aifitnessapi.com/compare/ml-kit-vs-mediapipe"
---

# ML Kit vs MediaPipe Pose: Same 33 Landmarks, Different Packaging

> ML Kit Pose Detection and MediaPipe Pose Landmarker come from the same Google research and return the same 33 landmarks at the same indices; the choice is about packaging. Pick ML Kit for an Android and iOS app that wants one person's skeleton with no model file to manage, and can accept a beta API that Google says has no SLA or deprecation policy. Pick MediaPipe for the web or Python, world landmarks in meters, more than one person, segmentation masks, or an Apache-2.0 model you ship and pin yourself.

- Canonical: https://aifitnessapi.com/compare/ml-kit-vs-mediapipe
- Last reviewed: 2026-10-27
- Publisher: AIFitnessAPI (https://aifitnessapi.com) — funded by KinesteX, the subject of this page; disclosure in body
- Cite as: "ML Kit vs MediaPipe Pose: Same 33 Landmarks, Different Packaging", AIFitnessAPI, https://aifitnessapi.com/compare/ml-kit-vs-mediapipe

---

**Disclosure: this site is funded by KinesteX, which sells a motion-tracking SDK that sits a layer above pose models like these.** Both products on this page are Google's, neither is ours, and we have no reason to prefer either. Every fact below comes from Google's ML Kit guides, reference and terms, Google's MediaPipe Pose Landmarker guides, and the google-ai-edge/mediapipe repository, all read on October 27, 2026.

These are close relatives rather than rivals. Google's MediaPipe Pose documentation says its BlazePose research "also powers the ML Kit Pose Detection API". Both return 33 body landmarks at the same indices. What differs is the packaging around the model: ML Kit is a closed, beta SDK for Android and iOS with no model file to handle, and MediaPipe Pose Landmarker is an open-source task library with a model bundle you ship, on more platforms and with more options. What ML Kit documents about itself is in [ML Kit pose detection](/motion/ml-kit-pose-detection); this page sets the two side by side.

## ML Kit vs MediaPipe at a glance

| | ML Kit Pose Detection | MediaPipe Pose Landmarker |
| --- | --- | --- |
| Landmarks | 33, values 0 to 32 | 33, indices 0 to 32 |
| Per landmark | x, y, an experimental z, in-frame likelihood | x, y, z, visibility, presence; plus world landmarks in meters |
| People | One per image | Up to `num_poses`, default 1 |
| Variants | Base SDK and accurate SDK | Lite, full and heavy model bundles |
| Platforms | Android and iOS | Android, iOS, Python and web |
| How the model ships | Statically linked into the app at build time | A `.task` file you bundle and load |
| Extras | None documented | Optional segmentation masks |
| Status | Beta, with no SLA or deprecation policy | Open source |
| Terms | ML Kit Terms of Service; usage metrics go to Google | Apache-2.0 |

## Same landmarks, almost the same names

ML Kit's Android `PoseLandmark` reference and MediaPipe's `PoseLandmark` enum assign the same numbers to the same body points, from 0 nose to 32 right foot index; `LEFT_HIP` is 23 in both. Only the mouth corners are spelled differently: ML Kit's `LEFT_MOUTH` (9) and `RIGHT_MOUTH` (10) are MediaPipe's `MOUTH_LEFT` and `MOUTH_RIGHT`. Index-based code moves between them unchanged, which makes a later switch cheaper than between most pose models. Both maps are on [the ML Kit landmark page](/pose-keypoints/ml-kit) and [the BlazePose 33 keypoint map](/pose-keypoints/blazepose-33).

## Where they differ in output

**Depth.** ML Kit calls its Z coordinate "an experimental value" that is measured in image pixels like X and Y "but it is not a true 3D value", with its origin near the centre between the hips and no upper or lower bound. MediaPipe returns two sets of landmarks from one call: normalized image landmarks, whose z uses the hip midpoint as origin and "roughly the same scale as x", and world landmarks that Google's documentation describes as "Real-world 3D coordinates in meters with the origin at the center between hips". If you need joint angles that survive the user turning side-on, MediaPipe's world landmarks are the documented route; [2D vs 3D pose estimation](/motion/2d-vs-3d-pose-estimation) covers when that matters.

**Per-point scores.** ML Kit's InFrameLikelihood is, in Google's words, "a measure that indicates the probability that the landmark is within the image frame", from 0.0 to 1.0. When part of the body is outside the image, ML Kit still returns all 33 points and gives the missing ones coordinates outside the frame. MediaPipe gives two scores per landmark, visibility and presence.

**People and masks.** ML Kit's overview is direct: "Pose detection can only detect one person in an image." With two people, it assigns the landmarks to the person detected with the highest confidence, and Google adds that "The user's face must be present in order to detect a pose." MediaPipe's `num_poses` sets "The maximum number of poses that can be detected", defaulting to 1, and its `output_segmentation_masks` option returns a person mask. For groups, start from [multi-person pose tracking](/motion/multi-person-pose-tracking).

## Speed and size, as Google publishes them

ML Kit publishes both. Its Android guide lists the base `pose-detection` SDK 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 with CPU or about 30 FPS with GPU. Its iOS guide lists up to 29.6 MB at about 45 FPS for `PoseDetection` and up to 33.2 MB at about 29 FPS for `PoseDetectionAccurate`, both on an iPhone X.

MediaPipe's current Pose Landmarker guides, the overview and the Android, iOS and web pages, publish neither figure. When we requested the three bundles from Google's model storage on October 27, 2026, they were 5,777,746 bytes (lite), 9,398,198 bytes (full) and 30,664,242 bytes (heavy); that is the model file alone, before the task library. For speed, Google's legacy Pose documentation gives BlazePose GHUM latencies on a Pixel 3 with TFLite GPU of 20 ms for lite, 25 ms for full and 53 ms for heavy. Those are different devices and different measures from ML Kit's, so they do not compare; measure on your target phones. [MediaPipe Pose Landmarker models](/motion/mediapipe-pose-landmarker-models) goes deeper on the three variants.

## Platforms and integration

ML Kit's pose guides cover Android and iOS only. The Android guide needs API level 23 or above and, on the day we read it, printed the dependencies `com.google.mlkit:pose-detection:18.0.0-beta5` and `com.google.mlkit:pose-detection-accurate:18.0.0-beta5`; the iOS guide printed the pods `GoogleMLKit/PoseDetection` and `GoogleMLKit/PoseDetectionAccurate` at 8.0.0. Google says the Android SDKs' code and assets, and the iOS detectors' assets, are statically linked into the app at build time, so there is no model file to download or version separately. Detection runs in `STREAM_MODE`, which tracks the most prominent person between frames, or `SINGLE_IMAGE_MODE`, and on Android `setPreferredHardwareConfigs` chooses between `CPU` and `CPU_GPU`.

MediaPipe adds Python and the web. Android uses the `com.google.mediapipe:tasks-vision` library, iOS the `MediaPipeTasksVision` package through Swift Package Manager, and the web the `@mediapipe/tasks-vision` npm package; each loads a `.task` model you supply. Running modes are `IMAGE`, `VIDEO` and `LIVE_STREAM`. Shipping the file yourself is extra work, and it is also what lets you pin a model version for regression tests.

## Terms, status and data

**ML Kit is beta.** Google's overview says the API "is offered in beta, and is not subject to any SLA or deprecation policy", and that changes "may be made to this API that break backward compatibility".

**ML Kit has terms, not a licence file.** The ML Kit Terms of Service, last modified May 14, 2025, say processing of input data "fully happens on-device", and also that the APIs "send metrics about the performance and utilization of the APIs in your app to Google", which the developer is responsible for telling users about where the law requires it. The terms treat machine learning models as related software and forbid attempts to reverse engineer or extract them.

**MediaPipe is Apache-2.0.** The repository's LICENSE is the Apache License, Version 2.0, and the code is there to read, fork or build from source. [Pose estimation model licenses](/motion/pose-estimation-model-licenses) reads both sets of terms in full; this is not legal advice.

## Which should you pick?

- **An Android and iOS app that wants one person's skeleton with the least setup** → ML Kit. No model file to ship or update, and Google publishes size and frame-rate figures for both SDKs.
- **A web app, a Python pipeline or a server-side batch job** → MediaPipe; ML Kit's pose guides cover only Android and iOS.
- **Joint angles in 3D, or a user who turns side-on** → MediaPipe, for world landmarks in meters rather than an experimental pixel-scale Z.
- **Two or more people, or a segmentation mask** → MediaPipe, by raising `num_poses` or enabling masks; ML Kit detects one person.
- **A product that cannot sit on a beta API or send usage metrics** → MediaPipe, under Apache-2.0 with a model file you control.
- **Already on ML Kit and outgrowing it** → the shared landmark indices make MediaPipe the cheapest move; rename the two mouth constants and keep your rules.

## What neither gives you

Google's ML Kit overview says pose detection "does not attach any meaning to the landmarks in a pose or the pose itself", and the same is true of MediaPipe. Google's [pose classification tips](https://developers.google.com/ml-kit/vision/pose-detection/classifying-poses) show a k-NN approach for exercise classification and rep counting; [how rep counting works](/motion/how-rep-counting-works) covers the logic, and [AI workout tracking APIs](/fitness-apis/ai-workout-tracking-apis) compares products that sell that layer.

## Sources

- [developers.google.com/ml-kit/vision/pose-detection](https://developers.google.com/ml-kit/vision/pose-detection) — beta status, 33 landmarks, one person, face required, in-frame likelihood, base vs accurate SDK, experimental Z, no meaning attached (checked 2026-10-27)
- [developers.google.com/ml-kit/vision/pose-detection/android](https://developers.google.com/ml-kit/vision/pose-detection/android) — SDK sizes and Pixel 3XL speeds, API level 23, 18.0.0-beta5, detection modes, hardware configs (checked 2026-10-27)
- [developers.google.com/ml-kit/vision/pose-detection/ios](https://developers.google.com/ml-kit/vision/pose-detection/ios) — SDK sizes and iPhone X speeds, pods at 8.0.0, statically linked assets (checked 2026-10-27)
- [developers.google.com/android/reference/com/google/mlkit/vision/pose/PoseLandmark](https://developers.google.com/android/reference/com/google/mlkit/vision/pose/PoseLandmark) — constant values, LEFT_MOUTH 9, LEFT_HIP 23 (checked 2026-10-27)
- [developers.google.com/ml-kit/terms](https://developers.google.com/ml-kit/terms) — last modified May 14, 2025: on-device processing, metrics to Google, models as related software (checked 2026-10-27)
- [developers.google.com/ml-kit/vision/pose-detection/classifying-poses](https://developers.google.com/ml-kit/vision/pose-detection/classifying-poses) — k-NN classification and rep counting tips (checked 2026-10-27)
- [developers.google.com/edge/mediapipe/solutions/vision/pose_landmarker](https://developers.google.com/edge/mediapipe/solutions/vision/pose_landmarker) — 33 landmarks, world coordinates, segmentation mask, num_poses, running modes, bundles (checked 2026-10-27)
- [developers.google.com/edge/mediapipe/solutions/vision/pose_landmarker/android](https://developers.google.com/edge/mediapipe/solutions/vision/pose_landmarker/android) — tasks-vision library (checked 2026-10-27)
- [developers.google.com/edge/mediapipe/solutions/vision/pose_landmarker/ios](https://developers.google.com/edge/mediapipe/solutions/vision/pose_landmarker/ios) — MediaPipeTasksVision via Swift Package Manager (checked 2026-10-27)
- [developers.google.com/edge/mediapipe/solutions/vision/pose_landmarker/web_js](https://developers.google.com/edge/mediapipe/solutions/vision/pose_landmarker/web_js) — @mediapipe/tasks-vision on npm (checked 2026-10-27)
- [github.com/google-ai-edge/mediapipe/blob/master/docs/solutions/pose.md](https://github.com/google-ai-edge/mediapipe/blob/master/docs/solutions/pose.md) — BlazePose also powers ML Kit; world landmarks; Pixel 3 latencies (checked 2026-10-27)
- [github.com/google-ai-edge/mediapipe/blob/master/mediapipe/tasks/python/vision/pose_landmarker.py](https://github.com/google-ai-edge/mediapipe/blob/master/mediapipe/tasks/python/vision/pose_landmarker.py) — PoseLandmark enum, MOUTH_LEFT and MOUTH_RIGHT (checked 2026-10-27)
- [github.com/google-ai-edge/mediapipe/blob/master/mediapipe/tasks/python/components/containers/landmark.py](https://github.com/google-ai-edge/mediapipe/blob/master/mediapipe/tasks/python/components/containers/landmark.py) — visibility and presence fields (checked 2026-10-27)
- [github.com/google-ai-edge/mediapipe/blob/master/LICENSE](https://github.com/google-ai-edge/mediapipe/blob/master/LICENSE) — Apache-2.0 (checked 2026-10-27)
- [storage.googleapis.com/mediapipe-models/pose_landmarker/pose_landmarker_full/float16/latest/pose_landmarker_full.task](https://storage.googleapis.com/mediapipe-models/pose_landmarker/pose_landmarker_full/float16/latest/pose_landmarker_full.task) — bundle sizes from the Content-Length of the lite, full and heavy files (checked 2026-10-27)

## FAQ

### Is ML Kit pose detection built on MediaPipe?

On the same research, by Google's account. MediaPipe's Pose documentation says its BlazePose research also powers the ML Kit Pose Detection API, and both return 33 landmarks with the same numbering, from 0 nose to 32 right foot index. The products differ: ML Kit is a beta SDK for Android and iOS with its model linked into the app, and MediaPipe is an open-source task library with a model bundle you load.

[Permalink](https://aifitnessapi.com/compare/ml-kit-vs-mediapipe#faq-1)

### Can I switch from ML Kit to MediaPipe without rewriting my pose code?

Mostly. ML Kit's PoseLandmark constants and MediaPipe's PoseLandmark enum give the same index to the same point, so rules written against landmark numbers carry over. Only the mouth corners are named differently, LEFT_MOUTH and RIGHT_MOUTH in ML Kit against MOUTH_LEFT and MOUTH_RIGHT in MediaPipe. The output objects, scores and setup code still change: in-frame likelihood becomes visibility and presence.

[Permalink](https://aifitnessapi.com/compare/ml-kit-vs-mediapipe#faq-2)

### Does ML Kit or MediaPipe run in a web browser?

MediaPipe does: Google documents a web guide that loads Pose Landmarker from the @mediapipe/tasks-vision npm package or a CDN, alongside Android, iOS and Python guides. ML Kit's pose detection guides cover Android and iOS only, so a web or desktop build needs MediaPipe or another model.

[Permalink](https://aifitnessapi.com/compare/ml-kit-vs-mediapipe#faq-3)

### Which is safer for a production app, ML Kit or MediaPipe?

It depends on which risk you weigh. ML Kit pose detection is offered in beta and, per Google, is not subject to any SLA or deprecation policy, and its terms say the APIs send performance and usage metrics to Google. MediaPipe is Apache-2.0 open source with a model file you control, but you ship, size and update that file yourself. Neither gives you rep counting or form feedback.

[Permalink](https://aifitnessapi.com/compare/ml-kit-vs-mediapipe#faq-4)
