devztr/traffic-monitor
GitHub: devztr/traffic-monitor
该项目是一个使用 YOLOv8 和纯手写逻辑实现的实时交通车辆计数器,能够检测、跟踪并统计跨越虚拟计数线的车辆数量及类型。
Stars: 0 | Forks: 0
# 使用 YOLOv8 的实时交通车辆计数器
这是一个计算机视觉项目,可以实时统计穿越某条线的车辆数量——该项目从零开始构建,不依赖任何像 Supervision 这样的高级跟踪库。

## 功能介绍
将其指向任何交通视频,它将会:
- 实时检测并跟踪汽车、公交车和卡车
- 统计跨越虚拟线 **进入 (IN)** 和 **驶出 (OUT)** 的车辆数量
- 在视频画面上显示实时仪表板
- 视频结束时显示清晰的**汇总柱状图**——可用于按车辆类型分析交通负载
## 工作原理
YOLOv8 负责检测,并在连续帧中分配持久的跟踪 ID。接下来的所有逻辑都是自定义的:
- 在画面中间绘制一条**水平计数线**
- 逐帧跟踪每辆车辆的 Y 轴中心点,当它从线的一侧移动到另一侧时,即记录一次跨越
- 为了处理像卡车和公交车这样的大型车辆(YOLOv8 有时会对它们进行两次检测),编写了**基于 IOU 的自定义去重**函数——没有使用任何外部库,纯粹是几何计算
- 最后,通过 matplotlib 渲染出每种车辆类型的进入 (IN) / 驶出 (OUT) / 总计 (TOTAL) 的详细图表
不使用 Supervision。不使用 Roboflow 工具。仅使用 YOLO + OpenCV + 纯手写的逻辑。
## 功能特性
- 多类别车辆检测——汽车、公交车、卡车
- 双向计数(进入 (IN) / 驶出 (OUT))
- 使用 Intersection over Union (IOU) 进行自定义重复边界框去除
- 实时屏幕仪表板
- 视频结束后生成汇总图表(同时保存为 `traffic_summary.png`)
## 输出示例

## 安装与使用
```
pip install -r requirements.txt
python traffic_monitor.py
```
将脚本中的 `video_path` 指向您的交通视频文件,就可以开始了。
## 技术栈
| 工具 | 用途 |
|------|---------|
| YOLOv8 (Ultralytics) | 车辆检测与跟踪 |
| OpenCV | 视频处理、绘图 |
| NumPy | 边界框数学运算、IOU 计算 |
| Matplotlib | 汇总图表 |
## 项目结构
```
traffic-monitor/
├── main.py
├── requirements.txt
├── README.md
├── working.png
├── traffic_summary.png
```
## 为什么开发这个项目?
大多数交通计数器教程只是把所有内容封装在 Supervision 库中——这没问题,但你无法真正了解底层发生了什么。我想理解其实际机制:你如何知道一辆车辆*穿越*了一条线?当检测器在同一辆卡车上触发了两个边界框时,你如何避免对同一辆卡车进行两次计数?
从零开始构建计数和去重逻辑使这成为了一次极好的学习体验,而且坦白说,这也是一个在交流时更有趣的项目。
标签:OpenCV, YOLOv8, 交通流量监测, 目标检测, 计算机视觉, 车辆计数, 逆向工具