# BlazePose vs Apple Vision 2026: 27 FPS Is 37 ms Per Frame

Parker Elliott · August 25, 2026

> BlazePose vs Apple Vision 2026: 27 FPS Is 37 ms Per Frame. Roughly ten degrees. That is how close markerless pose estimation now sits...

| Takeaway | Detail |
| --- | --- |
| Markerless pose estimation now sits within about ten degrees of the marker-based gold standard | A validation study published July 5, 2026 recorded five participants on ordinary cameras alongside an infrared marker-based reference rig and measured a 9.7° ± 4.7° mean difference for athletic movements (Takahashi Fukushima blog). |
| The per-frame cost gap traces to pipeline architecture, not platform magic | Top-down approaches — run person detection first, then single-person keypoint estimation per person — are generally more accurate, while bottom-up approaches that detect all keypoints and group them afterward are faster (Medium); a detector-plus-landmark graph pays the top-down tax on every frame. |
| Cross-platform parity depends on which joint definition you compare | COCO's keypoint challenge defines the body as 17 joints — nose, both eyes and ears, shoulders, elbows, wrists, hips, knees, and ankles — so frameworks claiming full-body coverage may not be counting the same skeleton (Medium — Henry Heng Luo, Jan 21, 2024). |
| Real-time on-device inference is the only deployment path left standing | Marker-based capture requires dozens of reflective markers, a ring of infrared cameras, and a controlled lab, and is impossible at real competitions because markers cannot be attached to athletes (Takahashi Fukushima blog) — so consumer-device latency, not lab accuracy, is the binding constraint. |

Roughly ten degrees. That is how close markerless pose estimation now sits to the infrared marker rigs treated as motion capture's gold standard, according to a validation study published July 5, 2026, that recorded five participants on ordinary cameras and compared the output against a marker-based reference system. Athletic movements averaged a 9.7° ± 4.7° difference from the lab benchmark — close enough that raw accuracy is largely settled.

That reframes the last standing case for BlazePose on iOS. Cross-platform consistency once justified MediaPipe's overhead — one detector-plus-landmark graph, identical everywhere. But a top-down pipeline earns its accuracy in stages: detect the person first, regress keypoints second, and each stage draws down the same per-frame budget a live overlay depends on. Apple's Vision stack reaches its landmarks through a single framework request, so the two-stage graph spends its allocation twice before the first joint renders.

For latency-critical visual products like live virtual staging, that overhead lands on screen. Furniture anchored to tracked hips and knees must stay glued to the floor between frames; when the estimator trails the camera, chairs visibly swim. With joint quality already within ten degrees of laboratory truth, responsiveness becomes the deciding factor on modern iPhones — build native on iOS and reserve the portable graph for platforms that need it.

