基于YOLOv5与OpenCV的车辆检测计数系统:从原理到实战部署
2026/9/3 5:51:00 网站建设 项目流程

简介:本资源是一套完整的车辆目标检测与计数实战项目,面向计算机视觉方向的本科生毕设、课程设计及深度学习初学者,解决交通场景下多类车辆(轿车、卡车、大巴车)的实时检测与统计需求。压缩包共127个文件,含28个核心Python源码(含GUI界面实现)、36个编译后pyc文件、27个YOLOv5配置yaml、2个训练好的.pt模型、13张标注图像及对应XML标签、评估曲线图(loss/precision/recall)、操作说明文档与Docker部署脚本等,整体大小为608.09MB。已有1167人学习下载,内容覆盖从数据加载、模型推理、GUI交互到指标可视化全流程。项目开箱即用,附详细使用说明与训练日志分析,支持直接部署运行或二次开发;预览可见train_batch系列可视化图与prediction结果图,体现模型在复杂交通场景下的检测效果,适合快速构建CV项目原型或深化YOLO系列算法理解。

1. 项目概述:一个拿来即用的车辆检测计数解决方案

最近在整理硬盘,翻出来一个几年前做的老项目,当时是为了给一个停车场管理系统做技术验证。这个项目完整实现了基于YOLOv5和OpenCV的车辆检测与计数功能,并且带有一个用PyQt5写的图形界面。今天把它重新整理、优化并开源出来,希望能帮到正在做类似项目的朋友。这个项目最大的特点就是“开箱即用”,我不仅提供了完整的源代码,还打包了训练好的模型、我自用的数据集、训练过程中的评估指标曲线,以及一份详细的操作说明。无论你是想直接部署使用,还是想学习YOLOv5的训练和部署流程,甚至是研究如何将深度学习模型集成到桌面应用中,这个项目都能提供一个清晰的参考。

简单来说,这个项目能做什么?你运行起来之后,会看到一个桌面窗口。你可以选择打开一个视频文件(比如一段道路监控录像),或者直接调用电脑的摄像头。程序会实时识别视频中的车辆(包括小汽车、卡车、公交车等),用框把它们标出来,并在屏幕的指定区域(比如一条虚拟的“检测线”)统计通过的车辆数量。所有核心功能——从模型推理、图像处理到结果展示和计数逻辑——都被封装好了。对于初学者,你可以直接运行体验效果;对于开发者,你可以深入研究每一行代码,理解从数据标注、模型训练到应用集成的完整链路。

2. 核心思路与技术选型解析

2.1 为什么选择YOLOv5+OpenCV这个组合?

在做车辆检测这类实时性要求较高的应用时,技术选型直接决定了项目的成败。我最终敲定YOLOv5+OpenCV,是经过多方面权衡的。

首先,YOLOv5在速度与精度之间取得了非常好的平衡。相较于两阶段的Faster R-CNN等模型,YOLO(You Only Look Once)系列是单阶段检测器的代表,其“一次扫描,全局预测”的思想天生适合实时视频流处理。YOLOv5更是YOLO家族中的“实用派”,它由Ultralytics团队维护,代码结构清晰,文档丰富,并且提供了从YOLOv5n(纳米级)到YOLOv5x(超大级)一系列不同大小的预训练模型,方便我们根据硬件性能(是边缘设备Jetson Nano还是服务器GPU)进行选择。对于车辆检测,我们通常不需要极致的精度(如YOLOv5x),一个中等大小的YOLOv5s或YOLOv5m模型在1080p视频上就能达到很高的准确率和超过30 FPS的推理速度,完全满足实时性需求。

其次,OpenCV是计算机视觉领域的“瑞士军刀”。我们的任务不仅仅是模型推理,还包括视频流的读取、每一帧图像的预处理(缩放、归一化)、后处理(画检测框、画计数线、显示文字)以及图形界面的绘制。OpenCV提供了极其高效和稳定的接口来完成所有这些任务。它的cv2.VideoCapture可以轻松处理各种格式的视频文件和摄像头流,其绘图函数性能远超许多其他GUI库自带的绘图工具。更重要的是,OpenCV与Python的NumPy数组无缝集成,使得图像数据在模型(通常是PyTorch Tensor)和OpenCV处理流程之间转换非常方便。

