AGENTS.md 7.3 KB

项目上下文说明

本文档为 AI 助手提供项目上下文,便于后续交互时快速理解项目结构和技术细节。


项目概述

施工现场安全行为智能识别系统 v2.0.0 - 基于 Python 的双摄像头联动系统。

核心功能:

  • 全景摄像头实时监控,YOLO11 检测人体/安全帽/反光衣
  • 球机 PTZ 联动跟踪,变焦定位目标
  • OCR 编号识别(llama-server API)
  • 安全违规检测(未戴安全帽、未穿反光衣)
  • 事件推送至业务平台 + 语音播报

目录结构

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 头文件

运行命令

OCR 模式(编号识别)

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

配置说明

config/system.py - 功能开关

  • mode: 'safety''ocr'
  • enable_panorama_camera, enable_ptz_camera
  • enable_detection, enable_safety_detection
  • enable_calibration, enable_ptz_tracking
  • enable_ocr, enable_llm
  • enable_event_push, enable_voice_announce
  • safety_strategy: 'llm' / 'rule' / 'hybrid'

config/camera.py - 摄像头配置

  • PANORAMA_CAMERA: 全景摄像头 IP/端口/凭证
  • PTZ_CAMERA: 球机 IP/端口/凭证
  • SDK_PATH: /home/wen/dsh/dh/Bin(Linux 路径)

config/detection.py - 检测配置

  • DETECTION_CONFIG: 人体检测(目标类别、置信度、检测间隔)
  • SAFETY_DETECTION_CONFIG: 安全检测模型路径 /home/wen/dsh/yolo/yolo11m_safety.pt
    • 类别映射: 0=安全帽, 3=人, 4=反光衣
    • alert_cooldown: 3.0 秒,同一目标告警冷却

config/llm.py - 大模型配置

  • LLM_CONFIG: Qwen2.5-VL-7B-Instruct,localhost:8111
  • LLM_SAFETY_CONFIG: use_llm_for_safety, verify_with_llm

config/event.py - 事件推送

  • EVENT_PUSHER_CONFIG: 推送到 jtjai.device.wenhq.top:8583
  • /api/resource/oss/upload - 图片上传
  • /api/system/event - 事件创建

config/voice.py - 语音播报

  • TTS_CONFIG: Edge-TTS, zh-CN-XiaoxiaoNeural
  • VOICE_ANNOUNCER_CONFIG: 违规播报重复 3 次

config/coordinator.py - 校准配置

  • CALIBRATION_CONFIG.interval: 24 小时(不是 5 分钟)

RKNN 测试环境

  • 连接: ssh admin@192.168.20.84
  • Conda 环境: conda activate rknn
  • 项目路径: /home/admin/dsh/dual_camera_system
  • SDK 路径: /home/admin/dsh/dh/Bin

重要注意事项

  1. SDK 路径: config/camera.py 根据 CPU 架构自动选择 SDK 路径:
    • aarch64/home/admin/dsh/dh/arm/Bin(Orange Pi 测试设备)
    • x86_64/home/wen/dsh/dh/Bin(x86 Linux 服务器)
    • 其他 → 项目相对路径 ../dh/Bin(开发环境参考)
  2. ARM64 SDK 兼容性: ARM64 版 SDK 缺少 CLIENT_SetVideoProcCallBack 等函数,dahua_sdk.py 已做可选绑定处理,缺失函数运行时降级而非崩溃
  3. SDK 类型映射: 大华 SDK 在 Linux 上 DWORD=unsigned int(4B), LONG=int(4B), LLONG=long(8B),ctypes 绑定必须严格匹配,否则结构体对齐错误导致登录失败
  4. 初始化顺序: main.py 中先加载 YOLO/PyTorch,再初始化大华 SDK。大华 SDK 的 CLIENT_Init 会修改进程内存映射,如果先于 PyTorch 加载会导致 segfault
  5. 校准间隔: 实际是 24 小时,不是 README 中的 5 分钟
  6. 模型路径: 安全检测模型在 /home/wen/dsh/yolo/yolo11m_safety.pt
  7. YOLO11 自动下载: 首次运行自动下载预训练权重
  8. OCR 服务: 需先启动 llama-server(默认 localhost:8111)
  9. 工作模式: main.py 是 OCR 模式,safety_main.py 是安全检测模式
  10. 摄像头端口: SDK 登录用 37777,RTSP 流用 554,config 中 port=37777, rtsp_port=554

交互命令(OCR 模式 main.py)

  • s - 开始/停止联动
  • r - 获取识别结果
  • t - 手动跟踪(输入坐标)
  • c - 抓拍快照
  • q - 退出

校准机制

方法

  1. 运动检测法:帧差定位球机移动区域
  2. 特征匹配法:SIFT/ORB 匹配球机图像与全景画面
  3. 加权融合 + 降级(角度估算)

流程

移动前全景帧 ────┐
                 ├──> 运动检测 ──> 运动区域中心
移动后全景帧 ────┘

球机抓拍 ────────┐
                 ├──> 特征匹配 ──> 匹配点中心
全景画面 ─────────┘

运动区域 + 匹配点 ──> 加权融合 ──> 坐标映射

SDK 参考

头文件:dh/Include/Common/dhnetsdk.h

关键接口:

  • CLIENT_Init / CLIENT_Cleanup
  • CLIENT_LoginEx2 / CLIENT_Logout
  • CLIENT_RealPlayEx
  • CLIENT_DHPTZControlEx (DH_EXTPTZ_EXACTGOTO)