test_mapping_model.py 1.1 KB

123456789101112131415161718192021222324252627282930313233
  1. import numpy as np
  2. from mapping_model import MappingModel
  3. def test_mapping_model_fits_linear_pan_tilt():
  4. # 构造 9 个校准点:x_ratio 与 pan 线性递减,y_ratio 与 tilt 线性递减
  5. records = []
  6. for i, pan in enumerate([340, 300, 260, 220, 180]):
  7. for j, tilt in enumerate([45, 5, -35]):
  8. x_ratio = (360 - pan) / 180.0 # 0.111 ~ 1.0
  9. y_ratio = (tilt + 35) / 80.0 # 0.0 ~ 1.0
  10. records.append({
  11. 'pan': float(pan),
  12. 'tilt': float(tilt),
  13. 'x_ratio': x_ratio,
  14. 'y_ratio': y_ratio,
  15. 'confidence': 'high',
  16. })
  17. model = MappingModel()
  18. model.fit(records)
  19. pan, tilt = model.transform(1920, 540) # 中心点
  20. # 根据 x_ratio=(360-pan)/180 的线性关系,中心 x=0.5 对应 pan≈270
  21. assert 250 <= pan <= 290
  22. assert -10 <= tilt <= 15
  23. # 验证保存/加载格式
  24. data = model.to_dict()
  25. assert 'pan_lookup' in data
  26. assert 'tilt_lookup' in data
  27. assert len(data['pan_lookup']) >= 3
  28. assert len(data['tilt_lookup']) >= 3