最后,PyQt5用于构建GUI。虽然OpenCV有cv2.imshow可以显示图像,但它功能简单,难以构建复杂的交互界面(如按钮、下拉菜单、参数调整滑块)。PyQt5是Qt框架的Python绑定,功能强大,跨平台,能轻松创建出专业的桌面应用程序界面。我们将OpenCV处理后的图像(NumPy数组)转换为Qt支持的图像格式,实时显示在PyQt5的标签(QLabel)上,同时围绕它布置各种控制控件,这样就形成了一个既美观又实用的应用程序。

注意:这个技术栈是经典的“深度学习模型+传统视觉库+GUI框架”组合,其优势在于分工明确、生态成熟、资源丰富。YOLOv5负责“看得懂”,OpenCV负责“处理得快”,PyQt5负责“用得好”。对于大多数中小型视觉项目,这个组合的性价比非常高。

2.2 车辆计数逻辑的设计考量

检测出车辆只是第一步,如何准确计数才是项目的核心挑战。常见的计数方法有“虚拟线法”和“区域法”。在这个项目中,我采用的是更直观、更稳定的虚拟检测线法

1. 虚拟线法的原理:在视频画面的特定位置画一条水平的“检测线”。我们只关心那些与这条线相交的车辆检测框。核心思路是追踪每个车辆框的中心点坐标的移动轨迹。当一个车辆框的中心点从上往下穿过这条线时,我们记为“进入”或“离开”(取决于你的场景定义,比如从屏幕上方进入下方,可以认为是离开监控区域,计数+1)。为了避免同一辆车因为抖动而被重复计数,必须引入一个“防重判”机制。

2. 防重判机制的实现:这是我踩过坑的地方。最初我简单地判断中心点坐标是否跨过线,结果发现车辆在检测线附近抖动时,中心点坐标可能在线的两侧反复横跳,导致一秒内被计数好几次。解决方案是引入一个状态记录。我为每个跟踪的车辆ID维护一个状态,比如‘above’(线上方)或‘below’(线下方)。只有当状态从‘above’变为‘below’时,才触发一次计数,并且在状态改变后设置一个短暂的“冷却时间”或锁定状态,防止立即再次触发。在代码里,我使用了一个字典来记录每个目标ID的最近一次位置状态。

3. 目标跟踪的简化实现:为了给每个车辆分配一个唯一的ID以实现持续跟踪,最严谨的方法是集成一个跟踪算法,如DeepSORT。但为了降低项目复杂度并保证实时性,我采用了一种基于IOU(交并比)的简易跟踪方法。在连续帧之间,计算当前帧检测框与上一帧检测框的IOU。如果IOU超过一个阈值(如0.4),则认为它们是同一个目标,继承其ID。否则,就分配一个新的ID。这种方法在车辆运动平缓、帧率较高时效果很好,且计算开销极小。当然,在车辆密集、遮挡严重时可能会ID切换(ID Switch),但对于一般的道路车流计数,其准确率已经足够。

3. 项目结构与核心模块详解

解压提供的.7z文件后,你会看到一个结构清晰的项目目录。理解这个结构,对于你后续的修改和调试至关重要。

vehicle_detection_counter/ ├── data/ # 数据相关 │ ├── dataset/ # 我使用的车辆数据集(images, labels) │ └── video/ # 用于测试的示例视频 ├── models/ # 模型相关 │ ├── yolov5s_vehicle.pt # 训练好的YOLOv5s模型权重 │ └── yolov5/ # YOLOv5官方源码(或精简版) ├── runs/ # 训练与评估输出 │ └── train/ # 训练过程记录,包含损失曲线、精度曲线等图片 ├── utils/ # 工具函数 │ ├── track.py # 简易跟踪与计数逻辑 │ ├── plots.py # 画检测框、标签的工具函数 │ └── gui_helpers.py # GUI相关的辅助函数 ├── detect.py # 主推理脚本(命令行版本) ├── train.py # 模型训练脚本 ├── gui_main.py # 带GUI的主程序入口 ├── requirements.txt # Python依赖包列表 └── README.md # 详细的操作使用说明

3.1 模型训练模块 (train.py)

这个文件直接使用了YOLOv5官方的训练脚本,但其中的数据配置和参数是针对车辆数据集调整过的。核心是data/vehicle.yaml这个配置文件,它指明了训练集、验证集的路径,以及车辆类别的名称和数量。

