Selaa lähdekoodia

docs: 更新双摄像头系统校准文档与示例配置

补充了手动校准流程说明,更新了球机默认配置示例,新增了校准配置文件示例
wenhongquan 15 tuntia sitten
vanhempi
commit
96d0bdf7bc

+ 31 - 3
dual_camera_system/README.md

@@ -80,7 +80,7 @@ pip install ultralytics
 编辑 `config/camera.py` 配置摄像头组。系统默认使用示例环境:
 
 - 枪机:Hikvision `192.168.8.2`,RTSP-only(不经过 Dahua SDK 登录)
-- 球机:Dahua `192.168.8.5`,吸顶安装,pan 方向翻转
+- 球机:Dahua `192.168.8.5`,竖装且设备端已做倒影,代码层按 `wall` 处理,`pan` 不翻转
 
 ```python
 CAMERA_GROUPS = [
@@ -105,8 +105,10 @@ CAMERA_GROUPS = [
             'username': 'admin',
             'password': 'Aa1234567',
             'channel': 0,
-            'mount_type': 'ceiling',  # 吸顶安装
-            'pan_flip': True,         # 球机与枪机朝向相反
+            # 竖装+设备端倒影后,代码层按 wall 处理;若球机与枪机朝向相反则 pan_flip=True
+            'mount_type': 'wall',
+            'pan_flip': False,
+            'tilt_flip': False,
             'rtsp_url': 'rtsp://admin:Aa1234567@192.168.8.5:554/cam/realmonitor?channel=1&subtype=1',
         },
     }
@@ -198,6 +200,32 @@ python main.py --force-calibration
 - 预置点设置/调用
 - 平滑移动跟踪
 
+### 独立扫描与手动校准
+当自动特征匹配不可靠时,可使用独立扫描脚本生成可人工复核的图片集,再基于确认的关键点生成校准文件。
+
+```bash
+# 1. 球机水平 360°、步长 20°,每个水平位置由下朝上扫描 tilt
+#    每个位置保存球机图(文件名带 pan/tilt)和全景图
+python scripts/calibration_scanner.py
+
+# 2. 用 ORB 重新匹配已扫描图片,生成 lookup_table_orb.json 与复核 CSV
+python scripts/re_match_orb.py
+```
+
+扫描结果保存在 `calibration_scan/`(可在脚本中修改路径)。人工确认图片后,编辑生成的 JSON 或手动编写 `calibration_group1.json`:
+
+```json
+{
+  "pan_lookup": [[0.15, 252.0], [0.55, 288.0], [0.80, 305.0]],
+  "tilt_lookup": [[0.45, -5.0], [0.50, -5.0], [0.65, -25.0]],
+  "mount_type": "wall",
+  "pan_flip": false,
+  "tilt_flip": false
+}
+```
+
+`pan_lookup` 按 `[[x_ratio, pan_angle], ...]` 分段线性插值;`tilt_lookup` 同理。运行时 `tilt_linear_enabled=True` 会优先使用 `config/ptz.py` 中的 `tilt_y0/tilt_y1` 线性映射。校准文件路径在 `config/camera.py` 的 `calibration_file` 中配置。
+
 ### 配对图片保存
 - 全景图与球机抓拍图按时间窗口归入同一目录
 - 支持 OSS 上传与第三方平台推送

+ 37 - 0
dual_camera_system/config/calibration_group1.example.json

@@ -0,0 +1,37 @@
+{
+  "pan_offset": 249.77,
+  "pan_scale_x": 60.47,
+  "pan_scale_y": 0.0,
+  "tilt_offset": 45.77,
+  "tilt_scale_x": 0.0,
+  "tilt_scale_y": -107.69,
+  "rms_error": 0.0,
+  "overlap_ranges": [
+    {
+      "pan_start": 250,
+      "pan_end": 310,
+      "tilt_start": -30,
+      "tilt_end": 10,
+      "match_count": 3
+    }
+  ],
+  "pan_lookup": [
+    [0.15, 252.0],
+    [0.55, 288.0],
+    [0.80, 305.0]
+  ],
+  "tilt_lookup": [
+    [0.45, -5.0],
+    [0.50, -5.0],
+    [0.65, -25.0]
+  ],
+  "mount_type": "wall",
+  "tilt_flip": false,
+  "pan_flip": false,
+  "manual_points": [
+    {"name": "left", "x": 0.15, "y": 0.50, "pan": 252, "tilt": -5},
+    {"name": "mid", "x": 0.55, "y": 0.65, "pan": 288, "tilt": -25},
+    {"name": "right", "x": 0.80, "y": 0.45, "pan": 305, "tilt": -5}
+  ],
+  "note": "示例:基于 RK3588 测试环境人工确认的三点映射。实际部署时请使用 scripts/calibration_scanner.py 扫描后人工确认并替换为自己的标定点。"
+}