ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

深度学习YOLOv11无人机风力发电叶片损伤检测系统-无人机风机损伤缺陷检测数据集-风机设备损伤、脏污检测数据集

深度学习YOLOv11无人机风力发电叶片损伤检测系统-无人机风机损伤缺陷检测数据集-风机设备损伤、脏污检测数据集 无人机风机损伤缺陷检测数据集-风机设备损伤、脏污检测数据集2191张提供yolovoccoco三种标注方式图像尺寸:371*586类别数量:2类训练集图像数量:1534; 验证集图像数量:431 测试集图像数量:226类别名称: 每一类图像数 每一类标注数damage: 1852,6380dirt: 407,422image num: 2191模型代码采用 YOLOv11n 网络训练训练轮次80 个 epoch提供全部训练 测试源代码训练精度 mAP 效果如图所示PyQt5 界面功能界面使用 PyQt5 开发提供全部源码.ui、.qrc、.py 及图标文件支持图片检测、视频检测、摄像头实时检测界面实时显示目标位置、目标总数、置信度等信息支持检测结果保存导出操作简单直观无需命令行境运行环境Python3.8、opencv-python、PyQt5、torch支持 Windows、Linux 系统一、项目完整信息文档风机设备损伤、脏污检测数据集总图像2191张图像尺寸371 × 586类别2类damage损伤图像数1852标注框6380dirt脏污图像数407标注框422数据集划分数据集图片数量训练集(train)1534验证集(val)431测试集(test)226标注格式YOLO‑txt、VOC‑xml、COCO‑json 三格式训练网络YOLOv11‑n训练轮次epoch80指标mAP0.5 0.724二、YOLOv11训练简易完整代码1.数据集yaml配置文件wind_defect.yaml# wind_defect.yamlpath:./datasets/wind_defecttrain:images/trainval:images/valtest:images/testnames:0:damage1:dirt2.训练脚本train.pyfromultralyticsimportYOLO# 加载YOLOv11n轻量化模型modelYOLO(yolo11n.pt)# 开始训练resultsmodel.train(datawind_defect.yaml,epochs80,imgsz640,batch8,device0,workers4,patience10,projectruns/train,namewind_blade_detect)3.测试评估脚本test.pyfromultralyticsimportYOLO modelYOLO(./runs/train/wind_blade_detect/weights/best.pt)metricsmodel.val(splittest)print(fmAP0.5:{metrics.box.map50:.3f})4.单张图像预测脚本predict.pyfromultralyticsimportYOLO modelYOLO(./runs/train/wind_blade_detect/weights/best.pt)#图片检测resmodel.predict(sourcetest.jpg,saveTrue,conf0.5)#视频检测#res model.predict(sourcetest.mp4,saveTrue,conf0.5)#摄像头实时检测#res model.predict(source0,saveTrue,conf0.5)三、PyQt5可视化推理界面简易源码实现图片、视频、摄像头检测输出目标数目、置信度、xy坐标main_ui.pyimportsysimportcv2fromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QPushButton,QLabel,QFileDialog,QComboBox,QTextEdit)fromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQt,QThread,pyqtSignalfromultralyticsimportYOLO#加载训练好的权重modelYOLO(./runs/train/wind_blade_detect/weights/best.pt)classDetThread(QThread):send_imgpyqtSignal(object)send_resultpyqtSignal(list)def__init__(self,source):super().__init__()self.sourcesource self.run_flagTruedefrun(self):capcv2.VideoCapture(self.source)whileself.run_flag:ret,framecap.read()ifnotret:breakresmodel(frame,conf0.5)boxesres[0].boxes det_info[]forboxinboxes:x1,y1,x2,y2map(int,box.xyxy[0])conffloat(box.conf[0])clsint(box.cls[0])det_info.append([x1,y1,x2,y2,conf,cls])cv2.rectangle(frame,(x1,y1),(x2,y2),(255,0,0),2)cv2.putText(frame,f{model.names[cls]}{conf:.2f},(x1,y1-8),cv2.FONT_HERSHEY_SIMPLEX,0.5,(255,0,0),1)self.send_img.emit(frame)self.send_result.emit(det_info)cap.release()classMainWindow(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle(基于YOLOv11的风机损伤检测系统)self.resize(1200,800)self.init_ui()self.det_threadNonedefinit_ui(self):#图像显示区self.img_labelQLabel(self)self.img_label.setGeometry(20,60,750,600)self.img_label.setStyleSheet(border:1px solid #999;)#按钮self.btn_imgQPushButton(图片检测,self)self.btn_img.setGeometry(820,60,180,40)self.btn_img.clicked.connect(self.detect_image)self.btn_videoQPushButton(视频检测,self)self.btn_video.setGeometry(820,120,180,40)self.btn_video.clicked.connect(self.detect_video)self.btn_camQPushButton(摄像头检测,self)self.btn_cam.setGeometry(820,180,180,40)self.btn_cam.clicked.connect(self.detect_camera)#结果文本框self.result_textQTextEdit(self)self.result_text.setGeometry(820,250,320,380)self.result_text.setPlaceholderText(检测结果、坐标、置信度信息展示)defshow_frame(self,frame):rgbcv2.cvtColor(frame,cv2.COLOR_BGR2RGB)h,w,chrgb.shape bytes_per_linech*w q_imgQImage(rgb.data,w,h,bytes_per_line,QImage.Format_RGB888)self.img_label.setPixmap(QPixmap.fromImage(q_img).scaled(self.img_label.size(),Qt.KeepAspectRatio))defshow_result(self,det_list):self.result_text.clear()totallen(det_list)self.result_text.append(f目标总数目{total}\n)foridx,iteminenumerate(det_list):x1,y1,x2,y2,conf,clsitem cls_namemodel.names[cls]self.result_text.append(f[{idx1}]类别:{cls_name}置信度:{conf:.2f}\nf坐标:xmin{x1},ymin{y1},xmax{x2},ymax{y2}\n)defdetect_image(self):path,_QFileDialog.getOpenFileName(self,打开图片,,Image(*.jpg *.png *.jpeg))ifnotpath:returnframecv2.imread(path)resmodel(frame,conf0.5)boxesres[0].boxes info[]forboxinboxes:x1,y1,x2,y2map(int,box.xyxy[0])conffloat(box.conf[0])clsint(box.cls[0])info.append([x1,y1,x2,y2,conf,cls])cv2.rectangle(frame,(x1,y1),(x2,y2),(255,0,0),2)cv2.putText(frame,f{model.names[cls]}{conf:.2f},(x1,y1-8),cv2.FONT_HERSHEY_SIMPLEX,0.5,(255,0,0),1)self.show_frame(frame)self.show_result(info)defdetect_video(self):path,_QFileDialog.getOpenFileName(self,打开视频,,Video(*.mp4 *.avi))ifnotpath:returnself.det_threadDetThread(path)self.det_thread.send_img.connect(self.show_frame)self.det_thread.send_result.connect(self.show_result)self.det_thread.start()defdetect_camera(self):self.det_threadDetThread(0)self.det_thread.send_img.connect(self.show_frame)self.det_thread.send_result.connect(self.show_result)self.det_thread.start()if__name____main__:appQApplication(sys.argv)winMainWindow()win.show()sys.exit(app.exec_())依赖安装命令pipinstallultralytics opencv-python pyqt5
返回列表