吃肉原创——使用PYQT设计的yolov8目标检测GUI界面

news2024/11/24 19:48:13

需要快速编写一个GUI图形界面

pip install pyqt5
pip install pyqt5-tools

然后去conda环境中查找启动程序

F:\APP\miniconda\envs\yolov8gui\Lib\site-packages\qt5_applications\Qt\bin\designer.exe

双击可以启动,我们可以把它发送到桌面快捷方式

准备设计图,这是我用微信截图自己画的:
在这里插入图片描述
然后开始设计进行测试:

设计好的样子如下:
在这里插入图片描述
然后点击保存,我保存到了项目的目录下:G:\bsh\yolov8\xcbGUI\demo.ui

然后考虑使用demo.ui文件生成python代码
点击pycharm的文件——设置——工具——外部工具——
点击加号,新增pyuic5的外部工具,
名称随便写,程序去conda的envs里找,例如我的是:F:\APP\miniconda\envs\yolov8gui\Scripts\pyuic5.exe
实参需要注意,如果填写:
$FileName$ -o $FileNameWithoutExtension$.py
那么只可以调用
G:\bsh\yolov8\目录下的.ui文件来生成.py文件,
想要指定目录,请按照我的方法:
xcbGUI\$FileName$ -o xcbGUI\$FileNameWithoutExtension$.py
就可以生成
G:\bsh\yolov8\xcbGUI目录下的文件了
最后的工作目录可以写:
$ProjectFileDir$
在这里插入图片描述
生成后的代码自己加入类的初始化
class Ui_MainWindow(object):


class Ui_MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.retranslateUi(self)
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1128, 1009)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
       
     xxxxxxxxx
     xxxxxx

末尾加入启动程序:

if __name__ == '__main__':
    app = QApplication(sys.argv)
    MainWindow1 = QMainWindow()     #MainWindow1随便改
    ui = Ui_MainWindow()             #随便改
    ui.setupUi(MainWindow1)
    MainWindow1.show()
    sys.exit(app.exec_())

然后增加点击逻辑,调用后台程序,使得程序可以运行,效果如下:
图片:
在这里插入图片描述

yolov8目标检测录制视频

后面附上我的代码:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'xcbGUI\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 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(1128, 1009)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(20, 10, 93, 28))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(160, 10, 93, 28))
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_3.setGeometry(QtCore.QRect(290, 10, 93, 28))
        self.pushButton_3.setObjectName("pushButton_3")
        self.label1 = QtWidgets.QTextBrowser(self.centralwidget)
        self.label1.setGeometry(QtCore.QRect(20, 60, 1071, 71))
        self.label1.setObjectName("label1")
        self.label2 = QtWidgets.QLabel(self.centralwidget)
        self.label2.setGeometry(QtCore.QRect(40, 190, 481, 421))
        self.label2.setObjectName("label2")
        self.label3 = QtWidgets.QLabel(self.centralwidget)
        self.label3.setGeometry(QtCore.QRect(600, 200, 461, 381))
        self.label3.setObjectName("label3")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1128, 26))
        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)
        # self.image_path = ''

    def retranslateUi(self, MainWindow):# 设置界面各个组件的文本内容。
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "上传图片"))
        self.pushButton_2.setText(_translate("MainWindow", "显示环境"))
        self.pushButton_3.setText(_translate("MainWindow", "启动程序"))
        self.label2.setText(_translate("MainWindow", "TextLabel"))
        self.label3.setText(_translate("MainWindow", "TextLabel"))

    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.label2.setPixmap(pixmap)
            self.label2.setScaledContents(True)
    def showEnvironment(self):
        pytorch_version = torch.__version__
        torchvision_version = torchvision.__version__
        self.label1.setText(f"PyTorch Version: {pytorch_version}\n"
                            f"Torchvision Version: {torchvision_version}")

    def startProgram(self):

        self.label1.setText(self.image_path)
        model = YOLO('../runs/detect/yolov8s_zaoju1_170imgs_ep50/weights/best.pt')
        results = model(self.image_path)
        annotated_frame = results[0].plot()
        #方法一:
        # 图片暂存
        # cv2.imwrite("result.jpg",annotated_frame)
        # pixmap = QtGui.QPixmap("result.jpg")

        #方法二:
        # 将图像数据转换为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.label3.setPixmap(pixmap)
        self.label3.setScaledContents(True)