关键训练参数解析:

  • --weights yolov5s.pt: 这里使用的是YOLOv5s的预训练权重进行迁移学习。从COCO等大型数据集预训练的模型初始化,能极大加快收敛速度并提升最终精度。
  • --data data/vehicle.yaml: 指向我们的自定义数据集配置文件。
  • --epochs 100: 训练轮数。对于车辆检测,100-150轮通常足够。
  • --img-size 640: 输入图像的尺寸。YOLOv5会将所有图像缩放到此尺寸进行训练。640是速度和精度的良好折衷。
  • --batch-size 16: 批大小。取决于你的GPU显存,8、16、32都是常见值。
  • --device 0: 指定使用第0块GPU。如果是CPU则设为--device cpu

训练过程的所有日志和权重都会保存在runs/train/exp目录下。里面最重要的就是那些.png曲线图:

  • results.png: 包含了训练集和验证集的边界框损失、分类损失、目标度损失,以及mAP@0.5、mAP@0.5:0.95等关键指标。通过观察这些曲线是否平稳下降并收敛,可以判断训练是否正常。
  • confusion_matrix.png: 混淆矩阵,直观展示模型在各个类别上的分类错误情况。
  • val_batchX_pred.jpg: 验证集的批次预测样例,可以直观看到模型在未见过的数据上的检测效果。

3.2 图形界面核心 (gui_main.py)

这是用户交互的核心。我使用PyQt5的QtDesigner工具先设计了界面布局(生成.ui文件),再转换为Python代码。主窗口主要包含以下几个区域:

  1. 视频显示区:一个大的QLabel控件,用于实时显示OpenCV处理后的视频帧,上面叠加了检测框、标签和计数线。
  2. 控制面板
    • 源选择:按钮或下拉菜单,用于选择“摄像头”(索引0,1...)或“视频文件”。
    • 开始/停止:控制视频流的启停。
    • 参数调节:滑块(QSlider)用于实时调整检测置信度阈值(conf-thres)和NMS的IOU阈值(iou-thres)。置信度阈值越低,检测出的目标越多(但误检也可能增多);IOU阈值影响重叠框的合并程度。
    • 计数显示:一个QLCDNumber或大的QLabel,动态显示当前累计的车辆数量。
    • 计数线设置:输入框或滑块,允许用户动态调整画面中那条黄色计数线的Y坐标位置。

界面与逻辑的绑定:PyQt5使用信号(Signal)与槽(Slot)机制。例如,当用户点击“打开文件”按钮时,会触发该按钮的clicked信号,这个信号连接到一个自定义的槽函数open_file_dialog()。在这个槽函数里,我们调用QFileDialog让用户选择视频文件,然后用OpenCV打开它,并启动一个定时器(QTimer)。定时器每隔几十毫秒(根据帧率计算)触发一次,在对应的槽函数中执行读取一帧 -> YOLOv5推理 -> 计数逻辑 -> OpenCV绘图 -> 转换为Qt图像并显示这一整套流程。这种设计确保了GUI界面不会因为繁重的计算而卡死(计算在定时器槽函数中完成,主事件循环保持响应)。

3.3 检测与计数引擎 (detect.pyutils/track.py)

detect.py是YOLOv5官方的推理脚本增强版。我主要修改了以下部分以适应计数任务:

  1. 视频流循环:将原本对单张图片或一批图片的处理,改写成对cv2.VideoCapture对象的连续帧读取循环。
  2. 集成计数逻辑:在模型推理得到预测框(pred)之后,不是直接画图,而是先将这些框送入utils/track.py中的Counter类进行处理。这个类负责分配ID、判断是否穿过检测线并更新计数。
  3. 可视化增强:在调用画图函数时,不仅画出带类别标签的框,还在画面顶部或底部绘制计数线和当前计数结果。

utils/track.py是计数逻辑的核心。Counter类的主要属性和方法包括:

  • line_pos: 检测线的Y坐标。
  • counter: 累计计数。
  • track_history: 字典,以目标ID为键,存储其最近的中心点坐标和位置状态(‘above‘/’below‘)。
  • update(detections): 核心方法。输入当前帧的所有检测框,通过IOU匹配更新已有目标的轨迹,判断新目标,并执行穿线计数判断。
  • is_crossing_line(center, prev_center, prev_state): 判断一个目标的中心点移动是否导致了有效的穿线行为。

4. 环境搭建与快速启动指南

为了让任何人都能快速跑起来,项目的requirements.txt文件已经列出了所有必需的依赖。但有些库的安装有坑,这里我详细说明。

4.1 一步到位的环境配置(推荐)

最省事的方法是使用Conda创建一个独立的Python环境。

