# 双摄像头联动抓拍系统 ## 系统简介 本系统实现全景摄像头和可变焦球机的联动抓拍功能: - 全景摄像头实时监控,检测画面中的人体 - 检测到人体后,球机自动变焦定位到目标 - 对人体进行分割,OCR识别衣服上的编号 ## 系统架构 ``` 全景摄像头 球机 识别模块 │ │ │ 视频流 ──> 人体检测 ──> 位置计算 ──> PTZ控制 ──> 变焦放大 ──> OCR识别 │ 编号结果 ``` ## 目录结构 ``` dual_camera_system/ ├── config.py # 配置文件 ├── dahua_sdk.py # 大华SDK Python封装 ├── panorama_camera.py # 全景摄像头模块(视频流、人体检测) ├── ptz_camera.py # 球机控制模块(PTZ控制、精确定位) ├── ocr_recognizer.py # OCR识别模块(人体分割、编号识别) ├── coordinator.py # 联动控制器 ├── main.py # 主程序 └── README.md # 说明文档 ``` ## 依赖安装 ```bash # OpenCV pip install opencv-python opencv-contrib-python # YOLO11 (用于人体检测) - Ultralytics最新版本 pip install ultralytics # llama-server (用于OCR识别) # 需要单独部署llama-server服务 # 启动命令: llama-server -m PaddleOCR-VL-1.5-GGUF.gguf --port 8111 ``` **注意**: - YOLO11是Ultralytics的最新模型,首次运行时会自动下载预训练权重(yolo11n.pt等) - OCR使用llama-server API,需要先部署视觉语言模型服务 ## 使用方法 ### 1. 修改配置 编辑 `config.py` 设置摄像头参数: ```python # 全景摄像头配置 PANORAMA_CAMERA = { 'ip': '192.168.1.100', 'port': 37777, 'username': 'admin', 'password': 'admin123', 'channel': 0, } # 球机配置 PTZ_CAMERA = { 'ip': '192.168.1.101', 'port': 37777, 'username': 'admin', 'password': 'admin123', 'channel': 0, } ``` ### 2. 运行系统 ```bash # 启动llama-server (OCR服务) llama-server -m PaddleOCR-VL-1.5-GGUF.gguf --port 8111 # 启动双摄像头系统 python main.py --panorama-ip 192.168.1.100 --ptz-ip 192.168.1.101 # 指定YOLO11模型大小和OCR配置 python main.py --panorama-ip 192.168.1.100 --ptz-ip 192.168.1.101 \ --model-size s \ --ocr-host localhost --ocr-port 8111 # 交互模式 python main.py --interactive # 演示模式 (不连接实际摄像头) python main.py --demo ``` ### 3. 交互命令 - `s` - 开始/停止联动 - `r` - 获取识别结果 - `t` - 手动跟踪 (输入坐标) - `c` - 抓拍快照 - `q` - 退出 ## 关键功能说明 ### 自动校准 系统启动时会自动进行全景相机与球机的校准: **校准方法 (视觉检测):** 1. **运动检测法**: 记录球机移动前后全景画面差异,定位运动区域中心 2. **特征匹配法**: 将球机抓拍图像与全景画面进行SIFT特征匹配 3. **融合定位**: 综合两种方法结果加权融合 4. **降级方案**: 视觉检测失败时使用角度估算 **校准流程:** ``` 移动前全景帧 ────┐ │──> 运动检测 ──> 运动区域中心 移动后全景帧 ────┘ 球机抓拍 ────────┐ │──> 特征匹配 ──> 匹配点中心 全景画面 ─────────┘ 运动区域 + 匹配点 ──> 加权融合 ──> 最终位置 ``` **定时校准:** - 系统运行时每5分钟自动校准一次 - 确保坐标映射的准确性 - 校准间隔可在 `config.py` 中配置 **校准失败可能原因:** 1. 全景摄像头或球机连接失败 2. 球机PTZ控制异常 3. 摄像头视野范围配置错误 4. 场景缺少足够特征点 **跳过校准:** ```bash python main.py --skip-calibration ``` **强制重新校准:** ```bash python main.py --force-calibration ``` ### 人体检测 使用 YOLO11 模型检测画面中的人体,支持 GPU 加速。 模型尺寸选项: - `n` (nano) - 最快,精度较低 - `s` (small) - 平衡速度和精度 - `m` (medium) - 中等 - `l` (large) - 高精度 - `x` (extra-large) - 最高精度,速度最慢 ### PTZ控制 支持大华球机的 PTZ 控制: - 三维精确定位 (DH_EXTPTZ_EXACTGOTO) - 预置点设置/调用 - 平滑移动跟踪 ### 编号识别 - 使用 llama-server API 进行OCR识别 - 支持视觉语言模型 (如 PaddleOCR-VL) - 图像通过base64编码发送给API - 可配置API地址、端口和模型 **启动llama-server示例:** ```bash llama-server -m PaddleOCR-VL-1.5-GGUF.gguf --port 8111 ``` ## 注意事项 1. 确保大华 SDK 库文件路径正确 2. 球机需要支持 PTZ 控制功能 3. 坐标映射需要根据实际场景校准 4. OCR 识别效果取决于图像质量和编号清晰度