if __name__ == '__main__':
    app = QApplication(sys.argv)
    MainWindow1 = QMainWindow()     #MainWindow1随便改
    ui = Ui_MainWindow()             #随便改
    ui.setupUi(MainWindow1)
    MainWindow1.show()
    sys.exit(app.exec_())

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

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

相关文章

最通俗易懂的 - Tomcat 核心源码仿写 第二版代码

– 更新信息 – 第一版代码实现了基本的交互功能,但只实现了单线程,此次迭代修改多线程,并升级为Maven项目,同时优化代码排版,提高代码可读性 第一版代码介绍博客地址:最通俗易懂的 - Tomcat 核心源码仿写…

odoo-035 Pycharm git commit 提交提示 No changes detected

文章目录 问题查找解决其他? 问题 在 gitee 上面新建的 git 项目,dowanload 下来,在 Pycharm 中修改后发现改完就变成白色到了,不是绿色或蓝色的,然后 git commit 的时候提示 No changes detected。 查找 上面是在 …

spring bean创建总览 1

1 开始 这是一个总图 下边慢慢看 我们最基础的写的方式就是xml的方式去写 像这样, 而我们会通过applicationContext的方式去获得我们的bean ,我其中一篇博客就写到了applicationContext他的父类就是beanFactory 但是中间的是怎么样处理的呢&#xff1f…

springboot、java实现调用企业微信接口向指定用户发送消息

因为项目的业务逻辑需要向指定用户发送企业微信消息&#xff0c;所以在这里记录一下 目录 引入相关依赖创建配置工具类创建发送消息类测试类最终效果 引入相关依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-…

从 Ansible Galaxy 使用角色

从 Ansible Galaxy 使用角色 根据下列要求&#xff0c;创建一个名为 /home/curtis/ansible/roles.yml 的 playbook &#xff1a; playbook 中包含一个 play&#xff0c; 该 play 在 balancers 主机组中的主机上运行并将使用 balancer 角色。 此角色配置一项服务&#xff0c;以…

代码随想录算法训练营第63天|单调栈part02|503.下一个更大元素II、 42. 接雨水

代码随想录算法训练营第63天&#xff5c;单调栈part02&#xff5c;503.下一个更大元素II、 42. 接雨水 503.下一个更大元素II 503.下一个更大元素II 思路&#xff1a; 如何处理循环数组 相信不少同学看到这道题&#xff0c;就想那我直接把两个数组拼接在一起&#xff0c;然…

银河麒麟服务器v10 sp1 .Net6.0 上传文件错误

上一篇&#xff1a;银河麒麟服务器v10 sp1 部署.Net6.0 http https_csdn_aspnet的博客-CSDN博客 .NET 6之前&#xff0c;在Linux服务器上安装 libgdiplus 即可解决&#xff0c;libgdiplus是System.Drawing.Common原生端跨平台实现的主要提供者&#xff0c;是开源mono项目。地址…

小红书美妆护肤种草推广:深度剖析与实战策略

在这个平台上&#xff0c;用户可以分享自己的购物心得和产品评价&#xff0c;为其他消费者提供购买参考。这种基于用户真实体验的分享&#xff0c;更容易赢得消费者的信任&#xff0c;从而提高产品的购买转化率。 小红书俨然成为了美妆护肤品牌种草推广的主要战场&#xff0c;…

如何实现客户自助服务?打造产品知识库

良好的客户服务始于自助服务。根据哈佛商业评论&#xff0c;81% 的客户在联系工作人员之前尝试自己解决问题。92% 的客户表示他们更喜欢使用产品知识库/帮助中心。 所以本文主要探讨了产品知识库是什么&#xff0c;有哪些优势以及如何创建。 产品知识库是什么 产品知识库是将…

“展会建筑小背心”被百万网友吐槽火遍网络!到底为什么?

奇葩的建筑在国内绝对是一个又一个经典的存在&#xff01;前有央视大楼被网友吐槽像大裤衩&#xff0c;后就有金主爸爸富而喜悦耗资50多万设计的展会建筑&#xff0c;被数万网友温柔吐槽像极了“展会建筑小背心”&#xff01;更是在不到短短的24小时里&#xff0c;就被微博网友…

