Yolov8界面可视化

本教程使用的是Pyside6

1、安装PySide6模块

pip install pyside6

安装完成之后,会有一个designer.exe可执行文件,打开之后,我们可以通过拖拉拽的方式来布局我们的界面。

designer.exe文件位置,一般位于当前虚拟环境下面的路径。

虚拟环境--->Lib--->site-packages-->PySide6--->designer.exe文件

建议发送桌面快捷方式,便于下次查找起来更方便

2、界面布局

主要使用的控件是:

QTabWiget  容器布局

Qlabel   图片和视频显示区域

QPushButton 按钮

Line 画线

使用背景色,主要是好区分哪一个组件,功能完成之后,可以再做调整

3、图片检测功能

需要用到的技术就是插槽和信号

将ui文件转换为python文件(这是第一步)

将生成好ui文件,导入到项目中,执行以下命令。

pyside6-uic project_ui.ui -o main.py

基础UI界面,封装好的,大家可以使用(第二步,这里面调用上面生成好的main.py模块注意命名和引入)第四行代码

# -*- coding: utf-8 -*-
# Auther : qiutiejun
# Date : 2024/6/2 13:35
# File : main_project_ui.py
# 主界面,基础ui
import torch
import sys
from PySide6.QtWidgets import QApplication,QMainWindow,QFileDialog
from main import Ui_MainWindow
from PySide6.QtGui import QPixmap,QImageclass MainWindow(QMainWindow,Ui_MainWindow):def __init__(self):super(MainWindow, self).__init__()self.setupUi(self)if __name__ == '__main__':app = QApplication(sys.argv)window = MainWindow()window.show()app.exec()

运行次模块,你会看到以下界面:

需要注意的几个地方:

1、控价摆放好之后,一定要给控件进行重命名操作

2、对于显示图片的lable来说,需要勾选自适应的标识。

编码:

可参考官网:

https://docs.ultralytics.com/modes/predict/#__tabbed_1_2

ps:需要大家有一点QT编码知识点,也不要求太多。只需要掌握插槽和信号这两个概念就行。

简单来讲就是,信号就是当有什么事件发生时,会触发的。比如常见的点击事件。插槽,就是信号接收器,当某一个信号发出后,我们需要做什么的应对处理。

代码如下:

1、信号处理(点击选择图片是触发)

self.select_img.clicked.connect(self.detect_img_methods)

我是把图片按钮和视频按钮的信号放置在一个方法中,在初始化的过程中就会调用

    def btn_slot(self):print("按钮触发事件")self.select_img.clicked.connect(self.detect_img_methods)self.select_video.clicked.connect(self.detect_video_methods)

接下来就是处理信号信息的插槽,自己也是通过方法来处理的。

第一种方式:

 # 检测图片按钮的功能def detect_img_methods(self):print("图片检测")files = QFileDialog.getOpenFileName(dir='ui_information',filter='*.jpg')print("路径",files)if files[0]:# 显示图片self.old_img.setPixmap(QPixmap(files[0]))# 获取文件名file_info = QFileInfo(files[0])# 获取文件名file_name_only = file_info.fileName()change_img = self.make_detect_image_name(files[0],file_name_only)self.detect_img.setPixmap(QPixmap(change_img))
    def make_detect_image_name(self,filepath,filename):results = self.model.predict(source=filepath, show=False, save=True)curr_path = os.getcwd()result_path = ""for result in results:result_path = result.save_dirreturn os.path.join(curr_path, result_path, filename)

思路分析:

1、原始图片显示

QFileDialog.getOpenFileName() 方法可以获取文件的路径,返回值是一个元组,我们可以获取第一个元素,就是flies[0],通过setPixmap将原始图片显示处理。

2、识别图片结果显示

思路分析。通过调用model.predict()方法,每次运行成功之后,就会在runs/detect----->目录下面

predict存放识别结果的图片。 有了这个思路之后,我们只需要获取对应的路径,就能拿到识别图片。然后同样的方式显示处理。这里通过result.save_dir获取识别的结果路径,通过os来拼接完成的路径,最终图片就会显示处理。结果如下:

样式大家下去可以自行调整

弊端:需要准确到找到路径位置

第二种实现思路:

我们可以通过调用model(frame)来训练模型,会生成识别图像的向量数据,然后我们通过该方法,将对应的向量转换为图像,也可以做到以下效果。

核心代码如下:

4、下一张图片功能

思路分析:

获取当前目录的所有文件(图片),列表格式,获取选取到的图片对应的下标,下标+1往后移动一个,下标-1往前移动,对应的就是下一张或者上一张,需要增加最小值和最大的值判断。

代码如下(下):

