X光PCB缺陷检测全套项目文档(YOLOv11n + PyQt5可视化界面)YOLO模型如何训练x光PCB板缺陷检测数据集
X光PCB缺陷检测全套项目文档(YOLOv11n + PyQt5可视化界面)![]()
一、数据集完整参数统计表![]()
| 项目参数 | 详细信息 |
|---|---|
| 数据集名称 | X光PCB电路板缺陷检测数据集 |
| 总图像数量 | 5955张 |
| 单图尺寸 | 640×640 |
| 数据划分 | 训练集:4170张 验证集:1192张 测试集:593张 |
| 标注格式 | YOLO(txt)、VOC(xml)、COCO(json) 三格式全覆盖 |
| 缺陷总类别 | 7类PCB工艺/元器件缺陷 |
7类缺陷样本&标注数量明细
| 类别序号 | 英文类别名 | 中文名称 | 含该缺陷图片数 | 缺陷标注框总数 |
|---|---|---|---|---|
| 0 | Damaged components | 元器件损坏 | 4068 | 8464 |
| 1 | Pin short circuit | 引脚短路 | 2884 | 6035 |
| 2 | Miscellaneous tin | 杂锡 | 249 | 263 |
| 3 | Missing components | 元器件缺失 | 5284 | 35864 |
| 4 | Chip scratches | 芯片划痕 | 3041 | 4633 |
| 5 | Substrate scratches | 基板划痕 | 3680 | 6822 |
| 6 | Solder joint burrs | 焊点毛刺 | 251 | 258 |
数据集特点![]()
- 样本不均衡:元器件缺失样本最多,杂锡、焊点毛刺属于小样本缺陷;
- X光透视成像:可检测电路板内部隐藏缺陷,肉眼可见光无法识别;
- 三种标注格式可自由转换,适配各类检测框架;
- 图像统一裁剪640×640,无需预处理缩放,直接适配YOLO输入尺寸。
二、运行环境配置![]()
环境版本清单
- Python:3.8
- 深度学习框架:torch、torchvision
- 图像处理:opencv-python
- UI界面:PyQt5
- 检测框架:ultralytics(YOLOv11)
- 系统兼容:Windows / Linux 双系统通用
一键安装依赖命令
pipinstalltorch==1.11.0torchvision==0.12.0 ultralytics opencv-python PyQt5 numpy pillow三、项目文件整体目录结构
PCB_Xray_Detect/ ├── dataset/ # 完整数据集 │ ├── images/ │ │ ├── train/ # 训练图片 │ │ ├── val/ # 验证图片 │ │ └── test/ # 测试图片 │ ├── labels/ │ │ ├── train/ # YOLO txt标注 │ │ ├── val/ │ │ └── test/ │ ├── voc_annotations/ # VOC xml标注文件 │ ├── coco_annotations/ # COCO json标注文件 │ └── pcb_defect.yaml # YOLO数据集配置文件 ├── weights/ │ └── best.pt # 训练80轮后最优权重 ├── train.py # 模型训练源码 ├── test_eval.py # 模型测试&精度评估源码 ├── ui/ │ ├── main.ui # Qt界面设计文件 │ ├── resource.qrc # 图标资源文件 │ ├── resource_rc.py # qrc编译后的python资源文件 │ └── icons/ # 界面图标素材 ├── pcb_gui.py # PyQt5主界面运行源码 └── 使用说明文档.md四、数据集yaml配置文件(pcb_defect.yaml)
path:./datasettrain:images/trainval:images/valtest:images/testnc:7names:0:Damaged components1:Pin short circuit2:Miscellaneous tin3:Missing components4:Chip scratches5:Substrate scratches6:Solder joint burrs五、训练代码 train.py
fromultralyticsimportYOLO# 加载YOLOv11n轻量化网络model=YOLO("yolov11n.yaml")# 训练参数设置train_result=model.train(data="./dataset/pcb_defect.yaml",epochs=80,imgsz=640,batch=16,device=0,# 有GPU填0,无GPU改为cpuworkers=4,patience=12,iou=0.45,conf=0.25,mosaic=0.8,mixup=0.1,save=True,project="PCB_Xray_Result",name="yolov11n_80epoch")print("训练结束!最优权重保存在 runs/PCB_Xray_Result/yolov11n_80epoch/weights/best.pt")六、测试评估代码 test_eval.py
fromultralyticsimportYOLO# 载入训练完成的最优权重model=YOLO("./weights/best.pt")# 验证集精度计算metrics=model.val(data="./dataset/pcb_defect.yaml",imgsz=640,conf=0.25,iou=0.45)# 打印核心精度指标print(f"mAP@0.5:{metrics.box.map50:.4f}")print(f"Precision:{metrics.box.p:.4f}")print(f"Recall:{metrics.box.r:.4f}")# 单张图片测试推理model.predict(source="./dataset/images/test",save=True,save_txt=True,save_conf=True)print("测试图片推理完成,结果已保存")七、PyQt5可视化界面全套源码
1、资源文件编译说明
resource.qrc 存放图标,使用命令编译:
pyrcc5 resource.qrc-oresource_rc.py2、主界面运行代码 pcb_gui.py
importsysimportcv2importnumpyasnpfromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QFileDialog,QMessageBox)fromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQt,QTimerfromultralyticsimportYOLOfromuiimportUi_MainWindowimportresource_rcclassPCB_Detect_Window(QMainWindow,Ui_MainWindow):def__init__(self):super().__init__()self.setupUi(self)# 加载训练好的PCB缺陷模型self.model=YOLO("./weights/best.pt")self.cap=Noneself.timer=QTimer()self.timer.timeout.connect(self.camera_frame)self.save_result_list=[]# 按钮绑定事件self.btn_img.clicked.connect(self.image_detect)self.btn_video.clicked.connect(self.video_detect)self.btn_camera.clicked.connect(self.camera_open)self.btn_save.clicked.connect(self.save_all_result)self.btn_exit.clicked.connect(self.close)# 图片检测defimage_detect(self):file_path,_=QFileDialog.getOpenFileName(self,"选择X光PCB图片","","图片文件(*.jpg *.png *.jpeg)")ifnotfile_path:returnresults=self.model(file_path,conf=0.3)self.show_result(results[0])# 视频检测defvideo_detect(self):video_path,_=QFileDialog.getOpenFileName(self,"选择视频文件","","视频(*.mp4 *.avi)")ifnotvideo_path:returnself.cap=cv2.VideoCapture(video_path)self.timer.start(30)# 摄像头实时检测defcamera_open(self):ifself.timer.isActive():self.timer.stop()self.cap.release()returnself.cap=cv2.VideoCapture(0)self.timer.start(30)# 读取画面帧推理defcamera_frame(self):ret,frame=self.cap.read()ifnotret:self.timer.stop()returnresults=self.model(frame,conf=0.3)self.show_result(results[0])# 渲染检测画面+数据展示defshow_result(self,res):img=res.plot()h,w,c=img.shape bytes_per_line=c*w q_img=QImage(img.data,w,h,bytes_per_line,QImage.Format_RGB888).rgbSwapped()self.label_display.setPixmap(QPixmap.fromImage(q_img).scaled(self.label_display.size(),Qt.KeepAspectRatio))# 统计缺陷总数、坐标、置信度boxes=res.boxes total_num=len(boxes)self.label_total.setText(f"缺陷总数量:{total_num}")self.table_result.setRowCount(total_num)self.save_result_list.clear()foridx,boxinenumerate(boxes):cls_idx=int(box.cls)cls_name=self.model.names[cls_idx]conf=float(box.conf)x1,y1,x2,y2=map(int,box.xyxy[0])self.save_result_list.append([cls_name,round(conf,3),x1,y1,x2,y2])self.table_result.setItem(idx,0,QtWidgets.QTableWidgetItem(str(idx+1)))self.table_result.setItem(idx,1,QtWidgets.QTableWidgetItem(cls_name))self.table_result.setItem(idx,2,QtWidgets.QTableWidgetItem(f"{conf:.2f}"))self.table_result.setItem(idx,3,QtWidgets.QTableWidgetItem(f"({x1},{y1})-({x2},{y2})"))# 导出检测结果defsave_all_result(self):iflen(self.save_result_list)==0:QMessageBox.information(self,"提示","暂无检测数据")returnsave_path,_=QFileDialog.getSaveFileName(self,"保存检测报告","pcb缺陷检测结果.txt","txt文件(*.txt)")withopen(save_path,"w",encoding="utf-8")asf:f.write("序号\t缺陷类型\t置信度\t坐标x1,y1,x2,y2\n")forlineinself.save_result_list:f.write(f"{line[0]}\t{line[1]}\t{line[2]},{line[3]},{line[4]},{line[5]}\n")QMessageBox.information(self,"完成","检测结果保存成功")if__name__=="__main__":app=QApplication(sys.argv)window=PCB_Detect_Window()window.show()sys.exit(app.exec_())八、UI界面功能详情
核心功能
- 图片检测:本地单张X光PCB图片导入推理,绘制缺陷框
- 视频检测:PCB巡检视频逐帧识别缺陷
- 摄像头实时检测:外接工业相机在线实时X光PCB检测
- 数据实时展示:
- 缺陷总数量
- 每类缺陷置信度
- 缺陷框像素坐标(xmin,ymin,xmax,ymax)
- 结果导出:txt文档批量保存全部检测记录
- 启停切换:一键关闭摄像头/视频流
九、运行操作步骤
Windows系统
- 安装Python3.8,配置环境变量
- 执行依赖安装命令
- 解压完整项目文件夹,确保路径无中文
- 运行训练:
python train.py,80轮训练完成后自动生成best.pt权重 - 启动可视化界面:
python pcb_gui.py - 选择图片/视频/摄像头进行缺陷检测,可导出检测报表
Linux系统
- 搭建python3.8虚拟环境
- pip安装依赖包
- 赋予文件执行权限,训练、界面启动命令和Windows一致
十、补充说明
- 针对杂锡、焊点毛刺小样本缺陷,可通过复制增强、自适应缩放提升召回率;
- 模型推理速度快,适配工业PCB产线在线质检场景;
- 界面无需输入命令行,纯鼠标可视化操作;
- 训练完成后可导出ONNX模型,部署嵌入式工业设备。