mirror of
https://github.com/spyjacob/steam-frame-hand-tracking.git
synced 2026-10-17 13:01:30 +02:00
Cuts the fast tracker's CPU time with two hands by ~45% (x86 replay of a synthetic two-hand sequence: 8.6 -> 4.6 ms/frame; one hand 3.8 -> 3.1 ms). Not yet run on the headset. - all hands seen by a camera are tracked in one forward + one backward calcOpticalFlowPyrLK call instead of one pair per hand: nearly all of a call's cost is rebuilding both images' pyramids, whatever the number of points - texture points for a new seed are searched on the hand's bounding box instead of the whole 640x640 image (goodFeaturesToTrack cost ~3 ms per seed, ~26 seeds/s with two hands) - both give bit-identical results to the previous code: old vs new FastTracker compared frame by frame (outputs and all internal state) on 16 synthetic two-hand sequences with seeds, recoveries, losses, flow-v2 and flow-agree on/off; tools/test_fasttrack.py checks both shortcuts on any OpenCV build (run it on the headset) - fix: a seed made on a frame skipped for heat (>= 90 C) was carried to the skipped frame while the tracker continued from the frame before it; seeds now land on the frame the tracker last processed (no change on normal frames) - fix: MediaPipe runs/s and hands/run in the log were only counted with telemetry on - prebuilt pyramids cannot be passed to calcOpticalFlowPyrLK from Python (OpenCV 5.0 rejects them); sharing them across calls still needs a C++ tracker Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QF7BH2bLYErqzDokq2fvj3