初始化的代码

 # 批量识别图片的下标self.current_image_index = -1# 存放所有的图片self.all_images=[]
    def next_img_methods(self):if self.current_image_index ==-1:print("请先选择图片")QMessageBox.critical(None,"error","请先选择图片!")returnprint('下一张图片')# 识别结果complox_path = os.path.join(self.root_path,self.all_images[self.current_image_index+1])# 显示self.old_img.setPixmap(QPixmap(complox_path))results = self.model(complox_path)[0].plot()# for result in results:#     print(result.orig_img)change_img = conver2Qimage(results)self.detect_img.setPixmap(QPixmap.fromImage(change_img))# 增加1self.current_image_index += 1print('最大下标',self.current_image_index,len(self.all_images))# 最大值if self.current_image_index >= len(self.all_images)-1:self.current_image_index = len(self.all_images)-2

5、上一张图片功能

思路分析:主要是想办法知道当前显示图片的下标,上一页减少下标,上一页增加下标。注意控制边界就行,代码和下一张图片功能类似。

6、视频检测功能

思路分析:其实视频的每一帧就是一张图片,所以其实跟检测图片的功能类似,可以使用opencv解析视频获取每一张图片,然后就跟图片的检测逻辑差不多。

思路二:视频解析如果放在主线程中,会影响其他业务的操作,可以考虑放到线程中去检测视频。

放入主要代码作为参考:

  # 开启视频处理独立线程Thread(target=self.video_detail,daemon=True).start()
# 视频处理流程def video_detail(self):while True:if not self.frameToAnalyze:time.sleep(0.01)continueframe = self.frameToAnalyze.pop(0)result = self.model(frame)[0].plot()qimage = conver2Qimage(result)if self.stop_flag==False:self.detect_video.setPixmap(QPixmap.fromImage(qimage))# 写入表格数据self.detect_video_jianche_result(frame)# 获取检测结果self.show_table_data()# 休眠0.3秒time.sleep(0.3)
    def display_origin_video_image(self,frame):frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)qImage = conver2Qimage(frame)# 往显示视频的Label里 显示QImageself.old_video.setPixmap(QPixmap.fromImage(qImage))# 如果当前没有处理任务if not self.frameToAnalyze:self.frameToAnalyze.append(frame)

7、效果展示:

程序没什么难度,对于视频检测来说,不仅是实现功能,还需要考虑性能的问题

补充知识

修改TabWidget的选项样式,字体大小,放大选项

参考代码:

  self.tabWidget.setStyleSheet("QTabBar::tab { font-size: 12px;width:100px;height:50px;}")

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

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

相关文章

谷粒商城—分布式高级①.md

1. ELASTICSEARCH 1、安装elastic search dokcer中安装elastic search (1)下载ealastic search和kibana docker pull elasticsearch:7.6.2 docker pull kibana:7.6.2(2)配置 mkdir -p /mydata/elasticsearch/config mkdir -p /mydata/elasticsearch/data echo "h…

系统性能优化

一、概述 性能优化的目标:是提高系统或应用程序的响应时间、吞吐量、cpu、内存、磁盘IO、网络、流量、JVM、Tomcat、DB等方面的性能指标。 性能优化需要有一些技巧:对于整个产品或项目而言,比如可以从前端优化、后端优化、架构优化、高并发…

基于STM32设计的粮食仓库(粮仓)环境监测系统

一、前言 当前项目使用的相关软件工具、传感器源代码工程已经上传到网盘(实时更新项目内容):https://ccnr8sukk85n.feishu.cn/wiki/QjY8weDYHibqRYkFP2qcA9aGnvb?fromfrom_copylink 1.1 项目开发背景 随着现代农业的发展和粮食储存规模的…

基于STM32的智能导盲/智能拐杖系统

基于STM32的智能导盲/智能拐杖系统 持续更新,欢迎关注!!! ** 基于STM32的智能导盲/智能拐杖系统 ** 据统计,全球视障人士的数量已经超过2.5亿,其中大部分人需要一种有效的辅助器具来帮助他们感知周围环境,安全行走。 近年来&am…

关于idea-Java-servlet-Tomcat-Web开发中出现404NOT FOUND问题的解决

在做web项目时,第一次使用servlet开发链接前端和后端的操作,果不其然,遇到了诸多问题,而遇到最多的就是运行项目打开页面时出现404NOT FOUND的情况。因为这个问题我也是鼓捣了好久,上网查了许多资料才最终解决&#xf…

【数据结构——栈与队列】链栈的基本运算(头歌实践教学平台习题)【合集】

目录😋 任务描述 相关知识 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:编写一个程序实现链栈的基本运算。 相关知识 为了完成本关任务,你需要掌握: 初始化栈、销毁栈、判断栈是否为空、进栈、出栈、取栈…

与 Cursor AI 对话编程:2小时开发报修维修微信小程序

本文记录了如何通过与 Cursor AI 对话,全程不写一行代码的情况下,完成一个完整的报修小程序。整个过程展示了 AI 如何帮助我们: 生成代码 、解决问题、优化实现、完善细节。 先看一下效果图: 一、项目配置 首先我是这样和 AI 对…

基于windows环境使用nvm安装多版本nodejs

目录 前言 一、卸载node 二、nvm是什么? 三、nvm安装 1.官网下载 nvm 包 2. 安装nvm-setup.exe 3. 配置路径和下载镜像 4. 检查安装是否完成 四、 使用nvm安装node 五、修改npm默认镜像源为淘宝镜像 六、环境变量配置 1. 新建目录 2. 设置环境变量 七…

MVP模式的理解和实践

MVP(Model-View-Presenter)模式是一种用于组织代码的架构模式,主要用于用户界面的开发。它通过将应用程序的三个主要组件分开,提高了应用的可维护性和可测试性。本文将详细介绍MVP模式的理解和实践,并通过Java语言提供…

在Liunx中安装JDK、Tomcat、mysql、lrzsz、Nginx

一.软件安装方式 在Linux系统中,安装软件的方式主要有四种,这四种安装方式的特点如下: 二.安装JDK 上述我们介绍了Linux系统软件安装的四种形式,接下来我们就通过第一种(二进制发 布包)形式来安装JDK。 在/下创建soft目录&…

神经网络基础-初识神经网络

人工神经网络( Artificial Neural Network, 简写为ANN)也简称为神经网络(NN),是一种模仿生物神经网络结构和功能的计算模型。人脑可以看做是一个生物神经网络,由众多的神经元连接而成。各个神经…

Python中PyTorch详解

文章目录 Python中PyTorch详解一、引言二、PyTorch核心概念1、张量(Tensor)1.1、创建张量1.2、张量操作 2、自动求导(Autograd)2.1、自动求导示例 三、构建神经网络1、使用nn模块2、优化器(Optimizer) 四、…

云服务器挖矿程序占用资源处理

云服务器挖矿程序占用资源处理 文章目录 云服务器挖矿程序占用资源处理top查看服务器后台运行情况关闭病毒删除病毒文件top 云服务器通过手机短信发送了多次预警,疑似出现挖矿程序,登录口令可能已经被暴力破解。处理方法是立即更改口令,然后处…

电脑文件夹打不开了,能打开但是会闪退,提示“找不到iUtils.dll”是什么原因?

电脑运行时常见问题解析:文件夹打不开、闪退及“找不到iUtils.dll”报错 在使用电脑的过程中,我们可能会遇到文件夹打不开、软件闪退或系统报错等问题,特别是提示“找不到iUtils.dll”的报错,更是让人困惑不已。今天我将为大家详…

【教程】让Jupyter支持打开CSV和Excel(xlsx)文件

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 支持CSV JupyterLab本身支持直接打开CSV文件,因此只需要在JupyterLab的文件浏览器中找到CSV文件并双击它,就可以在JupyterLab的…

自动驾驶域控制器简介

汽车智能驾驶功能持续高速渗透,带来智能驾驶域控制器市场空间快速增 长。智驾域控制器是智能驾驶决策环节的重要零部件,主要功能为处理感知 信息、进行规划决策等。其核心部件主要为计算芯片,英伟达、地平线等芯 片厂商市场地位突出。随着消费…

计算机网络-传输层 TCP协议(上)

目录 报头结构 TCP的可靠传输机制 核心机制一:确认应答 TCP的序号和确认序号 核心机制二:丢包重传 核心机制三:连接管理 建立连接-三次握手 断开连接-四次挥手 核心机制四:滑动窗口 数据包已经抵达, ACK被丢了 数据包就…

5.2章节python字符串的格式化三种方式

在Python中,格式化字符串是编程中常见的任务,它用于将变量或表达式的值嵌入到字符串中。以下是三种常见的格式化字符串的方式: 1.百分号(%)格式化: 这是Python早期版本中常用的字符串格式化方法。通过在字…

【经验分享】容器云运维的知识点

最近忙于备考没关注,有次点进某小黄鱼发现首页出现了我的笔记还被人收费了 虽然我也卖了一些资源,但我以交流、交换为主,笔记都是免费给别人看的 由于当时刚刚接触写的并不成熟,为了避免更多人花没必要的钱,所以决定公…

Spring Boot 集成 MyBatis 全面讲解

Spring Boot 集成 MyBatis 全面讲解 MyBatis 是一款优秀的持久层框架,与 Spring Boot 集成后可以大大简化开发流程。本文将全面讲解如何在 Spring Boot 中集成 MyBatis,包括环境配置、基础操作、高级功能和最佳实践。 一、MyBatis 简介 1. SqlSession …