devztr/traffic-monitor

GitHub: devztr/traffic-monitor

该项目是一个使用 YOLOv8 和纯手写逻辑实现的实时交通车辆计数器,能够检测、跟踪并统计跨越虚拟计数线的车辆数量及类型。

Stars: 0 | Forks: 0

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