利用PySide6/QT实现YOLOv5/v8可视化GUI页面
在人工智能和盘算机视觉领域,YOLO(You Only Look Once)是一种广泛利用的实时目的检测算法。为了直观地展示YOLO算法的检测结果,我们可以利用Python中的PySide6库来创建一个简单的GUI应用步伐,将检测结果实时可视化。
本文将引导你如何利用PySide6实现这一功能。
- 原视频/图片区:上半部分左边区域为原视频/图片展示区;
- 检测区:上半部分右边区域为检测结果输出展示区;
- 日记文本框:打印输出操作日记;
- 加载模型:从本地选择模型pt文件举行加载;
- 置信度阈值:自界说检测区的置信度阈值;
- 文件上传:选择目的文件;
- 开始检测:执行检测步伐;
- 制止:制止检测步伐;
一、工具介绍
1、PySide6
PySide6是一款功能强盛的GUI(图形用户界面)开发框架,它允许Python开发者利用Qt库的功能来构建跨平台的桌面应用步伐。PySide6作为Qt的Python绑定版本,继承了Qt的跨平台特性,支持在Windows、macOS、Linux等多种操作系统上开发和部署应用步伐。其具有以下特点:
- 丰富的组件库:PySide6提供了大量的GUI控件和布局管理器,如按钮、文本框、下拉框、复选框等,以及QGridLayout、QFormLayout、QStackedLayout等多种布局方式,方便开发者快速构建用户界面。
- 高性能:基于Qt 6的底层实现,PySide6保证了应用步伐的性能和相应速度,可以或许处置处罚大型复杂的GUI。
- 机动的变乱处置处罚机制:PySide6可以或许处置处罚各种用户输入变乱,如鼠标点击、键盘输入等,实现丰富的交互功能。
- 官方维护与支持:PySide6是Qt公司官方维护的Python绑定版本,享有官方的技术支持和更新服务,确保了框架的稳定性和可靠性。
2、OpenCV
OpenCV(Open Source Computer Vision Library)是一个广泛利用的开源盘算机视觉库,它提供了丰富的图像和视频处置处罚功能,以及一些机器学习算法。
OpenCV具有广泛的应用领域,包罗但不限于:
- 人脸辨认和物体辨认:利用OpenCV可以实现人脸检测和辨认,以及目的检测等,可应用于人脸门禁系统、人脸付出、安全监控等场景。
- 图像和视频分析:可用于视频压缩、视频稳定、行人跟踪、行为分析等。
- 图像合成和3D重建:通过多个视角的图像来重建场景的三维结构。
- 机器学习:OpenCV也提供了针对神经网络和深度学习的高级功能,支持常见的深度学习框架,如TensorFlow、PyTorch和Caffe,使开发者可以或许利用神经网络举行人脸检测、物体辨认和语义分割等任务。
二、环境预备
利用pip工具举行依赖项安装(也可以利用Annaconda举行依赖包安装),要求python≥3.8。详细步骤如下:
1、安装ultralytics包
打开CMD:Win键 + R打开<运行>,输入"cmd",回车,输入以下代码,即可快速安装YOLO。
也可以在PyCharm编辑器里打开终端举行安装。
- # 安装ultralytics工具包
- pip install ultralytics
- # 如果安装速度比较慢可以换成清华源的镜像
- pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple
复制代码 在ultralytics包里,会自动安装适配当前ultralytics版本的torch。
也可以根据自己的必要安装对应的torch版本:
- pip install torch=2.1.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
复制代码 2、安装PySide6工具包
利用 pip 或者 conda 安装 PySide6,打开你的终端或命令提示符,然后运行以下命令来安装 PySide6:
- # 安装PySide6工具包
- pip install PySide6 -i https://pypi.tuna.tsinghua.edu.cn/simple
复制代码 3、安装OpenCV工具包
利用 pip 或者 conda 安装 OpenCV,打开你的终端或命令提示符,然后运行以下命令来安装 OpenCV:
- # 安装opencv工具包
- pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
复制代码 这个命令会安装 OpenCV 的焦点功能,包罗图像处置处罚、视频捕获等。如果你还必要额外的功能,比如对 OpenCV 的贡献模块(如 xfeatures2d、stitching 等),你可以安装 opencv-contrib-python:
- # 安装opencv工具包
- pip install opencv-contrib-python -i https://pypi.tuna.tsinghua.edu.cn/simple
复制代码 三、导入必要的库
在你的Python脚本中,导入所需的库:
- import os
- from datetime import datetime
- import json
- import cv2
- import torch
- from PyQt5.QtCore import pyqtSlot
- from PySide6.QtGui import QIcon
- from PySide6 import QtWidgets, QtCore, QtGui
- from PySide6.QtCore import Qt, QDir
- from ultralytics import YOLO
复制代码 四、创建主窗口,初始化相关参数
- class MyWindow(QtWidgets.QMainWindow):
- def __init__(self):
- super().__init__()
- self.init_gui()
- self.model = None
- self.timer = QtCore.QTimer()
- self.timer1 = QtCore.QTimer()
- self.cap = None
- self.video = None
- self.file_path = None
- self.base_name = None
- self.timer1.timeout.connect(self.video_show)
- def init_gui(self):
- self.folder_path = "./model_file" # 自定义修改:设置模型文件夹路径
- self.setFixedSize(1300, 650)
- self.setWindowTitle('目标检测') # 自定义修改:设置窗口名称
- self.setWindowIcon(QIcon("logo.jpg")) # 自定义修改:设置窗口图标
- central_widget = QtWidgets.QWidget(self)
- self.setCentralWidget(central_widget)
- main_layout = QtWidgets.QVBoxLayout(central_widget)
复制代码 更换窗口背景图片:
- # 自定义修改:设置窗口背景图
- self.set_background_image('bg.jpg')
复制代码
五、编写页面布局
1、创建图片/视频展示区域
如上图所示,左侧是文件上传之后原图、原视频的展示区域;右侧是经模型加载并执行开始检测之后,用来展示预测结果的检测区。
页面布局代码如下:
- # 界面上半部分: 视频框
- topLayout = QtWidgets.QHBoxLayout()
- self.oriVideoLabel = QtWidgets.QLabel(self)
- self.detectlabel = QtWidgets.QLabel(self)
- self.oriVideoLabel.setFixedSize(530, 400)
- self.detectlabel.setFixedSize(530, 400)
- self.oriVideoLabel.setStyleSheet('border: 2px solid #ccc; border-radius: 10px; margin-top:75px;')
- self.detectlabel.setStyleSheet('border: 2px solid #ccc; border-radius: 10px; margin-top: 75px;')
- topLayout.addWidget(self.oriVideoLabel)
- topLayout.addWidget(self.detectlabel)
- main_layout.addLayout(topLayout)
复制代码 在这段代码中,包含一个水平布局(QHBoxLayout),用于放置两个视频显示的标签(QLabel)。这两个标签分别用于显示原始视频(oriVideoLabel)和处置处罚后的视频或检测结果(detectLabel)。
2、创建日记打印区域
在基于YOLO的目的检测当中,我们必要记载一些操作日记,从而方便后续维护。此外,在实际生产环境中,如果置信度大于我们所设定的阈值,必要产生告警信息,而这些信息必要记载标签预测框的坐标信息、产生告警的时间以及告警的标签内容。日记打印区的结果图如下:
如上图所示,在启动步伐之后会提示加载模型文件,之后举行文件上传,末了点击开始检测。在这个过程中会生成操作日记。
在日记打印区当中会生成JSON字符串格式的日记信息,信息内容为当前预测框中的告警信息,包罗:
- 标签名称:"name": "门路积水",
- 置信度:"confidence": 0.9243840575218201,
- 横坐标:"x": 452.06036376953125,
- 纵坐标:"y": 409.8131103515625,
- 预测框宽度:"width": 1142.6134033203125,
- 预测框高度:"height": 571.2572021484375
可以将上述告警信息封装之后以接口的情势传入相关数据平台举行分析和处置处罚。
日记区域的页面布局代码如下:
- # 创建日志打印文本框
- self.outputField = QtWidgets.QTextBrowser()
- self.outputField.setFixedSize(530, 180)
复制代码 3、加载YOLO模型
下载YOLO预训练模型,选择自己的预测模型举行加载.....
代码如下:
[code]# 遍历文件夹并添加文件名到下拉框
for filename in os.listdir(self.folder_path):
file_path = os.path.join(self.folder_path, filename)
if os.path.isfile(file_path) and filename.endswith('.pt'): # 确保是文件且后缀为.pt
base_name = os.path.splitext(filename)[0]
self.selectModel.addItem(base_name)
# 添加加载模型按钮
self.loadModel = QtWidgets.QPushButton(' |