齿轮缺陷检测系统(YOLOv8/YOLOv11) 齿轮缺陷检测YOLO数据集 如何构建基于深度学习YOLOV8齿轮缺陷检测系统
2026/7/21 17:35:57 网站建设 项目流程

工业-齿轮缺陷检测系统YOLO带数据集模型948张 3类

【标注好的齿轮缺陷检测YOLO数据集】共【948】张,按照8比2划分为训练集和验证集,其中训练集【758】张,验证集【190】张,模型分为【3】类,分类为:【‘生锈’, ‘完好’, ‘缺损’】

【齿轮缺陷检测YOLO模型】训练结果图片见下图

【齿轮检测系统】支持单张/多张图片检测、视频检测、检测结果、检测统计、数据导出

齿轮缺陷检测系统(YOLOv8/YOLOv11)

一、项目与数据集信息表

项目详情说明
系统名称齿轮缺陷智能检测系统
技术框架后端:Python + PyQt + Ultralytics YOLO
前端:PyQt界面
核心功能单张/批量图片检测、视频/摄像头实时检测、检测结果可视化、检测统计、JSON/CSV数据导出
数据集规模共 948 张齿轮图像
数据集划分训练集:758 张(约80%)
验证集:190 张(约20%)
标注格式YOLO 标准格式
目标类别(3类)0: 生锈
1: 完好
2: 缺损
模型指标训练完成后,mAP@50 可达 0.98+,模型收敛良好
应用场景工业生产线齿轮质检、设备预防性维护、高校毕设/课程项目、缺陷检测算法验证

二、数据集目录结构

gear_dataset/ ├── images/ │ ├── train/ # 758 张训练图片 │ └── val/ # 190 张验证图片 ├── labels/ │ ├── train/ # 对应YOLO格式标注txt文件 │ └── val/ └── gear.yaml # 数据集配置文件

三、数据集配置文件gear.yaml

path:./gear_datasettrain:images/trainval:images/valnc:3names:0:生锈1:完好2:缺损

四、YOLO训练代码(Ultralytics)

1. 环境依赖

pipinstallultralytics opencv-python numpy

2. 训练主代码train_gear.py

fromultralyticsimportYOLOdefmain():# 加载预训练模型(YOLOv8s/YOLOv11s)model=YOLO("yolov8s.pt")# 开始训练results=model.train(data="./gear_dataset/gear.yaml",epochs=100,imgsz=640,batch=16,device=0,# 有GPU写0,无GPU写"cpu"workers=4,patience=15,# 早停机制project="runs/train",name="gear_defect",exist_ok=True,pretrained=True,mosaic=1.0)print("训练完成!模型保存在 runs/train/gear_defect/weights/")# 在验证集上评估模型metrics=model.val()print(f"mAP@50:{metrics.box.map50:.4f}")print(f"mAP@50-95:{metrics.box.map:.4f}")if__name__=="__main__":main()

五、PyQt检测系统核心代码(界面+推理)

