YOLOv5检测界面-PyQt5实现

1.将detect.py运用到界面

要将 YOLOv5 的检测结果与 PyQt 界面结合,你需要进行一些额外的步骤。以下是一个简单的示例代码,展示如何使用 YOLOv5 进行目标检测并在 PyQt 界面中显示结果。
在这里插入图片描述

首先,确保你已经安装了必要的库

pip install opencv-python PyQt5 torch

然后,使用以下代码作为 yolov5_detect_pyqt.py 假设你要用detect.py进行推理,你需要替换下面的detect函数,采取 f"python detect.py"即可:

import sys
import cv2
import torch
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QPixmap
from PyQt5.QtGui import QImage, QPixmap
from yolov5.detect import detect  # 导入你的 YOLOv5 检测函数

class YOLOv5DetectApp(QWidget):
    def __init__(self):
        super().__init__()

        self.init_ui()

    def init_ui(self):
        self.setWindowTitle('YOLOv5 Object Detection with PyQt')
        self.setGeometry(100, 100, 800, 600)

        self.label = QLabel(self)
        self.label.setAlignment(Qt.AlignCenter)

        vbox = QVBoxLayout(self)
        vbox.addWidget(self.label)

        self.setLayout(vbox)

        self.timer = QTimer(self)
        self.timer.timeout.connect(self.update_frame)
        self.timer.start(1000)  # 设置定时器间隔,单位为毫秒

    def update_frame(self):
        # 执行目标检测
        image = cv2.imread('path/to/your/image.jpg')  # 替换成你的图像路径
        results = detect(image)  # 使用你的 YOLOv5 检测函数

        # 在图像上绘制检测结果
        for result in results:
            label = result['label']
            confidence = result['confidence']
            box = result['box']

            cv2.rectangle(image, (box[0], box[1]), (box[2], box[3]), (0, 255, 0), 2)
            cv2.putText(image, f"{label} {confidence:.2f}", (box[0], box[1] - 10),
                        cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)

        # 将 OpenCV 图像转换为 PyQt 可显示的格式
        height, width, channel = image.shape
        bytes_per_line = 3 * width
        q_image = QImage(image.data, width, height, bytes_per_line, QImage.Format_RGB888)
        pixmap = QPixmap.fromImage(q_image)

        # 在 PyQt 界面上显示图像
        self.label.setPixmap(pixmap)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = YOLOv5DetectApp()
    window.show()
    sys.exit(app.exec_())

请注意,上述代码中的 detect 函数是一个示例函数,你需要替换它为你的 YOLOv5 目标检测函数。确保你的目标检测函数返回一个包含检测结果的列表,每个结果是一个字典,包含标签、置信度和边界框信息。

这只是一个简单的示例,实际上,你可能需要对界面进行更多的优化和交互性。此外,如果你的检测过程很耗时,你可能需要考虑使用多线程来确保界面的响应性。

在这里插入图片描述

2.将发加载图片或视运用到界面

如果你想通过按钮触发加载图片或视频,你可以在 PyQt 窗口中添加按钮,并通过按钮的点击事件触发加载操作。下面是修改后的代码,其中添加了按钮用于加载图片:

import sys
import cv2
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QPushButton, QFileDialog
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtCore import Qt, QTimer
from yolov5.detect import detect  # 导入你的 YOLOv5 检测函数

class YOLOv5DetectApp(QWidget):
    def __init__(self):
        super().__init__()

        self.init_ui()

    def init_ui(self):
        self.setWindowTitle('YOLOv5 Object Detection with PyQt')
        self.setGeometry(100, 100, 800, 600)

        self.label = QLabel(self)
        self.label.setAlignment(Qt.AlignCenter)

        vbox = QVBoxLayout(self)
        vbox.addWidget(self.label)

        # 添加按钮用于加载图片
        self.load_image_button = QPushButton('Load Image', self)
        self.load_image_button.clicked.connect(self.load_image)
        vbox.addWidget(self.load_image_button)

        self.setLayout(vbox)

        self.timer = QTimer(self)
        self.timer.timeout.connect(self.update_frame)
        self.timer.start(1000)  # 设置定时器间隔,单位为毫秒

        self.image_path = None  # 用于存储当前加载的图像路径

    def load_image(self):
        options = QFileDialog.Options()
        options |= QFileDialog.DontUseNativeDialog
        file_name, _ = QFileDialog.getOpenFileName(self, "Open Image File", "", "Image Files (*.png *.jpg *.bmp);;All Files (*)", options=options)
        if file_name:
            self.image_path = file_name

    def update_frame(self):
        if self.image_path is not None:
            # 执行目标检测
            image = cv2.imread(self.image_path)
            results = detect(image)  # 使用你的 YOLOv5 检测函数

            # 在图像上绘制检测结果
            for result in results:
                label = result['label']
                confidence = result['confidence']
                box = result['box']

                cv2.rectangle(image, (box[0], box[1]), (box[2], box[3]), (0, 255, 0), 2)
                cv2.putText(image, f"{label} {confidence:.2f}", (box[0], box[1] - 10),
                            cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)

            # 将 OpenCV 图像转换为 PyQt 可显示的格式
            height, width, channel = image.shape
            bytes_per_line = 3 * width
            q_image = QImage(image.data, width, height, bytes_per_line, QImage.Format_RGB888)
            pixmap = QPixmap.fromImage(q_image)

            # 在 PyQt 界面上显示图像
            self.label.setPixmap(pixmap)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = YOLOv5DetectApp()
    window.show()
    sys.exit(app.exec_())