# 1. 创建并激活环境(Python 3.8是一个兼容性很好的版本) conda create -n vehicle_detection python=3.8 conda activate vehicle_detection # 2. 安装PyTorch(这是最大的坑,必须去官网核对) # 首先,打开 https://pytorch.org/get-started/locally/ # 根据你的CUDA版本(在命令行输入 `nvidia-smi` 查看)选择命令。 # 例如,如果你有CUDA 11.3,命令可能是: pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113 # 如果你没有NVIDIA GPU,或者想先用CPU测试,安装CPU版本: pip install torch torchvision torchaudio # 3. 安装项目其他依赖 # 切换到项目根目录,执行: pip install -r requirements.txt

requirements.txt里关键包的作用:

  • opencv-python: OpenCV的核心库。
  • PyQt5: 用于构建图形界面。
  • pyqt5-tools: 包含Qt Designer等工具(可选,用于修改界面)。
  • matplotlib: 用于绘制训练曲线(如果你要重新训练)。
  • seaborn: 美化绘图。
  • pandas: 处理数据日志。
  • ultralytics: 这是YOLOv5官方维护的pip包。但在这个项目中,我们使用的是克隆的YOLOv5源码,所以这个包可能不是必须的,但安装也无妨。

4.2 可能遇到的安装问题与解决

  1. “ERROR: Could not find a version that satisfies the requirement torch...”

    • 原因:PyTorch的安装命令必须严格匹配你的系统和CUDA版本。
    • 解决:再次强调,去PyTorch官网复制命令。如果不确定CUDA版本,就安装CPU版本。CPU版本对于演示和测试完全够用,只是速度慢。
  2. “ModuleNotFoundError: No module named ‘PyQt5.sip‘”

    • 原因:PyQt5版本兼容性问题。
    • 解决:尝试先卸载再安装指定版本:pip uninstall PyQt5 PyQt5-sip pyqt5-tools -y,然后pip install PyQt5==5.15.7 PyQt5-Qt5==5.15.2 PyQt5-sip==12.11.0
  3. OpenCV无法读取视频或摄像头

    • 原因:缺少视频编解码后端。
    • 解决:安装完整版的OpenCV:pip uninstall opencv-python -y,然后安装pip install opencv-contrib-python。这个版本包含了更多功能。

4.3 运行你的第一个车辆计数程序

环境准备好后,运行就非常简单了。

# 确保在项目根目录下,且虚拟环境已激活 python gui_main.py

如果一切顺利,一个GUI窗口会弹出。接下来你可以:

  1. 点击“打开视频”按钮,选择项目data/video目录下的示例视频(比如highway.mp4)。
  2. 点击“开始”按钮。
  3. 你会看到视频开始播放,车辆被绿色框识别出来,画面中间有一条黄色的水平线,车辆穿过时,左上角的计数器会增加。
  4. 尝试拖动“置信度阈值”滑块。调低它会看到更多检测框(可能包含一些误检),调高它则只显示置信度很高的车辆。
  5. 调整“计数线位置”滑块,将黄线移动到车流必经之路。

5. 从零训练你自己的车辆检测模型

虽然我提供了训练好的模型,但如果你想用在自己的数据集上,或者想深入理解训练过程,这部分是为你准备的。

5.1 数据准备与标注

  1. 收集图片:收集包含车辆的各种场景图片(白天/夜晚、晴天/雨天、高速/市区)。数量上,建议至少500-1000张,覆盖越广,模型鲁棒性越强。将图片放在data/dataset/images/traindata/dataset/images/val文件夹下(按8:2或9:1划分训练集和验证集)。
  2. 标注工具:使用labelImgRoboflow进行标注。标注格式选择YOLO格式。每张图片会生成一个同名的.txt文件。
  3. YOLO格式详解.txt文件中每一行代表一个标注对象。格式为:<class_id> <x_center> <y_center> <width> <height>。所有坐标都是归一化的,即相对于图片宽度和高度的比例值(0到1之间)。例如,0 0.5 0.5 0.2 0.1表示类别0(如“car”),其边界框中心位于图片正中央,宽度占图片宽的20%,高度占图片高的10%。
  4. 创建配置文件:在data/目录下创建my_vehicle.yaml,内容如下:
    # 类别数量和名称 nc: 3 # 例如,我定义了3类:car, bus, truck names: ['car', 'bus', 'truck'] # 训练集和验证集图片的路径(相对于项目根目录) train: data/dataset/images/train val: data/dataset/images/val

5.2 启动训练与监控

准备好数据后,训练就是一行命令的事:

python train.py --img 640 --batch 16 --epochs 100 --data data/my_vehicle.yaml --weights yolov5s.pt --device 0

