使用PyQT5实现YOLOv8图形化界面

准备工作:

1、首先在YOLOv8环境中安装pyqt5

pip install pyqt5
pip install pyqt5-tools

然后再你的anaconda环境中找到designer.exe文件,双击运行,可以将其发送到桌面快捷方式方便后续使用

下面是我的文件所在路径地址,根据自己环境的位置进行查找。

C:\User\anaconda\envs\yolov8\Lib\site-packages\qt5_applications\Qt\bin\designer.exe

2、运行的designer.exe后创建一个界面

如下图:

然后再右边任务栏中选择需要的功能



制作完界面之后将其保存到你的YOLOv8工程下,方便后续使用

我保存在如下位置



然后将使用pycharm扩展工具进行代码生成

步骤如下

点击File->Setting->External Tools->+(add)



程序去conda的envs我的环境路径如下所示,根据自己的环境位置进行寻找

C:\Users\Administrator\anaconda3\envs\yolov8\Scripts\pyuic5.exe

实参为:UI\$FileName$ -o UI\$FileNameWithoutExtension$.py

最后的工作目录可以写:

$ProjectFileDir$

保存成功后进行如下操作生成代码



等几秒中,这样代码就生成啦

然后再根据自己打需求编写代码

我的界面如下图所示



我自己的代码如下所示

# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'UI\demo.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5.QtWidgets import QApplication,QMainWindow,QFileDialog
import sys from PyQt5 import QtCore, QtGui, QtWidgets
import torch
import torchvision
import cv2
import numpy as np
from PyQt5.QtGui import QPalette, QBrush, QPixmap
from ultralytics import YOLO class Ui_MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.retranslateUi(self)
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(690, 390, 75, 23))
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(690, 430, 75, 23))
self.pushButton_2.setObjectName("pushButton_2")
self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_3.setGeometry(QtCore.QRect(690, 470, 75, 23))
self.pushButton_3.setObjectName("pushButton_3") self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_4.setGeometry(QtCore.QRect(690, 510, 75, 23))
self.pushButton_4.setObjectName("pushButton_4") self.label_3 = QtWidgets.QTextBrowser(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(40, 400, 581, 141))
self.label_3.setObjectName("label_3")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(50, 30, 321, 301))
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(410, 30, 321, 301))
self.label_2.setObjectName("label_2")
self.line = QtWidgets.QFrame(self.centralwidget)
self.line.setGeometry(QtCore.QRect(370, 30, 41, 301))
self.line.setFrameShape(QtWidgets.QFrame.VLine)
self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line.setObjectName("line")
self.line_2 = QtWidgets.QFrame(self.centralwidget)
self.line_2.setGeometry(QtCore.QRect(0, 360, 791, 20))
self.line_2.setFrameShape(QtWidgets.QFrame.HLine)
self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line_2.setObjectName("line_2")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow) # 点击响应函数
self.pushButton.clicked.connect(self.uploadImage)
self.pushButton_2.clicked.connect(self.showEnvironment)
self.pushButton_4.clicked.connect(self.startProgram)
self.pushButton_3.clicked.connect(self.select_weight_file)
# self.image_path = '' def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "道路缺陷检测"))
self.pushButton.setText(_translate("MainWindow", "上传图片"))
self.pushButton_2.setText(_translate("MainWindow", "显示环境"))
self.pushButton_4.setText(_translate("MainWindow", "启动程序"))
self.pushButton_3.setText(_translate("MainWindow", "模型选择"))
self.label.setText(_translate("MainWindow", "原始图片"))
self.label_2.setText(_translate("MainWindow", "检测结果")) def uploadImage(self):
file_dialog = QFileDialog()
image_path, _ = file_dialog.getOpenFileName(self, '选择图片', '', 'Images (*.png *.xpm *.jpg *.bmp)')
self.image_path = image_path
if image_path:
# 在这里添加加载图片的逻辑,例如显示图片到label2
pixmap = QtGui.QPixmap(image_path)
self.label.setPixmap(pixmap)
self.label.setScaledContents(True)
def showEnvironment(self):
pytorch_version = torch.__version__
torchvision_version = torchvision.__version__
self.label_3.setText(f"PyTorch Version: {pytorch_version}\n"
f"Torchvision Version: {torchvision_version}") def select_weight_file(self):
file_dialog = QFileDialog()
weight_file_path, _ = file_dialog.getOpenFileName(self, "选择YOLOv8权重文件", "", "权重文件 (*.pt)")
self.weight_file_path = weight_file_path
if weight_file_path:
self.label_3.setText(f"网络模型: {weight_file_path}")
def startProgram(self): self.label_3.setText(self.image_path)
model = YOLO(self.weight_file_path)
results = model(self.image_path)
annotated_frame = results[0].plot() # 将图像数据转换为QImage格式
height, width, channel = annotated_frame.shape
bytes_per_line = 3 * width
qimage = QtGui.QImage(annotated_frame.data, width, height, bytes_per_line, QtGui.QImage.Format_RGB888)
# 将QImage转换为QPixmap
pixmap = QtGui.QPixmap.fromImage(qimage) #都执行:
self.label_2.setPixmap(pixmap)
self.label_2.setScaledContents(True)
if __name__ == '__main__':
app = QApplication(sys.argv)
MainWindow1 = QMainWindow() #MainWindow1随便改
palette = QPalette()
palette.setBrush(QPalette.Background, QBrush(QPixmap("/UI\\background\\1.jpg"))) #界面背景图
MainWindow1.setPalette(palette)
ui = Ui_MainWindow() #随便改
ui.setupUi(MainWindow1)
MainWindow1.show()
sys.exit(app.exec_())

