深度学习基于 YOLOv11 的电力绝缘子缺陷检测系统 电力配网、主网绝缘子缺陷检测数据集,4904张,提供yolo,voc,coco三种标注方式
图像尺寸:640*640
类别数量:7类
训练集图像数量:4777; 验证集图像数量:114; 测试集图像数量:13
类别名称: 每一类图像数 ,每一类标注数
Dirty_Su22kV - 22kV 绝缘子污秽:772, 1019
Su_22kV - 22kV 绝缘子正常:1016, 3783
Broken_Su22kV - 22kV 绝缘子破损:1029, 1565
DirtyGlass_Su110kV - 110kV 玻璃绝缘子污秽:274, 574
Su_110kV - 110kV 绝缘子正常:1250, 2640
LossGlass_Su110kV - 110kV 玻璃绝缘子缺失(自爆):347, 553
DirtyPolyme_Su110kV - 110kV 复合绝缘子污秽:243, 285
image num: 4904
模型代码:提供全部训练及测试源代码,模型训练使用yolov11n训练,50个epoch训练结果,map如描述图所示。
qt界面:运行界面采用pyqt5编写, 提供全部源代码,支持图片、视频及摄像头进行检测: 界面可实时显示目标位置、目标总数、置信度等信息: 支持检测结果保存;本项目已经训练好模型,配置好环境后可直接使用,运行效果见描述图像
电力配网、主网绝缘子缺陷检测数据集
| 项目 | 详情 |
|---|---|
| 数据集名称 | 电力配网、主网绝缘子缺陷检测数据集 |
| 图像总量 | 4904张 |
| 标注格式 | YOLO、VOC、COCO三种标注格式 |
| 图像尺寸 | 640×640 |
| 类别总数 | 7类 |
| 数据集划分 | 训练集:4777张 验证集:114张 测试集:13张 |
| 类别明细 | 1. 22kV绝缘子污秽:含该类图像772张,标注1019 2. 22kV绝缘子正常:含该类图像1016张,标注3783 3. 22kV绝缘子破损:含该类图像1029张,标注1565 4. 110kV玻璃绝缘子污秽:含该类图像274张,标注574 5. 110kV绝缘子正常:含该类图像1250张,标注2640 6. 110kV玻璃绝缘子缺失(自爆):含该类图像347张,标注553 7. 110kV复合绝缘子污秽:含该类图像243张,标注285 |
| 配套代码 | 1. 训练测试全套源码,基于YOLOv11n训练,训练轮次50epoch,附带训练mAP结果 2. PyQt5可视化检测界面完整源码;支持图片、视频、摄像头实时检测;实时展示目标框、目标数量、置信度;可保存检测结果;附带训练完成权重,配置环境即可直接运行 |
| 应用场景 | 电力主网、配网无人机巡检,绝缘子外观缺陷识别,电力设备故障智能检测,深度学习目标检测算法研究 |
| 数据集价值 | 覆盖22kV、110kV不同电压等级绝缘子正常及多类病害样本,可用于电力巡检AI模型训练,替代人工肉眼巡检,提升输电线路缺陷识别效率,适用于电力行业AI科研与工程项目落地 |
基于YOLOv11的电力绝缘子缺陷检测系统完整代码
一、环境安装
pipinstallultralytics pyqt5 opencv-python numpy pillow二、模型训练代码(train.py)
fromultralyticsimportYOLO# 加载YOLOv11n模型model=YOLO("yolo11n.pt")# 训练配置if__name__=='__main__':results=model.train(data="insulator.yaml",# 数据集yaml配置文件epochs=50,imgsz=640,batch=16,device=0,save=True,save_txt=True,save_conf=True)print("训练完成,权重保存在runs/detect/train/weights/best.pt")insulator.yaml
path:./insulator_datasettrain:images/trainval:images/valtest:images/testnames:0:22kV绝缘子污秽1:22kV绝缘子正常2:22kV绝缘子破损3:110kV玻璃绝缘子污秽4:110kV绝缘子正常5:110kV玻璃绝缘子缺失(自爆)6:110kV复合绝缘子污秽三、PyQt5可视化检测界面代码(main_ui.py)
importsysimportcv2importnumpyasnpfromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QFileDialog,QLabel,QPushButton,QTableWidget,QTableWidgetItem,QComboBox)fromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQtfromultralyticsimportYOLOclassInsulatorDetectWindow(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle("基于YOLOv11的电力配网、主网绝缘子缺陷检测系统")self.setGeometry(100,100,1300,850)self.model=YOLO("best.pt")# 训练好的权重# 控件self.img_label=QLabel(self)self.img_label.setGeometry(20,40,700,600)self.img_label.setStyleSheet("border:1px solid #999;")self.btn_img=QPushButton("导入图片",self)self.btn_img.setGeometry(760,40,180,40)self.btn_img.clicked.connect(self.load_image)self.btn_video=QPushButton("导入视频",self)self.btn_video.setGeometry(760,90,180,40)self.btn_video.clicked.connect(self.load_video)self.btn_cam=QPushButton("开启摄像头",self)self.btn_cam.setGeometry(760,140,180,40)self.btn_cam.clicked.connect(self.open_camera)self.result_label=QLabel("检测结果",self)self.result_label.setGeometry(760,200,200,30)self.info_label=QLabel("用时:0 s | 目标数目:0",self)self.info_label.setGeometry(760,230,300,30)self.conf_label=QLabel("置信度:",self)self.conf_label.setGeometry(760,260,300,30)self.table=QTableWidget(self)self.table.setGeometry(20,660,1000,160)self.table.setColumnCount(5)self.table.setHorizontalHeaderLabels(["序号","文件路径","类别","置信度","坐标位置"])self.save_btn=QPushButton("保存结果",self)self.save_btn.setGeometry(760,720,120,40)self.save_btn.clicked.connect(self.save_result)self.exit_btn=QPushButton("退出",self)self.exit_btn.setGeometry(900,720,120,40)self.exit_btn.clicked.connect(self.close)self.result_img=Nonedefload_image(self):path,_=QFileDialog.getOpenFileName(self,"选择图片","","Image(*.jpg *.png *.jpeg)")ifnotpath:returnimg=cv2.imread(path)self.detect(img)defdetect(self,img):importtime t1=time.time()res=self.model(img)[0]t2=time.time()cost=round(t2-t1,3)boxes=res.boxes self.info_label.setText(f"用时:{cost}s | 目标数目:{len(boxes)}")img_rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)forboxinboxes:x1,y1,x2,y2=map(int,box.xyxy[0])cls_id=int(box.cls[0])conf=float(box.conf[0])cls_name=self.model.names[cls_id]cv2.rectangle(img_rgb,(x1,y1),(x2,y2),(0,255,0),2)cv2.putText(img_rgb,f"{cls_name}{conf:.2f}",(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,255,0),2)self.result_img=img_rgb h,w,c=img_rgb.shape qimg=QImage(img_rgb.data,w,h,c*w,QImage.Format_RGB888)self.img_label.setPixmap(QPixmap.fromImage(qimg).scaled(self.img_label.size(),Qt.KeepAspectRatio))# 填充表格self.table.setRowCount(len(boxes))foridx,boxinenumerate(boxes):x1,y1,x2,y2=map(int,box.xyxy[0])cls_id=int(box.cls[0])conf=float(box.conf[0])cls_name=self.model.names[cls_id]pos_text=f"[{x1},{y1},{x2},{y2}]"self.table.setItem(idx,0,QTableWidgetItem(str(idx+1)))self.table.setItem(idx,1,QTableWidgetItem(""))self.table.setItem(idx,2,QTableWidgetItem(cls_name))self.table.setItem(idx,3,QTableWidgetItem(f"{conf:.2f}"))self.table.setItem(idx,4,QTableWidgetItem(pos_text))defsave_result(self):ifself.result_imgisNone:returnsave_path,_=QFileDialog.getSaveFileName(self,"保存图片","result.jpg","Image(*.jpg *.png)")ifsave_path:cv2.imwrite(save_path,cv2.cvtColor(self.result_img,cv2.COLOR_RGB2BGR))defload_video(self):path,_=QFileDialog.getOpenFileName(self,"选择视频","","Video(*.mp4 *.avi)")cap=cv2.VideoCapture(path)whilecap.isOpened():ret,frame=cap.read()ifnotret:breakself.detect(frame)QApplication.processEvents()cap.release()defopen_camera(self):cap=cv2.VideoCapture(0)whilecap.isOpened():ret,frame=cap.read()ifnotret:breakself.detect(frame)QApplication.processEvents()cap.release()if__name__=='__main__':app=QApplication(sys.argv)win=InsulatorDetectWindow()win.show()sys.exit(app.exec())四、推理单图测试代码(predict.py)
fromultralyticsimportYOLO model=YOLO("best.pt")# 单张图片推理res=model.predict(source="test.jpg",save=True,conf=0.5)forrinres:boxes=r.boxesforboxinboxes:print(f"类别:{r.names[int(box.cls)]},置信度:{box.conf.item():.3f},坐标:{box.xyxy.tolist()}")功能说明:
- 训练代码:YOLOv11n,50轮训练,输出best.pt权重;
- PyQt5界面:支持图片、视频、摄像头实时检测;可视化目标框、类别、置信度;表格展示坐标信息;检测结果图片保存;
- predict.py:单独图片批量推理脚本;
- yaml配置文件定义7类绝缘子类别。