【YOLO 系列】基于YOLO V8的高速公路摄像头车辆检测识别系统【python源码+Pyqt5界面+数据集+训练代码】

news2024/11/25 0:24:24

摘要:

基于YOLO V8的高精度高速公路摄像头车辆检测识别系统可用于公路上车辆的识别检测与定位,利用YOLO V8算法可实现图片、视频、摄像头等方式对不同车辆进行目标检测识别,另外支持结果可视化与检测结果的导出。本系统采用YOLO V8目标检测模型训练数据集,使用Pyqt5库来搭建页面展示系统,同时支持ONNX、PT等模型作为权重模型的输入。本系统支持的功能包括烟头训练模型的导入、初始化;置信分与IOU阈值的调节、图像上传、检测、可视化结果展示、结果导出与结束检测;视频的上传、检测、可视化结果展示、结果导出与结束检测;摄像头的上传、检测、可视化结果展示与结束检测;已检测目标列表、位置信息;以及推理用时。本博文提供了完整的Python代码和使用教程,适合新入门的朋友参考,完整代码资源文件请转至文末的下载链接

优势:

  1. 高效实时检测:YOLO V8 以其高效的设计和优化算法,在高速公路等场景下能够实时准确地检测车辆,为交通监控和管理提供了迅速的响应能力。

  2. 单次推理多目标:YOLO V8 采用单次推理即可实现多目标检测,有效提高了车辆识别速度和效率,无需多次处理同一张图片,节省了计算资源和时间成本。

  3. 多类别识别能力:经过训练后的 YOLO V8 能够准确识别各种类型的车辆,适用于不同场景下的车辆识别需求。

  4. 灵活定制:YOLO V8 模型可根据实际需求进行定制和优化,例如针对特定场景或车辆类型进行训练,以提升检测准确性和适用性。

应用场景:

  1. 交通监控与管理:YOLO V8 可应用于高速公路、城市道路等交通场景,实现车辆的实时监控和管理,包括交通流量统计、违章检测等功能,提升了交通管理的效率和水平。

  2. 智能停车管理:利用 YOLO V8 进行车辆识别,实现智能停车场管理,包括车辆入场和出场自动识别、车位监控和管理等功能,提高了停车场的利用率和管理效率。

  3. 安全监控与预警:YOLO V8 可用于安全监控系统,及时发现交通事故、异常情况或可疑车辆,实现预警和应急处理,提升了道路交通的安全性和畅通性。

  4. 城市交通优化:通过分析 YOLO V8 检测结果,获取城市交通流量、拥堵情况等数据,为城市规划和交通优化提供决策支持,改善了城市交通运输环境,提升了城市交通系统的智能化水平。


一、软件核心功能介绍及效果演示

软件主要功能

  1. 支持图片、图片批量、视频及摄像头进行检测,同时摄像头可支持 内置摄像头和外设摄像头;

  2. 可对检测结果进行单独分析,并且显示单个检测物体的坐标、置信度等;

  3. 界面可实时显示目标位置检测结果检测时间置信度检测结果回滚等信息;

  4. 支持图片视频摄像头的结果保存,将检测结果保持为excel文件;

界面参数设置说明

  

  1. 标签4 摄像头源/相机/网络源

  2. 标签5 交并比阈值:目标检测时的iou参数,只有目标检测框的交并比大于该值,结果才会显示;

  3. 标签6 置信度阈值:目标检测时的conf参数,只有检测出的目标置信度大于该值,结果才会显示;

  4. 标签7 显卡选择:在进行推理时是否使用显卡,默认勾选(使用显卡);

  5. 标签8 半精度选择:启用半精度(FP16)推理,可加快支持的 GPU 上的模型推理速度,同时将对精度的影响降至最低,默认不勾选(不适应半精度);

  6. 标签9 图片推理尺寸: 在推理时将推理图片固定的尺寸;

  7. 标签10 数据集的配置文件:数据集在训练时的配置文件(.yaml);

  8. 标签11 训练好的模型:最终要进行推理的模型,一般选择最优的一个模型;

  9. 标签12 类别名:该项目的所有类别,可以方便在后续查看某一个类别。

视频演示

图片检测演示

  1. 点击打开图片按钮,选择需要检测的图片,或者点击打开文件夹按钮,选择需要批量检测图片所在的文件夹,操作演示如下:

  2. 点击表格中的指定行,界面会显示该行表格所写的信息内容。

单个图片检测操作如下:

Vehicle-图片

