wenhongquan c5f7a47b71 refactor(main): 优化主程序结构并添加信号处理支持 1 день тому
..
__pycache__ c63946effe refactor(system): 提取CameraGroup类封装摄像头组逻辑及优化主程序 1 день тому
config c63946effe refactor(system): 提取CameraGroup类封装摄像头组逻辑及优化主程序 1 день тому
scripts c5f7a47b71 refactor(main): 优化主程序结构并添加信号处理支持 1 день тому
README.md be6866bc47 first commit 1 тиждень тому
calibration.py bdd16cb054 refactor(calibration): 重构相机校准模块代码结构和注释 2 днів тому
camera_group.py c63946effe refactor(system): 提取CameraGroup类封装摄像头组逻辑及优化主程序 1 день тому
config.py be6866bc47 first commit 1 тиждень тому
coordinator.py de9fab9ef8 refactor(coordinator): 重构联动控制器及异步协作机制 2 днів тому
dahua_sdk.py 9d1f46544c fix(camera): 修复Linux平台下Dahua SDK BOOL类型处理问题 4 днів тому
dual_stream_manager.py 20287761c8 feat(coordinator): 实现异步联动控制器并改进视频流管理 3 днів тому
event_pusher.py be6866bc47 first commit 1 тиждень тому
llm_service.py be6866bc47 first commit 1 тиждень тому
main.py c5f7a47b71 refactor(main): 优化主程序结构并添加信号处理支持 1 день тому
multi_group_system.py c63946effe refactor(system): 提取CameraGroup类封装摄像头组逻辑及优化主程序 1 день тому
ocr_recognizer.py 8cb8c36e38 feat(ocr): 添加RKNN人体分割模型支持并优化OCR识别流程 4 днів тому
paired_image_saver.py 5cd41af00a refactor(coordinator): 重构联动控制器逻辑提升异步PTZ处理能力 2 днів тому
panorama_camera.py 5cd41af00a refactor(coordinator): 重构联动控制器逻辑提升异步PTZ处理能力 2 днів тому
ptz_camera.py b7be51ee04 refactor(calibration): 重构相机校准模块,加载PTZ配置,改进代码结构 3 днів тому
ptz_person_tracker.py 5ce17b6eb2 refactor(coordinator): 重构并优化联动控制器代码结构 3 днів тому
safety_coordinator.py 71972827cc refactor(paired_images): 重构配对图片保存管理器,禁用轨迹追踪功能 2 днів тому
safety_detector.py 71972827cc refactor(paired_images): 重构配对图片保存管理器,禁用轨迹追踪功能 2 днів тому
safety_main.py 71972827cc refactor(paired_images): 重构配对图片保存管理器,禁用轨迹追踪功能 2 днів тому
test_ptz.py 8cb8c36e38 feat(ocr): 添加RKNN人体分割模型支持并优化OCR识别流程 4 днів тому
video_lock.py 20287761c8 feat(coordinator): 实现异步联动控制器并改进视频流管理 3 днів тому
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 识别效果取决于图像质量和编号清晰度