importsysimportcv2importjsonimportcsvfromPyQt5.QtWidgetsimport*fromPyQt5.QtCoreimport*fromPyQt5.QtGuiimport*fromultralyticsimportYOLOclassGearDefectDetector(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle("齿轮缺陷智能检测系统")self.setGeometry(100,100,1200,800)self.model=Noneself.results=[]self.initUI()definitUI(self):# 左侧控制面板left_widget=QWidget()left_layout=QVBoxLayout(left_widget)# 模型设置self.conf_spin=QDoubleSpinBox()self.conf_spin.setRange(0.1,1.0)self.conf_spin.setValue(0.7)left_layout.addWidget(QLabel("置信度阈值:"))left_layout.addWidget(self.conf_spin)# 按钮self.btn_select_img=QPushButton("选择单张图像")self.btn_detect=QPushButton("开始检测")self.btn_export_json=QPushButton("导出为JSON")self.btn_export_csv=QPushButton("导出为CSV")self.btn_select_img.clicked.connect(self.select_image)self.btn_detect.clicked.connect(self.run_detection)self.btn_export_json.clicked.connect(self.export_json)self.btn_export_csv.clicked.connect(self.export_csv)left_layout.addWidget(self.btn_select_img)left_layout.addWidget(self.btn_detect)left_layout.addWidget(self.btn_export_json)left_layout.addWidget(self.btn_export_csv)# 统计信息self.stat_label=QLabel("检测统计:\n生锈: 0\n完好: 0\n缺损: 0\n总计: 0")left_layout.addWidget(self.stat_label)# 右侧图像显示self.image_label=QLabel("图像显示区域")self.image_label.setAlignment(Qt.AlignCenter)# 主布局main_layout=QHBoxLayout()main_layout.addWidget(left_widget,1)main_layout.addWidget(self.image_label,3)central_widget=QWidget()central_widget.setLayout(main_layout)self.setCentralWidget(central_widget)# 加载模型self.model=YOLO("runs/train/gear_defect/weights/best.pt")defselect_image(self):path,_=QFileDialog.getOpenFileName(self,"选择图像","","Images (*.png *.jpg *.jpeg)")ifpath:self.img_path=path self.image_label.setPixmap(QPixmap(path).scaled(self.image_label.size(),Qt.KeepAspectRatio))defrun_detection(self):ifnothasattr(self,'img_path'):returnconf=self.conf_spin.value()results=self.model.predict(self.img_path,conf=conf,save=False)self.results=results[0].boxes self.update_statistics()self.draw_result()defdraw_result(self):img=cv2.imread(self.img_path)forboxinself.results:x1,y1,x2,y2=map(int,box.xyxy[0])cls=int(box.cls[0])conf=float(box.conf[0])label=["生锈","完好","缺损"][cls]color=(0,0,255)ifcls==0else(0,255,0)ifcls==1else(255,0,0)cv2.rectangle(img,(x1,y1),(x2,y2),color,2)cv2.putText(img,f"{label}:{conf:.2f}",(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.8,color,2)img_rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)h,w,c=img_rgb.shape bytes_per_line=c*w qimg=QImage(img_rgb.data,w,h,bytes_per_line,QImage.Format_RGB888)self.image_label.setPixmap(QPixmap.fromImage(qimg).scaled(self.image_label.size(),Qt.KeepAspectRatio))defupdate_statistics(self):counts=[0,0,0]forboxinself.results:cls=int(box.cls[0])counts[cls]+=1self.stat_label.setText(f"检测统计:\n生锈:{counts[0]}\n完好:{counts[1]}\n缺损:{counts[2]}\n总计:{len(self.results)}")defexport_json(self):ifnotself.results:returndata=[]forboxinself.results:data.append({"class":["生锈","完好","缺损"][int(box.cls[0])],"confidence":float(box.conf[0]),"bbox":list(map(int,box.xyxy[0].tolist()))})withopen("detection_result.json","w",encoding="utf-8")asf:json.dump(data,f,ensure_ascii=False,indent=4)defexport_csv(self):ifnotself.results:returnwithopen("detection_result.csv","w",newline="",encoding="utf-8")asf:writer=csv.writer(f)writer.writerow(["class","confidence","x1","y1","x2","y2"])forboxinself.results:x1,y1,x2,y2=map(int,box.xyxy[0])writer.writerow([["生锈","完好","缺损"][int(box.cls[0])],float(box.conf[0]),x1,y1,x2,y2])if__name__=="__main__":app=QApplication(sys.argv)window=GearDefectDetector()window.show()sys.exit(app.exec_())

六、应用场景

场景具体用途
工业自动化质检齿轮生产线中自动识别生锈、缺损等缺陷,替代人工检测,提高效率
设备预防性维护对在用设备的齿轮进行定期检测,提前发现缺陷,避免故障
高校毕设/课程项目计算机视觉、深度学习课程的目标检测实战项目
缺陷检测算法验证用于测试和对比不同YOLO模型在工业缺陷检测任务上的性能

关键标签

#YOLO#齿轮缺陷检测#工业质检#目标检测#PyQt#Python#数据集#毕业设计#智能检测#缺陷识别

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询