训练过程中的监控技巧:

  • 训练开始后,会在runs/train/exp(如果exp存在则为exp1, exp2...)文件夹下生成实时日志。
  • 你可以使用TensorBoard来可视化训练过程,更直观:tensorboard --logdir runs/train,然后在浏览器打开localhost:6006
  • 重点看两个指标
    • metrics/mAP_0.5:在IOU阈值为0.5时的平均精度均值。这是最常用的指标,训练过程中它会稳步上升,最终趋于平稳。达到0.9以上说明模型很不错。
    • loss/box_loss,loss/obj_loss,loss/cls_loss:三个损失值。它们应该随着训练轮数增加而快速下降,然后在小范围内波动。如果损失不降反升,可能是学习率太高或数据有问题。

5.3 模型导出与使用

训练完成后,最好的模型权重会保存在runs/train/exp/weights/best.pt。你可以直接用它替换我提供的models/yolov5s_vehicle.pt,然后在GUI中加载使用。

如果你想将模型部署到其他平台(如C++环境、移动端),可能需要导出为其他格式。YOLOv5提供了导出脚本:

python export.py --weights runs/train/exp/weights/best.pt --include onnx # 导出为ONNX格式

导出的ONNX模型可以被OpenCV的dnn模块直接读取,实现纯OpenCV推理,从而摆脱对PyTorch的依赖,这在某些生产环境中非常有用。

6. 性能优化与实战调参心得

在实际部署中,我们总是希望程序跑得更快、更准、更稳。下面分享一些我摸索出来的优化经验。

6.1 推理速度优化

  1. 模型轻量化:如果是在CPU或树莓派上运行,YOLOv5s可能都嫌大。可以尝试更小的模型yolov5n,或者使用模型剪枝量化技术。PyTorch提供了动态量化和静态量化工具,可以将FP32模型转换为INT8,在几乎不损失精度的情况下显著提升速度。
  2. OpenCV的DNN模块:如前所述,将模型导出为ONNX,然后用OpenCV的cv2.dnn.readNetFromONNX()加载并推理。OpenCV DNN在某些CPU上的优化比PyTorch要好。不过,预处理和后处理代码需要相应调整。
  3. 图像尺寸与帧率权衡:在detect.py或GUI的推理循环中,可以降低输入模型的图像尺寸(--img-size 320),这会大幅提升速度,但会降低对小目标的检测能力。也可以降低视频的处理帧率,比如不是每一帧都推理,而是每隔一帧(frame_skip=2)推理一次,用上一帧的结果来近似当前帧,这对车流速度不快的场景很有效。
  4. 多线程处理:GUI的主线程负责响应界面,推理和图像处理放在另一个工作线程(QThread)中,避免界面卡顿。这是生产级应用的必要优化。

6.2 检测精度调参

  1. 置信度阈值(conf-thres):这是最直接的旋钮。默认0.25是一个平衡值。在干净的高速公路场景,可以调到0.4-0.5以减少误检(如将阴影误认为车)。在拥堵、模糊的城区场景,可能需要降到0.15-0.2才能不漏检。
  2. NMS的IOU阈值(iou-thres):默认0.45。当车辆重叠严重时(如堵车),降低这个值(如0.3)可以让重叠的车辆都被检测出来;调高它(如0.6)则会让重叠框合并得更激进,可能只保留一个框。
  3. 数据增强(Data Augmentation):在train.py中,YOLOv5默认开启了强大的数据增强(Mosaic, MixUp等)。如果你的数据集背景单一,可以适当增强;但如果你的数据已经非常多样,过度的增强反而可能有害。可以在data/hyps/hyp.scratch-low.yaml中调整增强参数,例如减少色彩抖动(hsv_h,hsv_s,hsv_v)的强度。

6.3 计数逻辑的鲁棒性增强