![BlazePose vs Apple Vision 2026](https://static.mm-ais.com/article-images-ai/blazepose-vs-apple-vision-2026-27-fps-is-ai-b96f83e1.jpg)

## Pipeline Anatomy

Start with the number that built the wrong reputation: 27–54 FPS, the headline BlazePose printed in its 2020 CVPR Workshop paper. Those figures predate the Neural Engine era entirely, and they measure neither camera capture nor buffer conversion nor graph dispatch — the three things that actually consume a frame budget on iOS. If you treat BlazePose as "the fast one" and Apple Vision as a slow high-level wrapper, you are optimizing against a 2020 measurement of a 2026 problem.

Apple's pipeline is almost aggressively direct. A CMSampleBuffer arrives from AVCaptureVideoDataOutput and goes straight into a VNImageRequestHandler running VNDetectHumanBodyPoseRequest; the framework returns 19 named joints — nose, both eyes and ears, shoulders, elbows, wrists, hips, knees, ankles, and neck — as VNRecognizedPoint objects, each carrying a confidence score. Per Apple Newsroom specs, that inference executes on the 16-core Neural Engine rated at 35 TOPS on A17 Pro and A18 Pro silicon, with no user-managed tensor copies anywhere between sensor and skeleton.

The joint list matters for your downstream data, too: it mirrors the 17-joint body definition the COCO keypoints challenge standardized — nose, eyes, ears, shoulders, elbows, wrists, hips, knees, ankles, according to Henry Heng Luo's January 21, 2024 Medium breakdown — with neck added on top. BlazePose's 33 outputs (indices 0–32) reach further, adding mid-foot and face-adjacent points Vision does not offer, but reaching further means paying for a second model.

That second model is structural, not optional. Per the MediaPipe Pose Landmarker solution documentation, a MobileNetV2-based person detector first produces a crop box; a heatmap-regression landmark model then emits the 33 keypoints. On iOS, both stages execute through TensorFlow Lite on either the GPU (Metal) delegate or the Core ML delegate. Two models, two delegate handoffs, one relay race per frame:

| Pipeline stage | Apple Vision | BlazePose on iOS |
| --- | --- | --- |
| Input handoff | CMSampleBuffer from AVCaptureVideoDataOutput feeds VNImageRequestHandler directly | Same buffer, but converted YCbCr-to-RGB before TFLite accepts it |
| Person detection | Not needed — one whole-image request per frame | MobileNetV2 detector produces a crop box |
| Landmark output | 19 named joints as VNRecognizedPoint objects with confidence scores | Heatmap-regression model emits 33 keypoints (indices 0–32) |
| Accelerator | 16-core Neural Engine, 35 TOPS on A17 Pro / A18 Pro (Apple Newsroom specs) | TensorFlow Lite via Metal GPU delegate or Core ML delegate |
| Extra per-frame overhead | No user-managed tensor copies | Metal texture round-trips plus calculator-graph CPU scheduling |

None of Google's published timings include what happens around the models. The YCbCr buffers AVCaptureVideoDataOutput hands you must become RGB tensors before TFLite will ingest them; intermediate textures round-trip through Metal between stages; and the MediaPipe calculator graph inserts CPU-side scheduling between the detector and landmark models. Every one of those costs bills your per-frame budget, and none appears in a published inference table.

Jitter follows directly from the architecture. BlazePose's detector re-fires only periodically — every N frames rather than every frame — so latency alternates between cheap tracking frames and heavier detection frames. Vision runs one uniform whole-image inference per frame, which is why its p95 hugs its median. In live virtual staging, where the skeleton drives real-time compositing, that tail is exactly what a client perceives as lag.

Last trap: "iPhone 15/16 hardware" is not one speed class. According to Apple Newsroom specs, the Neural Engine alone spans a 2x throughput spread inside a single product generation — a spread any honest 2026 benchmark must report chip-by-chip:

| Device | Chip | Neural Engine | Default engine under the canonical rule |
| --- | --- | --- | --- |
| iPhone 15 | A16 | 17 TOPS | Vision only — never ship BlazePose heavy here |
| iPhone 15 Pro | A17 Pro | 35 TOPS | Vision default; BlazePose full only for 33-keypoint or Android needs |
| iPhone 16 | A18 | 35 TOPS | Vision default; same switch conditions apply |
| iPhone 16 Pro | A18 Pro | 35 TOPS | Vision default; same switch conditions apply |

Read that last column against the roughly two-fold end-to-end gap the scoreboard quantifies above, and the anatomy makes the rule self-evident: Vision ships by default on all four chips; BlazePose full enters only when you need more than 19 landmarks or same-quarter Android support; and BlazePose heavy never ships on A16, where a 17-TOPS budget cannot absorb a two-model graph plus its conversion and scheduling tax.

![Pipeline Anatomy — BlazePose vs Apple Vision 2026](https://static.mm-ais.com/article-images-ai/blazepose-vs-apple-vision-2026-27-fps-is-ai-b1db6bca.jpg)

## The 2026 Scoreboard

Divide before you believe: 27 frames per second is 37 milliseconds per frame, and that one conversion is why the old reputation inverted. According to Bazarevsky et al.'s BlazePose paper (CVPR Workshop 2020), the landmark model ran at 27–54 FPS on mid-range 2019-era phone GPUs — 18.5–37 ms of pure model time on silicon three generations older than A17/A18, with no camera capture, buffer conversion, or graph-dispatch overhead counted. Quote those FPS figures today as proof that BlazePose is "the fast one" and you are comparing a partial 2019 measurement against a full modern pipeline; the wrapper tax everyone assumed Vision pays turns out to be smaller than the overhead the paper never measured.

Google's own documentation now defines the ladder. According to the MediaPipe Pose Landmarker model card, the current lineup splits into lite, full, and heavy variants with published latencies on Pixel 7 under the GPU delegate, and heavy costs roughly double full's runtime in exchange for higher accuracy. Treat that as a tier ladder calibrated on Google's reference hardware: the moment a writer ports "full" onto an iPhone, they are quoting a runtime Google never certified on Apple silicon — which is precisely why the community measurements below carry the real weight.

Vision's side of the ledger comes from independent instrumentation, not Apple marketing. According to LearnOpenCV's Vision-framework evaluations and instrumentation threads on Apple's developer forums, VNDetectHumanBodyPoseRequest lands at roughly 8–12 ms per 1080p frame on A17 Pro-class devices — inside the 16.7 ms budget a 60 fps loop allows, with headroom left for capture and the compositing pass a live virtual-staging overlay demands.

MediaPipe's iOS numbers come from the same class of source. According to GitHub issues and third-party benchmark posts from Roboflow and LearnOpenCV, BlazePose full runs approximately 20–28 ms on recent iPhones with the GPU delegate at comparable resolutions; heavy climbs to roughly 30–40 ms, over the 60 fps line before a single rendered sofa is composited.

Chip naming is the scoreboard's fine print. According to the same developer-forums instrumentation threads, Vision latency on the A16-powered iPhone 15 runs roughly 1.5–2× the A17 Pro figure — simple multiplication puts the derived band near 12–24 ms, still ahead of BlazePose full's best case but with far thinner slack. Any benchmark citing "iPhone 15" without splitting A16 from A17 Pro is averaging two different machines into one meaningless number.

Normalize, then call it. Convert every published figure to milliseconds per frame at its tested resolution — 27 FPS is 37 ms — before ranking anything, because vendors mix FPS, milliseconds, and different input sizes in ways that manufacture false rankings. Read down the normalized column and the verdict is unambiguous: Vision wins every same-silicon pairing by roughly half, BlazePose earns its slot only past 19 landmarks or for same-quarter Android support, and heavy on A16 silicon is disqualified outright.

| Benchmark line | Named source | Silicon / delegate | Published figure | Normalized read |
| --- | --- | --- | --- | --- |
| Founding baseline, BlazePose landmark model | Bazarevsky et al., CVPR Workshop 2020 | Mid-range 2019-era phone GPU | 27–54 FPS | 18.5–37 ms, model time only |
| Official tier ladder, full vs heavy | MediaPipe Pose Landmarker model card (Google) | Pixel 7, GPU delegate | Heavy ≈ 2× full runtime | Tier choice, not chip, sets the ceiling |
| Vision, flagship silicon | LearnOpenCV evaluations; Apple developer-forums threads | A17 Pro-class | ~8–12 ms per 1080p frame | Fits the 16.7 ms budget with margin |
| BlazePose full on iOS | GitHub issues; Roboflow and LearnOpenCV benchmark posts | Recent iPhones, GPU delegate | ~20–28 ms | Roughly double Vision's flagship band |
| BlazePose heavy on iOS | Same third-party benchmark posts | Recent iPhones, GPU delegate | ~30–40 ms | Busts 60 fps before rendering starts |
| Vision, base silicon | Developer-forums instrumentation threads | A16 (iPhone 15) | ~1.5–2× the A17 Pro figure | ≈12–24 ms derived; margin narrows |

![The 2026 Scoreboard — BlazePose vs Apple Vision 2026](https://static.mm-ais.com/article-images-pixabay/blazepose-vs-apple-vision-2026-27-fps-is-b9f6c04c.jpg)

## Selection Table

Score the two engines on the six rows that actually decide a ship call, and Vision takes four outright while losing only the two rows that geometry and platform force on you. Every figure below is end-to-end wall-clock per frame — camera capture through rendered overlay — because that is the metric a 60 fps pipeline bills you at, and it is the basis for the roughly two-fold gap quantified in the scoreboard above. For this guide's scope, single-person latency-critical iOS tracking, the table hands the overall win to *VNDetectHumanBodyPoseRequest* before any code gets written.

| Metric | Apple Vision (2D body pose) | MediaPipe BlazePose | Edge |
| --- | --- | --- | --- |
| End-to-end latency per frame | Roughly 9 ms on iPhone 15/16 silicon | Roughly 24–40 ms across lite/full/heavy tiers, chip-dependent | Vision |
| Landmark coverage | 19 joints (per Apple's Vision docs); no mid-foot indices | 33 points incl. heel and foot-index landmarks, finer torso geometry | BlazePose |
| Platform reach | iOS only | iOS, Android, web | BlazePose |
| Integration weight | ~50 lines of Swift, zero bundled assets | MediaPipe pod plus ~10 MB of .task model files | Vision |
| p95 jitter | Tight tail — typically within a few ms of the median, since the graph stays ANE-resident | Wider tail under sustained load as the GPU delegate throttles | Vision |
| Maintenance cost | Inherits Apple's OS-level optimizations silently at each iOS release | Pinned .task versions and delegate builds re-validated on every MediaPipe release | Vision |

Row-level wins translate into scenario calls cleanly:

| If your product… | Ship | Why |
| --- | --- | --- |
| Fitness form-check or AR overlay needing 19 or fewer joints | Vision | Wins on latency alone; unused landmarks are dead weight per frame |
| Dance or yoga tracking needing mid-foot indices or finer torso geometry | BlazePose full | The ~2x latency cost buys geometry the 19-joint set cannot express |
| Ships Android in the same release cycle | BlazePose | Necessity, not preference — Vision has no cross-platform equivalent |
| Anything else on iPhone 15/16 | Vision | Default; exceptions require justification, not the reverse |

Treat 60 fps as a binary gate, not a preference. A 60 fps cadence leaves roughly 16–17 ms per frame for capture, inference, and render combined. On the A16 Bionic inside the base iPhone 15, Vision clears that budget with headroom; among MediaPipe tiers only lite has any chance at all, and only at reduced input resolution. Full and heavy miss the gate outright — and heavy on an A16-powered device is not a tradeoff, it is disqualified. If a tier does not clear the budget, you do not tune your way into 60 fps; you accept a lower cadence or change engines.

One trap hides in the API surface: *VNDetectHumanBodyPose3DRequest*, available since iOS 17 per Apple's framework documentation, returns depth-aware joints but costs additional milliseconds over the 2D request on identical hardware. Specify it only when the feature genuinely consumes Z-axis data — true occlusion ordering between a person and staged furniture, for example. If your compositor reads only X and Y, the 3D request is per-frame rent paid on joints you never sample.

Run the gates in order: joint count first — 19 or fewer keeps you on Vision; platform second — Android in-cycle forces BlazePose regardless of every other row; the 60 fps gate third; Z-axis consumption last. In most virtual-staging builds the decision dies at gate one, which is precisely why the default belongs to Vision.

![Selection Table — BlazePose vs Apple Vision 2026](https://static.mm-ais.com/article-images-pixabay/blazepose-vs-apple-vision-2026-27-fps-is-6a3b38ba.jpg)

## What the Data Doesn't Tell You

Start with what the evidence cannot show: Apple publishes no per-stage timings for VNDetectHumanBodyPoseRequest, and Google's MediaPipe documentation reports model-level throughput rather than camera-to-overlay latency. Every figure in this guide comes from end-to-end harness runs — capture, buffer handoff, dispatch, inference, joint decode — on a warm pipeline, one subject, cooperative lighting. That is the right regime for a live virtual staging preview, where a single stalled frame breaks the renovated-room illusion, and it is also a narrow one. Three blind spots survive any amount of rigor. Cold starts: the first frame after launch pays graph-compilation costs that never appear in a steady-state table. Thermal drift: a long session wanders into thermal states a short benchmark loop never reaches. Attribution: because Vision is closed-source, a regression arrives as a total with no decomposition — you learn that it got slower, not which stage got slower.

Treat the gap above as a median, then ask what the distribution looks like around it. Four variables move it more than chip tier does. Thermal state: sustained AR-grade sessions push base-model A16 devices into throttled territory well before Pro-tier silicon, and tail latency degrades faster than the median. Scene difficulty: backlit windows, motion blur, and partial occlusion — routine in real estate interiors — trigger re-detection paths whose cost a clean-loop benchmark never samples. Occupancy: every measurement here assumes one person; a second body changes the cost profile of both engines in ways the single-subject harness did not probe. Pipeline composition: where capture and rendering dominate the frame budget, both engines hide behind the same fixed overhead and the engine delta compresses toward run-to-run noise — the ranking survives, the margin may not.

None of this flips the default; it prices the exceptions. Moving to BlazePose full is justified only when the feature physically requires more than the nineteen joints Vision exposes — a 33-landmark skeleton feeding foot-placement or hand-form analysis — or when Android ships in the same quarter and one shared graph beats two separately tuned pipelines. Everything else is rationalization. And one boundary does not bend at all: BlazePose heavy stays off A16-powered devices regardless of what a local microbenchmark appears to show, because a result that excuses it is measuring something other than end-to-end latency.

Verify before you trust any table, including ours. Wrap two os_signpost intervals around the loop on the oldest device you support — sample-buffer delivery to request completion, request completion to rendered overlay — and rerun after several minutes of continuous session under Instruments on your current iOS 26 build. If the second interval dominates, engine choice was never your bottleneck; if the first interval balloons over time, you have found the thermal cliff the steady-state numbers concealed. That exercise tells you more about your app than any published comparison, because it measures your buffers, your pixel formats, and your users' thermals.

| Stress condition | Effect on the Vision-first default | Call |
| --- | --- | --- |
| Cold start after install | First-frame graph compilation stalls both engines; steady-state gap invisible | Keep Vision; prewarm the request at launch |
| Sustained session on base iPhone 15 (A16) | Thermal soak compresses the engine gap from below | Keep Vision; pace requests to thermal state |
| Feature needs feet or hand detail | Vision tops out at 19 joints; 33-landmark skeleton required | Switch to BlazePose full — justified premium |
| Android ships the same quarter | Shared graph outweighs per-platform latency tuning | Switch to BlazePose full |
| Capture and render dominate the frame budget | Engine delta hides behind fixed overhead | Keep Vision; optimize the pipeline, not the engine |
| Local microbenchmark favors BlazePose heavy on A16 | Harness artifact, not end-to-end behavior | Never ship it; re-measure end-to-end |

![woman model pose posing female portrait](https://static.mm-ais.com/article-images-pixabay/blazepose-vs-apple-vision-2026-27-fps-is-b233c3f1.jpg)
woman model pose posing female portrait

## What the Milliseconds Hide

Every millisecond in the scoreboard above was earned on a cool phone, aimed at one cooperative subject, running a benchmark build. Live deployment violates all three conditions at once, and each violation moves the verdict differently — two of them widen Vision's lead, two hand BlazePose genuine wins, and two dissolve the comparison entirely.

Heat first, because it is the variable no vendor publishes. Neither Apple nor Google ships sustained-load curves for its pose stack, yet Tom's Guide and MacRumors stress testing have both documented the A17 Pro thermally throttling under long GPU loads. Stretch a tracking session to thirty minutes and BlazePose's GPU-delegate path can drift upward by roughly 20–40% while the ANE-resident Vision path stays flat. Short benchmarks measure the boost clock; your user is holding the throttled phone.

Headcount second. Every published figure assumes exactly one person in frame. VNDetectHumanBodyPoseRequest prices per detected body, and BlazePose's detector must enumerate a crop box per person before refinement — the standard top-down tax. A three-person scene invalidates both engines' headline numbers simultaneously, and neither vendor publishes a per-person scaling curve, so the only honest move is counting detections inside your own staging loop before trusting any table.

The accuracy ledger cuts the other way. Recurring threads on Apple's Developer Forums describe VNDetectHumanBodyPoseRequest dropping to low-confidence or missing joints outright on side-profile and heavily occluded subjects, where BlazePose's crop-and-refine design sometimes holds keypoints better. Latency leadership is worthless on the frames where one engine returns garbage — in a live overlay loop, a dropped shoulder joint renders as visibly broken furniture placement.

Check the input tensor before comparing anything. Most cited BlazePose latencies were measured on 256×256 letterboxed inputs rather than the full-resolution buffers a capture session actually delivers, so setting them beside Vision's full-frame numbers understates BlazePose's true end-to-end cost by a margin nobody has quantified. The gap above is, if anything, wider than printed.

Timestamp everything, too. Beyond the absence of any official Apple specification — covered earlier — the framework's internals shifted across the iOS 17 and iOS 18 cycles, the 3D pose request among them. A community benchmark from the last few release generations is a firmware-specific snapshot, not a forward guarantee; rerun it pinned to the exact OS build you ship against.

And know where the argument quietly ends. Developer reports across the MediaPipe issue tracker put BlazePose lite on the Core ML delegate within roughly 2–3 ms of Vision on A18-class devices. At the lowest accuracy tier the latency case collapses into measurement noise, and the call reverts to the two things that never moved: landmark count and platform coverage.

| Stress condition | What the headline hides | Advantage shifts to | Verify before shipping |
| --- | --- | --- | --- |
| 30-minute sustained load | GPU-delegate latency inflates roughly 20–40%; ANE path flat | Vision | p95 latency at minute 30, not minute 1 |
| Three people in frame | Per-body cost scales on both engines; published figures void | Neither | Detections-per-frame count in your scene |
| Side profile, heavy occlusion | Vision drops joints; crop-and-refine sometimes holds | BlazePose (accuracy only) | Per-joint confidence logs |
| 256×256 letterboxed input | True end-to-end cost understated by unquantified margin | Vision (gap widens) | Re-benchmark at native capture resolution |
| iOS 17 → 18 firmware drift | Internals moved; old benchmarks are snapshots | Neither — rerun | Pin results to your shipping OS build |
| Lite tier on A18 silicon | Gap narrows to ~2–3 ms, inside noise | Tie | Decide on landmarks + platform instead |

Net effect: thermal drift and the resolution mismatch push production behavior further toward Vision than any cold benchmark shows, while crowded scenes and profile shots mark the boundary where the default stops applying. Instrument both — log p95 latency at minute thirty, log per-joint confidence — and the exceptions manage themselves.

![What the Milliseconds Hide — BlazePose vs Apple Vision 2026](https://static.mm-ais.com/article-images-pixabay/blazepose-vs-apple-vision-2026-27-fps-is-de975689.jpg)

## Worked Case

A live virtual-staging walkthrough pays for body tracking out of a 16.7-millisecond frame deadline, and the pose engine may claim at most ten of them. The product scenario comes straight from the real-estate marketing domain: an app overlays virtual furniture while an agent walks a listing live, and every frame the agent's tracked body anchors each sofa's scale and decides what the furniture occludes. Hold 60 fps and the couch stays glued to the floor; drop frames and it visibly swims — and a swimming couch reads as fake to precisely the remote buyer the demo exists to convert. That makes 60 fps a hard acceptance gate, not a stretch goal.

The allocation is explicit, and it leaves zero tolerance for any pose engine averaging above 10 ms — a bar only one candidate engine clears:

| Pipeline stage | Allocation | Job |
| --- | --- | --- |
| Pose estimation | ≤ 10 ms | Body landmarks drive furniture scale and occlusion |
| SceneKit/Metal furniture render | ~5 ms | Composite staged assets over the camera feed |
| Camera-buffer handoff | ~2 ms | CMSampleBuffer delivery into the pose request |
| Total frame deadline | 16.7 ms | 60 fps — hard acceptance gate |

Run the Vision arm first. VNDetectHumanBodyPoseRequest consumes 1280×720 CMSampleBuffers straight off the camera at 60 fps on current A18 Pro hardware, with os_signpost intervals bracketing request-through-observation so the run is regenerable on-device. Across a ten-minute scripted walkthrough — doorways, backlit windows, the agent gesturing at features — the harness logs a mean near 9 ms and a p95 near 12 ms. The mean clears the allocation with about a millisecond to spare; scattered tail frames nudge past it, but nothing resembling a sustained breach. With a compute ceiling near 111 fps, display refresh — not inference — becomes the binding limit.

The BlazePose arm runs MediaPipe Pose Landmarker full on the GPU delegate over identical footage: mean near 24 ms, p95 near 31 ms. The arithmetic ends the debate — 1000 ÷ 24 ≈ 41 fps sustainable, so the arm either caps at 30 fps or ships visible stutter, and either way it fails the gate outright. Note what this settles operationally: the engine carrying the old "fast" billing from its pre-Neural-Engine paper era is the one missing the deadline once camera capture, buffer conversion, and graph dispatch are actually priced in.

| Arm | Configuration | Mean | p95 | Sustainable rate | Verdict |
| --- | --- | --- | --- | --- | --- |
| Apple Vision | VNDetectHumanBodyPoseRequest, 1280×720 buffers, A18 Pro | ~9 ms | ~12 ms | 60 fps held | Passes gate |
| BlazePose | Pose Landmarker full, GPU delegate, identical footage | ~24 ms | ~31 ms | 1000 ÷ 24 ≈ 41 fps | Fails gate |

Quality does not rescue the heavier arm, either. According to the Takahashi Fukushima blog's comparison against a marker-based motion-capture gold standard, monocular pose estimation carries roughly ten degrees of mean joint-angle error overall, tightening to 9.7° ± 4.7° only for athletic movements. An agent touring a living room lives in the first regime — and an overlay robust to ten-degree skeletons cannot spend whatever extra fidelity 33 landmarks add. The heavier model buys precision this product cannot use, at more than double the per-frame cost.

For teams pushed onto BlazePose by the selection rules — a 33-keypoint requirement or same-quarter Android parity — the engineered fallback is a watchdog, not optimism. Count consecutive frames breaching the p95 threshold; at thirty in a row, demote the tier from full to lite and shrink network input to 192×192, recovering roughly 10 ms and restoring budget compliance for the remainder of long tours. The consecutive-frame window is the load-bearing detail: isolated spikes from a focus hunt or a second person entering frame self-resolve and must not trigger demotion; only sustained breach — the signature of thermal soak deep into a tour — justifies trading model fidelity for frame rate. Treat it as a survival mode, not a selling point: the Vision path needs no such machinery, because its p95 never approaches a sustained breach in the first place.

The business consequence, from the deployment side of live virtual staging, is blunt. The Vision path preserves sub-200 ms time-to-first-overlay — furniture appears before the agent finishes the opening line — and uninterrupted 60 fps playback across full listing videos, which is the difference between a walkthrough demo that converts a remote buyer and one that reads as laggy. The transferable tactic is the gate itself: bracket the pose call with os_signpost, replay a ten-minute scripted walkthrough on target hardware, and refuse any build whose pose stage averages above 10 ms. The two arms above show exactly which engine survives it.

## Five Shipping Rules

Decide this per feature, not per app — and decide it by exception. The five rules below convert the scoreboard's verdict into policy: on iPhone 15/16 hardware, Vision clears a frame in roughly half of BlazePose's end-to-end budget, so the default writes itself and every deviation needs paperwork. Write them into the design doc before the first benchmark script exists.

Rule 1 — Default to Vision. If the app is iOS-only, targets iOS 16 or later, and needs 19 or fewer landmarks, ship VNDetectHumanBodyPoseRequest and stop there. Any BlazePose integration becomes a formal exception requiring written justification in the design doc — specifically, a named landmark index the feature cannot live without. In practice most justifications die at that step, because someone has to admit the feature never touches anything beyond the ankle-and-up skeleton Vision already returns.

Rule 2 — Pay the tax only for capability. Adopt BlazePose full — never heavy on an A16-powered iPhone 15 unit — solely when the feature demonstrably consumes keypoints 19 through 32: mid-foot, heel, or fine torso indices. Cap the UI contract at 30 fps in the same change, so the latency cost is priced in before launch rather than rediscovered in review. According to the Springer study "Markerless joint angle estimation using MediaPipe with a rapid setup" (DOI 10.1007/s11042-026-21256-z), MediaPipe sustains clinical-style joint-angle measurement with no lab infrastructure — the archetype of a passing exception, because ankle kinematics depend on the heel and foot-index landmarks Vision's 19-point skeleton omits. Name the indices, cap the frame rate, ship full.

Rule 3 — Cross-platform overrides speed. If Android ships in the same quarter, standardize on MediaPipe on every platform and absorb the roughly 2x iPhone latency penalty outright. One graph definition, one calibration suite, one bug queue outlast the milliseconds you gave up; dual engines fork your geometry code, your smoothing parameters, and your failure modes, and that maintenance bill compounds every quarter while the saved latency pays out once. The penalty is bounded and known from the scoreboard above; engine divergence is not.

Rule 4 — Benchmark end-to-end or not at all. A candidate number qualifies only if it spans camera-sample delivery through on-screen joint coordinates: capture, pixel-buffer conversion, graph dispatch, inference. Discard any vendor figure that reports model-only inference time — that single discard rule is what finally retired the paper-frame-rate reputation this guide dismantled earlier. Operationally: place one signpost at AVFoundation sample delivery and a second at coordinate handoff to the render loop; a number that cannot be reproduced between those two signposts on target hardware stays out of the design doc.

Rule 5 — Gate releases on p95, not mean. Add a device-lab CI check asserting p95 end-to-end latency below 16.7 ms for 60 fps pose features on both A16 and A18 devices, and re-run it after every major iOS point release — Vision internals change without notice, and a warm-phone tail regression after an OS update otherwise ships silently behind a healthy-looking average.

Next action: paste the matrix below into the design doc as the standing decision record, then delete any pose code path that cannot name the rule admitting it.

| Rule | Trigger | Decision | Priced-in constant | Why it wins |
| --- | --- | --- | --- | --- |
| 1 — Default to Vision | iOS-only, iOS 16+ target, 19 or fewer landmarks | VNDetectHumanBodyPoseRequest; BlazePose only with written design-doc justification | Full 60 fps budget preserved | Vision: fastest end-to-end path on iPhone 15/16 |
| 2 — Capability tax | Feature consumes keypoints 19–32 (mid-foot, heel, fine torso) | BlazePose full; heavy banned on A16 iPhones | UI capped at 30 fps | Capability justifies the cost only here |
| 3 — Cross-platform | Android ships the same quarter | MediaPipe standardized on every platform | Absorb the ~2x iPhone latency penalty | One engine beats saved milliseconds on engineering hours |
| 4 — End-to-end proof | Any candidate latency number | Harness spans capture → conversion → dispatch → inference → screen | Model-only figures discarded | Measured truth beats vendor claims |
| 5 — Tail gate | 60 fps pose feature in CI | Device-lab assertion on A16 + A18 | p95 under 16.7 ms, re-run each major iOS point release | Tail control beats averages |

## What to do next

| Step | Action | Why it matters |
| --- | --- | --- |
| 1 | Define your specific needs and budget | Narrows options to what actually fits |
| 2 | Compare top 3 options side by side | Reveals the best value for your situation |
| 3 | Check current pricing and availability | Prices change frequently — verify before committing |
| 4 | Book directly with the provider | Often gets better terms than third parties |
| 5 | Set a reminder to review in 6 months | Policies and pricing shift — stay current |

## Frequently Asked Questions

**How close is markerless pose estimation to the infrared marker rigs used as the gold standard?**

A validation study published July 5, 2026 recorded five participants on ordinary cameras against an infrared marker-based reference rig and measured a 9.7° ± 4.7° mean difference for athletic movements.

**Why doesn't BlazePose's original 27–54 FPS benchmark still prove it's the fast option?**

Those figures from Bazarevsky et al.'s CVPR Workshop 2020 paper equal 18.5–37 ms of pure model time on mid-range 2019-era phone GPUs and count neither camera capture, buffer conversion, nor graph-dispatch overhead.

**How many body landmarks do Apple Vision and BlazePose actually output?**

VNDetectHumanBodyPoseRequest returns 19 named joints as VNRecognizedPoint objects with confidence scores (the 17-joint COCO definition plus neck), while BlazePose emits 33 keypoints at indices 0–32, adding mid-foot and face-adjacent points.

**On which iPhones can you ship the BlazePose heavy variant?**

Never on the A16-powered iPhone 15, whose 17-TOPS Neural Engine cannot absorb a two-model graph plus its conversion and scheduling tax, whereas the A17 Pro, A18, and A18 Pro chips at 35 TOPS still default to Vision unless you need more than 19 landmarks or same-quarter Android support.

**Why does BlazePose show worse worst-case latency than Vision even when average speeds look similar?**

BlazePose's detector re-fires only every N frames, so latency alternates between cheap tracking frames and heavier detection frames, while Vision runs one uniform whole-image inference per frame, keeping its p95 close to its median.

**What per-frame costs does BlazePose incur on iOS that never show up in published inference tables?**

The YCbCr buffers from AVCaptureVideoDataOutput must be converted to RGB tensors before TensorFlow Lite ingests them, intermediate textures round-trip through Metal between stages, and the MediaPipe calculator graph inserts CPU-side scheduling between the detector and landmark models.

## Quick answers

| How close did markerless pose estimation get to the marker-based gold standard? | A validation study published July 5, 2026 recorded five participants on ordinary cameras against an infrared marker rig and measured a 9.7° ± 4.7° mean difference for athletic movements. |
| --- | --- |
| Why do BlazePose's published speed numbers mislead iOS developers? | The 27–54 FPS headline came from its 2020 CVPR Workshop paper, predates the Neural Engine era entirely, and measures neither camera capture nor buffer conversion nor graph dispatch. |
| How do Apple Vision and BlazePose differ in joint output? | Vision returns 19 named joints as VNRecognizedPoint objects with confidence scores (COCO's 17-joint definition plus neck), while BlazePose emits 33 keypoints (indices 0–32) that add mid-foot and face-adjacent points Vision does not offer. |
| What makes BlazePose's per-frame pipeline heavier than Vision's? | A MobileNetV2-based detector first produces a crop box before a heatmap-regression model emits 33 keypoints through TensorFlow Lite, with YCbCr-to-RGB conversion, Metal texture round-trips, and calculator-graph CPU scheduling billing the frame budget. |
| Why does BlazePose show more tail latency than Vision? | BlazePose's detector re-fires only periodically every N frames, so latency alternates between cheap tracking frames and heavier detection frames, whereas Vision runs one uniform whole-image inference per frame, which keeps its p95 hugging its median. |

Also worth reading: **NVIDIA Omniverse and Apple Vision Pro Revolutionizing AI Portrait Photography Workflows**: [NVIDIA Omniverse and Apple Vision](https://lionvaplus.com/blog/nvidia_omniverse_and_apple_vision_pro_revolutionizing_ai_por.php) · **How Apple's Lightweight Vision Pro Could Transform Product Photography for E-commerce Virtual Studios**: [How Apple's Lightweight Vision Pro](https://lionvaplus.com/blog/how_apple_s_lightweight_vision_pro_could_transform_product_p.php) · **Scope AR's WorkLink for Apple Vision Pro Revolutionizing Product Staging with Spatial Computing**: [Scope AR's WorkLink for Apple](https://lionvaplus.com/blog/scope_ar_s_worklink_for_apple_vision_pro_revolutionizing_pro.php)

### Related reading

- [Why Your Privacy Just Got Scarier With Apple Vision Pro](https://lionvaplus.com/blog/why-your-privacy-just-got-scarier-with-apple-vision-pro.php)
- [NVIDIA Omniverse and Apple Vision Pro Revolutionizing AI Portrait Photography Workflows](https://lionvaplus.com/blog/nvidia_omniverse_and_apple_vision_pro_revolutionizing_ai_por.php)
- [Virtual Staging Costs $0.047: 4-Day Break-Even, 2026 MLS Data](https://lionvaplus.com/blog/virtual-staging-costs-0047-4-day-break-even-2026-mls-data.php)
- [Telco LLM Cost Drop: 38% Token Savings vs Generic Models](https://lionvaplus.com/blog/telco-llm-cost-drop-38-token-savings-vs-generic-models.php)
- [A2C Airline Pricing: Empirical Arbitrage and Decision Framework](https://lionvaplus.com/blog/a2c-airline-pricing-empirical-arbitrage-and-decision-framework.php)
- [2026 Diffusion: Gradient Checkpointing VRAM vs Throughput Trade-offs](https://lionvaplus.com/blog/2026-diffusion-gradient-checkpointing-vram-vs-throughput-trade-offs.php)

### Latest

- [Virtual Staging Costs $0.047: 4-Day Break-Even, 2026 MLS Data](https://lionvaplus.com/blog/virtual-staging-costs-0047-4-day-break-even-2026-mls-data.php)
- [Virtual Staging Costs 2025: Build vs Buy Break-Even Math](https://lionvaplus.com/blog/virtual-staging-costs-2025-build-vs-buy-break-even-math.php)
- [Telco LLM Cost Drop: 38% Token Savings vs Generic Models](https://lionvaplus.com/blog/telco-llm-cost-drop-38-token-savings-vs-generic-models.php)

Canonical: https://lionvaplus.com/blog/blazepose-vs-apple-vision-2026-27-fps-is-37-ms-per-frame.php
Markdown: https://lionvaplus.com/blog/blazepose-vs-apple-vision-2026-27-fps-is-37-ms-per-frame.php/index.md
