目标检测系列(四)利用pyqt5实现yolov8目标检测GUI界面

目录

1、pyqt5安装

2、PyCharm添加Qt Designer、PyUIC

3、Qt Designer设计界面

4、根据ui文件自动生成py文件

5、修改py文件来调用检测程序

6、执行py文件启动


1、pyqt5安装

Qt Designer:一个用于创建图形用户界面的工具,可轻松构建复杂的用户界面。它基于MVC架构,可以将界面设计与逻辑分离,使得开发更为便捷。在Qt Designer中,可以通过拖拽控件来灵活地调整界面,并可以实时查看控件效果。。

PyUIC:一个命令行工具,它将Qt Designer中设计的.ui文件转换为Python代码。这一功能极大地帮助了开发人员快速地将设计好的Qt Designer的.ui文件转换为可用的Python代码,从而提高了开发速度。

安装方法:

pip install pyqt5

pip install pyqt5-tools

然后搜索“designer”就可以看到是否安装好

2、PyCharm添加Qt Designer、PyUIC

点击菜单栏File——选择Setting,弹出设置界面。在设置界面中选择Tools—>External Tools

然后重启pycharm即可看见添加的外部工具:

3、Qt Designer设计界面

可以先打开Qt Designer,创建一个.ui然后保存到本地:

4、根据ui文件自动生成py文件

选中一个.ui,然后点击配置好的外部工具:Tools->External Tools->pyuic5,就会自动生成对应的.py文件的。

如果实在不知道怎么配置pycharm,也可以直接用终端命令来生成:

先用cd命令进入ui文件所在的路径下,然后执行命令:pyuic5 -o demo.py demo.ui

5、修改py文件来调用检测程序

经过前面几步只是对界面构建元素控件,接下来需要写代码来对每个控件进行点击响应操作:

①选择图片上传

②显示环境

③启动程序

④在setupui中添加上述点击响应函数

⑤修改继承类为QmainWindow并添加初始化函数

完整代码如下:

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'BscanObjDetection.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 sysfrom PyQt5 import QtCore, QtGui, QtWidgets
import torch
import torchvision
import cv2from ultralytics import YOLOclass Ui_MainWindow(QMainWindow):def __init__(self):super().__init__()self.setupUi(self)self.retranslateUi(self)def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(1131, 932)self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.pushButton = QtWidgets.QPushButton(self.centralwidget)self.pushButton.setGeometry(QtCore.QRect(40, 20, 98, 26))self.pushButton.setObjectName("pushButton")self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)self.pushButton_2.setGeometry(QtCore.QRect(220, 20, 98, 26))self.pushButton_2.setObjectName("pushButton_2")self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)self.pushButton_3.setGeometry(QtCore.QRect(390, 20, 98, 26))self.pushButton_3.setObjectName("pushButton_3")self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget)self.textBrowser.setGeometry(QtCore.QRect(40, 70, 1031, 61))self.textBrowser.setObjectName("textBrowser")self.label = QtWidgets.QLabel(self.centralwidget)self.label.setGeometry(QtCore.QRect(40, 180, 511, 451))self.label.setObjectName("label")self.label_2 = QtWidgets.QLabel(self.centralwidget)self.label_2.setGeometry(QtCore.QRect(590, 180, 491, 461))self.label_2.setObjectName("label_2")MainWindow.setCentralWidget(self.centralwidget)self.menubar = QtWidgets.QMenuBar(MainWindow)self.menubar.setGeometry(QtCore.QRect(0, 0, 1131, 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_3.clicked.connect(self.startProgram)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))self.pushButton.setText(_translate("MainWindow", "上传图片"))self.pushButton_2.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_pathif image_path:# 在这里添加加载图片的逻辑,例如显示图片到labelpixmap = QtGui.QPixmap(image_path)self.label.setPixmap(pixmap)self.label.setScaledContents(True)def showEnvironment(self):pytorch_version = torch.__version__torchvision_version = torchvision.__version__self.textBrowser.setText(f"PyTorch Version: {pytorch_version}\n"f"Torchvision Version: {torchvision_version}")def startProgram(self):self.textBrowser.setText(self.image_path)model = YOLO(r'C:\work\PycharmProjects\BscanObjDetection\frame_count\runs\detect\best.pt')results = model(self.image_path)annotated_frame = results[0].plot()# 图片暂存save_image_name = self.image_path.split("/")[-1].split(".")[0] + "_pred"cv2.imwrite(f"C:\work\PycharmProjects\BscanObjDetection\data\predict\{save_image_name}.jpg", annotated_frame)# 将图像数据转换为QImage格式height, width, channel = annotated_frame.shapebytes_per_line = 3 * widthqimage = QtGui.QImage(annotated_frame.data, width, height, bytes_per_line, QtGui.QImage.Format_RGB888)# 将QImage转换为QPixmappixmap = QtGui.QPixmap.fromImage(qimage)# 都执行:self.label_2.setPixmap(pixmap)self.label_2.setScaledContents(True)if __name__ == '__main__':app = QApplication(sys.argv)MainWindow1 = QMainWindow()  # MainWindow1随便改ui = Ui_MainWindow()  # 随便改ui.setupUi(MainWindow1)MainWindow1.show()sys.exit(app.exec_())

