pyqt5可视化yolov5
时间: 2025-07-01 14:43:48 浏览: 11
### 使用 PyQt5 实现 YOLOv5 图形化界面
开发基于 PyQt5 的 YOLOv5 图形化界面涉及多个模块的设计与集成。以下是具体方法:
#### 1. **项目结构设计**
为了保持项目的清晰性和可维护性,可以按照以下目录结构组织文件[^2]:
```plaintext
project/
│
├── qt_inference.py # 主程序逻辑入口
├── ui_main_window.ui # QT Designer 创建的 UI 文件
├── ui_main_window.py # 转换后的 Python UI 文件
├── yolov5/ # YOLOv5 模型及相关依赖
│ ├── models/ # YOLOv5 模型定义
│ ├── utils/ # 工具函数集合
│ └── weights/ # 预训练模型权重
└── requirements.txt # 项目所需库列表
```
---
#### 2. **UI 设计**
通过 Qt Designer 创建用户界面 (`.ui` 文件),并将其转换为 Python 文件 (`ui_main_window.py`)。此过程可以通过 `pyuic5` 命令完成:
```bash
pyuic5 -o ui_main_window.py ui_main_window.ui
```
在 `.ui` 文件中应包含以下控件[^3]:
- 文件选择按钮:用于加载图像或视频。
- 推理结果显示区域:展示检测结果。
- 参数设置区:调整置信度阈值、类别过滤等功能。
---
#### 3. **主程序逻辑**
在 `qt_inference.py` 中编写核心逻辑,负责连接 UI 和 YOLOv5 功能。主要功能包括:
- 加载预训练模型。
- 处理输入数据(图片或视频)。
- 显示推理结果。
##### 示例代码
以下是一个简单的框架示例:
```python
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtGui import QPixmap
from ui_main_window import Ui_MainWindow
from yolov5.models.experimental import attempt_load
from yolov5.utils.general import non_max_suppression
import torch
import cv2
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
# 初始化模型
self.model = attempt_load('yolov5/weights/best.pt', map_location=torch.device('cpu'))
def load_image(self):
"""加载并显示图片"""
file_name, _ = QFileDialog.getOpenFileName(self, '打开图片')
if not file_name:
return
pixmap = QPixmap(file_name).scaled(800, 600)
self.ui.labelImage.setPixmap(pixmap) # labelImage 是 QLabel 控件名称
# 进行推理
img = cv2.imread(file_name)
results = self.infer(img)
# 将结果绘制到图片上
annotated_img = self.draw_results(results, img)
qimage = QImage(
annotated_img.data,
annotated_img.shape[1],
annotated_img.shape[0],
QImage.Format_RGB888
).rgbSwapped()
self.ui.labelResult.setPixmap(QPixmap.fromImage(qimage))
def infer(self, image):
"""执行推理"""
img_tensor = torch.from_numpy(image).permute(2, 0, 1).unsqueeze(0).float() / 255.
pred = self.model(img_tensor)[0]
return non_max_suppression(pred, conf_thres=0.4, iou_thres=0.5)[0]
@staticmethod
def draw_results(detections, frame):
"""绘制边界框"""
for det in detections:
xyxy = det[:4].numpy().astype(int)
cls = int(det[-1])
confidence = float(det[4])
cv2.rectangle(frame, (xyxy[0], xyxy[1]), (xyxy[2], xyxy[3]), (0, 255, 0), 2)
text = f"{cls}: {confidence:.2f}"
cv2.putText(frame, text, (xyxy[0], xyxy[1]-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
return frame
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
```
上述代码实现了基本的功能流程,包括加载模型、处理图片以及显示结果[^1]。
---
#### 4. **运行环境配置**
确保安装必要的依赖项,可通过以下命令安装:
```bash
pip install pyqt5 opencv-python-headless torch torchvision
```
如果使用 GPU 加速,则需额外安装 CUDA 支持版本的 PyTorch。
---
#### 5. **扩展功能**
可以根据需求进一步增强应用功能,例如:
- 添加实时摄像头支持。
- 提供多种模型切换选项。
- 导出检测结果至 JSON 或 CSV 文件。
---
阅读全文
相关推荐


