在这个例子中,通过添加 QPushButton 实例 load_image_button 和连接 clicked 信号到 load_image 方法,实现了通过按钮加载图像的功能。当按钮被点击时,将弹出文件对话框,允许用户选择要加载的图像文件。加载的图像路径存储在 self.image_path 中,并在定时器的 update_frame 方法中使用。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【11】使用透视投影建立一个3D空间的测试

核心操作: 1.proj view model 这三个矩阵 glm::mat4 mvp m_Proj * m_View * model; m_Shader->Bind(); m_Shader->SetUniformMat4f("u_MVP", mvp);着色器里面就: proj:投影矩阵,可以选择正交投影,或者透视投影…

【无标题】【教3妹学编程-算法题】2918. 数组的最小相等和

3妹:呜呜,烦死了, 脸上长了一个痘 2哥 : 不要在意这些细节嘛,不用管它,过两天自然不就好了。 3妹:切,你不懂,影响这两天的心情哇。 2哥 : 我看你是不急着找工作了啊, 工作…

VScode 右键没有转到定义等的菜单

问题: 右键点击该函数出现的结果只能是这样的: 解决: 通过修改 settings.json 文件,以解决问题: 这是原来有问题的配置: {"python.autoComplete.extraPaths": ["/home/robot/1-temp_mak…

uniapp+vue3+ts+vite+echarts开发图表类小程序,将echarts导入项目使用的详细步骤,耗时一天终于弄好了

想在uniapp和vue3环境中使用echarts是一件相当前卫的事情,官方适配的还不是很好,echarts的使用插件写的是有些不太清晰的,这里我花费了一天的时间,终于将这个使用步骤搞清楚了,并且建了一个仓库,大家可以直…

如何在后台执行 SwiftData 操作

文章目录 前言Core Data 私有队列上下文SwiftData 并发支持使用 ModelActor合并上下文更改的问题通过标识符访问模型总结 前言 SwiftData 是一个用于处理数据操作的框架,特别是在 Swift 语言中进行并发操作。本文介绍了如何在后台执行 SwiftData 操作以及与 Core D…

频谱分析仪 如何选择 TFN RMT系列给您答案

TFN RMT手持式频谱分析仪是TFN新推出的一款高性能、全功能版测试仪,集高性能信号分析模块、多制式解析算法软件于一体的手持式测试仪表,满足军工、高校科研、通信运营商、电力、铁路等对移动通信的测试、无线排查干扰等应用而全新推出的平台,…

Linux系统编程——文件的写入及读取

写入(write) 使用write函数需要包含以下头文件&#xff1a; #include <unistd.h> write的函数定义格式 ssize_t write(int fd, const void *buf, size_t count); 附加&#xff1a;一般将数据写入文件中后需关闭文件&#xff0c;这里需要调用关闭(close)函数&#xf…

高级运维学习(十五)Zabbix监控(二)

一 Zabbix 报警机制 1 基本概念 自定义的监控项默认不会自动报警首页也不会提示错误需要配置触发器与报警动作才可以自动报警 2 概念介绍 &#xff08;1&#xff09;触发器 (trigger) 表达式&#xff0c;如内存不足300M&#xff0c;用户超过30个等 当触发条件发生后&a…

[unity]多脚本情况下update函数的执行顺序

序 有的时候&#xff0c;执行某些脚本时会有先后顺序的要求。unity是按什么顺序来执行脚本的&#xff1f;如何设置&#xff1f; 默认的执行顺序 官方文档里面有个很长的图&#xff1a; Unity - Manual: Order of execution for event functions (unity3d.com) 根据文档&…

传输层中的TCP和UPD协议

一)应用层协议简介:根据需求明确要传输的信息&#xff0c;明确要传输的数据格式&#xff1b; 应用层协议:这个协议&#xff0c;实际上是和程序员打交道最多的协议了 1)其它四层都是操作系统&#xff0c;驱动&#xff0c;硬件实现好了的&#xff0c;咱们是不需要管 2)应用层:当我…

YOLOv8-Seg改进: 分割小目标系列篇 | SPD-Conv,提升分割小目标和弱小分割图精度

🚀🚀🚀本文改进:SPD-Conv由一个空间到深度(SPD)层和一个无卷积步长(Conv)层组成,可以应用于大多数CNN体系结构,特别是在处理低分辨率图像和分割小目标等更困难的任务时。 🚀🚀🚀SPD-Conv 分割小目标检测首选,暴力涨点 🚀🚀🚀YOLOv8-seg创新专栏:http:…

【修车案例】一波形一案例(9)

故障车型&#xff1a;捷豹X-Type 故障现象&#xff1a;发动机故障指示灯点亮&#xff0c;加速时动力不足&#xff0c;扫描工具显示EGR阀和涡轮增压器增压控制位置传感器电路故障 示波器诊断&#xff1a;检测增压控制位置传感器电路的完整性 A通道 - 增压控制执行电机电源电压B通…

docker更改存储目录原因及方案

为什么一定要将docker的存储目录挂载到其他目录 docker在安装时默认存储目录在/var/lib/docker&#xff0c;而该目录是在系统盘下的。docker安装后&#xff0c;会使用各种各样的镜像&#xff0c;动辄几个G&#xff0c;那么如此多的镜像文件&#xff0c;装着装着系统盘就撑爆了…

chrome安装Vue Devtools插件以及无法添加来自此网站的应用问题

chrome安装Vue Devtools插件以及无法添加来自此网站的应用问题 问题背景 Chrome Vue插件是一款可以帮助前端开发人员在浏览器中实时查看和编辑Vue组件和数据的工具。给前端开发人员提供了极大的便利。本文将介绍Chrome浏览器中如何安装Devtools插件。 问题分析 &#xff08…

第五章:人工智能深度学习教程-人工神经网络(第一节-人工神经网络及其应用)

当您阅读这篇文章时&#xff0c;您体内的哪个器官正在思考这个问题&#xff1f;当然是大脑啦&#xff01;但你知道大脑是如何运作的吗&#xff1f;嗯&#xff0c;它有神经元或神经细胞&#xff0c;它们是大脑和神经系统的主要单位。这些神经元接收来自外界的感觉输入并进行处理…

Elastic Stack 8.11:引入一种新的强大查询语言 ES|QL

作者&#xff1a;Tyler Perkins, Ninoslav Miskovic, Gilad Gal, Teresa Soler, Shani Sagiv, Jason Burns Elastic Stack 8.11 引入了数据流生命周期、一种配置数据流保留和降采样&#xff08;downsampling&#xff09; 的简单方法&#xff08;技术预览版&#xff09;&#xf…

Milvus Cloud——什么是 Agent?

什么是 Agent? 根据 OpenAI 科学家 Lilian Weng 的一张 Agent 示意图 [1] 我们可以了解 Agent 由一些组件来组成。 规划模块 子目标分解:Agent 将目标分为更小的、易于管理的子目标,从而更高效地处理复杂的任务。 反省和调整:Agent 可以对过去的行为进行自我批评和自我反思…

【深度学习】机器翻译的前世今生

我们都知道谷歌翻译&#xff0c;这个网站可以像变魔术一样在100 种不同的人类语言之间进行翻译。它甚至可以在我们的手机和智能手表上使用&#xff1a; 谷歌翻译背后的技术被称为机器翻译。它的出现改变了世界交流方式。 事实证明&#xff0c;在过去几年中&#xff0c;深度学习…

【JVM】类加载器 Bootstrap、Extension、Application、User Define

以下环境为 jdk1.8 两大类 分类成员语言继承关系引导类加载器bootstrap 引导类加载器C/C无自定义类加载器extension 拓展类加载器、application 系统/应用类加载器、user define 用户自定义类加载器Java继承于 java.lang.ClassLoader 四小类 Bootstrap 引导类加载器 负责加…