文章目录
软件未打包,需要代码请私聊作者!
[学习必备!]Pyqt5+YOLOv8行车分析与可视化系统
一.前言
本篇将详细地向大家展示我开发的“基于YOLOv8的行车追踪与可视化分析系统”,这个系统包含了目标检测、目标分割、数据可视化等功能,是您学习、应用的不二之选!
本项目基于YOLOv8框架,能够对交通物体进行检测。对图片能检测到物体并用锚框进行标注展示,对于视频则是对每一帧进行物体检测分析,同样使用锚框进行标注,最终生成的物体检测视频能实时追踪物体并用不同颜色框进行标注展示。
用户除了选择常规的模型进行物体检测之外,还可以使用专门进行实例分割的模型。在训练预测之后,可以得到不同的物体。与单纯的物体检测有些不同,实例分割能够对物体的轮廓进行较为精细的标注,并将整个物体以特定的颜色进行标注,相比于普通的物体检测能够产生更精细且更好的可视化效果。
二.相关知识
1.PyQt5
PyQt5 是 Python 绑定 Qt 应用程序框架的一个库,它用于开发跨平台的桌面应用程序。PyQt5 由 Riverbank Computing 维护,基于 Qt 5 框架,提供了丰富的 GUI 组件和强大的功能,包括窗口控件、布局管理、信号槽机制、多线程支持、绘图、网络编程等。
PyQt5 的特点:
✅ 跨平台支持:可在 Windows、macOS 和 Linux 上运行。
✅ 强大的 GUI 组件:提供 Qt Designer 可视化设计 UI,支持拖拽控件布局。
✅ 信号槽机制:提供高效的事件处理系统,使 UI 响应更加流畅。
✅ QSS 样式表:类似 CSS,可以美化 UI 组件。
✅ 集成多媒体支持:基于 QtMultimedia,可实现音频、视频播放功能。
摘自chat GPT
安装方式
pip install PyQt5
2.YOLOv8
YOLOv8-Python 是基于 YOLOv8(You Only Look Once 第八版)模型的 Python 实现,用于进行目标检测、图像分割和姿态估计等任务。它由 Ultralytics 开发,具有速度快、精度高、部署灵活等优点。通过 Python 接口,用户可以方便地加载模型、处理图像或视频,并获取检测结果,广泛应用于安防监控、自动驾驶、工业检测等场景。
下面是TOLOv8的官方Python文档:
https://docs.ultralytics.com/zh/usage/python/
YOLOv8网络框架图
安装方式
pip install ultralytics
3.音视频播放
因为本项目使用了Qt相关的音视频播放组件,所以本机需要安装解码器,这里推荐使用:LAV Filters
大家可以到我的网盘满速下载:
https://wwrr.lanzoul.com/ickJ81rkm50b
4.图像识别与目标检测
图像识别是指让计算机判断一张图片属于哪个类别,例如识别出是一只猫或一辆车;而目标检测则是在图像中同时识别出多个物体的类别,并准确标出它们的位置。两者都是计算机视觉的重要任务,图像识别关注“是什么”,而目标检测进一步关注“在哪里”,广泛应用于安防监控、自动驾驶、医疗诊断等领域。
上图取自网络
本次将图像识别与目标检测用在了行车领域
5.OpenCV
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和图像处理库,由 Intel 开发,支持多种编程语言,如 Python、C++ 等。它提供了丰富的函数,用于图像读写、处理、特效、图像识别、人脸检测、视频分析等,广泛应用于机器人、安防、AI视觉等领域。简单来说,OpenCV 就是做“图像和视频处理”的万能工具箱。
安装方式
pip install opencv-python
三.展示
接下来是本次软件的展示部分
1.登录界面
笔者精心设计了登录界面,支持登录与注册,登录信息保存在本地sqlite3数据库中,UI部分中,界面左侧支持鼠标交互,整体效果流畅!
打开本软件,用户首先需要进行登录注册。首次使用时, 一开始需要先注册一个账号,并在登录页输入账号密码进行登录。
本软件采用sqlite3文件型数据库对用户的信息进行存储管理。其中有一些基本的校验,用于判断账号是否存在,注册使用的用户名是否与他人重复,以及每个账号对应的密码是否匹配等等。只有注册成功,并在登录页中输入正确的账号密码,用户才能成功登录此软件。以下是相关软件页面展示:
2.主界面
用户登录成功后到了软件的主界面,主界面主要按不同的时间粒度进行了统计,最顶部是用户信息部分,支持点击修改密码、退出系统。
3.图像检测与分割
这里支持对用户上传上来的本地图像进行目标检测与分割处理,处理好后展示在右侧,方便用户比对,其中顶部为参数设置区域,用户可以手动调整置信度等参数,便于筛选结果。
用户可以点击左下角的“选择图像”按钮,会弹出一个文件管理器,用户通过选择对应路径下的图片进行导入,选择完成后会在左侧显示选择图片,图片选择完成后系统会自动将开始对选择的图片进行物体检测。模型训练完检测成功后,右边的框中会显示处理好后的图片。其中对每个物体根据不同类别进行了不同颜色的锚框标注,每个物体上面会显示检测的置信度,值越高代表对物体的预测正确的把握值越高。
在此页面上部分,可以选择检测模型,默认的模型能够对物体进行检测并用矩形锚框标注出来。此外还可以选择实例分割模型,能够根据不同物体的轮廓进行具体分割,并对每个物体进行相应的颜色填充标注。除了模型选择,用户还可以对置信度conf,IOU进行参数调整,同时还可以指定要检测的class类别,不指定的话默认会检测出所有类别的物体。其中,指定的conf越小,即识别的精确度要求降低,模型大概率会识别出更多的物体。
4.视频检测与分割
当然,用户可以上传本地的视频文件到本系统,系统分析完成后,分析结果展示在右侧,用户可以很方便直观的比对分析前后的效果。
点击侧边栏的第二个选项卡视频检测分割,便能跳转到第二个页面,对视频进行物体检测分析。类似的,用户可以点击左下角的选择按钮,在弹出的窗口中进行视频文件选择,选择好后要,左侧框会自动对视频进行播放。之后模型开始对视频的每一帧画面进行物体检测,同时进行相关锚框和置信度的标注,最终整合成处理好的视频,在右侧框中进行播放展示。
同样地,在界面上侧还能对训练进行调参处理,可以选择预训练模型,设置置信度,IOU值和指定要检测的分类。当选择实例分割模型时,与图片类似,会将视频的每一帧都进行实例分割,最终呈现的视频中,每个物体都会根据检测出的类别以及其轮廓,被标注填充为不同的颜色。当设置的置信度越低时,所识别出的物体数和种类数可能相对变多。也可以通过设置class类别,对某一种具体物体进行检测,调参后具体效果如下:
下图演示了如何使用本系统对视频进行目标分割处理。
5.实时检测与分割
用户还可以上传网络流媒体地址,联动摄像头、网络地址对目标画面进行检测与分析
笔者这里采用的是海康威视的摄像头,摄像头在本地局域网中使用rtsp推流,编码采用的是h265,像素为200W。
大家可以看到,检测效果也还可以。
6.车辆追踪与统计
通过对用户上传上来的视频文件里面运动的物体进行追踪,动态标记出目标物体的轨迹,分析结束后会产生一份分析结果数据,包括:track ID、X坐标、Y坐标、目标物体ID,我们可以将这份数据导出到本地支持xlsx和csv,当然也可以点击“进行统计”可以预览统计结果。
当用户选择“车辆追踪与统计”侧边栏后,能够跳转到车辆轨迹识别页面。导入相应视频后,用户点击track即可快速对该视频进行物体检测与车辆轨迹识别,默认情况下,模型会检测所有物体并对所有物体进行跟踪检测和轨迹绘制,用户可以指定类别class来筛选出需要进行轨迹识别与绘制的具体物体类别。另外,本功能也支持用户对置信度conf,IOU参数进行调整,效果如下图:
7.数据集查看
用户可以对上一步导出的结果数据进行查看与分析,成功导入数据集后,软件会自动在表格中展示数据集的内容,界面右侧会自动分析当前目标的名称、类别图像以及行驶轨迹散点图。
通过右侧的分析,我们能得知:Track ID为60的物体属于“汽车”类别,他的行驶轨迹是由远及近的。
8.可视化分析
这是本软件的特色部分,本页面通过将“车辆追踪与统计”或者对“导入的数据集”进行分析后,通过饼图、条形图、散点图可视化地展示分析结果,更能让用户一目了然地了解到数据。
下图为一张长图
本模块一共包括6个图表,分别是:
1.Track ID数量条形图
2.Track ID类别数量条形图
3.Track ID类别数量占比饼图
4.Track ID占比饼图
5.轨迹散点图
6.Track ID 分类变化图
9.登录日志查看
本页面按照用户登录时间降序展示登录日志数据,包括登录用户的IP地址。
10.操作日志查看
11.关于
“关于”页面包括四个子选项,分别是关于软件、关于作者、关于YOLOv8、关于QT,这里不做赘述。
四.心得与分享
1.UI效果
这个问题是老生常谈了,好多粉丝私信过我,问我如何设计好UI效果,我这里统一回答一下哈:就是手搓组件,让每个组件单独组成一个类,这样可以很方便的复用组件,能够提升软件系统的UI风格统一性。
本次仍然是手搓组件,没有使用QT设计师。
2.遇到的问题
这里只提一个,我排查了好一会才排查出来,提出来给大家避避雷
登录界面左侧是一个本地视频,因为不需要声音,所以采用opencv进行播放,每当我登陆成功后操作别的检测功能,主界面都会很卡,这里解决的方案是:登录成功后停止播放视频。
3.关于模型
本次项目是基于yolov8的目标检测与目标分割系统,检测采用的是yolov8n.pt,分割采用的是yolov8n-seg.pt,大家拿到源码后这些模型数据都是附带的,当然大家可以自行更换为自己训练的模型,本系统支持拓展。
4.关于数据库
本次采用的是sqlite3数据库,所有数据存储在本地的/data/database/data.db中,本数据库包含三个数据表,分别是用户信息表(users)、用户操作日志表(opt_log)、用户登录信息表(user_login_logs),每张表的建表语句我贴在下面,需要的同学可以自取~
用户信息表(users)
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL UNIQUE,
password TEXT NOT NULL,
last_login TEXT,
role TEXT NOT NULL
)
用户操作日志表(opt_log)
CREATE TABLE IF NOT EXISTS opt_log (
id INTEGER PRIMARY KEY AUTOINCREMENT,
opt_time TEXT NOT NULL,
user_id INTEGER NOT NULL,
content TEXT NOT NULL
);
用户登录信息表(user_login_logs)
CREATE TABLE IF NOT EXISTS user_login_logs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL, -- 用户 ID
login_time TEXT NOT NULL, -- 登录时间
ip_address TEXT -- 登录的 IP 地址
);
值得一提的是,本次users表采用了加密算法保存用户的密码,这大大提高了用户数据的安全性。
5.关于项目
本项目的代码层级结构见下图
所有源代码放在了src/目录下,本次开发的核心代码量都是在这里产生的。
本项目代码量约为4千!
读者拿到源代码后要安装相关依赖,如果是windows系统的话,我给您准备了requirements.bat,可以一键安装项目依赖
直接在cmd中输入requirements.bat
然后按下回车即可。
本软件一共开发了9个页面都在subpages.py中。
本系统配套21页文档,包含两个章节分别是“系统设计”、“系统优化”需要的同学可以私聊!
五.总结
本次和大家分享了我使用PyQt5开发的一款基于YOLOv8的行车追踪与可视化分析系统,写这篇博客用了一个多小时,因为我的读者的能力水平参差不一,我要照顾到所有水平的读者,本篇写的由浅入深,有简单的基础知识,也有具体的软件截图,旨在让大家了解、理解我开发的到底是个什么东东,最后感谢大家能看到这!