Skip to content

fix(pose): Live-Demo black canvas + ghost skeletons (split from #1381, no depth bundle)#1428

Open
PrinceAudre wants to merge 1 commit into
ruvnet:mainfrom
PrinceAudre:fix/pose-live-demo-render-split
Open

fix(pose): Live-Demo black canvas + ghost skeletons (split from #1381, no depth bundle)#1428
PrinceAudre wants to merge 1 commit into
ruvnet:mainfrom
PrinceAudre:fix/pose-live-demo-render-split

Conversation

@PrinceAudre

Copy link
Copy Markdown

Summary

This lands only the pose-tracking fix from #1381, split out from the rest of that PR.

#1381's pose fix is correct and well-tested, but it also bundles the entire ADR-271 depth-anything backend (identical to #1375) and an unrelated vendor/ruvector submodule bump — so it conflicts with #1375 and mixes an opaque submodule change into a bugfix. This PR carries just the three pose files, none of which are touched by #1375:

  • ui/utils/pose-renderer.js
  • v2/crates/wifi-densepose-sensing-server/src/tracker_bridge.rs
  • v2/crates/wifi-densepose-signal/src/ruvsense/pose_tracker.rs

The fix (as diagnosed in #1381)

  • Black canvas / skipped joints: per-keypoint confidence was never set on KeypointState, so the tracker's bbox fit — which keeps only confidence > 0.0 keypoints — collapsed to a degenerate fallback and the renderer skipped every joint. Confidence is now threaded through PoseTrack create/update; centroid-filled slots stay 0.0.
  • Stacked "ghost" skeletons: tracker input was compared in pixel units against metre-scaled gates; the tracker boundary now converts px↔m.
  • Renderer: threshold comparisons go from strict (> / <=) to inclusive (>= / <) so observed joints at the 0.1 floor render while unobserved 0.0 joints stay hidden.

The confidence-roundtrip / multi-person-separation / single-person-no-churn regression tests #1381 added to these files are included.

Note

The code and diagnosis are from #1381 — this only isolates them so the pose fix can land independently of the depth backend (#1375) and the submodule bump. Verified the three files carry no coupling to the depth-anything backend or the ruvector bump; CI will confirm the build.

🤖 Generated with Claude Code

Isolates the pose-tracking fix from ruvnet#1381, which also bundled the ADR-271
depth-anything backend (identical to ruvnet#1375) and an unrelated vendor/ruvector
submodule bump. This carries only the three pose files so the fix can land
independently.

Root causes (as diagnosed in ruvnet#1381):
- Per-keypoint confidence was never set on KeypointState, so the tracker's
  bbox fit (which keeps only confidence > 0.0 keypoints) collapsed to a
  degenerate fallback and the renderer skipped every joint. Confidence is now
  threaded through PoseTrack create/update; centroid-filled slots stay 0.0.
- Tracker input was compared in pixel units against metre-scaled gates; the
  tracker boundary now converts px<->m.
- Renderer threshold comparisons changed from strict to inclusive so observed
  joints at the 0.1 floor render while unobserved 0.0 joints stay hidden.

Files: ui/utils/pose-renderer.js, sensing-server/tracker_bridge.rs,
signal/ruvsense/pose_tracker.rs (with ruvnet#1381's inline regression tests). The
depth-anything backend (ruvnet#1375) and the submodule bump are excluded.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant