红外光伏缺陷检测数据集,
2232张,yolo和voc两种标注方式
4类,标注数量:
Cell Fault: 电池故障3060
Bypass Diode: 旁路二极管1472
Hotspot:热斑 3207
Defects: 损伤5
image num: 2232
.模型代码:模型训练使用yolov11n训练,30个epoch训练结果,map如描述图所示,全套代码和训练好的权重文件。
qt界面:可视化运行界面采用pyqt编写,可视化界面简单友好,本项目已经训练好模型,配置好环境后可直接使用,运行效果见描述图像
一、data.yaml配置(红外光伏缺陷数据集)![]()
类别:旁路二极管故障、电池片故障、热斑
path:./pv_fault_datasettrain:images/trainval:images/valtest:images/testnames:0:Bypass‑Diode1:Cell‑Fault2:Hotspot二、YOLOv11训练代码![]()
fromultralyticsimportYOLO#加载预训练权重model=YOLO("yolo11n.pt")#开始训练model.train(data="data.yaml",epochs=80,imgsz=640,batch=8,device=0,project="光伏缺陷检测",name="train_result")#模型评估metrics=model.val()print(f"mAP@0.5:{metrics.box.map50}")#导出onnx部署模型model.export(format="onnx")三、PyQt5可视化检测界面完整简易代码
importsysfromultralyticsimportYOLOfromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QPushButton,QLabel,QFileDialog,QTextEdit,QComboBox,QTableWidget,QTableWidgetItem)fromPyQt5.QtGuiimportQPixmap,QImageimportcv2importnumpyasnpclassPvDetectWindow(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle("基于YOLOv11红外光伏面板缺陷检测系统")self.resize(1260,960)self.model=YOLO("./runs/光伏缺陷检测/train_result/weights/best.pt")#图片显示标签self.img_label=QLabel(self)self.img_label.setGeometry(20,60,620,520)#导入图片按钮self.btn_import=QPushButton("文件导入",self)self.btn_import.setGeometry(680,60,180,40)self.btn_import.clicked.connect(self.load_image)#结果表格self.result_table=QTableWidget(self)self.result_table.setGeometry(20,610,950,300)self.result_table.setColumnCount(5)self.result_table.setHorizontalHeaderLabels(["序号","文件路径","类别","置信度","坐标位置"])defload_image(self):file_path,_=QFileDialog.getOpenFileName(self,"选择红外图片","","图片(*.jpg *.png)")ifnotfile_path:returnimg=cv2.imread(file_path)results=self.model.predict(source=file_path,conf=0.5,save=False)#绘制检测框forresinresults:boxes=res.boxesforidx,boxinenumerate(boxes):x1,y1,x2,y2=map(int,box.xyxy[0])conf=float(box.conf[0])cls=int(box.cls[0])cls_name=self.model.names[cls]cv2.rectangle(img,(x1,y1),(x2,y2),(255,0,0),2)cv2.putText(img,f"{cls_name}{conf:.2f}",(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.5,(255,0,0),2)#写入表格row=self.result_table.rowCount()self.result_table.insertRow(row)self.result_table.setItem(row,0,QTableWidgetItem(str(idx+1)))self.result_table.setItem(row,1,QTableWidgetItem(file_path))self.result_table.setItem(row,2,QTableWidgetItem(cls_name))self.result_table.setItem(row,3,QTableWidgetItem(f"{conf*100:.2f}%"))self.result_table.setItem(row,4,QTableWidgetItem(f"[{x1},{y1},{x2},{y2}]"))#图片渲染到界面img_rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)h,w,ch=img_rgb.shape bytes_per_line=ch*w q_img=QImage(img_rgb.data,w,h,bytes_per_line,QImage.Format_RGB888)self.img_label.setPixmap(QPixmap.fromImage(q_img))if__name__=="__main__":app=QApplication(sys.argv)win=PvDetectWindow()win.show()sys.exit(app.exec_())四、视频/文件夹批量推理代码
fromultralyticsimportYOLO model=YOLO("./runs/光伏缺陷检测/train_result/weights/best.pt")#视频检测model.predict(source="test_video.mp4",save=True,conf=0.5)#批量文件夹红外图像检测model.predict(source="./test_images/",save=True,save_labels=True,conf=0.5)