批量图片检测操作如下:

Vehicle-文件夹

视频检测演示

  1. 点击视频按钮图标,打开选择需要检测的视频,在点击开始运行会自动显示检测结果。再次点击停止按钮,会停止检测视频。

  2. 点击表格中的指定行,界面会显示该行表格所写的信息内容。

视频检测操作如下:

Vehicle-视频

摄像头检测演示

  1. 选择相机中输入需要检测的摄像头(可以是电脑自带摄像头,也可以是外接摄像头,视频流等方式),然后点击摄像头图标来固定选择的推理流方式,最后在点击开始运行即可开始检测,当点击停止运行时则关闭摄像头检测。

  2. 点击表格中的指定行,界面会显示该行表格所写的信息内容。

摄像头检测操作如下:

Vehicle-摄像头

检测结果保存

点击导出数据按钮后,会将当前选择的图片【含批量图片】、视频或者摄像头的检测结果进行保存为excel文档,结果会存储在output目录下,保存内容如下:

保存操作如下:

Vehicle-保存

环境搭建

创建专属环境

conda create -n yolo python==3.8

激活专属环境

conda activate yolo

安装torch-GPU库

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple "torch-2.0.1+cu118-cp38-cp38-win_amd64.whl"

安装torchvision-GPU库

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple "torchvision-0.15.2+cu118-cp38-cp38-win_amd64.whl"

安装ultralytics库

pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple

测试环境

yolo predict model=yolov8n.pt source='https://ultralytics.com/images/bus.jpg'

此时就表明环境安装成功!!!

安装图形化界面库 pyqt5

pip install pyqt5 -i https://pypi.douban.com/simple/ 
pip install pyqt5-tools -i https://pypi.douban.com/simple/

算法原理

YOLOv8是一种前沿的深度学习技术,它基于先前YOLO版本在目标检测任务上的成功,进一步提升了性能和灵活性,在精度和速度方面都具有尖端性能。在之前YOLO 版本的基础上,YOLOv8 引入了新的功能和优化,使其成为广泛应用中各种物体检测任务的理想选择。主要的创新点包括一个新的骨干网络、一个新的 Ancher-Free 检测头和一个新的损失函数,可以在从 CPU 到 GPU 的各种硬件平台上运行。

YOLOv8目标检测算法具有如下的几点优势:

(1)更友好的安装/运行方式;

(2)速度更快、准确率更高;

(3)新的backbone,将YOLOv5中的C3更换为C2F;

(4)YOLO系列第一次使用anchor-free;

(5)新的损失函数。

YOLO各版本性能对比

网络结构

YOLOv8模型的整体结构如下图所示:

YOLOv8与YOLOv5模型最明显的差异是使用C2F模块替换了原来的C3模块;另外Head 部分变化最大,从原先的耦合头变成了解耦头,并且从 YOLOv5 的 Anchor-Based 变成了 Anchor-Free。

四、模型的训练、评估与推理

数据集准备

本文使用的 BIT-Vehicle车辆 数据集,BIT-Vehicle数据集是国内车辆检测数据集,包含9850个车辆图像。数据集中有两个摄像头在不同时间和地点拍摄的大小为1600*1200 和1920*1080的图像。 图像包含照明条件、比例、车辆表面颜色和视点的变化。

由于捕获延迟和车辆的大小,某些车辆的顶部或底部未包含在图像中。一幅图像中可能有一两辆车,因此每辆车的位置都被预先标注。 数据集中的所有车辆分为6类:公共汽车(Bus)、微型客车(Microbus)、小型货车(Minivan)、轿车(Sedan)、SUV(SUV) 和卡车(Truck)。 每种车型的车辆数量分别为558辆、883辆、476辆、5921辆、1392辆和822辆

图片数据集的存放格式如下,在项目目录中新建VOCData目录,同时将图片放入 Images 目录下。

模型训练

数据准备完成后,通过调用train.py文件进行模型训练,epochs参数用于调整训练的轮数,代码如下:

yolo detect train data=./VOCData/myvoc.yaml model=yolov8n.yaml pretrained=./weights/yolov8n.pt epochs=100 imgsz=640
from ultralytics import YOLO

# build from YAML and transfer weights model = YOLO('yolov8n.yaml').load('./weights/yolov8n.pt')

# Train the model
results = model.train(data='./VOCData/myvoc.yaml', epochs=100, imgsz=640)

训练结果分析

YOLOv8在训练结束后,可以在runs/目录下找到训练过程及结果文件,如下所示:

