AGENTS.md 9.9 KB

项目上下文说明

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


项目概述

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

核心功能:

  • 多组全景摄像头实时监控,YOLO11 检测人体
  • 球机 PTZ 联动跟踪,变焦定位目标
  • 配对图片保存与上传
  • 事件推送至业务平台 + 语音播报

注: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

配置说明

config/system.py - 功能开关

  • enable_panorama_camera, enable_ptz_camera
  • enable_detection: 启用人人体检测
  • enable_calibration, enable_ptz_tracking
  • enable_event_push, enable_voice_announce

config/camera.py - 摄像头配置

  • PANORAMA_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/brand
  • SDK_PATH: /home/wen/dsh/dh/Bin(Linux 路径)

config/detection.py - 检测配置

  • DETECTION_CONFIG: 人体检测(目标类别、置信度、检测间隔、模型路径)

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/tracking.py - 跟踪 + 轮询抓拍配置

  • TRACKING_CONFIG.model_path: 默认跟踪模型路径,按平台自动选择
    • Linux aarch64 → /home/admin/dsh/yolo/yolo11.rknn(RK3588)
    • Linux x86_64 → /home/wen/dsh/yolo/yolo11n.pt
    • Darwin/macOS → /Users/wenhongquan/Desktop/阿里云同步/项目/dnn/sb/model/yolo11n.pt
  • TRACKING_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_timeptz_command_cooldowncapture_direnable_upload

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. 模型路径: 人体检测模型在 config/detection.py 中配置,默认 /home/wen/dsh/yolo/yolo11n.pt;macOS 本地测试建议将 config/tracking.py 中模型路径指向可用 .pt 文件
  7. YOLO11 自动下载: 首次运行自动下载预训练权重
  8. 工作模式: main.py 当前仅支持 多组摄像头联动模式multi_group_system.py),所有摄像头组在 config/camera.pyCAMERA_GROUPS 中配置
  9. 摄像头端口: SDK 登录用 37777,RTSP 流用 554,config 中 port=37777, rtsp_port=554
  10. 全景分辨率: 在 config/camera.py 中配置 resolution,支持 3840x10802560x14401920x1080 等;系统仅在 RTSP 不可用时按配置分辨率生成模拟帧,实际流帧不再拉伸缩放;模型推理时通过 letterbox(灰度填充)保持宽高比,避免丢精度
  11. 混合品牌: 枪机支持 Hikvision RTSP-only 模式(配置 brand='hikvision'use_sdk=False),球机仍使用 Dahua SDK 控制 PTZ
  12. 本地测试: 在无法加载 Dahua SDK 的环境(如 macOS),可运行 python scripts/local_test.py 验证 RTSP、检测与 PTZ 角度计算
  13. 库代码: tracker.pypolling_tracker.py 为保留的 Ultralytics 跟踪库代码,当前 main.py 未使用,但测试用例仍覆盖


校准机制

方法

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

流程

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

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

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

多组摄像头联动模式

核心组件

  • multi_group_system.pyMultiGroupSystem 管理多组摄像头的并行运行
  • camera_group.pyCameraGroup 封装单组(全景 + 球机)的初始化、校准、联动与抓拍
  • coordinator.pySequentialCoordinator 负责单组内的人体检测 → PTZ 定位 → 配对图片保存

工作流程

config/camera.py 中 CAMERA_GROUPS
              │
              ▼
      MultiGroupSystem
              │
              ▼
    为每组创建 CameraGroup
              │
              ▼
    共享 SDK + 共享 ObjectDetector
              │
              ▼
      每组独立 SequentialCoordinator
              │
              ▼
    人体检测 ──> PTZ 定位 ──> 抓拍 ──> 配对图片保存/上传

关键行为

  1. MultiGroupSystem 初始化一次大华 SDK 和一个人体检测器(YOLO11)
  2. CAMERA_GROUPS 中每个启用的组创建 CameraGroup
  3. 每组独立完成:视频流连接 → 自动校准 → 启动 SequentialCoordinator
  4. SequentialCoordinator 检测到人体后控制球机 PTZ 定位并保存配对图片
  5. 配对图片保存器 PairedImageSaver 负责本地存储与可选 OSS/第三方平台上传
  6. 系统运行期间按配置执行每日定时校准

SDK 参考

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

关键接口:

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