本文档为 AI 助手提供项目上下文,便于后续交互时快速理解项目结构和技术细节。
施工现场安全行为智能识别系统 v2.0.0 - 基于 Python 的双摄像头联动系统。
核心功能:
注:OCR 编号识别、LLM 判断、安全帽/反光衣检测已在本版本中移除。
dual_camera_system/
├── config/ # 模块化配置(已重构)
│ ├── __init__.py # 配置汇总导出
│ ├── camera.py # 摄像头 + 日志配置
│ ├── detection.py # 人体检测配置
│ ├── ptz.py # PTZ 控制参数
│ ├── coordinator.py # 联动 + 校准配置
│ ├── tracking.py # 跟踪 + 轮询抓拍配置(库代码)
│ ├── event.py # 事件推送配置
│ ├── voice.py # 语音播报配置
│ └── system.py # 系统开关 + 工作模式
├── main.py # 主入口(仅多组模式)
├── multi_group_system.py # 多组系统管理器
├── camera_group.py # 单组摄像头封装
├── dahua_sdk.py # 大华 SDK ctypes 封装
├── panorama_camera.py # 全景摄像头 + 人体检测
├── ptz_camera.py # 球机 PTZ 控制
├── calibration.py # 视觉校准(运动检测 + 特征匹配)
├── coordinator.py # 联动控制器(SequentialCoordinator)
├── tracker.py # Ultralytics 跟踪器封装(库代码)
├── polling_tracker.py # 多目标轮询跟踪协调器(库代码)
├── inference_backend.py # RKNN/ONNX 通用推理后端
├── event_pusher.py # 事件推送至业务平台
├── voice_announcer.py # TTS 语音播报
└── README.md # 项目说明
dh/ # 大华 SDK(仅参考)
├── Bin/ # Linux .so 库(macOS 不可用)
├── Demo/ # C++ Qt 示例
└── Include/Common/ # SDK 头文件
python main.py
python main.py --skip-calibration # 跳过校准
python main.py --demo # 演示模式
python main.py --panorama-ip 192.168.1.100 --ptz-ip 192.168.1.101 # 覆盖第一组 IP
--model-size {n,s,m,l,x} # YOLO11 模型尺寸
--no-gpu # 禁用 GPU
--model /path/to/model.pt # 显式指定检测模型
| 组件 | 技术 |
|---|---|
| 人体检测 | YOLO11 (ultralytics) |
| 摄像头 SDK | 大华 NetSDK (ctypes) |
| 图像处理 | OpenCV |
| 特征匹配 | SIFT / ORB |
| PTZ 控制 | DH_EXTPTZ_EXACTGOTO |
| 语音播报 | Edge-TTS (zh-CN-XiaoxiaoNeural) |
| 事件推送 | HTTP API → jtjai.device.wenhq.top:8583 |
enable_panorama_camera, enable_ptz_cameraenable_detection: 启用人人体检测enable_calibration, enable_ptz_trackingenable_event_push, enable_voice_announcePANORAMA_CAMERA: 全景摄像头 IP/端口/凭证/分辨率/品牌
brand: 摄像头品牌,'dahua' 使用 SDK 登录,'hikvision' 仅使用 RTSP 取流use_sdk: False 时跳过 SDK 登录,直接 RTSP 取流resolution: 期望分辨率,支持 (width, height) 或字符串 "3840x1080"、"2560*1440"、"1920x1080"PTZ_CAMERA: 球机 IP/端口/凭证CAMERA_GROUPS: 多组摄像头配置,每组 panorama 可独立配置 resolution/brandSDK_PATH: /home/wen/dsh/dh/Bin(Linux 路径)DETECTION_CONFIG: 人体检测(目标类别、置信度、检测间隔、模型路径)EVENT_PUSHER_CONFIG: 推送到 jtjai.device.wenhq.top:8583/api/resource/oss/upload - 图片上传/api/system/event - 事件创建TTS_CONFIG: Edge-TTS, zh-CN-XiaoxiaoNeuralVOICE_ANNOUNCER_CONFIG: 违规播报重复 3 次TRACKING_CONFIG.model_path: 默认跟踪模型路径,按平台自动选择
/home/admin/dsh/yolo/yolo11.rknn(RK3588)/home/wen/dsh/yolo/yolo11n.pt/Users/wenhongquan/Desktop/阿里云同步/项目/dnn/sb/model/yolo11n.ptTRACKING_CONFIG.model_type: 'auto' | 'yolo' | 'rknn' | 'onnx'TRACKING_CONFIG.tracker_type: 'bytetrack' | 'botsort'TRACKING_CONFIG.max_tracking_targets: 最大同时跟踪目标数TRACKING_CONFIG.tracking_timeout: 目标丢失后保留 ID 的超时时间ptz_stabilize_time、ptz_command_cooldown、capture_dir、enable_uploadCALIBRATION_CONFIG.interval: 24 小时(不是 5 分钟)ssh admin@192.168.20.84conda activate rknn/home/admin/dsh/dual_camera_system/home/admin/dsh/dh/Binaarch64 → /home/admin/dsh/dh/arm/Bin(Orange Pi 测试设备)x86_64 → /home/wen/dsh/dh/Bin(x86 Linux 服务器)../dh/Bin(开发环境参考)CLIENT_SetVideoProcCallBack 等函数,dahua_sdk.py 已做可选绑定处理,缺失函数运行时降级而非崩溃DWORD=unsigned int(4B), LONG=int(4B), LLONG=long(8B),ctypes 绑定必须严格匹配,否则结构体对齐错误导致登录失败main.py 中先加载 YOLO/PyTorch,再初始化大华 SDK。大华 SDK 的 CLIENT_Init 会修改进程内存映射,如果先于 PyTorch 加载会导致 segfaultconfig/detection.py 中配置,默认 /home/wen/dsh/yolo/yolo11n.pt;macOS 本地测试建议将 config/tracking.py 中模型路径指向可用 .pt 文件main.py 当前仅支持 多组摄像头联动模式(multi_group_system.py),所有摄像头组在 config/camera.py 的 CAMERA_GROUPS 中配置port=37777, rtsp_port=554config/camera.py 中配置 resolution,支持 3840x1080、2560x1440、1920x1080 等;系统仅在 RTSP 不可用时按配置分辨率生成模拟帧,实际流帧不再拉伸缩放;模型推理时通过 letterbox(灰度填充)保持宽高比,避免丢精度brand='hikvision' 或 use_sdk=False),球机仍使用 Dahua SDK 控制 PTZpython scripts/local_test.py 验证 RTSP、检测与 PTZ 角度计算tracker.py、polling_tracker.py 为保留的 Ultralytics 跟踪库代码,当前 main.py 未使用,但测试用例仍覆盖方法:
流程:
移动前全景帧 ────┐
├──> 运动检测 ──> 运动区域中心
移动后全景帧 ────┘
球机抓拍 ────────┐
├──> 特征匹配 ──> 匹配点中心
全景画面 ─────────┘
运动区域 + 匹配点 ──> 加权融合 ──> 坐标映射
核心组件:
multi_group_system.py:MultiGroupSystem 管理多组摄像头的并行运行camera_group.py:CameraGroup 封装单组(全景 + 球机)的初始化、校准、联动与抓拍coordinator.py:SequentialCoordinator 负责单组内的人体检测 → PTZ 定位 → 配对图片保存工作流程:
config/camera.py 中 CAMERA_GROUPS
│
▼
MultiGroupSystem
│
▼
为每组创建 CameraGroup
│
▼
共享 SDK + 共享 ObjectDetector
│
▼
每组独立 SequentialCoordinator
│
▼
人体检测 ──> PTZ 定位 ──> 抓拍 ──> 配对图片保存/上传
关键行为:
MultiGroupSystem 初始化一次大华 SDK 和一个人体检测器(YOLO11)CAMERA_GROUPS 中每个启用的组创建 CameraGroupSequentialCoordinatorSequentialCoordinator 检测到人体后控制球机 PTZ 定位并保存配对图片PairedImageSaver 负责本地存储与可选 OSS/第三方平台上传头文件:dh/Include/Common/dhnetsdk.h
关键接口:
CLIENT_Init / CLIENT_CleanupCLIENT_LoginEx2 / CLIENT_LogoutCLIENT_RealPlayExCLIENT_DHPTZControlEx (DH_EXTPTZ_EXACTGOTO)