YOLOV5 部署:QT的可视化界面推理(根据UI窗口编写内部函数)

这篇具有很好参考价值的文章主要介绍了YOLOV5 部署:QT的可视化界面推理(根据UI窗口编写内部函数)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、前言

上一章,UI的可视化界面已经创建好了。并且通过UI文件编译成了python可以处理的py文件,为了方便使用,我们新建了qt_inference 对ui的py脚本进行调用,效果如下

yolov5qt图形界面,YOLOV5 实战项目(训练、部署、改进等等),YOLO,ui,计算机视觉,人工智能,qt

UI可视化的生成:YOLOV5 部署:QT的可视化界面推理(创建UI,并编译成py文件)-CSDN博客

本章将接着上面操作,完成一个可以实时检测的YOLOV5可视化推理界面

yolov5qt图形界面,YOLOV5 实战项目(训练、部署、改进等等),YOLO,ui,计算机视觉,人工智能,qt

下面将根据项目一步一步实现函数,可能会看得有点头昏,或者害怕代码缺失的问题。不用担心,文末会有脚本的全部代码,可以拷贝下面跟着博文一起实现就行了

2、简单的图片、视频检测函数

下面对ui的每一个按钮绑定一个事件,达到理想的效果

yolov5qt图形界面,YOLOV5 实战项目(训练、部署、改进等等),YOLO,ui,计算机视觉,人工智能,qt

run 方法的detect_image 就是上一章中,按钮的重新命名,当然在编译生成ui_main_window脚本里也可以看到按钮的名称

yolov5qt图形界面,YOLOV5 实战项目(训练、部署、改进等等),YOLO,ui,计算机视觉,人工智能,qt

如下:点击按钮,就能出现信息啦

yolov5qt图形界面,YOLOV5 实战项目(训练、部署、改进等等),YOLO,ui,计算机视觉,人工智能,qt

3、torch.hub 检测

因为yolov5的检测参数太多,不方便可视化的部署,所以这里介绍一个简单的推理方法

代码如下:

前面的pathlib是为了解决path报错的问题,如果没有报错的话,可以删除这三行

torch.hub.load 参数:当前文件夹、自定义模型、权重路径、本地项目

import torch

'''
解决下面的问题
Exception: cannot instantiate 'PosixPath' on your system. Cache may be out of date,
try `force_reload=True` or see https://docs.ultralytics.com/yolov5/tutorials/pytorch_hub_model_loading for help.
'''
import pathlib
temp = pathlib.PosixPath
pathlib.PosixPath = pathlib.WindowsPath


model = torch.hub.load('./','custom',path='runs/train/exp/weights/best.pt',source='local')

img = './datasets/images/train/180.jpg'

result = model(img)

result.show()

运行:其实pycharm控制台也可以看见解释器的位置

yolov5qt图形界面,YOLOV5 实战项目(训练、部署、改进等等),YOLO,ui,计算机视觉,人工智能,qt

结果:

yolov5qt图形界面,YOLOV5 实战项目(训练、部署、改进等等),YOLO,ui,计算机视觉,人工智能,qt

result.render()[0]  添加这个,可以将推理结果的图片数组提出来,而非show

4、图片检测事件

既然按钮已经和我们的代码绑定在一起了,只要在代码里实现想要的操作就易如反掌了,这也是我们擅长的

4.1 读取文件夹、图片

因为点击图片检测按钮的时候,应该会弹出一个窗口,让我们在本地的目录下进行查找待推理的图片,这里需要导入下面的库函数

yolov5qt图形界面,YOLOV5 实战项目(训练、部署、改进等等),YOLO,ui,计算机视觉,人工智能,qt

这里的dir 是默认打开的文件路径,filter 是指定打开的文件格式,这里是图片格式

yolov5qt图形界面,YOLOV5 实战项目(训练、部署、改进等等),YOLO,ui,计算机视觉,人工智能,qt

效果如下:

yolov5qt图形界面,YOLOV5 实战项目(训练、部署、改进等等),YOLO,ui,计算机视觉,人工智能,qt

如果什么都不选,点击取消的话,也会返回两个元组,只不过都是空的。而我们只需要第一个元组,因为这个是图片的路径!!

yolov5qt图形界面,YOLOV5 实战项目(训练、部署、改进等等),YOLO,ui,计算机视觉,人工智能,qt

4.2 在UI界面中显示图片

需要导入函数,用于QT的显示图片

