@[toc]
软件未打包,需要代码请私聊作者!
一.前言
本篇将详细地向大家展示我开发的“基于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 接口,用户可以方便地加载模型、处理图像或视频,并获取检测结果,广泛应用于安防监控、自动驾驶、工业检测等场景。
YOLOv8网络框架图
安装方式
pip install ultralytics
3.图像识别与目标检测
图像识别是指让计算机判断一张图片属于哪个类别,例如识别出是一只猫或一辆车;而目标检测则是在图像中同时识别出多个物体的类别,并准确标出它们的位置。两者都是计算机视觉的重要任务,图像识别关注“是什么”,而目标检测进一步关注“在哪里”,广泛应用于安防监控、自动驾驶、医疗诊断等领域。
上图取自网络
本次将图像识别与目标检测用在了行车领域
4.OpenCV
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和图像处理库,由 Intel 开发,支持多种编程语言,如 Python、C++ 等。它提供了丰富的函数,用于图像读写、处理、特效、图像识别、人脸检测、视频分析等,广泛应用于机器人、安防、AI视觉等领域。简单来说,OpenCV 就是做“图像和视频处理”的万能工具箱。
安装方式
pip install opencv-python
三.展示
接下来是本次软件的展示部分
1.登录界面
笔者精心设计了登录界面,支持登录与注册,登录信息保存在本地sqlite3数据库中,UI部分中,界面左侧支持鼠标交互,整体效果流畅!
2.主界面
用户登录成功后到了软件的主界面,主界面主要按不同的时间粒度进行了统计,最顶部是用户信息部分,支持点击修改密码、退出系统。
3.图像检测与分割
这里支持对用户上传上来的本地图像进行目标检测与分割处理,处理好后展示在右侧,方便用户比对,其中顶部为参数设置区域,用户可以手动调整置信度等参数,便于筛选结果。
4.视频检测与分割
当然,用户可以上传本地的视频文件到本系统,系统分析完成后,分析结果展示在右侧,用户可以很方便直观的比对分析前后的效果。
下图演示了如何使用本系统对视频进行目标分割处理。
5.实时检测与分割
用户还可以上传网络流媒体地址,联动摄像头、网络地址对目标画面进行检测与分析
笔者这里采用的是海康威视的摄像头,摄像头在本地局域网中使用rtsp推流,编码采用的是h265,像素为200W。
大家可以看到,检测效果也还可以。
6.车辆追踪与统计
通过对用户上传上来的视频文件里面运动的物体进行追踪,动态标记出目标物体的轨迹,分析结束后会产生一份分析结果数据,包括:track ID、X坐标、Y坐标、目标物体ID,我们可以将这份数据导出到本地支持xlsx和csv,当然也可以点击“进行统计”可以预览统计结果。
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.操作日志查看
四.心得与分享
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中。
五.总结
本次和大家分享了我使用PyQt5开发的一款基于YOLOv8的行车追踪与可视化分析系统,写这篇博客用了一个多小时,因为我的读者的能力水平参差不一,我要照顾到所有水平的读者,本篇写的由浅入深,有简单的基础知识,也有具体的软件截图,旨在让大家了解、理解我开发的到底是个什么东东,最后感谢大家能看到这!