fix(viz): no body mesh when arkit is the source
CI build oscope-of / build-check (push) Has been cancelled

The body-mesh triangles (solid cyan blob reported live) were the one
surface no filter covered: under iphone-usb persons_body is the ARKit
conversion with c=1.0, so garbage/stale joints painted full triangles.
Skip BODY_TRIANGLES whenever the ARKit topology is present (webcam
MediaPipe path unchanged); the body stays the freshness-gated ARKit
wireframe.
This commit is contained in:
L'électron rare
2026-07-02 14:26:03 +02:00
parent 651fd86d37
commit b85a9c93a9
+8 -2
View File
@@ -589,8 +589,14 @@ class MetalRenderer(NSObject):
ids_b = s.persons_body_ids or list(range(len(s.persons_body)))
ids_f = s.persons_face_ids or list(range(len(s.persons_face)))
# Body
for i, body_kp in enumerate(s.persons_body):
# Body — SKIPPED whenever ARKit is the body source (iphone-usb: the
# ARKit topology arrived). persons_body is then the ARKit->MP33
# conversion with c forced to 1.0, so garbage/stale joints would pass
# the confidence filter and paint solid triangles anywhere on screen
# (the "blue blob"). The body is the gated ARKit wireframe instead.
arkit_body = (getattr(self, "_arkit_full", ARKIT_FULL)
and bool(s.arkit_parents))
for i, body_kp in enumerate([] if arkit_body else s.persons_body):
pid = ids_b[i] if i < len(ids_b) else i
for a, b, c in BODY_TRIANGLES:
if not push_tri(body_kp, a, b, c, pid):