6、执行py文件启动

效果如下视频:

qt designer

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/36130.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

还在花钱做数据可视化?为大家推荐一款免费可视化工具

在当今数据驱动的世界里,数据可视化已经成为不可或缺的工具,帮助我们更好地理解和分析信息。然而,许多企业和个人仍在为昂贵的可视化软件买单,承受着高昂的费用和复杂的操作流程。因此,作为一个经常接触数据可视化的相…

php聚合快递寄快递小程序

一、引言:告别传统寄件,拥抱便捷新选择 在数字化时代,我们越来越追求便捷和高效。传统的寄件方式已经无法满足现代人快速、便捷的需求。因此,一款聚合快递优惠寄件小程序应运而生,它集合了多家快递公司,为…

信创产业生态圈各企业分布

文章目录 应用系统:办公管理:云平台网络安全基础软件操作系统数据库中间件 基础硬件芯片 我们国家在前几年提出了信创战略计划,就是为了在信息技术领域,将一些国外牌子的设备和应用、软件逐渐替换成国产的,保证国家的金…

综合布线实训室建设可行性报告

1、 建设综合布线实训室的目的和意义 1.1 响应国家职业教育政策 在国家对职业教育的高度重视和政策支持下,综合布线实训室的建设不仅是对国家教育方针的积极响应,也是对技术教育改革的有力推动。通过这一平台,我们旨在培育出一批具有强烈实…

mac app应用程序如何自定义图标, 更换.app为自己喜欢的图标或者图片 详细图文讲解

在mac系统中,我们可以对任何的app应用程序更换或者自定义图标, 这个图标可以是拥有的app的图标,或者是你自己制作的 x.icns 图标 或者是 任意的图片, 建议大小512x512 。 自定义图标方法如下: 1. 更换为已有app的图标…

倒计时日期 桌面倒数日 重要日期倒计时提醒

在工作、学习、生活中,我们往往会有很多重要的日子需要我们去标记。在工作中的季度考核、学习中的关键时间点、生活中的各种纪念日……等等,都需要我们去对未来这些重要的时间节点做一个倒计时提醒。 日期倒计时让我们对未来的时间,有一个非…

【深度学习】基于深度离散潜在变量模型的变分推理

1.引言 1.1.讨论的目标 阅读并理解本文后,大家应能够: 掌握如何为具有离散潜在变量的模型设定参数在可行的情况下,使用精确的对数似然函数来估计参数利用神经变分推断方法来估计参数 1.2.导入相关软件包 # 导入PyTorch库,用于…

揭秘Soundex算法:解锁声音背后的数字密码

文章目录 引言一、Soundex算法简介二、Soundex算法的工作原理1.预处理2.初始化3.编码转换4.补齐编码5.匹配计算6.判断相似得分 三、算法实现代码Demo四、Soundex算法的应用场景五、Soundex算法的局限性总结 引言 在信息爆炸的今天,数据处理和检索成为了我们日常生活…

处理key value数据

循环以上数据 <u-popup :round"10" :show"tab OilType" close"close" mode"bottom"><view class"container"><view v-for"(allData, allType) in allList" :key"allType"><view …

注意!流量卡的禁区并不一样,请看清楚后再下单!

大家好&#xff0c;我是搜卡之家&#xff0c;今天我又来给大家科普了&#xff01; 今天科普的内容是关于流量卡禁区&#xff01; 首先要说一下&#xff0c;流量卡为什么会有禁区&#xff1f;运营商设立禁区主要是为了应对电信诈骗和违法使用电话卡的行为&#xff0c;确保网络…