这是保证计数准确的关键,我为此迭代了好几个版本。

  1. 检测线位置的动态校准:固定的一条线可能不适应所有视频。我后来增加了一个功能:允许用户在GUI中用鼠标拖动这条线到任意位置,程序会实时保存这个位置。甚至可以实现一个“学习模式”,让用户标定几帧中车辆应该触发计数的位置,程序自动计算出一条最优的线。
  2. 多线计数与方向判断:对于双向车道,可以画两条线,分别统计两个方向的车辆。通过判断中心点移动方向(比较连续帧的Y坐标变化),可以区分是“进入”还是“离开”。
  3. 跟踪算法的升级:简易IOU跟踪在复杂场景会失效。如果项目要求高,集成DeepSORT是更好的选择。DeepSORT在IOU匹配的基础上,加入了外观特征(使用一个简单的CNN提取)匹配,能有效处理短时遮挡和ID切换。网上有将DeepSORT与YOLOv5结合的成熟开源代码,可以整合进来替换掉utils/track.py中的简易跟踪器。
  4. 误检过滤:有时远处的行人、自行车也可能被误检为车辆。除了调高置信度,还可以根据车辆框的宽高比进行过滤。小汽车的宽高比和行人、电线杆的宽高比有明显区别。在计数前,可以加入一个判断:if w/h > 1.2 and w/h < 3.0: count as vehicle

7. 常见问题排查与解决实录

即使有了完整的代码和说明,在实际运行中你还是可能会遇到各种问题。这里把我遇到的和网友们常问的问题汇总一下。

7.1 运行时报错集锦

Q1: 运行python gui_main.py提示AttributeError: ‘Upsample‘ object has no attribute ‘recompute_scale_factor‘

  • 原因:PyTorch版本过高(>=1.11)与YOLOv5旧版本代码的兼容性问题。
  • 解决:打开models/yolov5/common.py文件,找到Upsample类,将其forward方法修改为:
    def forward(self, x): return F.interpolate(x, size=self.size, scale_factor=self.scale_factor, mode=self.mode, align_corners=self.align_corners)
    即去掉recompute_scale_factor=self.recompute_scale_factor这个参数。

Q2: GUI界面打开,点击“开始”后程序卡死无响应

  • 原因:繁重的推理计算阻塞了GUI的主事件循环。
  • 解决:这是最经典的问题。必须将视频处理和推理放到单独的线程中。在PyQt5中,创建一个继承自QThread的类(如VideoThread),将while(cap.isOpened())循环放在这个线程的run()方法里。通过信号(Signal)将处理好的图像帧发送回主线程更新UI。我的项目初始版本可能为了简洁没有做线程分离,你在实际使用时如果遇到卡顿,这是首要的优化点。

Q3: 计数不准,数字乱跳

  • 原因:大概率是防重判机制没生效,或者检测线位置设置不合理。
  • 排查
    1. 检查utils/track.pyCounter类的update逻辑,确保状态切换逻辑正确(例如,只有从‘above‘到’below‘才计数)。
    2. 在GUI上打印出每个目标的ID和状态,观察穿过检测线时状态变化是否正确。
    3. 调整检测线位置,确保它穿过车辆主体的中间偏下位置,而不是车顶或车轮(车顶可能被遮挡,车轮在相邻帧间抖动大)。
    4. 尝试增加一个“死区”(dead zone)。例如,当中心点穿过线后,在接下来的10帧内,即使它回到线上方,也不将其状态改回‘above‘,避免抖动。

Q4: 在我的视频上检测效果很差,很多车检不出来

  • 原因:训练数据与你的实际场景差异太大(域差异)。我的模型是在公开数据集(如UA-DETRAC, BDD100K)和部分自采数据上训练的,可能不适应你的特定场景(如不同车型、不同光照、不同拍摄角度)。
  • 解决:这就是为什么你需要训练自己的模型。按照第5部分的指南,采集并标注至少几十张你场景下的图片,然后用我的模型进行微调(Fine-tuning)。命令如下:
    python train.py --data data/my_scene.yaml --weights models/yolov5s_vehicle.pt --epochs 50 --device 0
    使用预训练权重yolov5s_vehicle.pt而不是官方的yolov5s.pt作为起点,能让模型快速适应你的新场景,所需的数据量和时间远少于从头训练。

7.2 项目扩展思路

这个项目是一个很好的起点,你可以基于它扩展出更多功能:

  1. 多类别细分:不仅检测“车辆”,还可以细分为“轿车”、“SUV”、“卡车”、“摩托车”、“公交车”等,并进行分类计数。
  2. 流量统计与可视化:除了总数,可以统计每分钟、每小时的流量,并绘制成实时曲线图显示在GUI侧边栏。
  3. 违规检测:在画面中划定禁停区或禁行区,检测是否有车辆违规停留或逆行。
  4. 车牌识别集成:在检测到车辆后,将车辆区域裁剪出来,送入一个专门的车牌识别(LPR)模型,实现车牌号码的提取和记录。
  5. Web服务化:使用Flask或FastAPI将核心检测计数功能封装成REST API,方便与其他系统(如停车场管理系统、交通监控平台)集成。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询