feat(deck-pose): markerless pose-input daemon (phase 1 spike) #906
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "deck-pose"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Phase 1 of a markerless full-body pose-input system for the
steamdeckhost — camera-only body tracking as a game input platform, modelled on the Nex Playground.This is the latency spike only. No gesture layer, no socket API, no games; those are phase 2 and are only worth building if these numbers hold. Full plan and open questions:
issues/open/deck-pose.md. Runbook, budget and rationale:lib/doc/deck-pose.md.Nothing is deployed and nothing is enabled. The steamdeck host sets
lyte.deck-pose.enable = false.What is here
v4l2 capture → MJPEG/YUYV/GREY decode → MoveNet MultiPose Lightning → IoU tracking → One Euro smoothing → debug overlay with a live per-stage latency readout. Crane-built, packaged, NixOS module, docs, issue.
Two findings that contradicted the plan
TFLite is unreachable from this repo.
nixpkgs.tensorflow-liteis marked broken, and every Rust TFLite binding either builds TensorFlow with bazel or downloads a prebuilt runtime from a build script — neither survives the nix sandbox. Took the documented fallback: ONNX Runtime viaort(load-dynamic, dlopening nixpkgsonnxruntime1.26.0), with the same Apache-2.0 MoveNet weights as an ONNX re-export pinned by commit and hash.int8 is ~12x SLOWER than float32, measured, not assumed:
ORT's CPU kernels leave the dynamic-quantised QDQ nodes unfused and fall back to slow integer convolutions. Default is float32; int8 stays packaged so the comparison can be repeated on the Deck.
Measured
On dragon (not the target), OBSBOT Meet 2 at 1280x720 MJPEG 60fps, 256x256 model input, headless:
That figure is dequeue→present-returned. It excludes sensor exposure before dequeue and present→photons, both real and both invisible from inside the process — the doc says so explicitly rather than letting it read as glass-to-glass.
Model output layout ((y, x, score) x17 then the bbox) was validated empirically against a real person image, not taken on faith.
Design points worth reviewing
DROPPEDcount is the mechanism working.Checks
nix build .#deck-pose— builds; wrapped binary runs against a real camera with the model and ORT baked incargo clippy --all-targetsclean,cargo fmtandnix fmtcleannixosConfigurations.steamdeckevaluates both with the module off (as committed) and forced onNeeds Daniel
Superseded by #915, which consolidates the whole markerless-pose-input program into a single WIP branch against
main. Every commit from this PR is preserved there — nothing was squashed, so the root-cause writeups in the commit messages are intact. Closing here; review happens on #915.Pull request closed