|
本帖最后由 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版本:
接着,通过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:
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[0]:
- 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[cls]} {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
|
|