python3GUI--基于YOLOv8的行车追踪与可视化分析系统 By:PyQt5(详细分享)

42 阅读8分钟

@[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的行车追踪与可视化分析系统,写这篇博客用了一个多小时,因为我的读者的能力水平参差不一,我要照顾到所有水平的读者,本篇写的由浅入深,有简单的基础知识,也有具体的软件截图,旨在让大家了解、理解我开发的到底是个什么东东,最后感谢大家能看到这!

请添加图片描述

a48691882993477ea220dfc11398755c.png