本文档为 AI 助手提供项目上下文,便于后续交互时快速理解项目结构和技术细节。
施工现场安全行为智能识别系统 v2.0.0 - 基于 Python 的双摄像头联动系统。
核心功能:
dual_camera_system/
├── config/ # 模块化配置(已重构)
│ ├── __init__.py # 配置汇总导出
│ ├── camera.py # 摄像头 + 日志配置
│ ├── detection.py # 人体/安全检测配置
│ ├── ptz.py # PTZ 控制参数
│ ├── ocr.py # OCR 配置
│ ├── coordinator.py # 联动 + 校准配置
│ ├── event.py # 事件推送配置
│ ├── voice.py # 语音播报配置
│ ├── llm.py # 大模型配置
│ └── system.py # 系统开关 + 工作模式
├── main.py # OCR 模式入口(编号识别)
├── safety_main.py # 安全模式入口(安全检测)
├── dahua_sdk.py # 大华 SDK ctypes 封装
├── panorama_camera.py # 全景摄像头 + 人体检测
├── ptz_camera.py # 球机 PTZ 控制
├── calibration.py # 视觉校准(运动检测 + 特征匹配)
├── ocr_recognizer.py # OCR 编号识别
├── safety_detector.py # 安全检测(安全帽/反光衣)
├── safety_coordinator.py # 安全联动控制器
├── llm_service.py # 大模型服务封装
├── event_pusher.py # 事件推送至业务平台
├── voice_announcer.py # TTS 语音播报
└── README.md # 项目说明
dh/ # 大华 SDK(仅参考)
├── Bin/ # Linux .so 库(macOS 不可用)
├── Demo/ # C++ Qt 示例
└── Include/Common/ # SDK 头文件
python main.py --panorama-ip 192.168.1.100 --ptz-ip 192.168.1.101
python main.py --interactive # 交互模式
python main.py --demo # 演示模式
python main.py --skip-calibration # 跳过校准
python safety_main.py --panorama-ip 192.168.1.100 --ptz-ip 192.168.1.101
--model-size {n,s,m,l,x} # YOLO11 模型尺寸
--no-gpu # 禁用 GPU
--ocr-host localhost --ocr-port 8111 # OCR API 地址
| 组件 | 技术 |
|---|---|
| 人体检测 | YOLO11 (ultralytics) |
| 安全检测 | YOLO11 安全专用模型 |
| OCR 识别 | llama-server API (Qwen2.5-VL-7B-Instruct) |
| 安全判断 | 规则 + LLM 混合模式 |
| 摄像头 SDK | 大华 NetSDK (ctypes) |
| 图像处理 | OpenCV |
| 特征匹配 | SIFT / ORB |
| PTZ 控制 | DH_EXTPTZ_EXACTGOTO |
| 语音播报 | Edge-TTS (zh-CN-XiaoxiaoNeural) |
| 事件推送 | HTTP API → jtjai.device.wenhq.top:8583 |
mode: 'safety' 或 'ocr'enable_panorama_camera, enable_ptz_cameraenable_detection, enable_safety_detectionenable_calibration, enable_ptz_trackingenable_ocr, enable_llmenable_event_push, enable_voice_announcesafety_strategy: 'llm' / 'rule' / 'hybrid'PANORAMA_CAMERA: 全景摄像头 IP/端口/凭证PTZ_CAMERA: 球机 IP/端口/凭证SDK_PATH: /home/wen/dsh/dh/Bin(Linux 路径)DETECTION_CONFIG: 人体检测(目标类别、置信度、检测间隔)SAFETY_DETECTION_CONFIG: 安全检测模型路径 /home/wen/dsh/yolo/yolo11m_safety.pt
0=安全帽, 3=人, 4=反光衣alert_cooldown: 3.0 秒,同一目标告警冷却LLM_CONFIG: Qwen2.5-VL-7B-Instruct,localhost:8111LLM_SAFETY_CONFIG: use_llm_for_safety, verify_with_llmEVENT_PUSHER_CONFIG: 推送到 jtjai.device.wenhq.top:8583/api/resource/oss/upload - 图片上传/api/system/event - 事件创建TTS_CONFIG: Edge-TTS, zh-CN-XiaoxiaoNeuralVOICE_ANNOUNCER_CONFIG: 违规播报重复 3 次CALIBRATION_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 加载会导致 segfault/home/wen/dsh/yolo/yolo11m_safety.ptmain.py 是 OCR 模式,safety_main.py 是安全检测模式port=37777, rtsp_port=554s - 开始/停止联动r - 获取识别结果t - 手动跟踪(输入坐标)c - 抓拍快照q - 退出方法:
流程:
移动前全景帧 ────┐
├──> 运动检测 ──> 运动区域中心
移动后全景帧 ────┘
球机抓拍 ────────┐
├──> 特征匹配 ──> 匹配点中心
全景画面 ─────────┘
运动区域 + 匹配点 ──> 加权融合 ──> 坐标映射
头文件:dh/Include/Common/dhnetsdk.h
关键接口:
CLIENT_Init / CLIENT_CleanupCLIENT_LoginEx2 / CLIENT_LogoutCLIENT_RealPlayExCLIENT_DHPTZControlEx (DH_EXTPTZ_EXACTGOTO)