fix(viz): no body mesh when arkit is the source
CI build oscope-of / build-check (push) Has been cancelled
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:
@@ -589,8 +589,14 @@ class MetalRenderer(NSObject):
|
|||||||
ids_b = s.persons_body_ids or list(range(len(s.persons_body)))
|
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)))
|
ids_f = s.persons_face_ids or list(range(len(s.persons_face)))
|
||||||
|
|
||||||
# Body
|
# Body — SKIPPED whenever ARKit is the body source (iphone-usb: the
|
||||||
for i, body_kp in enumerate(s.persons_body):
|
# 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
|
pid = ids_b[i] if i < len(ids_b) else i
|
||||||
for a, b, c in BODY_TRIANGLES:
|
for a, b, c in BODY_TRIANGLES:
|
||||||
if not push_tri(body_kp, a, b, c, pid):
|
if not push_tri(body_kp, a, b, c, pid):
|
||||||
|
|||||||
Reference in New Issue
Block a user