P_curve.png

通过查看 P_curve.png 图片,可以发现,该模型的精确率约为1.0,6个类别的精确度都在最后接近1,说明当前训练的模型是可用的。

results.png

通过查看 results.png 图片,可以发现,该模型在训练集和验证集上的损失都很低(box_loss、cls_loss、dfl_loss),并且 precision、recall、mAP50、mAp50-95 都很高,都在0.95以上。

训练 batch

验证 batch

模型推理

模型训练完成后,可以得到一个最佳的训练结果模型best.pt文件,在runs/trian/weights目录下。我们通过使用该文件进行后续的推理检测。

图片检测代码如下:

yolo detect predict model=./runs/detect/train/weights/best.pt source=./img save=True device=0
from ultralytics import YOLO 

# Load a model 
model = YOLO('./runs/detect/train/weights/best.pt') 
# Run batched inference on a list of images 
model.predict("./img", imgsz=640, save=True, device=0)

执行上述代码后,会将执行的结果直接标注在图片上,结果如下:

关于该系统涉及到的完整源码UI界面代码、数据集、训练代码、测试图片视频等相关文件,均已打包上传,感兴趣的小伙伴可以通过下载链接自行获取。

五、获取方式

本文涉及到的完整全部程序文件:包括 python源码、数据集、训练好的结果文件、训练代码、UI源码、测试图片视频等(见下图),获取方式见文末:

注意:该代码基于Python3.8开发,运行界面的主程序为GUI.py,其他测试脚本说明见上图。为确保程序顺利运行,请按照requirements.txt配置软件运行所需环境。

关注下方公众号:【AI算法与电子竞赛】,发送【YOLO系列源码】即可获取下载方式

六、链接作者

欢迎关注我的公众号:@AI算法与电子竞赛

硬性的标准其实限制不了无限可能的我们,所以啊!少年们加油吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1561727.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BM25 二叉树的后序遍历(postOrder()返回值用void)

import java.util.*;/** public class TreeNode {* int val 0;* TreeNode left null;* TreeNode right null;* public TreeNode(int val) {* this.val val;* }* }*/public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改&a…

软件测试-进阶篇

目录 测试的分类1 按测试对象划分1.1 界面测试1.2 可靠性测试1.3 容错性测试1.4 文档测试1.5 兼容性测试1.6 易用性测试1.7 安装卸载测试1.8 安装测试1.9 性能测试1.10 内存泄漏测试 2 按是否查看代码划分2.1 黑盒测试(Black-box Testing)2.2 白盒测试&a…

使用ssh免密登录服务器

最近写一些shell脚本的时候,需要读取远程服务器的目录下的内容,不能在脚本中直接使用密码,所以就想到了使用免密的方式进行读取。 一、虚拟机环境 下面是我安装的虚拟机网络配置 虚拟机编号 IP地址 子网掩码 账号 100 192.168.164.100…

每天学点儿Python(3) -- for循环

for循环结构格式如下 for 循环变量 in 遍历对象:语句块 举例一、 for i in "Hello"print(i) 执行结果如下 举例二、 #打印100-999之间的水仙花数 #注意:Python中 / 除法,运输后为浮点数, // 为取除法后的整数,而不是C/C中的注释…

使用VM搭建Linux服务器局域网

最近在了解一些LAN相关的内容,抱着学习的心态就使用了VM安装Linux虚拟机进行组建LAN(局域网)的测试。 一、虚拟机网络规划 下面是我安装的虚拟机网络配置 虚拟机编号 IP地址 子网掩码 网络连接 1 192.168.164.100 255.255.255.0 NAT…

python实现泊松回归

1 什么是基于计数的数据? 基于计数的数据包含以特定速率发生的事件。发生率可能会随着时间的推移或从一次观察到下一次观察而发生变化。以下是基于计数的数据的一些示例: 每小时穿过十字路口的车辆数量每月去看医生的人数每月发现的类地行星数量 计数数…

RabbitMQ Tutorial

参考API : Overview (RabbitMQ Java Client 5.20.0 API) 参考文档: RabbitMQ: One broker to queue them all | RabbitMQ 目录 结构 Hello World consumer producer 创建连接API解析 创建连接工厂 生产者生产消息 消费者消费消息 队列声明 工作队列Work Queues 公平…

1033 To Fill or Not to Fill

是否有能到达的站点 无,输出当前距离(最后一个到达站点距离满油箱状态下行走距离)有 有价格更低的站点 如果油量不足以到达新站点,加刚好到达该站点的油量(只加可到达范围内最便宜的油)有价格更高的站点 在…

