"""Tier 1 — 合成真值,精确验证测量数学(误差仅来自浮点,< 1e-6)。""" from conftest import build_synthetic_landmarks from face_analysis.calibration import estimate_scale_factor from face_analysis.measure import measure_seven_eyes, estimate_vertical_landmarks def test_scale_factor_exact(): lm, gt = build_synthetic_landmarks(px_per_cm=50.0) assert abs(estimate_scale_factor(lm, 1000, 1000) - gt["px_per_cm"]) < 1e-6 def test_scale_factor_exact_other_scale(): lm, gt = build_synthetic_landmarks(px_per_cm=73.0) assert abs(estimate_scale_factor(lm, 1000, 1000) - gt["px_per_cm"]) < 1e-6 def test_seven_eyes_exact(): lm, gt = build_synthetic_landmarks() r = measure_seven_eyes(lm, 1000, 1000) pc = gt["px_per_cm"] assert abs(r["eye_width_px"] / pc - gt["eye_width_cm"]) < 1e-6 assert abs(r["face_width_px"] / pc - gt["face_width_cm"]) < 1e-6 assert abs(r["inter_eye_distance_px"] / pc - gt["inter_eye_cm"]) < 1e-6 def test_measured_courts_exact(): """中庭、下庭为实测,应与真值分毫不差。""" lm, gt = build_synthetic_landmarks() v = estimate_vertical_landmarks(lm, 1000, 1000) pc = gt["px_per_cm"] assert abs(v["middle_court_px"] / pc - gt["middle_court_cm"]) < 1e-6 assert abs(v["lower_court_px"] / pc - gt["lower_court_cm"]) < 1e-6 def test_method_a_ratio_formula(): """方案 A 推算:上/顶庭应严格按既定比例(相对中下庭均值)执行。 注意这只验证「公式按比例正确执行」,不验证贴近真实脸(方案 A 固有局限)。 """ lm, _ = build_synthetic_landmarks() v = estimate_vertical_landmarks(lm, 1000, 1000) one_unit = (v["middle_court_px"] + v["lower_court_px"]) / 2 assert abs(v["upper_court_px"] - one_unit * (0.25 / 0.265)) < 1e-6 assert abs(v["top_court_px"] - one_unit * (0.22 / 0.28)) < 1e-6