Web应用和Tomcat的集成鉴权2-Form Authentication

作者:私语茶馆 1.相关章节 1) Web应用和Tomcat的集成鉴权1-BasicAuthentication-CSDN博客 2) Web应用和Tomcat的集成鉴权2-Form Authentication-CSDN博客 集成鉴权+定制化登录 2.前言 上章讲述了Tomcat的Basic Authentication鉴权模式,可以让Web应用和Tomcat的鉴权集成起来…

【Flink metric(1)】Flink指标系统的系统性知识:获取metric以及注册自己的metric

文章目录 一. Registering metrics&#xff1a;向flink注册新自己的metrics1. 注册metrics2. Metric types:指标类型2.1. Counter2.2. Gauge2.3. Histogram(ing)2.4. Meter 二. Scope:指标作用域1. User Scope2. System Scope ing3. User Variables 三. Reporter ing四. System…

面试题-Java垃圾回收之垃圾收集器

1.基础知识 (1)知识点补充 Stop -the -World:发生时&#xff0c;除了GC所用的线程之外&#xff0c;所有的线程都处于等待状态 Safepoint: 可达性分析算法时&#xff0c;必须保证在某个快照点进行。 分析的过程中对象的引用关系不会发生变化&#xff01; JVM的运行模式&#x…

数据结构-分析期末选择题考点(排序)

何似清歌倚桃李 一炉沈水醉红灯 契子 ✨ 上一期给大家提供了大概会考的题型给老铁们复习的大致思路 这一期还会是一样&#xff0c;我将整理一下排序的题型以及解题方法给你们 由于时间还很多&#xff0c;我就慢慢总结吧&#xff0c;一天一章的样子&#xff0c;明天总结串、后天…

MyBatis源码分析--一级缓存、二级缓存原理

前言&#xff1a; 有点项目经验的朋友都知道缓存的重要性是不言而喻的&#xff0c;不仅仅我们在开发项目业务功能的时候使用了各种缓存&#xff0c;框架在设计的时候也有框架层面的缓存&#xff0c;尤其在查询多的场景下&#xff0c;缓存可以大大的减少数据库访问&#xff0c;…

微前端框架是为了解决项目应用在大型项目中带来的复杂性和维护难题而提出的技术方案。

微前端框架是为了解决单页应用&#xff08;SPA&#xff09;在大型项目中带来的复杂性和维护难题而提出的技术方案。Qiankun.js、MicroApp 和 Wujie 是三种流行的微前端框架。以下是对这三种框架的优缺点分析&#xff1a; Qiankun.js 优点 成熟度高&#xff1a;Qiankun.js 基…

【知识学习】阐述Unity3D中FogLOD的概念及使用方法示例

在Unity3D中&#xff0c;Fog&#xff08;雾效&#xff09;和LOD&#xff08;Level of Detail&#xff0c;细节层次&#xff09;是两种用于提高场景视觉效果和性能的技术。 Fog&#xff08;雾效&#xff09; 雾效是一种视觉效果&#xff0c;用于模拟大气中的雾或烟&#xff0c…

YOLOv8数据集标注

1 简介 数据集是必不可少的部分&#xff0c;数据集的优劣直接影响训练效果。一般来说&#xff0c;一个完整的数据集应该包括训练集、测试集和验证集。通常&#xff0c;数据集会被划分为训练集和测试集&#xff0c;比如将数据集的70%用作训练集&#xff0c;30%用作测试集。在进行…

信号处理——时频分析

经典傅里叶变换的限制&#xff1a; 1、只能反映信号的整体特性&#xff1b;&#xff08;完全是时域或频域&#xff09; 2、要求信号满足平稳条件&#xff1b; 3、必须获得时域中的全部信息。 所以引入时频分析&#xff0c;同时使用时间和频率的联合函数来表示信号。 1 时频…

提高数据融合效率和数据成果质量工作流的可行性分析

第一章 引言 本文基于对框架数据、地名地址数据以及变更调查数据为主体数据源的分析&#xff0c;结合数据融合中分层数据处理原则和内容&#xff0c;从数据管理者、数据应用的角度提出数据质量的定位、需求定位&#xff0c;归纳数据融合过程中存在的困难&#xff0c;提出了数据…