diff --git a/data_only_viz/pose_bridge.py b/data_only_viz/pose_bridge.py index b347714..5691247 100644 --- a/data_only_viz/pose_bridge.py +++ b/data_only_viz/pose_bridge.py @@ -194,6 +194,17 @@ class PoseSoundBridge: try: self._avbody.send_message("/pose/limb_span", [pid, float(span)]) except OSError: pass + if len(body) >= 29: + def _xy(i): + kp = body[i] + return [float(getattr(kp, "x", 0.0)), float(getattr(kp, "y", 0.0))] + skel = [pid] + for idx in (0, 11, 12, 23, 24, 25, 26, 27, 28): # nose, sh L/R, hip L/R, knee L/R, ank L/R + skel += _xy(idx) + cli.send_message("/pose/skel", skel) + try: self._avbody.send_message("/pose/skel", skel) + except OSError: pass + # ------------------------------------------------------------------ def send_face(self, persons_face: Sequence[Sequence[Any]], persons_face_ids: Sequence[int], t_now: float, diff --git a/sound_algo/control/data_feeds.scd b/sound_algo/control/data_feeds.scd index ec4d63f..84a69fe 100644 --- a/sound_algo/control/data_feeds.scd +++ b/sound_algo/control/data_feeds.scd @@ -496,6 +496,7 @@ OSCdef(\poseLeave, { |msg| ~poseKin.removeAt(pid); ~poseCenter.removeAt(pid); ~poseWrist !? { ~poseWrist.removeAt(pid) }; + ~poseSkel !? { ~poseSkel.removeAt(pid) }; }, '/pose/leave'); OSCdef(\poseHands, { |msg| @@ -521,6 +522,15 @@ OSCdef(\poseWrist, { |msg| ~poseWrist[pid] = e; }, '/pose/wrist'); +~poseSkel = ~poseSkel ? Dictionary.new; +OSCdef(\poseSkel, { |msg| + var pid = msg[1].asInteger; + var p = { |i| (x: msg[2 + (i*2)], y: msg[3 + (i*2)]) }; + ~poseSkel[pid] = ( + nose: p.(0), shL: p.(1), shR: p.(2), hipL: p.(3), hipR: p.(4), + kneeL: p.(5), kneeR: p.(6), ankL: p.(7), ankR: p.(8)); +}, '/pose/skel'); + ~poseCenter = ~poseCenter ? Dictionary.new; OSCdef(\poseCenter, { |msg| var pid = msg[1].asInteger;