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

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_())

5、执行py文件启动

效果如下视频:

qt designer

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

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

相关文章

11. Java线程的状态详解

1. 前言 本节内容主要是对多线程的 6 种状态进行详细讲解,具体内容点如下: 抛开语言,谈操作系统的线程的生命周期及线程 5 种状态,这是我们学习 Java 多线程 6 种状态的基础;掌握 Java 的线程生命周期及 6 种线程状态…

电脑没声音是什么原因?一篇文章帮你解决疑惑

在使用电脑时,声音是至关重要的一部分,无论是播放音乐、观看视频还是进行视频会议。然而,有时候电脑可能会出现没声音的情况,这让人感到非常困扰。那么电脑没声音是什么原因呢?本文将详细介绍解决电脑没声音问题的三种…

机器人自主学习方法学习

各类算法的优缺点 原理: 该结构中初始的知识为0,不存在任何先验知识,让机器人与环境交互不断获得经验,是一个增量学习的过程。 算法举例 基于强化学习的开源算法及工具 OpenAI Gym:用于开发和比较强化学习算法的工具…

电脑开不了机怎么办?无响应就试试这3个方法,快速解决黑屏

当电脑突然变得沉默寡言,没有任何响应,屏幕只剩下一片漆黑时,不仅会打断我们的计划,还可能让我们感到无助和焦虑。电脑开不了机怎么办呢?如果你正面临这样的困境,别担心,本文将引导你通过三个简…

姚期智、张亚勤、薛澜、Stuart Russell、Max Tegmark,DeepMind研究员等共话全球AI治理丨大会回顾...

为什么AI安全已迫在眉睫?如何构建全球范围内的合作?民众该如何参与到其中?未来的AI系统将是什么样的? 2024年6月15日,智源大会第二天,多位AI安全领域专家进行圆桌讨论,连接中国北京和美国加利福…

Unity编辑器工具---版本控制与自动化打包工具

Unity - 特殊文件夹【作用与是否会被打包到build中】 Unity编辑器工具—版本控制与自动化打包工具: 面板显示:工具包含一个面板,用于展示软件的不同版本信息。版本信息:面板上显示主版本号、当前版本号和子版本号。版本控制功能…

企业数据挖掘平台产品特色及合作案例介绍

泰迪企业数据挖掘平台是一款通用的、企业级、智能化的数据分析模型构建与数据应用场景设计工具,能够一体化地完成数据集成、模型构建、模型发布,为数据分析、探索、服务流程提供支撑,提供完整的数据探索、多数据源接入、特征处理、模型搭建、…

基于KNN的旋转机械故障诊断(MATLAB)

KNN算法又称K-近邻算法,其主要思想是:对于要分类的样本按照一定的相似性度量方法寻找与之最近的K个邻居,计算这K个邻居中类别出现次数最多的那个类作为该样本所属类。其算法步骤如下。 (1)计算待分类样本与训练集中各个数据之间的距离。 (2…

mybatis-plus 实体中空字段更新不上

FieldStrategy 是一个枚举类型,它定义了字段的几种策略: IGNORED:忽略判断,所有字段都进行更新操作 NOT_NULL:非 NULL 判断(默认策略),字段非 NULL 才进行更新 NOT_EMPTY&#xff…

Kompas AI数据分析与预测功能对比

一、引言 在现代商业环境中,数据分析与预测是企业制定战略决策的关键工具。通过对大量数据的分析,企业能够识别趋势、预测未来变化,并做出更为明智的决策。本文将对比Kompas AI与其他主要AI产品在数据分析与预测方面的能力,展示K…

【芯片】MCU的分类

MCU又称单片微型计算机(Single Chip Microcomputer )或者单片机,是把中央处理器(Central Process Unit;CPU)的频率与规格做适当缩减,并将内存(memory)、计数器(Timer)、USB、A/D转换、UART、PLC、DMA等周边接口,甚至LCD驱动电路都…

智能扫地机,让生活电器更加便民-NV040D扫地机语音方案

一、语音扫地机开发背景: 随着人工智能和物联网技术的飞速发展,智能家居设备已成为现代家庭不可或缺的一部分。其中,扫地机作为家庭清洁的重要工具,更是得到了广泛的关注和应用。 然而,传统的扫地机在功能和使用上仍存…

计算机网络之入门

1.网络的发展 1.1计算机网络定义 计算机网络是以共享资源(硬件、软件和数据等)为目的而连接起来的、在协议控制下,由一台或多台计算机、若干台终端设备、数据传输设备等组成的系统之集合。 这些计算机系统应当具有独立自治的能力&#xff…

无芯封装基板适用于先进封装技术 我国行业发展面临一定挑战

无芯封装基板适用于先进封装技术 我国行业发展面临一定挑战 无芯封装基板指去除作为核心支撑层的芯板,仅由积层板构成的封装基板。与传统带有芯层的封装基板相比,无芯封装基板具有轻量化、密度高、信号传输质量高、散热性能好、布线灵活性好等优势&#…

为什么每一名程序员都应该学习 C++?

掌握 C 可不容易,但一旦你掌握了,就会获得丰厚的回报。 通常,程序员在他们的编程生涯中会使用多种编程语言。然而,我们也看到,有些程序员一直在使用同一种编程语言。例如,我们经常遇到有几十年经验的 Java…

pd17虚拟机安装包:Parallels Desktop 17 激活版

Parallels Desktop 17 是一款功能强大的虚拟机软件,可以在 Mac 计算机上运行 Windows、Linux 和其他操作系统。使用 Parallels Desktop,您可以创建虚拟机并在其中安装各种操作系统,从而能够在同一台计算机上同时运行多个操作系统。 该软件具…

华为仓颉编程语言正式发布,仓颉编程教程

目录 前言 基本概念 标识符 变量 类型 基础数据类型 表达式 if 表达式 while 表达式 for-in 表达式 程序结构 函数 定义函数 调用函数 lambda表达式 应用实例(遍历目录) 枚举 定义与实例化 成员访问规则 match表达式 应用实例&…

探索ONLYOFFICE桌面编辑器8.1:更强大的办公软件(新功能全新详解)

引入 时间到达2024年,办公软件已经成为不可或缺的的一部分。想到办公软件不知道大家首先想到那些产品 office 亦或是 WPS,但一个前者需要购买才能使用完整服务,一个漫天的弹广告不充会员什么都用不了。那难道世面上就没有一块正在好用无广告的…

Clonable接口和拷贝

Hello~小伙伴们!本篇学习Clonable接口与深拷贝,一起往下看吧~(画图水平有限,两张图,,我真的画了巨久,求路过的朋友来个3连~阿阿阿~~~) 目录 1、Clonable接口概念 2、拷贝 2、1浅拷贝 2、2深拷贝 1、Clon…

Linux学习第52天:Linux网络驱动实验(三):一往(网)情深

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 许久没有更新,的确是最近有点懈怠了。没有任何借口,接受所有的批评。接下来无论如何也要坚持下去,不管处于什么境地、什么原因&am…