Scratch 之 如何制作鼠标框(2)—— 鼠标框框定角色

hello&#xff0c;大家好&#xff0c;欢迎来到鼠标框系列的第二课时&#xff01; 咱们废话不多说&#xff0c;直接开始 首先&#xff0c;温故知新一下&#xff0c;上个教程我们讨论了如何绘制鼠标框&#xff0c;网址&#xff1a;绘制鼠标框 你说&#xff0c;一个鼠标框&…

excel条件格式:不同组对应位置对比标记

问题描述 下图中有两组数据&#xff0c;想要对比两个对应位置的数据并标记 条件格式 选中其中一个单元格&#xff0c;条件格式->新建规则 使用公式确定要设置格式的单元格&#xff0c;自定义需求 格式化剩余同样标准的单元格

自定义WEB框架结合Jenkins实现全自动测试

自定义WEB框架结合Jenkins实现全自动测试 allure生成 allure生成 1.allure–纯命令运行 -固定的–稍微记住对应的单词即可。2 安装&#xff0c;2个步骤: 1.下载allure包&#xff0c;然后配置环境变量。 https://github.com/allure-framework/allure2/releases/tag/2.22.4 2.在…

卫星定位接收机的现场安装步骤

卫星定位接收机的现场安装步骤如下&#xff1a; 1.选址和规划&#xff1a;选择一个位于开阔空地或无遮挡的位置&#xff0c;以便卫星信号可以顺利接收。确保安装位置可靠稳定&#xff0c;没有物体遮挡。 2.安装支架&#xff1a;根据选定的位置&#xff0c;安装接收机的支架&a…

哪款运动耳机好、好的运动蓝牙耳机推荐

根据美国运动杂志《Runners World》的报道&#xff0c;有实验证据表明&#xff0c;在健身前听一段自己喜欢的音乐可以显著提高肌肉力量和耐力&#xff0c;改善运动表现。快节奏的音乐也可帮助减轻疲劳感&#xff0c;提升锻炼效果。因此&#xff0c;我们可以说音乐可能是运动中最…

基于YOLOv5n/s/m不同参数量级模型开发构建茶叶嫩芽检测识别模型,使用pruning剪枝技术来对模型进行轻量化处理,探索不同剪枝水平下模型性能影响【续】

这里主要是前一篇博文的后续内容&#xff0c;简单回顾一下&#xff1a;本文选取了n/s/m三款不同量级的模型来依次构建训练模型&#xff0c;所有的参数保持同样的设置&#xff0c;之后探索在不同剪枝处理操作下的性能影响。 在上一篇博文中保持30的剪枝程度得到的效果还是比较理…

【解决方法】浏览器连不上网了?扛狼扛狼扛,进来看~

哈喽&#xff0c;木易巷上线啦&#xff01; 今天一大早来到单位&#xff0c;打开笔记本电脑&#xff0c;发现浏览器连不上网&#xff0c;尝试了好多次都是这样的界面。 木易巷点击了下方的【运行Windows网络诊断】 哦豁&#xff0c;显示【远程计算机或设备将不接受连接】 小伙…

第四章,登录注册

目录 4.1 添加注册页面 4.2 注册表单验证 4.3提交注册信息 4.4 完善注册功能 4.5 完善登录功能 4.6 推出用户登录 4.7 用户登录界面 4.8 小结 4.1 添加注册页面 <template><div class="navbar-right"><div class="nav navbar-nav github…

多维时序 | MATLAB实现PSO-CNN-BiGRU多变量时间序列预测

多维时序 | MATLAB实现PSO-CNN-BiGRU多变量时间序列预测 目录 多维时序 | MATLAB实现PSO-CNN-BiGRU多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.多维时序 | MATLAB实现PSO-CNN-BiGRU多变量时间序列预测&#xff1b; 2.运行环境为Matlab20…

kafka 入门到起飞 - 举个栗子一步一步说HW、LEO如何写入

举个简单栗子&#xff0c;如上图 replication.factory 2 副本因子是2一个Leader副本&#xff0c;一个Follower副本初始情况Leader和Follower 副本都是空我们逐步看当producer写入消息时&#xff0c;broker端的副本会做什么&#xff0c;副本的HW和LEO是如何被更新的 步骤一&a…