Shaw0xyz 发表于 2024-6-2 12:51:27

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

本帖最后由 Shaw0xyz 于 2024-6-9 13:56 编辑

1. 引言

YOLOv5是一种广泛应用于目标检测任务的深度学习模型。它以其高效、准确和实时处理的特点受到了广泛的关注。在实际应用中,将YOLOv5部署到用户友好的界面上是非常有必要的。QT作为一个跨平台的C++图形用户界面框架,提供了丰富的UI组件,适合作为YOLOv5推理的前端界面。本篇文章将详细讲解如何使用QT编写可视化界面,并集成YOLOv5模型进行推理。

1.1 环境准备

在开始编写代码之前,我们需要准备以下环境和工具:

(1) 安装Python 3.8及以上版本,并配置好相关环境。
(2) 安装PyTorch库,以便能够加载和使用YOLOv5模型。
(3) 安装YOLOv5的依赖库,包括numpy, opencv-python等。
(4) 安装Qt和PyQt5,以便能够开发QT界面。

1.1.1 安装Python环境

首先,确保已经安装Python 3.8或以上版本。可以在命令行中使用以下命令检查Python版本:

python --version
接着,通过pip安装PyTorch和其他依赖库:

pip install torch torchvision numpy opencv-python
1.1.2 下载并配置YOLOv5

从GitHub仓库克隆YOLOv5代码,并安装所需的依赖:

git clone https://github.com/ultralytics/yolov5.git
cd yolov5
pip install -r requirements.txt

1.1.3 安装Qt和PyQt5

通过以下命令安装PyQt5:

pip install PyQt5

1.2 YOLOv5模型加载

在实现推理功能之前,我们需要先加载YOLOv5模型。以下是加载YOLOv5模型的代码:

import torch
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)

此段代码使用了torch.hub.load从YOLOv5官方仓库加载预训练模型'yolov5s'。可以根据需要选择不同的模型,如'yolov5m', 'yolov5l', 'yolov5x'等。

2. QT界面设计

接下来,我们将设计QT界面。QT Designer是一个方便的工具,可以用来拖拽控件并生成UI文件。生成的UI文件可以通过PyQt5的工具转换为Python代码。

2.1 使用QT Designer设计界面

启动QT Designer并创建一个新的Main Window。我们将添加以下控件:

(1) QLabel:用于显示输入图像和检测结果。
(2) QPushButton:用于选择图像和执行推理。
(3) QLineEdit:用于显示检测结果信息。

设计完成后,保存为yolov5_ui.ui文件。

2.2 转换UI文件为Python代码

使用以下命令将UI文件转换为Python代码:

pyuic5 yolov5_ui.ui -o yolov5_ui.py

3. 实现推理功能

在完成UI设计后,我们需要编写后台逻辑来实现YOLOv5推理功能。

3.1 初始化界面

首先,编写主程序,初始化QT界面:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from yolov5_ui import Ui_MainWindow

class YOLOv5App(QMainWindow, Ui_MainWindow):
    def __init__(self):
      super().__init__()
      self.setupUi(self)
      self.model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)
      self.pushButton.clicked.connect(self.load_image)
      self.pushButton_2.clicked.connect(self.run_inference)

    def load_image(self):
      # 实现加载图像的功能
      pass

    def run_inference(self):
      # 实现推理的功能
      pass

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

3.2 加载图像功能

实现load_image函数,用于选择并加载图像:

from PyQt5.QtWidgets import QFileDialog

def load_image(self):
    options = QFileDialog.Options()
    filePath, _ = QFileDialog.getOpenFileName(self, "选择图像", "", "图像文件 (*.jpg *.jpeg *.png)", options=options)
    if filePath:
      self.imagePath = filePath
      self.label.setPixmap(QPixmap(filePath))

3.3 推理功能

实现run_inference函数,执行YOLOv5推理并显示结果:

import cv2
from PyQt5.QtGui import QPixmap, QImage

def run_inference(self):
    if hasattr(self, 'imagePath'):
      img = cv2.imread(self.imagePath)
      results = self.model(img)

      # 绘制检测结果
      for result in results.xyxy:
            x1, y1, x2, y2, conf, cls = map(int, result[:6])
            cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
            cv2.putText(img, f'{self.model.names} {conf:.2f}', (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (36,255,12), 2)

      # 转换为QPixmap
      height, width, channel = img.shape
      bytesPerLine = 3 * width
      qImg = QImage(img.data, width, height, bytesPerLine, QImage.Format_RGB888).rgbSwapped()
      self.label.setPixmap(QPixmap.fromImage(qImg))

4. 结论

通过本篇文章的讲解,我们实现了将YOLOv5模型集成到QT可视化界面中。通过使用QT Designer设计UI界面,并结合PyQt5进行功能实现,用户可以方便地选择图像并查看目标检测结果。这不仅提升了YOLOv5模型的实用性,也为开发者提供了一种高效的部署方式。在实际应用中,还可以进一步优化界面和推理逻辑,以满足更高的性能需求和用户体验。



/ 荔枝学姐de课后专栏 /

Hi!这里是荔枝学姐~

欢迎来到我的课后专栏

自然语言学渣 NLP摆烂姐

热衷于技术写作 IT边角料

AIGC & Coding & Linux ...

~互撩~ TG: @Shaw_0xyz
页: [1]
查看完整版本: YOLOV5 部署:QT的可视化界面推理(根据UI窗口编写内部函数)