本文档为 AI 助手提供项目上下文,便于后续交互时快速理解项目结构和技术细节。
双摄像头联动抓拍系统 - 基于 Python 实现的全景摄像头与 PTZ 球机联动系统。
核心功能:
/home/wen/dsh/
├── AGENTS.md # 本文档
├── dual_camera_system/ # 主项目目录
│ ├── config.py # 配置文件 (摄像头、检测、OCR等配置)
│ ├── dahua_sdk.py # 大华 SDK Python ctypes 封装
│ ├── panorama_camera.py # 全景摄像头模块 (视频流、YOLO11人体检测)
│ ├── ptz_camera.py # 球机控制模块 (PTZ控制、三维精确定位)
│ ├── calibration.py # 视觉校准模块 (运动检测+特征匹配)
│ ├── ocr_recognizer.py # OCR识别模块 (llama-server API)
│ ├── coordinator.py # 联动控制器 (事件驱动、坐标转换)
│ ├── main.py # 主程序入口
│ └── README.md # 项目说明文档
└── dh/ # 大华 SDK 目录
├── Bin/ # SDK 动态库
│ ├── libdhnetsdk.so # 网络 SDK
│ ├── libavnetsdk.so # AV 网络 SDK
│ └── ...
├── Demo/ # C++ 示例代码 (Qt项目)
│ ├── 00.DevInit/ # 设备初始化
│ ├── 01.RealPlay/ # 实时预览
│ ├── 02.PTZControl/ # PTZ控制
│ └── ...
├── Doc/ # SDK 文档
│ ├── NetSDK编程指导手册.pdf
│ └── ...
└── Include/Common/ # SDK 头文件
├── dhnetsdk.h # 网络 SDK 接口定义
└── ...
| 组件 | 技术 |
|---|---|
| 人体检测 | YOLO11 (ultralytics) |
| OCR识别 | llama-server API (PaddleOCR-VL) |
| 摄像头SDK | 大华 NetSDK (ctypes封装) |
| 图像处理 | OpenCV |
| 特征匹配 | SIFT / ORB |
| PTZ控制 | DH_EXTPTZ_EXACTGOTO (三维精确定位) |
pip install opencv-python opencv-contrib-python ultralytics
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
# 指定模型大小
python main.py --model-size s --ocr-host localhost --ocr-port 8111
# 交互模式
python main.py --interactive
# 演示模式 (不连接实际摄像头)
python main.py --demo
# 跳过校准
python main.py --skip-calibration
集中配置文件,包含:
LOG_CONFIG: 日志配置PANORAMA_CAMERA: 全景摄像头连接参数PTZ_CAMERA: 球机连接参数SDK_PATH: 大华SDK库路径DETECTION_CONFIG: YOLO检测配置PTZ_CONFIG: PTZ控制参数OCR_CONFIG: llama-server API配置CALIBRATION_CONFIG: 校准配置 (间隔24小时)大华SDK Python封装:
_disconnect_callback 持有引用防止垃圾回收全景摄像头模块:
ObjectDetector: YOLO11人体检测器PersonTracker: 人体跟踪器PanoramaCamera: 视频流获取和帧处理球机控制模块:
PTZController: PTZ控制封装PTZCamera: 球机连接和变焦控制视觉校准模块:
VisualCalibrationDetector: 视觉校准检测器OCR识别模块:
NumberDetector: 编号识别器联动控制器:
Coordinator: 基础联动逻辑EventDrivenCoordinator: 事件驱动控制器主程序入口:
DualCameraSystem: 系统主类┌─────────────────────────────────────────────────────────────┐
│ 1. 系统启动 → 自动校准全景相机与球机坐标映射 │
│ 2. 全景摄像头获取视频流 │
│ 3. YOLO11检测画面中的人体 │
│ 4. 计算人体在画面中的相对位置 (x_ratio, y_ratio) │
│ 5. 通过校准转换 → PTZ角度 (pan, tilt) │
│ 6. 球机变焦移动到目标位置 │
│ 7. 人体分割 + OCR识别编号 │
│ 8. 输出识别结果 │
│ 9. 每24小时自动重新校准 │
└─────────────────────────────────────────────────────────────┘
self.ocr_interval = 1.0 避免API过于频繁调用self.ptz_position_threshold = 0.02 避免频繁发送相同位置命令SDK头文件位置:/home/wen/dsh/dh/Include/Common/dhnetsdk.h
关键接口:
CLIENT_Init: 初始化SDKCLIENT_LoginEx2: 登录设备CLIENT_RealPlayEx: 开始实时预览CLIENT_DHPTZControlEx: PTZ控制CLIENT_Logout: 登出设备CLIENT_Cleanup: 清理SDKPTZ命令:
DH_EXTPTZ_EXACTGOTO: 三维精确定位 (pan, tilt, zoom)config.py 中配置,默认 /home/wen/dsh/dh/BinCALIBRATION_CONFIG 中修改