Skip to content
AF
Comparisons

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

Last verified October 27, 2026 · 7 min read

Sources checked (15) · October 27, 2026
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.

Covered here: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; this page sets the two side by side.

ML Kit vs MediaPipe at a glance#

ML Kit Pose DetectionMediaPipe Pose Landmarker
Landmarks33, values 0 to 3233, indices 0 to 32
Per landmarkx, y, an experimental z, in-frame likelihoodx, y, z, visibility, presence; plus world landmarks in meters
PeopleOne per imageUp to num_poses, default 1
VariantsBase SDK and accurate SDKLite, full and heavy model bundles
PlatformsAndroid and iOSAndroid, iOS, Python and web
How the model shipsStatically linked into the app at build timeA .task file you bundle and load
ExtrasNone documentedOptional segmentation masks
StatusBeta, with no SLA or deprecation policyOpen source
TermsML Kit Terms of Service; usage metrics go to GoogleApache-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 and the BlazePose 33 keypoint map.

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

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 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 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 show a k-NN approach for exercise classification and rep counting; how rep counting works covers the logic, and AI workout tracking APIs compares products that sell that layer.

Frequently asked questions

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

All 131 questions in Comparisons →

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 27, 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 comparisons · by AIFitnessAPI