【带你了解下前端开发语言有那些】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

[flink 实时流基础] 输出算子(Sink)

学习笔记 Flink作为数据处理框架,最终还是要把计算处理的结果写入外部存储,为外部应用提供支持。 文章目录 **连接到外部系统****输出到文件**输出到 Kafka输出到 mysql自定义 sink 连接到外部系统 Flink的DataStream API专门提供了向外部写入数据的方…

8_springboot_shiro_jwt_多端认证鉴权_多Reaml管理

1. 目标 前面一直讨论的是只有一个Reaml的场景,Shiro是可以管理多个Realm的。那么什么场景下,我们需要定义多个Realm,以及Shiro框架是如何管理多个Realm的,他们是如何工作的。本章将会解释上面的问题,最后会配置前面章…

MySQL中MHA故障排查

文章目录 MySQL故障排查MySQL主从环境常见故障1、故障一1.1 故障现象1.2 报错原因1.3 解决方法 2、故障二2.1 故障现象2.2 报错原因2.3 解决方法 3、故障三3.1 故障现象3.2 报错原因3.3 解决方法 4、故障四4.1 故障现象4.2 问题分析4.3 解决方法 5、故障五5.1 故障现象5.2 报错…

neo4j使用详解(六、cypher即时时间函数语法——最全参考)

Neo4j系列导航: neo4j及简单实践 cypher语法基础 cypher插入语法 cypher插入语法 cypher查询语法 cypher通用语法 cypher函数语法 6.时间函数-即时类型 表示具体的时刻的时间类型函数 6.1.date函数 年-月-日时间函数: yyyy-mm-dd 6.1.1.获取date da…

深度学习500问——Chapter05: 卷积神经网络(CNN)(3)

文章目录 5.14 理解转置卷积与棋盘效应 5.14.1 标准卷积 5.14.2 转置卷积 5.15 卷积神经网络的参数设置 5.16 提高卷积神经网络的泛化能力 5.17 卷积神经网络在不同领域的应用 5.17 .1 联系 5.17.2 区别 5.14 理解转置卷积与棋盘效应 5.14.1 标准卷积 在理解转置卷积之前&…

从学习海底捞到学习巴奴,中国餐饮带洋快餐重归“产品主义”

俗话说“民以食为天”,吃饭一向是国人的头等大事,餐饮业也是经济的强劲助推力。新世纪以来,餐饮业不断讲述着热辣滚烫的商业故事。 2006年,拥有“必胜客”、“肯德基”等品牌的餐饮巨头百胜集团,组织两百多名区域经理…

代码随想录算法训练营第24天|理论基础 |77. 组合

理论基础 jia其实在讲解二叉树的时候,就给大家介绍过回溯,这次正式开启回溯算法,大家可以先看视频,对回溯算法有一个整体的了解。 题目链接/文章讲解:代码随想录 视频讲解:带你学透回溯算法(理…

Windows安装禅道系统结合Cpolar实现公网访问内网BUG管理服务

文章目录 前言1. 本地安装配置BUG管理系统2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射本地服务3. 测试公网远程访问4. 配置固定二级子域名4.1 保留一个二级子域名5.1 配置二级子域名6. 使用固定二级子域名远程 前言 BUG管理软件,作为软件测试工程师的必备工具之一。在…

竞技之道-打造成功竞技游戏的实战指南【文末送书】

文章目录 理解竞技游戏的本质游戏力:竞技游戏设计实战教程【文末送书】 在当今数字化时代,游戏已经不再是一种单纯的娱乐方式,而是成为了一门具有巨大商业潜力的产业。特别是竞技游戏,它们引领着全球数十亿玩家的潮流,…

引用,内联函数,auto函数,指针nullptr

一:引用 1.1 该文章的引用是对上一篇引用的进行补充和完善 按理来说,double可以隐式转换为int,那起别名的时候为什么不可以类型转换呢? 那是因为,在类型转换的时候,会创建一个临时变量,让后再…

基于kalman的单目标追踪,以及demo测试(Python and C++)

一.卡尔曼滤波简单介绍 我们可以在任何含有不确定信息的动态系统中的使用卡尔曼滤波,对系统的下一步动作做出有根据的猜测。猜测的依据是预测值和观测值,首先我们认为预测值和观测值都符合高斯分布且包含误差,然后我们预设预测值的误差Q和观测…