YOLOv5检测界面-PyQt5实现

news2024/11/29 8:41:14

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 方法中使用。
在这里插入图片描述

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

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

相关文章

C++初阶(九)内存管理

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、C/C内存分布1、选择题2、填空题3、sizeof 和 strlen 区别?4、总结 二、 C语言…

『Nacos』 入门教程

前言 本文为 Nacos 平台快速入门教程,本文将会使用通俗易懂的语言手把手带您了解、使用 Nacos 平台,适合未接触过 Nacos 的初学者 官方手册:Nacos | Nacos 官方仓库:alibaba/nacos 版本:2.X 本文示例代码仓库&#xf…

Power Automate-时间戳转化为时区时间

点击编辑 在两个步骤之间再插入一个新步骤,添加操作 在内置里点击日期时间 点击转换时区 下面再修改为已转换的时间

「Verilog学习笔记」4位数值比较器电路

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 分析 这里要注意题目的“门级描述方式”,所以我们只能使用基本门电路:&,|,!,^,^~。 具体实现思路:通过真值表得出Y0 Y1 Y2的逻辑表达…

【腾讯云 HAI域探秘】探索AI绘画之路:利用腾讯云HAI服务打造智能画家

目录 前言1 使用HAI服务作画的步骤1.1 注册腾讯云账户1.2 创建算力服务器1.3 进入模型管理界面1.4 汉化界面1.5 探索AI绘画 2 模型参数的含义和调整建议2.1 模型参数的含义和示例2.2 模型参数的调整建议 3 调整参数作画的实践和效果3.1 实践说明3.2 实践效果13.3 实践效果23.4 …

电梯用电量-第10届蓝桥杯国赛Python真题精选

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第8讲。 电梯用电量&#x…

闪站侠洗衣洗鞋管理系统app小程序开发;

闪站侠洗护软件系统为您提供全面的洗衣洗鞋解决方案,系统多门店,多网点。为您开通公中号小程序,并与顺丰、天猫、抖音、美团点评等第三方平台紧密连接。 我们解决洗衣工厂/门店的五大问题: 一、效率 从门店收衣到工厂出库&#xf…

解决GitHub不能访问

1:ping github.com,得到可以解析的地址 2:在host文件里面添加地址(记事本打开)。 3:可以添加稳定的地址(记得地址前加“#”) #140.82.121.3 # GitHub #140.82.114.4 # GitHub #140.82.112.4 …

如何构建新一代实时湖仓?袋鼠云基于数据湖的探索升级之路

在之前的实时湖仓系列文章中,我们已经介绍了实时湖仓对于当前企业数字化转型的重要性,实时湖仓的功能架构设计,以及实时计算和数据湖结合的应用场景。 在本篇文章中,将介绍袋鼠云数栈在构建实时湖仓系统上的探索与落地实践&#…

html实现竖直步骤条

1、问题描述 最近碰到一个需求,要把审批流程改为竖直步骤条的形式。本来想直接抄网上的,但是网上给的要么是水平步骤条,要么是集成在框架里的,要么就是人家写的太复杂了,js,css一大堆。 2、我的代码 代码下…

【沁恒 CH32V208 开发板免费试用】+ U盘/ SD NAND读写与多功能数码相框

CH32V208继承了沁恆产品一贯的传统,即U盘的读写功能。这使得尽管CH32V208的闪存要比CH32V307的小一倍,但有了U盘读写功能的支持就可有效地缓解用户对存储空间的需求。它除了支持U盘的读取,还支持对CS SD NAND (贴片式TF卡/SD卡) 这类器件的使…

小黑子—springMVC:第一章 请求处理与响应数据

springMVC入门1.0 1、小黑子的springMVC基础1.1 SpringMVC概述1.2 SpringMVC快速入门1.3 Controller中直接注入spring中维护的Bean1.4 SpringMVC关键组件浅析 2、SpringMVC的请求处理2.1 请求映射路径配置2.2 请求数据的接收2.2.1 键值对方式接收数据2.2.1 - I RquestParam属性…

Linux Hadoop平台伪分布式安装(Hive on Spark)

📔Linux Hadoop 伪分布式安装(Hive on Spark) 安装目录 1. JDK2. Hadoop3. MysqlHive3.1 Mysql8安装3.2 Hive安装 4. Spark4.1 Maven安装4.2 Scala安装4.3 Spark编译并安装 5. Zookeeper6. HBase 版本概要: jdk: jdk-8u391-linux-x64.tar.gz…

浅析SR隧道路径批量构造方法

为什么要仿真PCE LSP下发隧道路径? 在大型的多区域网络中,路径计算非常复杂。在某些场景下,为了完成路径计算,需要在控制器上部署特殊的计算组件,并需要不同区域中的节点之间协作。这使得网元在进行路径计算时效率低&…

局部路由守卫path守卫

局部路由守卫path守卫 path守卫(beforeEnter) 代码位置:path守卫代码写在route对象中(index.js文件)beforeEnter是一个函数,参数上没有回调函数beforeEnter有三个参数: to参数:to是…

CocosCreator | 2.3.3及后续版本浏览器无法断点和控制台不显示错误代码路径的解决方案(cocos代码报错无法定位的问题)

在2.3.3正式版的官方介绍中有这么一项: 提升网页预览时的加载速度 为了进一步提升开发效率,我们优化了网页预览时的脚本加载速度。不论是对引擎还是项目中的代码,载入速度都获得了提升。特别是在开启自定义引擎,或者使用手机扫码…

实时时钟和日历电路MS85163/MS85163M

主要特点 ◼ 基于 32.768kHz 晶振提供年、月、日、 周工作日、小时、分钟和秒 ◼ 具有世纪标记,可工作于 2000-2199 年 ◼ 工作电压: 1.8V-5.5V ◼ 低功耗 ◼ 最高频率达 400kHz 的 I 2 C 接口 ◼ 可编程的时钟输出 (32.768kHz, 1.024kHz…

开发人员请注意:在 PyPI 上的 Python 包中发现 BlazeStealer 恶意软件

1、开发人员请注意:在 PyPI 上的 Python 包中发现 BlazeStealer 恶意软件 一组新的恶意 Python 包已经滑入 Python 包索引 (PyPI) 存储库,其最终目的是从受感染的开发人员系统中窃取敏感信息。这些软件包伪装成看似无害的混淆工具…

记录一次数据库内存占满

一,背景及表现 用户普遍反馈业务功能,无法加载出数据,服务挂了 二,数据库指标 三,排查方反馈 排查方反馈:查全量数据导致的,就是没查出来但是一直在查 四,分析 1.应用服务器问题…

深度系统v15.4正式发布,惊艳眼球

导读深度操作系统是一个致力于为全球用户提供美观易用、安全可靠的Linux发行版。深度桌面操作系统V15.4专业版使用全新设计的控制中心和重构桌面,采用模糊透明整体风格,全新的热区交互及窗口管理器动效,精挑细选的桌面壁纸;采用全…