本文借鉴博文:https://blog.csdn.net/weixin_44298961/article/details/132333293

YOLOv8-PyQT5可视化界面的更多相关文章

  1. Python可视化界面编程入门

    Python可视化界面编程入门具体实现代码如所示: (1)普通可视化界面编程代码入门: import sysfrom PyQt5.QtWidgets import QWidget,QApplicati ...

  2. awt可视化界面上传数据到mysql,jsp通过jdbc方式查询数据库,并将结果打印在网页上

    今天尝试写一个小demo实现下之前看过的代码,目的了解不同文件的数据访问,掌握如何获取前台数据,如何将数据库的数据在前端页面展示. awt可视化界面可已实现提交数据到数据库,也可查询数据在控制台打印. ...

  3. GDB-Dashboard-GDB可视化界面

    项目地址 https://github.com/cyrus-and/gdb-dashboard 项目介绍 gdb-dashboard是一个gdb的可视化界面,可以通过web或者终端来现实可视化信息,支 ...

  4. Ubuntu mysql安装,还有可视化界面

    安装mysql sudo apt-get install mysql-server sudo apt-get install mysql-client sudo apt-get install lib ...

  5. Solr学习笔记---部署Solr到Tomcat上,可视化界面的介绍和使用,Solr的基本内容介绍,SolrJ的使用

    学习Solr前需要有Lucene的基础 Lucene的一些简单用法:https://www.cnblogs.com/dddyyy/p/9842760.html 1.部署Solr到Tomcat(Wind ...

  6. docker swarm 集群及可视化界面的安装及配置

    docker swarm 集群及可视化界面的安装及配置 2016-12-14 16:08:46 标签:swarm consul registrator 原创作品,允许转载,转载时请务必以超链接形式标明 ...

  7. 可视化界面:ElasticSearch Head,最方便的是直接下载谷歌浏览器扩展程序

    可视化界面:ElasticSearch Head,最方便的是直接下载谷歌浏览器扩展程序

  8. 关于Eclipse上使用可视化设计界面(Java EE 使用可视化界面设计)

    Eclipse下可视化界面实现——WindowBulider安装 第一步: WindowBuilder官方下载安装说明地址:http://www.eclipse.org/windowbuilder/d ...

  9. CentOS7安装GNOME可视化界面和如何配置IP地址

    本人在虚拟机安装 CentOS7 1,检查一下我们已经安装的软件以及可以安装的软件,用命令 yum grouplist 2,然后安装我们需要的图形界面软件,GNOME(GNOME Desktop) 这 ...

  10. SwaggerUI+SpringMVC——构建RestFul API的可视化界面

    今天给大家介绍一款工具,这个工具眼下可预见的优点是:自己主动维护最新的接口文档. 我们都知道,接口文档是非常重要的,可是随着代码的不断更新,文档却非常难持续跟着更新,今天要介绍的工具,完美的攻克了这个 ...

随机推荐

  1. html 跳转到新的网址

    更新window.location.href后面的值即可 文件名为 index.html <!DOCTYPE html> <html> <head> <met ...

  2. 【YashanDB数据库】YAS-02032 column type is incompatible with referenced column type

    [标题]错误码处理 [问题分类]外键约束创建报错 [关键字]YAS-02032 [问题描述]设置外键约束报错,数据元数据不正确. [问题原因分析]外键字段类型不支持,比如varchar2(64) ,指 ...

  3. TypeScript 高级教程 – 把 TypeScript 当编程语言使用 (第二篇)

    前言 上一篇, 我们提到, TypeScript 进阶有 3 个阶段. 第一阶段是 "把 TypeScript 当强类型语言使用", 我们已经介绍完了. 第二阶段是 "把 ...

  4. ASP.NET Core – Case Style Conversion

    前言 之前就有写过一篇 <<前后端沟通 naming conversion 转换需要知道的事>> 这篇做一个总结整理. 我们知道 C# 的 Property 是 PascalC ...

  5. Figma 学习笔记 – Plugin

    安装 Figma 安装 plugin 基本上就是点击一下开启而已. 到社区搜索 -> 点击 install Material Icon 下载地址 它的交互不是 drag 出来哦, 而是点击 ic ...

  6. 多表查询 —— 内连接&外连接&子查询

    连接查询 内连接 1.查询语法 -- 隐式内连接 select 字段列表 from 表1, 表2... where 条件; -- 显式内连接 select 字段列表 from 表1 [INNER] j ...

  7. eclipse真的落后了嘛?这几点优势其他IDE比不上

    序言 各位好啊,我是会编程的蜗牛,作为java开发者,我们每天都要和开发工具打交道.我以前一开始入门java开发的时候,就是用的eclipse,虽然感觉有点繁琐,但好在还能用.后来偶然间发现了IDEA ...

  8. 可持久化线段————主席树(洛谷p3834)

    洛谷P3834 可持久化线段树 2 问题描述: 给定n各整数构成的序列,求指定区间[L,R]内的第k小值(求升序排序后从左往右数第k个整数的数值) 输入: 第一行输入两个整数n,m,分别代表序列长度n ...

  9. 4Templates Bootstrap Navbars and Links

    链接 传递参数    

  10. CTF中特别小的EXE是怎么生成的

    我们在打CTF时候,出题的爷爷们给出的exe都很小 就10k左右,有的甚至就5k,那时候我很郁闷啊.现在我也能了啊哈哈 不多bb按如下操作: 我们来看看正常的release生成的代码 #include ...