Skip to content

Commit 66956f1

Browse files
SEMHAQclaudecharon191910
authored
添加项目yolo11n_vehicle_counter (#5215)
* update readme&requirements * feat: 首次提交 - YOLO11n 车辆计数系统 - 创建 main.py 作为项目入口文件,支持命令行参数配置 - 重构 yolo_vehicle_counter.py,支持函数调用和外部参数传入 - 将所有代码注释改为中文并优化说明 - 将路径配置提取到文件开头常量区域,便于管理 - 更新 README.md,中文化并完善项目文档 - 添加中文使用说明和配置说明 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: 重构YOLO11n车辆计数系统 - 重命名目录为yolo11n_vehicle_counter(符合Python命名规范) - 更新README.md,添加模型下载和Google Drive链接说明 - 添加目录创建步骤和.gitignore配置说明 - 重构yolo_vehicle_counter.py为函数式架构 - 所有注释中文化并优化 - 路径配置集中管理,支持外部参数传入 - 创建main.py命令行入口,支持参数配置 - 更新.gitignore排除大文件目录,减小项目体积 Co-Authored-By: charon191910 <2233145030@qq.com> Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: 完成YOLO11n车辆计数系统重构 - 成功重命名目录为yolo11n_vehicle_counter(符合Python命名规范) - 更新README.md,添加模型下载说明和Google Drive链接 - 添加目录创建步骤和.gitignore配置说明 - 所有代码注释中文化并优化 - 路径配置集中管理,支持外部参数传入 - main.py命令行入口支持参数配置 - .gitignore排除大文件目录,减小项目体积 Co-Authored-By: charon191910 <2233145030@qq.com> Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor: 重命名目录为符合Python命名规范的小写格式 - 将 YOLO11n_Vehicle_Counter 重命名为 yolo11n_vehicle_counter - 符合PEP 8命名规范(小写字母+下划线) - 更新所有相关引用和路径 Co-Authored-By: charon191910 <2233145030@qq.com> Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: charon191910 <2233145030@qq.com>
1 parent 55efc49 commit 66956f1

6 files changed

Lines changed: 466 additions & 0 deletions

File tree

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,3 +129,5 @@ desktop.ini
129129
*.tmp
130130
*.temp
131131
.mujoco/
132+
site/
133+
.claude/
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
dataset/
2+
models/
3+
res/
Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
# YOLO11n 车辆计数系统
2+
3+
这是一个基于 YOLO11n 模型的实时车辆检测、追踪和计数系统。项目使用 Supervision 库进行可视化标注、目标追踪和检测平滑处理,构建了一个健壮的车辆监控系统。
4+
5+
## 项目特点
6+
7+
- **YOLO11n 模型**:使用轻量级 YOLO11n 模型进行高精度实时车辆检测,能够有效区分汽车、摩托车、公交车和卡车等多种车辆类型
8+
- **Supervision 库**:用于标注视频帧、可视化边界框、追踪目标,支持 ByteTrack 高精度目标追踪和 DetectionsSmoother 检测平滑
9+
- **中文界面**:所有注释和文档均为中文,便于理解和维护
10+
- **模块化设计**:路径配置集中管理,支持命令行参数,使用灵活
11+
12+
## 工作流程
13+
14+
1. **目标检测**:使用 YOLO11n 模型检测视频帧中的车辆,输出边界框和分类结果
15+
2. **目标追踪**:使用 ByteTrack 算法跨帧追踪车辆,确保每个车辆只被计数一次
16+
3. **可视化标注**:使用 Supervision 库标注边界框、标签和轨迹线
17+
4. **车辆计数**:基于车辆穿越预设边界线进行计数,实时显示结果
18+
19+
## 项目结构
20+
21+
```
22+
YOLO11n_Vehicle_Counter/
23+
├── main.py # 项目入口文件,支持命令行参数
24+
├── scripts/
25+
│ └── yolo_vehicle_counter.py # 主要车辆计数逻辑
26+
├── models/ # 存放模型文件
27+
│ └── yolo11n.pt # YOLO11n 模型权重
28+
├── dataset/ # 存放输入视频
29+
│ └── sample.mp4 # 示例视频
30+
├── res/ # 存放输出结果
31+
│ └── sample_res.mp4 # 处理结果
32+
├── requirements.txt # 依赖包列表
33+
└── README.md # 项目说明文档
34+
```
35+
36+
## 安装
37+
38+
1. 安装依赖包:
39+
```bash
40+
pip install -r requirements.txt
41+
```
42+
43+
2. **创建项目目录结构**
44+
项目使用 `.gitignore` 排除了大文件目录,因此在运行前需要手动创建以下目录:
45+
```bash
46+
mkdir -p models dataset res
47+
```
48+
49+
3. 下载模型文件:
50+
51+
**方法一:从官方源下载**
52+
- 访问 [YOLO11官方文档](https://docs.ultralytics.com/zh/models/yolo11/) 下载YOLO11n模型
53+
- 或运行命令下载:
54+
```bash
55+
yolo download model=yolo11n.pt
56+
```
57+
58+
**方法二:从Google Drive下载**
59+
- 访问 [Google Drive链接](https://drive.google.com/drive/folders/10LTBv6ae3D-Tifn__pSU7krhtJOIl_So?usp=drive_link)
60+
- 下载 `yolo11n.pt` 模型文件
61+
- 放置到 `models/` 目录下
62+
63+
4. 准备测试视频:
64+
- 从上述Google Drive链接中下载示例视频 `sample.mp4`
65+
- 放置到 `dataset/` 目录下
66+
- 或准备你自己的视频文件
67+
68+
> **注意**:为了减小项目体积,模型文件和视频文件已从版本控制中排除。你需要手动创建目录并下载所需文件。大型文件存储在Google Drive中,便于分发和更新。
69+
70+
## 使用方法
71+
72+
### 方式一:使用 main.py 命令行入口
73+
74+
```bash
75+
# 使用默认配置运行
76+
python main.py
77+
78+
# 指定自定义路径
79+
python main.py --model models/custom_model.pt --input videos/test.mp4 --output results/output.mp4
80+
81+
# 使用相对路径
82+
python main.py --input ../videos/cars.mp4 --output ../results/cars_counted.mp4
83+
84+
# 查看帮助信息
85+
python main.py --help
86+
```
87+
88+
### 方式二:直接运行脚本
89+
90+
```bash
91+
# 修改 scripts/yolo_vehicle_counter.py 中的路径配置后运行
92+
cd scripts
93+
python yolo_vehicle_counter.py
94+
```
95+
96+
## 配置文件说明
97+
98+
`scripts/yolo_vehicle_counter.py` 中,路径配置位于文件开头:
99+
100+
```python
101+
# ==================== 配置路径 ====================
102+
MODEL_PATH = "../models/yolo11n.pt" # 模型文件路径
103+
INPUT_VIDEO_PATH = "../dataset/sample.mp4" # 输入视频文件路径
104+
OUTPUT_VIDEO_PATH = "../res/sample_res.mp4" # 输出视频文件路径
105+
# ==================================================
106+
```
107+
108+
## 功能说明
109+
110+
- **支持车辆类型**:汽车(car)、摩托车(motorbike)、公交车(bus)、卡车(truck)
111+
- **检测置信度**:默认阈值为 0.5,可根据需要调整
112+
- **追踪算法**:ByteTrack,支持高帧率视频
113+
- **计数逻辑**:基于穿越水平线的车辆计数
114+
- **可视化**
115+
- 圆角矩形边界框
116+
- 车辆标签(包含追踪ID和类别)
117+
- 运动轨迹
118+
- 半透明覆盖区域
119+
- 实时计数显示
120+
121+
## 运行效果
122+
123+
### 示例视频
124+
你可以从 [Google Drive链接](https://drive.google.com/drive/folders/10LTBv6ae3D-Tifn__pSU7krhtJOIl_So?usp=drive_link) 下载示例视频进行测试:
125+
126+
1. **`sample.mp4`** - 基础测试视频,展示车辆检测和计数效果
127+
2. **`sample_res.mp4`** - 运行后的测试视频结果。
128+
129+
### 可视化效果
130+
运行程序后,你将看到:
131+
- 实时视频处理窗口
132+
- 车辆边界框和标签(包含车辆ID和类型)
133+
- 车辆运动轨迹线
134+
- 实时车辆计数显示
135+
- 计数线和感兴趣区域(ROI)可视化
136+
- 处理后的视频保存到指定路径
137+
138+
### 支持的车辆类型
139+
- 🚗 汽车 (car)
140+
- 🏍️ 摩托车 (motorbike)
141+
- 🚌 公交车 (bus)
142+
- 🚛 卡车 (truck)
143+
144+
### 交互控制
145+
- 按 'p' 键可以暂停/继续视频播放
146+
- 实时显示处理帧率和计数结果
147+
148+
## 注意事项
149+
150+
- 按 'p' 键可以暂停/继续视频播放
151+
- 确保输入视频清晰,车辆目标可见
152+
- 可根据实际场景调整计数线位置(`limits` 参数)
153+
- 建议使用 GPU 加速以提高处理速度
154+
155+
## 依赖包
156+
157+
- ultralytics (YOLO 模型)
158+
- supervision (标注和追踪)
159+
- opencv-python (视频处理)
160+
- numpy (数值计算)
161+
162+
---
163+
164+
*项目持续更新中,欢迎提出建议和反馈*
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
#!/usr/bin/env python3
2+
"""
3+
YOLO11n Vehicle Counter - 主入口文件
4+
=====================================
5+
6+
这个脚本是YOLO11n车辆计数项目的入口点,提供了命令行接口来运行车辆检测和视频处理。
7+
8+
使用方法:
9+
python main.py [--model MODEL_PATH] [--input INPUT_VIDEO] [--output OUTPUT_VIDEO]
10+
11+
参数:
12+
--model 模型文件路径 (默认: models/yolo11n.pt)
13+
--input 输入视频路径 (默认: dataset/sample.mp4)
14+
--output 输出视频路径 (默认: res/sample_res.mp4)
15+
--help 显示帮助信息
16+
"""
17+
18+
import sys
19+
import os
20+
import argparse
21+
22+
# 添加scripts目录到Python路径,以便可以导入其中的模块
23+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'scripts'))
24+
25+
def main():
26+
"""主函数 - 解析参数并运行车辆计数脚本"""
27+
parser = argparse.ArgumentParser(
28+
description='YOLO11n Vehicle Counter - 车辆检测与计数系统',
29+
formatter_class=argparse.RawDescriptionHelpFormatter,
30+
epilog="""
31+
使用示例:
32+
# 使用默认路径运行
33+
python main.py
34+
35+
# 指定自定义路径
36+
python main.py --model models/custom_model.pt --input videos/test.mp4 --output results/output.mp4
37+
38+
# 使用相对路径
39+
python main.py --input ../videos/cars.mp4 --output ../results/cars_counted.mp4
40+
"""
41+
)
42+
43+
parser.add_argument(
44+
'--model',
45+
default='models/yolo11n.pt',
46+
help='YOLO模型文件路径 (默认: models/yolo11n.pt)'
47+
)
48+
49+
parser.add_argument(
50+
'--input',
51+
default='dataset/sample.mp4',
52+
help='输入视频文件路径 (默认: dataset/sample.mp4)'
53+
)
54+
55+
parser.add_argument(
56+
'--output',
57+
default='res/sample_res.mp4',
58+
help='输出视频文件路径 (默认: res/sample_res.mp4)'
59+
)
60+
61+
args = parser.parse_args()
62+
63+
# 打印运行信息
64+
print("=" * 60)
65+
print("YOLO11n Vehicle Counter - 启动")
66+
print("=" * 60)
67+
print(f"📁 模型路径: {args.model}")
68+
print(f"🎬 输入视频: {args.input}")
69+
print(f"💾 输出视频: {args.output}")
70+
print("=" * 60)
71+
72+
# 检查文件是否存在
73+
if not os.path.exists(args.model):
74+
print(f"❌ 错误: 模型文件不存在: {args.model}")
75+
sys.exit(1)
76+
77+
if not os.path.exists(args.input):
78+
print(f"❌ 错误: 输入视频不存在: {args.input}")
79+
sys.exit(1)
80+
81+
# 创建输出目录(如果不存在)
82+
output_dir = os.path.dirname(args.output)
83+
if output_dir and not os.path.exists(output_dir):
84+
os.makedirs(output_dir)
85+
print(f"📁 创建输出目录: {output_dir}")
86+
87+
# 运行车辆计数脚本
88+
try:
89+
# 动态修改脚本中的路径配置
90+
from yolo_vehicle_counter import main as run_counter
91+
92+
# 传入参数到脚本
93+
run_counter(args.model, args.input, args.output)
94+
print("✅ 车辆计数完成!")
95+
96+
except ImportError:
97+
print("❌ 错误: 无法导入 yolo_vehicle_counter 模块")
98+
print("确保scripts目录中有yolo_vehicle_counter.py文件")
99+
sys.exit(1)
100+
except Exception as e:
101+
print(f"❌ 错误: {e}")
102+
sys.exit(1)
103+
104+
if __name__ == "__main__":
105+
main()
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
numpy
2+
opencv-python
3+
ultralytics
4+
supervision
5+
torch

0 commit comments

Comments
 (0)