Skip to content
AF
Comparisons

Apple Vision vs MediaPipe: Native iOS Body Pose or a Cross-Platform Model?

Last verified October 27, 2026 · 8 min read

Sources checked (16) · October 27, 2026
Pick Apple Vision when the app only runs on Apple devices: VNDetectHumanBodyPoseRequest ships inside the OS from iOS 14, returns 19 named 2D joints for each person it detects, and adds no model file to your app. Pick MediaPipe Pose Landmarker when you also need Android or the web, hand and foot points, or a model version you can pin: it returns 33 landmarks plus world coordinates in meters from a .task bundle you ship, under Apache-2.0. For 3D on Apple hardware, Vision's separate iOS 17 request returns 17 joints in meters, for the most prominent person only.

Covered here:MediaPipeApple Vision body pose

Disclosure: this site is funded by KinesteX, which sells a motion-tracking SDK that sits a layer above pose models like these. Neither product on this page is ours, and we have no reason to prefer either. Apple facts come from Apple's Vision documentation; MediaPipe facts come from Google's Pose Landmarker guides and the google-ai-edge/mediapipe repository. All were read on October 27, 2026.

The two names do not sit at quite the same layer. Apple Vision is an operating-system framework: VNDetectHumanBodyPoseRequest and its 3D sibling run a pose model Apple ships inside iOS, iPadOS, macOS, tvOS and visionOS. MediaPipe Pose Landmarker is a model bundle plus a cross-platform task library that you add to your app. What Apple documents about its own request, on its own, is in Apple Vision body pose on iOS; this page puts the two side by side.

Apple Vision vs MediaPipe at a glance#

Apple Vision body poseMediaPipe Pose Landmarker
2D points19 named joints (VNHumanBodyPoseObservation.JointName)33 landmarks, indexed 0 to 32
Hands and feetNone in the 19; the iOS 18 DetectHumanBodyPoseRequest can add hand observationsPinky, index and thumb points per hand; heel and foot index per foot
3DSeparate request from iOS 17 and macOS 14: 17 joints in meters, origin at the root joint between the hipsWorld landmarks in meters, origin at the centre between the hips, from the same call
People per frame2D: one observation per detected pose; 3D: the most prominent person onlyUp to num_poses, which defaults to 1
PlatformsApple only: iOS and iPadOS 14, macOS 11, Mac Catalyst 14, tvOS 14, visionOS 1 for the 2D requestAndroid, iOS, Python and web
What you shipNothing: the model is part of the OSA .task model bundle: lite, full or heavy
VersioningRequest revisions inside the OSThe bundle file you choose and keep
LicencePart of Apple's SDKApache-2.0

What each returns in 2D#

Vision names 19 joints. Apple's documentation says that starting in iOS 14 and macOS 11, Vision identifies human body poses "by detecting up to 19 unique body points". The joint names are grouped as head (nose, eyes, ears, neck), arms (shoulders, elbows, wrists), waist (root) and legs (hips, knees, ankles). Each VNRecognizedPoint carries x and y in normalized coordinates and a confidence score, and Apple's article says to ignore points with a confidence of 0, "because they’re invalid". The same article puts the origin at the bottom-left of the image.

MediaPipe has 33 landmarks. Google's Pose Landmarker guide lists them from 0 nose to 32 right foot index, and each landmark carries x, y, z, visibility and presence. Sixteen of the 33 have no Vision counterpart: four eye corners, two mouth corners, three hand points per side and two foot points per side. The heel and foot index points are what an ankle angle or a heel-lift check needs, which the 19 Vision joints cannot supply. Vision has two points MediaPipe does not: neck and root. In MediaPipe you would derive them, for example as midpoints of the shoulders and of the hips.

Hands are a recent addition on Apple's side. DetectHumanBodyPoseRequest, the Swift-only request available from iOS 18 and macOS 15, has a detectsHands property that Apple describes as "A Boolean value that detects hands of the body in the results, if they’re visible", defaulting to true and requiring the request's revision 2. Its observation exposes leftHand and rightHand as separate hand-pose observations rather than adding points to the body skeleton.

Several people in frame#

Apple's 2D article says the request "returns a unique observation for each detected human body pose", so one call can return several skeletons. Its accuracy advice also warns that "Attempting to detect body poses in dense crowd scenes is likely to produce inaccurate results". MediaPipe's num_poses option is "The maximum number of poses that can be detected by the Pose Landmarker", default 1, so you raise it explicitly. Neither guide documents keeping each person's identity from frame to frame; multi-person pose tracking covers that layer.

3D: two different promises#

Vision's 3D request is a separate API with a higher floor: iOS 17 and macOS 14. Apple's article says it measures "17 individual joint locations in 3D space", in meters, relative to a root joint between the left and right hip. Three details matter for fitness code:

  • One person. "The request only supports the detection and results for the most prominent person in the frame, so it generates a single observation."
  • All or nothing. "The framework doesn’t return a partial list of joints, so you get all 17 joints or none."
  • Depth helps but is optional. The request runs without depth data, and Apple says providing it "improves detection accuracy". bodyHeight is a measured value only when the capture session uses the LiDAR camera; otherwise Apple says it returns "a reference height of 1.8 meters".

MediaPipe returns its 3D output from the same call as the 2D landmarks. Google's legacy Pose documentation describes world landmarks as "Real-world 3D coordinates in meters with the origin at the center between hips", and the Pose Landmarker guide says the model "outputs an estimate of 33 3-dimensional pose landmarks". Its inputs are still images, decoded video frames or a live feed; the guide lists no depth input. Whether you need a third axis at all is the subject of 2D vs 3D pose estimation.

Shipping and keeping it working#

Vision adds no model bytes. The model ships in the OS, and the request is the API. The flip side is that the implementation updates when Apple updates it. The 2D request documents VNDetectHumanBodyPoseRequestRevision1, and the iOS 18 request has a Revision type whose listed case is revision2; what changes between them, and when, is Apple's to decide.

MediaPipe adds a file you control. The iOS guide installs the MediaPipeTasksVision library through Swift Package Manager and points BaseOptions.modelAssetPath at a pose_landmarker.task file in the app bundle; Android uses the com.google.mediapipe:tasks-vision library, and the web uses the @mediapipe/tasks-vision npm package. 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). Because the file is yours, an old version stays reproducible in a regression suite. MediaPipe Pose Landmarker models compares the three.

Platform reach decides many projects outright. Every platform Apple lists for Vision is an Apple platform. A team with an Android app either writes a second pose pipeline, with different joints and different failure modes, or uses one model on both, which MediaPipe supports.

What is published about accuracy#

Apple's documentation gives guidance rather than figures. For the 2D request it says the subject's height "should ideally be at least a third of the overall image height", that a large portion of the body should be in frame, and that "A subject wearing flowing or robe-like clothing reduces the detection accuracy."

The only side-by-side numbers come from Google. MediaPipe's legacy Pose documentation scores BlazePose GHUM against "Apple Vision" on Google's own Yoga, Dance and HIIT validation sets, each image holding one person 2 to 4 meters from the camera, on the 17 COCO keypoints. Apple Vision scored 32.8, 36.4 and 44.5 mAP and 82.7, 91.4 and 88.6 PCK@0.2; BlazePose GHUM Heavy scored 68.1, 73.0 and 74.0 mAP. Read it as a vendor benchmarking a competitor on its own test set, with no Vision version stated. Pose estimation accuracy explains the metrics, and your own footage is the only test that settles it.

Mapping joints between them#

Vision identifies joints by name, not by integer index, so code that reads MediaPipe's landmarks[23] has no direct equivalent. The 12 limb joints (shoulders, elbows, wrists, hips, knees, ankles) and the five face points (nose, eyes, ears) exist on both sides under matching names, which makes a name-keyed lookup the safe way to share form rules. The full lists are in the Apple Vision 2D joint map, the Apple Vision 3D joint map and the BlazePose 33 keypoint map.

Which should you pick?#

  • An iOS-only app that counts reps from elbow, hip or knee angles in 2D → Apple Vision. No model file, no extra dependency, and a 2D request available back to iOS 14.
  • An app on iOS and Android, or in a browser → MediaPipe, so one model and one set of joint rules serve every platform.
  • Squat depth, heel lift, ankle angles or grip → MediaPipe, whose heel, foot index and hand points Vision's 19 joints do not include.
  • 3D on Apple hardware with a depth camera → test Vision's 3D request, which uses depth when it is present and can measure body height with LiDAR; remember it reports one person only.
  • Golden-clip regression tests that must not move between releases → MediaPipe, because the model file is pinned in your repository; with Vision, plan to re-run the clips on each OS release.

What neither gives you#

Both return points, not workouts. Rep counting, form rules and feedback are yours to build or buy: how rep counting works shows the logic, AI workout tracking in Swift wires Vision into an iOS app, and AI workout tracking APIs compares products that sell the layer above.

Frequently asked questions

How many joints does Apple Vision detect compared with MediaPipe?
Apple's 2D request, VNDetectHumanBodyPoseRequest, detects up to 19 named body points: nose, eyes, ears, neck, shoulders, elbows, wrists, a root point at the waist, hips, knees and ankles. Its 3D request returns 17 joints. MediaPipe Pose Landmarker returns 33 landmarks, including eye and mouth corners, three points on each hand, and a heel and foot index on each foot, which Vision's 19 do not include.
Can Apple Vision body pose run on Android?
No. Every platform Apple lists for VNDetectHumanBodyPoseRequest is an Apple one: iOS, iPadOS, Mac Catalyst, macOS, tvOS and visionOS. An Android version of the same app needs a different pose model. MediaPipe Pose Landmarker documents Android, iOS, Python and web, so teams shipping on both phones often use it everywhere and keep one set of joint rules.
Does Apple Vision detect more than one person, unlike MediaPipe's default?
The 2D request does: Apple's article says it returns a unique observation for each detected human body pose, though it warns that dense crowd scenes are likely to produce inaccurate results. The 3D request supports only the most prominent person in the frame. MediaPipe Pose Landmarker detects up to num_poses people, an option that defaults to 1, so you raise it to track more.
Is Apple Vision less accurate than MediaPipe BlazePose?
Apple publishes no accuracy figures to answer that. The only side-by-side numbers come from Google: MediaPipe's legacy Pose documentation scores Apple Vision at 32.8 to 44.5 mAP on Google's own Yoga, Dance and HIIT sets, against 68.1 to 74.0 for BlazePose GHUM Heavy. That is a vendor benchmarking a competitor on its own test set with no Vision version stated, so test both on your own footage.
Does Apple Vision body pose need a depth camera for 3D?
No. Apple says VNDetectHumanBodyPose3DRequest runs without depth data, uses it when available, and that providing depth improves detection accuracy. Body height is measured only when the capture session uses the LiDAR camera; otherwise bodyHeight returns a reference height of 1.8 meters. MediaPipe's world landmarks come from ordinary image or video input, with no depth input in its guide.

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