找回密码
 立即注册
查看: 555|回复: 0

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

[复制链接]

279

主题

0

回帖

964

积分

超级版主

积分
964
发表于 2024-6-2 12:51:27 | 显示全部楼层 |阅读模式
本帖最后由 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版本:

  1. python --version
复制代码

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

  1. pip install torch torchvision numpy opencv-python
复制代码

1.1.2 下载并配置YOLOv5

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

  1. git clone https://github.com/ultralytics/yolov5.git
  2. cd yolov5
  3. pip install -r requirements.txt
复制代码


1.1.3 安装Qt和PyQt5

通过以下命令安装PyQt5:

  1. pip install PyQt5
复制代码


1.2 YOLOv5模型加载

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

  1. import torch
  2. 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代码:

  1. pyuic5 yolov5_ui.ui -o yolov5_ui.py
复制代码


3. 实现推理功能

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

3.1 初始化界面

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

  1. import sys
  2. from PyQt5.QtWidgets import QApplication, QMainWindow
  3. from yolov5_ui import Ui_MainWindow

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

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

  14.     def run_inference(self):
  15.         # 实现推理的功能
  16.         pass

  17. if __name__ == "__main__":
  18.     app = QApplication(sys.argv)
  19.     window = YOLOv5App()
  20.     window.show()
  21.     sys.exit(app.exec_())
复制代码


3.2 加载图像功能

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

  1. from PyQt5.QtWidgets import QFileDialog

  2. def load_image(self):
  3.     options = QFileDialog.Options()
  4.     filePath, _ = QFileDialog.getOpenFileName(self, "选择图像", "", "图像文件 (*.jpg *.jpeg *.png)", options=options)
  5.     if filePath:
  6.         self.imagePath = filePath
  7.         self.label.setPixmap(QPixmap(filePath))
复制代码

3.3 推理功能

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

  1. import cv2
  2. from PyQt5.QtGui import QPixmap, QImage

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

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

  12.         # 转换为QPixmap
  13.         height, width, channel = img.shape
  14.         bytesPerLine = 3 * width
  15.         qImg = QImage(img.data, width, height, bytesPerLine, QImage.Format_RGB888).rgbSwapped()
  16.         self.label.setPixmap(QPixmap.fromImage(qImg))
复制代码

4. 结论

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



/ 荔枝学姐de课后专栏 /

Hi!这里是荔枝学姐~

欢迎来到我的课后专栏

自然语言学渣 NLP摆烂姐

热衷于技术写作 IT边角料

AIGC & Coding & linux ...

~互撩~ TG: @Shaw_0xyz
荔枝学姐爱吃荔枝!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系站长|Archiver|手机版|小黑屋|主机论坛

GMT+8, 2025-4-4 13:49 , Processed in 0.063796 second(s), 24 queries .

Powered by 主机论坛 HostSsss.Com

HostSsss.Com

快速回复 返回顶部 返回列表