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