yolov5qt图形界面,YOLOV5 实战项目(训练、部署、改进等等),YOLO,ui,计算机视觉,人工智能,qt

然后把路径传入input窗口即可(还记得吗,input是我们定义的显示图片的组件名称

yolov5qt图形界面,YOLOV5 实战项目(训练、部署、改进等等),YOLO,ui,计算机视觉,人工智能,qt

4.3 推理部分

那么根据第三节的hub检测,推理的代码就很好写了

首先导入库

yolov5qt图形界面,YOLOV5 实战项目(训练、部署、改进等等),YOLO,ui,计算机视觉,人工智能,qt

然后导入模型,并且推理即可

yolov5qt图形界面,YOLOV5 实战项目(训练、部署、改进等等),YOLO,ui,计算机视觉,人工智能,qt

4.4 显示推理结果

因为image 是个数组形式,虽然也是个图片,但是QT不支持,所以需要转成QT的格式

yolov5qt图形界面,YOLOV5 实战项目(训练、部署、改进等等),YOLO,ui,计算机视觉,人工智能,qt

将数组转入QT格式的数据

yolov5qt图形界面,YOLOV5 实战项目(训练、部署、改进等等),YOLO,ui,计算机视觉,人工智能,qt

调用推理函数,并且输出即可

yolov5qt图形界面,YOLOV5 实战项目(训练、部署、改进等等),YOLO,ui,计算机视觉,人工智能,qt

4.5 可视化图片检测的完整代码

代码:

import sys
from PySide6.QtWidgets import QMainWindow,QApplication,QFileDialog      # 打开文件夹的函数
from ui_main_window import Ui_MainWindow
from PySide6.QtGui import QPixmap,QImage           # 显示图片库,qt的图片格式


import torch
'''
解决下面的问题
Exception: cannot instantiate 'PosixPath' on your system. Cache may be out of date,
try `force_reload=True` or see https://docs.ultralytics.com/yolov5/tutorials/pytorch_hub_model_loading for help.
'''
import pathlib
temp = pathlib.PosixPath
pathlib.PosixPath = pathlib.WindowsPath


# 图片转换
def convert2QImage(img):
    h,w,c = img.shape
    return QImage(img,w,h,w*c,QImage.Format_RGB888)


class MainWindow(QMainWindow,Ui_MainWindow):
    def __init__(self):
        super(MainWindow,self).__init__()
        self.setupUi(self)      # 根据ui文件编译成的 py类
        self.model = torch.hub.load('./','custom',path='runs/train/exp/weights/best.pt',source='local')     # 加载模型
        self.run()              # 将按钮和事件绑定,通过鼠标点击触发

    def image_pred(self,file_path):
        results = self.model(file_path)
        image = results.render()[0]     # 推理结果,是个数组
        image = convert2QImage(image)   # 转成QT支持的数据
        return image

    def open_image(self):       # 打开图片
        print('image detect')
        file_path = QFileDialog.getOpenFileName(self,dir='datasets/images/val',filter='*.jpg;*.png;*.jpeg')

        if file_path[0]:        # 如果有图片的话
            file_path = file_path[0]
            self.input.setPixmap(QPixmap(file_path))        # 将图片显示到可视化窗口的输入部分
            qimage = self.image_pred(file_path)
            self.output.setPixmap(QPixmap.fromImage(qimage))         # # 将图片显示到可视化窗口的输出部分

    def open_video(self):       # 打开视频
        print('video detect')

    def run(self):              # 鼠标触发的事件
        self.detect_image.clicked.connect(self.open_image)
        self.detect_video.clicked.connect(self.open_video)


if __name__ == '__main__':
    app = QApplication(sys.argv)

    window = MainWindow()
    window.show()

    app.exec()

控制台输出:

yolov5qt图形界面,YOLOV5 实战项目(训练、部署、改进等等),YOLO,ui,计算机视觉,人工智能,qt

可视化结果展示:

yolov5qt图形界面,YOLOV5 实战项目(训练、部署、改进等等),YOLO,ui,计算机视觉,人工智能,qt

5、视频检测事件

视频检测的部分可图片检测一样,抽取每帧然后推理、输出,这里只做简单介绍

传统的while 循环在QT里面可能会有较大延迟,为了方便,这里使用计时器来实现视频检测

代码的逻辑很简单,通过计时器计数,达到一定时间自动抽取一帧进行预测

yolov5qt图形界面,YOLOV5 实战项目(训练、部署、改进等等),YOLO,ui,计算机视觉,人工智能,qt

视频检测:

yolov5qt图形界面,YOLOV5 实战项目(训练、部署、改进等等),YOLO,ui,计算机视觉,人工智能,qt

6、完整代码

项目的逻辑很简单,首先可视化窗口,检测鼠标是否点击了检测的按钮(run函数)

如果检测了图片,将根据路径找到图片进行推理,并且展示在窗口中

如果检测了视频,则计时器开始计时,每到一个间隔,自动运行video_pred 函数,也就是视频检测,自动读取一帧

yolov5qt图形界面,YOLOV5 实战项目(训练、部署、改进等等),YOLO,ui,计算机视觉,人工智能,qt

 代码:

import sys
import cv2
from PySide6.QtWidgets import QMainWindow,QApplication,QFileDialog      # 打开文件夹的函数
from ui_main_window import Ui_MainWindow
from PySide6.QtGui import QPixmap,QImage           # 显示图片库,qt的图片格式
from PySide6.QtCore import QTimer               # 显示视频的计时器

import torch
'''
解决下面的问题
Exception: cannot instantiate 'PosixPath' on your system. Cache may be out of date,
try `force_reload=True` or see https://docs.ultralytics.com/yolov5/tutorials/pytorch_hub_model_loading for help.
'''
import pathlib
temp = pathlib.PosixPath
pathlib.PosixPath = pathlib.WindowsPath


# 图片转换
def convert2QImage(img):
    h,w,c = img.shape
    return QImage(img,w,h,w*c,QImage.Format_RGB888)


class MainWindow(QMainWindow,Ui_MainWindow):
    def __init__(self):
        super(MainWindow,self).__init__()
        self.setupUi(self)      # 根据ui文件编译成的 py类
        self.model = torch.hub.load('./','custom',path='runs/train/exp/weights/best.pt',source='local')     # 加载模型
        self.timer = QTimer()       # 创建计时器
        self.timer.setInterval(1)   # 计时器的间隔,ms
        self.video = None
        self.run()              # 将按钮和事件绑定,通过鼠标点击触发

    def image_pred(self,file_path):
        results = self.model(file_path)
        image = results.render()[0]     # 推理结果,是个数组
        image = convert2QImage(image)   # 转成QT支持的数据
        return image

    def open_image(self):       # 打开图片
        self.timer.stop()
        print('image detect')
        file_path = QFileDialog.getOpenFileName(self,dir='datasets/images/val',filter='*.jpg;*.png;*.jpeg')

        if file_path[0]:        # 如果有图片的话
            file_path = file_path[0]
            self.input.setPixmap(QPixmap(file_path))        # 将图片显示到可视化窗口的输入部分
            qimage = self.image_pred(file_path)
            self.output.setPixmap(QPixmap.fromImage(qimage))         # 将图片显示到可视化窗口的输出部分

    def video_pred(self):
        ret, frame = self.video.read()
        if not ret:
            self.timer.stop()       # 没有检测到视频,计时器停止
        else:
            frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
            self.input.setPixmap(QPixmap.fromImage(convert2QImage(frame)))  # 将图片显示到可视化窗口的输入部分
            results = self.model(frame)
            image = results.render()[0]     # 推理结果,是个数组
            self.output.setPixmap(QPixmap.fromImage(convert2QImage(image)))  # 将图片显示到可视化窗口的输出部分

    def open_video(self):       # 打开视频
        print('video detect')
        file_path = QFileDialog.getOpenFileName(self, dir='datasets', filter='*.mp4')
        if file_path[0]:  # 如果有视频的话
            file_path = file_path[0]
            self.video = cv2.VideoCapture(file_path)             # 打开视频
            self.timer.start()

    def run(self):              # 鼠标触发的事件
        self.detect_image.clicked.connect(self.open_image)
        self.detect_video.clicked.connect(self.open_video)
        self.timer.timeout.connect(self.video_pred)    # 计时器时间到就预测


if __name__ == '__main__':
    app = QApplication(sys.argv)

    window = MainWindow()
    window.show()

    app.exec()

项目完整下载:YOLOV5部署,利用QT部署可视化的图片、视频推理界面资源-CSDN文库

订阅本专栏,根据文章自动生成即可,不需要下载文章来源地址https://www.toymoban.com/news/detail-844679.html

到了这里,关于YOLOV5 部署:QT的可视化界面推理(根据UI窗口编写内部函数)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • YOLOv5 使用tensorboard查看可视化训练结果

    1.1.找的models/yolo.py文件中,将最下面有关 Tensorboard 的注释打开 2.进入项目根目录 比如你训练的是第20个版本,那么 tensorboard --logdir=./runs/train/exp20 就可以查看当前训练的可视化结果了 3.通过浏览器查看可视化训练结果

    2024年02月16日
    浏览(52)
  • YOLOv8 推理脚本--置信度保留多位浮点数 & 特征图可视化

    特征图可视化: 4位浮点数: 原始2位浮点数 4位浮点数 在进行改动前,请大家先阅读下 基础入门篇 | YOLOv8 项目【训练】【验证】【推理】最简单教程 | YOLOv8必看 | 最新更新,直接打印 FPS,mAP50,75,95 ,确保会用我给的推理脚本。 YOLO( ) :这里写你推理使用的

    2024年04月11日
    浏览(92)
  • YoloV8 +可视化界面+GUI+交互式界面目标检测与跟踪

    本项目旨在基于 YoloV8 目标检测算法开发一个直观的可视化界面,使用户能够轻松上传图像或视频,并对其进行目标检测。 通过图形用户界面,用户可以方便地调整检测参数、查看检测结果,并将结果保存或导出。同时,该界面还将提供实时目标检测功能,让用户能够在视频

    2024年02月20日
    浏览(45)
  • yolov5热力图可视化grad-cam踩坑经验分享

    最近在做热力图的可视化,网上搜了很多的资料,但是大部分都是需要在原网络结构上进行修改,非常的不方便。最后在网上找到一位博主分享的即插即用的模块,觉得效果还可以,但是中间有些细节,需要注意。 原博文地址: https://blog.csdn.net/qq_37706472/article/details/12871460

    2024年02月04日
    浏览(45)
  • 卷积神经网络中的图像特征——以YOLOv5为例进行可视化

    一、图像特征 1. 图像低层特征 图像低层特征指的是:边缘、颜色和纹理等特征。 低层特征的分辨率较高,包含较多的位置、细节信息,但其包含的语义信息较少,噪声较多。 原始图像和浅层卷积网络输出的特征图属于低层特征,从低层特征图中可以看清轮廓、边缘等信息。

    2024年02月05日
    浏览(41)
  • YOLOv5系列(二十八) 本文(2万字) | 可视化工具 | Comet | ClearML | Wandb | Visdom |

    点击进入专栏: 《人工智能专栏》 Python与Python | 机器学习 | 深度学习 | 目标检测 | YOLOv5及其改进 | YOLOv8及其改进 | 关键知识点 | 各种工具教程

    2024年02月03日
    浏览(63)
  • Qt Creator可视化交互界面exe快速入门1

    Qt的安装链接:Index of /archive/qt 5.14版本之前都是可以直接 离线安装,即下载完整安装包之后在本地安装。 最新及5,15版本之后的都不支持直接的离线安装了,需要通过下载器来进行安装。下载地址:Index of /official_releases/online_installers

    2024年02月04日
    浏览(42)
  • 基于树莓派Qt+opencv+yolov5-Lite+C++部署深度学习推理

            本文是基于 qt和opencv的dnn 深度学习推理模块,在树莓派上部署YOLO系列推理,适用于yolov5-6.1以及yolov5-Lite,相比直接用python的onnxruntime,用基于opencv的dnn模块,利用训练生成的onnx模型,即可快速部署,不需要在树莓派上额外安装深度学习的一系列环境,因为我们知道

    2024年04月16日
    浏览(64)
  • 利用qt实现机器人可视化界面,并在界面上控制机器人各个关节运动

     本工程借助于clion配置的qt环境,同时依赖eigen tinyxml2等开源库,也借鉴了博客上一些文章,具体哪些忘记了,十分抱歉。本工程仅供参考。机械臂模型为史陶比尔官网的TX2-60L-HB。可以去那下载对应的stp文件。 最终图:  通过鼠标中键控制旋转 缩放,配合ctrl进行平移。加载

    2024年02月11日
    浏览(58)
  • kubernetes--技术文档--可视化管理界面dashboard安装部署

            使用官方提供的可视化界面来完成。         Kubernetes Dashboard是Kubernetes集群的Web UI,用户可以通过Dashboard进行管理集群内所有资源对象,例如查看资源对象的运行情况,部署新的资源对象,伸缩Deployment中的Pod数量等等一系列操作。         需要:      

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包