wenhongquan b5fc08f404 feat(coordinator): 优先使用RTSP启动视频流,失败时回退到SDK方式 4 дней назад
..
__pycache__ 2a19b050da feat(coordinator): 添加联动控制器和事件驱动协调器功能 5 дней назад
config caad81c540 fix(camera): 修正摄像头端口配置并更新文档 5 дней назад
README.md be6866bc47 first commit 1 неделя назад
calibration.py be6866bc47 first commit 1 неделя назад
config.py be6866bc47 first commit 1 неделя назад
coordinator.py b5fc08f404 feat(coordinator): 优先使用RTSP启动视频流,失败时回退到SDK方式 4 дней назад
dahua_sdk.py caad81c540 fix(camera): 修正摄像头端口配置并更新文档 5 дней назад
event_pusher.py be6866bc47 first commit 1 неделя назад
llm_service.py be6866bc47 first commit 1 неделя назад
main.py cd917825b2 feat(视频流): 添加RTSP视频流启动失败时的备选方案 5 дней назад
ocr_recognizer.py be6866bc47 first commit 1 неделя назад
panorama_camera.py cd917825b2 feat(视频流): 添加RTSP视频流启动失败时的备选方案 5 дней назад
ptz_camera.py be6866bc47 first commit 1 неделя назад
safety_coordinator.py d7bcb6dbd7 fix 1 неделя назад
safety_detector.py 2a19b050da feat(coordinator): 添加联动控制器和事件驱动协调器功能 5 дней назад
safety_main.py 2a19b050da feat(coordinator): 添加联动控制器和事件驱动协调器功能 5 дней назад
voice_announcer.py be6866bc47 first commit 1 неделя назад

README.md

双摄像头联动抓拍系统

系统简介

本系统实现全景摄像头和可变焦球机的联动抓拍功能:

  • 全景摄像头实时监控,检测画面中的人体
  • 检测到人体后,球机自动变焦定位到目标
  • 对人体进行分割,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          # 说明文档

依赖安装

# 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 设置摄像头参数:

# 全景摄像头配置
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. 运行系统

# 启动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. 场景缺少足够特征点

跳过校准:

python main.py --skip-calibration

强制重新校准:

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示例:

llama-server -m PaddleOCR-VL-1.5-GGUF.gguf --port 8111

注意事项

  1. 确保大华 SDK 库文件路径正确
  2. 球机需要支持 PTZ 控制功能
  3. 坐标映射需要根据实际场景校准
  4. OCR 识别效果取决于图像质量和编号清晰度