Skip to content

WENZIZZHENG/yolo_project

Repository files navigation

YOLO 本地实时监控应用

基于 Ultralytics YOLO26 和 OpenCV 的本地实时监控工具。支持摄像头、视频文件、RTSP/HTTP 流、屏幕/游戏画面采集输入,实时检测并记录事件,具备断流自动重连、目标跟踪去重、ROI 区域过滤、告警通知推送等能力。

third_party/ultralytics 保留为第三方源码快照,项目业务入口在 yolo_monitor/

快速开始

已配置好环境的机器,直接运行:

.\.venv-ultralytics\Scripts\python.exe -m yolo_monitor --source 0

新机器请先按下方"从零搭建"完成环境准备。

从零搭建

前置条件

  • Python 3.13.x(项目要求 >=3.13,<3.14
  • Git
  • NVIDIA 显卡 + CUDA 驱动(可选,无 GPU 时自动回退 CPU)

1. 克隆项目

git clone <仓库地址>
cd yolo_project

2. 创建虚拟环境并安装依赖

python3.13 -m venv .venv-ultralytics
.\.venv-ultralytics\Scripts\pip.exe install --upgrade pip
.\.venv-ultralytics\Scripts\pip.exe install -e ".[dev]"

这条命令会根据 pyproject.toml 安装三个核心依赖(opencv-python、torch、ultralytics)和两个开发依赖(pytest、ruff)。安装过程约 3-5 分钟,torch 包较大(约 2.5GB)。

如需 GPU 加速,确认安装的 PyTorch 版本与本机 CUDA 版本匹配。当前默认安装 CUDA 12.6 版本。检查方式:

.\.venv-ultralytics\Scripts\python.exe -c "import torch; print(torch.cuda.is_available())"

输出 True 表示 GPU 可用。

如需使用屏幕/游戏画面采集功能,额外安装可选依赖:

.\.venv-ultralytics\Scripts\pip.exe install -e ".[screen]"

这会安装 mss(跨平台截图)、dxcam(Windows DXGI 高性能采集)和 pywin32(窗口定位)。

3. 模型权重

首次运行时程序会自动下载 yolo26n.ptweights/ 目录,无需手动操作。如需离线使用,提前将模型文件放入 weights/ 即可:

mkdir weights
# 将 yolo26n.pt 复制到 weights/ 目录

4. 验证安装

用示例图片跑一次 headless 验证:

.\.venv-ultralytics\Scripts\python.exe -m yolo_monitor --source third_party\ultralytics\ultralytics\assets\bus.jpg --loop-image --headless --max-frames 3 --imgsz 640 --device cpu

正常输出应包含:

summary frames=3 inference_frames=3 events=3 average_fps=... run_dir=...

功能

输入源

支持五种输入:摄像头索引(--source 0)、本地视频文件、图片循环(--loop-image)、RTSP/HTTP 流、屏幕/游戏画面采集(--source screen)。

检测与事件

YOLO26 实时推理,检测到目标后保存标注截图和 events.jsonl 日志。支持 --classes 类别过滤、--conf 置信度阈值、--imgsz 推理尺寸、--frame-skip 跳帧。

RTSP 断流自动重连(--reconnect-delay

RTSP/HTTP 流断开后自动指数退避重连,恢复后继续监控。窗口显示 "Reconnecting..." 状态。重连次数和耗时记录在运行摘要中。--max-reconnect 控制最大重连次数,超过后退出。

目标跟踪(--track

启用 Ultralytics 内置 ByteTrack 跟踪器,为每个目标分配唯一 ID。同一目标在冷却期内不重复记录事件,大幅减少重复告警。

ROI 区域过滤(--roi

指定多边形区域,仅当目标中心点在区域内时才触发事件。区域外目标仍显示在窗口标注中。参数格式为空格分隔的坐标对:--roi "100,200 300,200 300,400 100,400"

取帧与推理并行(--buffer-size

启用生产者-消费者模式,读帧线程与推理线程并行工作。队列满时丢弃旧帧,确保推理端始终处理最新帧。--buffer-size 4 即可显著降低 GPU 等待时间。

告警通知推送(--webhook-url

事件触发后向指定 URL 发送 HTTP POST JSON 请求,可对接钉钉、飞书、企业微信等。通知失败静默处理,不阻塞主循环。

YAML 配置文件(--config

将运行参数写入 YAML 文件,避免每次输入长串 CLI 参数。CLI 参数可覆盖文件中的同名字段。示例文件见 config.example.yaml

屏幕/游戏画面采集(--source screen

对桌面或游戏窗口进行实时截屏检测,适用于游戏辅助、UI 自动化测试、桌面监控等场景。支持三种格式:

  • --source screen:全屏采集(或用 --screen-region 指定区域)
  • --source screen:100,200,800,600:内联指定采集区域(left,top,width,height)
  • --source screen:window=窗口名称:通过窗口名自动定位采集区域(需安装 pywin32)

检测结果的坐标自动映射回绝对屏幕位置,ROI 过滤和事件记录均使用屏幕坐标。

默认使用 mss 后端(跨平台截图)。Windows 上可通过 --screen-backend dxcam 切换到 DXGI 高性能后端,适合 DirectX 独占全屏游戏。屏幕采集需安装可选依赖:

.\.venv-ultralytics\Scripts\pip.exe install -e ".[screen]"

运行示例

# 摄像头实时监控
.\.venv-ultralytics\Scripts\python.exe -m yolo_monitor --source 0

# RTSP 流 + 目标跟踪 + 断流重连
.\.venv-ultralytics\Scripts\python.exe -m yolo_monitor --source rtsp://camera.local/stream --track --reconnect-delay 2 --max-reconnect 20

# ROI 区域过滤 + 并行取帧
.\.venv-ultralytics\Scripts\python.exe -m yolo_monitor --source 0 --roi "100,100 500,100 500,400 100,400" --buffer-size 4

# 后台运行 + Webhook 通知
.\.venv-ultralytics\Scripts\python.exe -m yolo_monitor --source rtsp://camera.local/stream --headless --webhook-url "https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN"

# 使用 YAML 配置文件
.\.venv-ultralytics\Scripts\python.exe -m yolo_monitor --config my_config.yaml

# 配置文件 + CLI 覆盖(CLI 优先)
.\.venv-ultralytics\Scripts\python.exe -m yolo_monitor --config my_config.yaml --conf 0.6 --headless

# 低配机器降低推理压力
.\.venv-ultralytics\Scripts\python.exe -m yolo_monitor --source 0 --imgsz 480 --frame-skip 2

# 只记录指定类别
.\.venv-ultralytics\Scripts\python.exe -m yolo_monitor --source 0 --classes person,car

# 全屏采集(需先 pip install -e ".[screen]")
.\.venv-ultralytics\Scripts\python.exe -m yolo_monitor --source screen

# 指定区域采集
.\.venv-ultralytics\Scripts\python.exe -m yolo_monitor --source screen --screen-region "0,0,1280,720"

# 通过窗口名定位 + dxcam 高性能后端
.\.venv-ultralytics\Scripts\python.exe -m yolo_monitor --source "screen:window=记事本" --screen-backend dxcam

# 屏幕采集 + ROI + 后台运行
.\.venv-ultralytics\Scripts\python.exe -m yolo_monitor --source screen --screen-region "0,0,1280,720" --roi "100,100 600,100 600,600 100,600" --headless

配置参数

参数 默认值 说明
--source 0 摄像头索引、图片、视频、RTSP 或 HTTP 流
--model weights/yolo26n.pt YOLO 模型权重路径
--device auto auto、cpu、0、1 等
--conf 0.35 检测置信度阈值(0-1)
--cooldown 5.0 事件保存冷却秒数
--save-dir runs/monitor 监控输出根目录
--headless false 不显示 OpenCV 窗口
--max-frames 无限制 最多读取帧数后退出
--loop-image false 图片源循环读取
--imgsz 640 YOLO 推理尺寸
--frame-skip 1 每 N 帧推理一次
--classes 无过滤 逗号分隔类别名或 ID
--max-snapshots 无限制 最多保存截图数
--reconnect-delay 1.0 重连初始延迟秒数(指数退避,上限 30s)
--max-reconnect 10 最大重连次数
--track false 启用 ByteTrack 目标跟踪
--roi ROI 多边形顶点,空格分隔坐标对
--buffer-size 0 帧缓冲区大小,>0 启用并行模式
--webhook-url Webhook 通知 URL
--config YAML 配置文件路径
--screen-region 全屏 屏幕采集区域:left,top,width,height
--screen-backend mss 屏幕采集后端:mss 或 dxcam

窗口模式按键:q 退出,s 保存当前显示帧。

YAML 配置

项目根目录提供 config.example.yaml 示例文件,包含所有可配置项和中文注释。使用方式:

# 复制示例文件并修改
copy config.example.yaml my_config.yaml
# 编辑 my_config.yaml 中的参数
# 启动时指定配置文件
.\.venv-ultralytics\Scripts\python.exe -m yolo_monitor --config my_config.yaml

优先级规则:CLI 参数 > YAML 文件 > 默认值。

输出

每次运行在 runs/monitor/<run_id>/ 下创建:

runs/monitor/<run_id>/
  snapshots/*.jpg       # 事件截图和手动截图
  events.jsonl           # 事件日志,每行一条 JSON

events.jsonl 每行包含 timestampsourceframe_indexmodeldeviceimage_pathdetections。启用 --track 时每条检测额外包含 track_id 字段。

运行退出时输出摘要:

summary frames=1200 inference_frames=600 events=15 average_fps=25.30 reconnect_count=0 reconnect_time=0.00s run_dir=runs/monitor/...

开发与测试

# 运行全部测试
.\.venv-ultralytics\Scripts\python.exe -m pytest

# 代码检查
.\.venv-ultralytics\Scripts\ruff.exe check .

# 查看帮助
.\.venv-ultralytics\Scripts\python.exe -m yolo_monitor --help

调试 Ultralytics 源码

third_party/ultralytics 以普通源码形式纳入根仓库(非 submodule),可直接打断点调试:

.\.venv-ultralytics\Scripts\python.exe debug_ultralytics.py

PyCharm 可使用 Debug Ultralytics 运行配置进入 third_party/ultralytics 源码。

版本控制

项目根目录是唯一 Git 仓库。third_party/ultralytics 是纳入根仓库的普通源码快照,更新第三方源码时在根仓库中统一提交。

.gitignore 已忽略:.venv*runs/weights/*.pt__pycache__/.pytest_cache/.ruff_cache/


最后更新:2026-06-13(v0.3.0)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages