基于YOLOv8➕pyqt5的pcb缺陷检测系统pcb缺陷数据集
基于YOLOv8➕pyqt5的pcb缺陷检测系统可以替换自己训练的模型实现检测目标自定义好的让我们继续详细介绍一个基于YOLOv8的PCB印刷电路板缺陷检测系统并使用PyQt5作为前端框架。这个系统将支持自定义模型替换以便用户可以使用自己训练的模型进行检测。1. 数据集准备确保你的数据集已经按照YOLO格式标注并且数据集结构如下pcb_dataset/ │ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ │ ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ │ └── data.yaml数据配置文件 (data.yaml)创建一个data.yaml文件用于配置数据集train:./pcb_dataset/images/trainval:./pcb_dataset/images/valtest:./pcb_dataset/images/testnc:3# 类别数量3类names:[defect1,defect2,normal]# 类别名称2. 训练模型使用以下命令训练YOLOv8模型python train.py--data./pcb_dataset/data.yaml--img640--batch16--epochs100--nameyolov8_pcb--weightsyolov8n.pt3. 训练代码为了更好地管理和跟踪训练过程我们可以编写一个简单的Python脚本来执行训练importosdeftrain_yolo():# 检查YOLOv8是否已经安装try:fromultralyticsimportYOLOexceptImportError:print(YOLOv8 not found. Installing...)os.system(pip install ultralytics)fromultralyticsimportYOLO# 检查数据集路径data_path./pcb_dataset/data.yamlifnotos.path.exists(data_path):print(fData configuration file{data_path}not found.)return# 检查权重文件路径weights_pathyolov8n.ptifnotos.path.exists(weights_path):print(fWeights file{weights_path}not found.)return# 训练模型modelYOLO(weights_path)model.train(datadata_path,imgsz640,batch16,epochs100,nameyolov8_pcb)if__name____main__:train_yolo()4. PyQt5前端界面接下来我们将使用PyQt5创建一个简单的前端界面用于显示实时检测结果并支持模型替换。PyQt5界面代码importsysfromPyQt5.QtWidgetsimportQApplication,QMainWindow,QLabel,QVBoxLayout,QWidget,QPushButton,QFileDialogfromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQTimerimportcv2fromultralyticsimportYOLOclassPCBDefectDetectionApp(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle(PCB Defect Detection System)self.setGeometry(100,100,800,600)self.central_widgetQWidget(self)self.setCentralWidget(self.central_widget)self.layoutQVBoxLayout(self.central_widget)self.image_labelQLabel(self)self.layout.addWidget(self.image_label)self.load_buttonQPushButton(Load Image,self)self.load_button.clicked.connect(self.load_image)self.layout.addWidget(self.load_button)self.detect_buttonQPushButton(Detect,self)self.detect_button.clicked.connect(self.detect_defects)self.layout.addWidget(self.detect_button)self.model_buttonQPushButton(Load Model,self)self.model_button.clicked.connect(self.load_model)self.layout.addWidget(self.model_button)self.modelNonedefload_image(self):file_dialogQFileDialog()file_dialog.setFileMode(QFileDialog.ExistingFile)iffile_dialog.exec_():file_namefile_dialog.selectedFiles()[0]self.imagecv2.imread(file_name)self.update_image()defupdate_image(self):ifself.imageisnotNone:height,width,channelself.image.shape bytes_per_line3*width q_imageQImage(self.image.data,width,height,bytes_per_line,QImage.Format_BGR888)self.image_label.setPixmap(QPixmap.fromImage(q_image))defload_model(self):file_dialogQFileDialog()file_dialog.setFileMode(QFileDialog.ExistingFile)iffile_dialog.exec_():file_namefile_dialog.selectedFiles()[0]self.modelYOLO(file_name)print(fLoaded model:{file_name})defdetect_defects(self):ifself.imageisnotNoneandself.modelisnotNone:resultsself.model(self.image)forresultinresults:boxesresult.boxesforboxinboxes:x1,y1,x2,y2box.xyxy[0].tolist()labelbox.cls[0].item()confidencebox.conf[0].item()# 绘制边界框cv2.rectangle(self.image,(int(x1),int(y1)),(int(x2),int(y2)),(0,255,0),2)cv2.putText(self.image,f{self.model.names[int(label)]}:{confidence:.2f},(int(x1),int(y1)-10),cv2.FONT_HERSHEY_SIMPLEX,0.9,(0,255,0),2)self.update_image()if__name____main__:appQApplication(sys.argv)windowPCBDefectDetectionApp()window.show()sys.exit(app.exec_())总结通过上述步骤你可以使用YOLOv8训练PCB缺陷检测模型并使用PyQt5创建一个简单的前端界面来显示实时检测结果。该界面支持用户加载自定义模型从而实现检测目标的自定义。确保数据集结构正确标注文件格式正确并且路径配置正确。