ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

YOLOv11 草莓成熟度检测系统 草莓成熟度检测数据集

YOLOv11 草莓成熟度检测系统 草莓成熟度检测数据集 草莓成熟度检测数据集 YOLOv11 草莓成熟度检测系统1275张yolovoccoco三种标注方式图像尺寸:640*640类别数量:3类训练集图像数量:1011; 验证集图像数量:254 测试集图像数量:10类别名称: 每一类图像数 每一类标注数Ripened 成熟的: 840,1958Unripened 不成熟的: 925,3088Semi-Ripened 半成熟的: 681,1402image num: 1275模型代码模型训练使用yolov11n训练50个epoch训练结果map如描述图所示。qt界面运行界面采用pyqt编写本项目已经训练好模型配置好环境后可直接使用运行效果见描述图像YOLOv11 草莓成熟度检测完整代码1. 数据集yaml配置strawberry.yaml# 草莓成熟度数据集配置path:./strawberry_datasettrain:images/trainval:images/valtest:images/testnames:0:Unripened# 未成熟1:Semi-Ripened# 半成熟2:Ripened# 成熟2. 模型训练代码train.pyfromultralyticsimportYOLOif__name____main__:# 加载YOLOv11预训练权重modelYOLO(yolo11n.pt)# 开始训练resultsmodel.train(datastrawberry.yaml,epochs100,imgsz640,batch8,device0,patience10,saveTrue,pretrainedTrue,verboseTrue)print(训练完成)3. 图像推理检测代码predict.pyfromultralyticsimportYOLOimportcv2# 加载训练好的模型权重modelYOLO(./runs/detect/train/weights/best.pt)defdetect_strawberry(img_path):imgcv2.imread(img_path)resultsmodel(img,conf0.5)# 绘制检测框forresinresults:boxesres.boxesforboxinboxes:x1,y1,x2,y2map(int,box.xyxy[0])cls_idint(box.cls[0])conffloat(box.conf[0])cls_namemodel.names[cls_id]cv2.rectangle(img,(x1,y1),(x2,y2),(0,255,0),2)cv2.putText(img,f{cls_name}{conf:.2f},(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,255,0),2)cv2.imwrite(result.jpg,img)returnimgif__name____main__:detect_strawberry(test.jpg)4. PyQt可视化GUI系统代码对应截图界面strawberry_gui.pyimportsysimportcv2fromPyQt5.QtWidgetsimport*fromPyQt5.QtGuiimport*fromPyQt5.QtCoreimport*fromultralyticsimportYOLOclassStrawberryDetectWindow(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle(基于YOLOv11的草莓成熟度检测系统)self.resize(1200,800)self.modelYOLO(./runs/detect/train/weights/best.pt)self.initUI()definitUI(self):# 布局widgetQWidget()self.setCentralWidget(widget)layoutQHBoxLayout(widget)# 左侧图像显示区域self.label_imgQLabel()self.label_img.setFixedSize(800,600)self.label_img.setStyleSheet(border:1px solid #999;)layout.addWidget(self.label_img)# 右侧控制面板right_panelQVBoxLayout()layout.addLayout(right_panel)# 文件导入group_fileQGroupBox(文件导入)vfQVBoxLayout(group_file)self.btn_imgQPushButton(选择图片)self.btn_img.clicked.connect(self.load_image)vf.addWidget(self.btn_img)right_panel.addWidget(group_file)# 检测结果信息group_infoQGroupBox(检测结果)viQFormLayout(group_info)self.label_timeQLabel(用时0 s)self.label_numQLabel(目标数目0)vi.addRow(用时,self.label_time)vi.addRow(目标数目,self.label_num)right_panel.addWidget(group_info)# 结果表格self.tableQTableWidget()self.table.setColumnCount(5)self.table.setHorizontalHeaderLabels([序号,类别,置信度,坐标xmin,ymin,xmax,ymax])right_panel.addWidget(self.table)defload_image(self):path,_QFileDialog.getOpenFileName(self,打开图片,.,图片(*.jpg *.png *.jpeg))ifnotpath:returnimgcv2.imread(path)t0QDateTime.currentDateTime().toMSecsSinceEpoch()resself.model(img,conf0.5)t1QDateTime.currentDateTime().toMSecsSinceEpoch()cost_time(t1-t0)/1000boxesres[0].boxes totallen(boxes)self.label_time.setText(f用时{cost_time:.3f}s)self.label_num.setText(f目标数目{total})self.table.setRowCount(total)# 绘制框foridx,boxinenumerate(boxes):x1,y1,x2,y2map(int,box.xyxy[0])conffloat(box.conf[0])cls_idint(box.cls[0])cls_nameself.model.names[cls_id]cv2.rectangle(img,(x1,y1),(x2,y2),(0,255,0),2)cv2.putText(img,f{cls_name}{conf:.2f},(x1,y1-5),cv2.FONT_HERSHEY_SIMPLEX,0.4,(0,255,0),1)self.table.setItem(idx,0,QTableWidgetItem(str(idx1)))self.table.setItem(idx,1,QTableWidgetItem(cls_name))self.table.setItem(idx,2,QTableWidgetItem(f{conf:.2f}))self.table.setItem(idx,3,QTableWidgetItem(f{x1},{y1},{x2},{y2}))# 图像转Qt显示img_rgbcv2.cvtColor(img,cv2.COLOR_BGR2RGB)h,w,chimg_rgb.shape bytes_per_linech*w qimgQImage(img_rgb.data,w,h,bytes_per_line,QImage.Format_RGB888)self.label_img.setPixmap(QPixmap.fromImage(qimg).scaled(self.label_img.size(),Qt.KeepAspectRatio))if__name____main__:appQApplication(sys.argv)winStrawberryDetectWindow()win.show()sys.exit(app.exec_())环境安装pipinstallultralytics opencv-python pyqt5
返回列表