pyqt5 yolov8 缺陷检测
时间: 2025-02-19 22:22:31 浏览: 87
### 使用 PyQt5 和 YOLOv8 实现产品或图像的缺陷检测
#### 创建项目结构
为了构建一个基于 PyQt5 的 GUI 应用来执行 PCB 缺陷检测,首先需要创建合理的项目目录结构。通常情况下,这样的应用会有一个清晰的层次化设计来分离不同的功能模块。
```plaintext
project/
│── main.py # 主程序入口
├── gui/ # 存放GUI相关代码
│ └── mainWindow.ui # Qt Designer 设计好的UI文件
└── yolov8/ # 存放YOLOv8模型及其配置
├── data.yaml # 数据集配置文件
└── yolov8n.pt # 预训练权重文件
```
#### 初始化环境并安装依赖库
确保 Python 环境已经设置好,并且安装了必要的包:
```bash
pip install pyqt5 opencv-python-headless ultralytics
```
#### 构建图形界面 (GUI)
在 `gui/mainWindow.ui` 中定义用户交互界面,可以利用 Qt Designer 工具快速搭建。此界面应至少包含以下几个部分:
- 文件选择按钮:让用户能够加载待检测的产品图片;
- 显示区域:用于呈现原始输入图以及标注后的输出结果;
- 开始检测按钮:触发实际的推理过程;
接着,在 `main.py` 中编写逻辑处理函数以连接 UI 组件与业务流程。
```python
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget, QLabel, QFileDialog
from PyQt5.uic import loadUi
import cv2
from ultralytics import YOLO
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.model = YOLO("yolov8/yolov8n.pt") # 加载预训练模型
ui_path = 'gui/mainWindow.ui'
loadUi(ui_path, self)
self.loadImageButton.clicked.connect(self.open_image_file)
self.detectButton.clicked.connect(self.perform_defect_detection)
def open_image_file():
"""打开文件对话框供用户选取要分析的照片"""
options = QFileDialog.Options()
file_name, _ = QFileDialog.getOpenFileName(None,"QFileDialog.getOpenFileName()", "","Images (*.png *.jpg);;All Files (*)", options=options)
if file_name:
image = cv2.imread(file_name)
height, width, channel = image.shape
bytesPerLine = 3 * width
qImg = QImage(image.data, width, height, bytesPerLine, QImage.Format_RGB888).rgbSwapped()
label_pixmap = QPixmap.fromImage(qImg)
scaled_label_pixmap = label_pixmap.scaled(640, 480, aspectRatioMode=True)
window.imageLabel.setPixmap(scaled_label_pixmap)
window.currentImagePath = file_name
def perform_defect_detection():
"""调用YOLOv8进行预测并将结果显示出来"""
img_path = getattr(window, 'currentImagePath', None)
if not img_path or not os.path.exists(img_path):
QMessageBox.warning(None,'警告','未找到有效的图片路径')
return
result = window.model.predict(source=img_path)[0].plot() # 进行推断并绘制边界框
cv2.imwrite('output.jpg',result) # 保存带有标记的结果图
output_img = cv2.cvtColor(result,cv2.COLOR_BGR2RGB)
h,w,c=output_img.shape
bpl=3*w
qimg=QImage(output_img,bpl,QImage.Format_RGB888).rgbSwapped()
pixmap_output=QPixmap.fromImage(qimg)
scaled_pixmap=pixmap_output.scaled(640,480,aspectRatioMode=True)
window.resultLabel.setPixmap(scaled_pixmap)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
```
上述代码片段展示了如何集成 PyQt5 和 YOLOv8 来完成基本的任务——即允许用户上传一张照片并通过预先训练过的神经网络对其进行分类和定位潜在的问题部位[^1]。
阅读全文
相关推荐


















