You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Make calibration robust to MediaPipe's yaw sign convention
Calibration was rejecting valid captures with "head moved the wrong
way for at least one dot" even when the user followed the prompts.
Two contributing bugs:
1. The spline assumed positive yaw == looking right. MediaPipe's
facialTransformationMatrix output sign depends on driver and
mirroring conditions, and on at least some setups it's inverted
relative to that assumption. The spline then sorted samples by
yaw and checked that screenX was strictly INCREASING along that
order — which fails the moment the convention is flipped, because
sorted yaw walks screenX from +1 down to -1.
Fix: infer the sign from the first/last screenX pair and apply it
transparently in both fit and evaluate. The fitter only needs the
yaws to be monotonic; either direction works.
2. The calibration listener was being fed the *raw* per-frame yaw, not
the One-Euro-filtered yaw. A single noisy frame at the moment of
Space press could push one capture far enough off-axis to flip an
adjacent pair. Now the listener receives both filtered and raw,
and calibration captures the filtered value (the filter is already
running every frame regardless).
Error messages on the remaining genuine failure modes are sharper:
duplicate yaws now say "turn your head more deliberately between
dots", non-monotonic says "redo with slower, more deliberate head
turns".