fix(viz): wire arkit-full + osc port via config

renderer.py: read ARKIT_FULL_SKELETON via VizConfig at
initWithState_ instead of module-level os.environ; store as
self._arkit_full, use getattr fallback for __new__ test bypass.

main.py: pass cfg.iphone_osc_port to IphoneOSCListener
instead of hardcoded 57128; log actual port.

hand_slots.py: import _finite/_coord/_clamp from hand_features
at module level (acyclic: hand_features imports hand_slots only
lazily inside step()); delete the duplicate copies.
This commit is contained in:
L'électron rare
2026-07-02 14:23:47 +02:00
parent 4ea0bb2c2a
commit 0126fc97a8
3 changed files with 7 additions and 21 deletions
+3 -18
View File
@@ -20,24 +20,9 @@ from __future__ import annotations
import math import math
# ---- micro-helpers imported from hand_features (acyclic: hand_features only
# ---- micro-helpers (duplicated from hand_features to avoid circular import) --- # imports hand_slots lazily inside step(), so a top-level import here is safe) ---
from .hand_features import _finite, _coord, _clamp
def _finite(v: float, fallback: float) -> float:
return v if isinstance(v, float) and math.isfinite(v) else fallback
def _coord(p, attr: str, idx: int, fallback: float = 0.5) -> float:
if hasattr(p, attr):
return float(getattr(p, attr))
try:
return float(p[idx])
except (TypeError, IndexError):
return fallback
def _clamp(v: float, lo: float, hi: float) -> float:
return lo if v < lo else hi if v > hi else v
def _hand_size(hand) -> float: def _hand_size(hand) -> float:
+2 -2
View File
@@ -281,9 +281,9 @@ class AppDelegate(NSObject):
# stage no-ops. Activated via POSE_FILTER=...+arkit_fuse. # stage no-ops. Activated via POSE_FILTER=...+arkit_fuse.
try: try:
from .iphone_osc_listener import IphoneOSCListener from .iphone_osc_listener import IphoneOSCListener
self._iphone_osc = IphoneOSCListener(self._state) self._iphone_osc = IphoneOSCListener(self._state, port=_cfg.iphone_osc_port)
self._iphone_osc.start() self._iphone_osc.start()
LOG.info("worker: + iPhone OSC listener :57128") LOG.info("worker: + iPhone OSC listener :%d", _cfg.iphone_osc_port)
except Exception as e: # noqa: BLE001 except Exception as e: # noqa: BLE001
LOG.warning("iphone OSC listener start failed (%s)", e) LOG.warning("iphone OSC listener start failed (%s)", e)
# ICP LiDAR fusion (opt-in via ICP_FUSION=1). Parallel to the # ICP LiDAR fusion (opt-in via ICP_FUSION=1). Parallel to the
+2 -1
View File
@@ -169,6 +169,7 @@ class MetalRenderer(NSObject):
# Chirality validated correct live 2026-07-02; keep False unless a # Chirality validated correct live 2026-07-02; keep False unless a
# future iPhone app build flips it. # future iPhone app build flips it.
self._hand_swap_lr = _cfg.hand_swap_lr self._hand_swap_lr = _cfg.hand_swap_lr
self._arkit_full = _cfg.arkit_full_skeleton
self._init_skel_cpu_buffer() self._init_skel_cpu_buffer()
self._init_mesh_cpu_buffer() self._init_mesh_cpu_buffer()
self._build_pipelines() self._build_pipelines()
@@ -339,7 +340,7 @@ class MetalRenderer(NSObject):
Priorise MediaPipe (body 33 + face 478 + 2 mains 21) si disponible Priorise MediaPipe (body 33 + face 478 + 2 mains 21) si disponible
et present ; sinon fallback COCO 17 keypoints YOLO.""" et present ; sinon fallback COCO 17 keypoints YOLO."""
_arkit_now = time.perf_counter() _arkit_now = time.perf_counter()
use_arkit = (ARKIT_FULL and bool(s.arkit_parents) use_arkit = (getattr(self, '_arkit_full', ARKIT_FULL) and bool(s.arkit_parents)
and arkit_2d_fresh(s.persons_arkit_2d_t, _arkit_now)) and arkit_2d_fresh(s.persons_arkit_2d_t, _arkit_now))
if not use_arkit and not s.pose_alive(): if not use_arkit and not s.pose_alive():
return 0 return 0