智慧农业-田地大白菜检测数据集】txt格式|3类叶面识别|3961张高清农田图片
数据集亮点:
✅ 3961张大白菜高清图片,真实农田场景采集
✅ txt格式标注,兼容YOLO等框架
✅ 3类叶面状态检测
数据集规格:
标注格式:txt
类别标签及中文意思:
0: cabbage —— 大白菜(健康叶片)
1: capitata —— 结球状态(正常生长)
2: damaged —— 受损叶片(病害/虫害)数据划分:
训练集:2772张(70%)
验证集:792张(20%)
测试集:397张(10%)
田地大白菜检测数据集 + YOLOv11 完整检测系统
一、大白菜检测数据集 标准信息表
1. 基础信息
| 项目 | 详情 |
|---|---|
| 数据集名称 | 农田大白菜目标检测数据集 |
| 总图片数 | 3961 张(真实农田实拍) |
| 标注格式 | YOLO TXT 格式 |
| 数据划分 | 训练集 2772 张 / 验证集 792 张 / 测试集 397 张 |
| 类别数量 | 3 类 |
| 适用模型 | YOLOv8 / YOLOv11 / YOLOv12 / 其他YOLO系列 |
| 应用场景 | 智慧农业、作物长势监测、病虫害识别、产量预估 |
2. 类别标签说明
| 类别ID | 英文标签 | 中文标签 | 农业意义 |
|---|---|---|---|
| 0 | cabbage | 大白菜(健康叶片) | 识别健康植株整体 |
| 1 | capitata | 结球状态 | 表示大白菜进入包心期,正常生长 |
| 2 | damaged | 受损叶片 | 识别病害、虫害、机械损伤的叶片 |
3. 标准目录结构(直接训练)
cabbage_dataset/ ├── images/ │ ├── train/ # 2772张 │ ├── val/ # 792张 │ └── test/ # 397张 └── labels/ ├── train/ *.txt ├── val/ *.txt └── test/ *.txt二、YOLOv11 配置文件cabbage.yaml
path:./cabbage_datasettrain:images/trainval:images/valtest:images/testnc:3names:0:cabbage1:capitata2:damaged三、YOLOv11 训练代码(农田场景优化)
train_cabbage.py
fromultralyticsimportYOLOimporttorchif__name__=="__main__":# 加载模型,推荐用n/s版,兼顾速度与精度model=YOLO("yolo11n.pt")# 农田场景训练参数优化results=model.train(data="cabbage.yaml",epochs=150,imgsz=640,batch=16,device=0iftorch.cuda.is_available()else"cpu",lr0=0.01,lrf=0.01,warmup_epochs=3,cos_lr=True,patience=15,augment=True,mosaic=1.0,mixup=0.1,hsv_h=0.015,hsv_s=0.7,hsv_v=0.4,degrees=15,fliplr=0.5,scale=0.5,name="cabbage_detection",cache=True,amp=True)# 测试集评估model.val(split="test")四、可视化检测系统(图片/视频检测 + 统计界面)
cabbage_gui.py
功能:
- 支持图片/视频/摄像头实时检测
- 显示各类别数量统计
- 一键保存检测结果
- 适配农田场景的界面设计
importsysimportcv2importnumpyasnpfromPyQt5.QtWidgetsimport*fromPyQt5.QtCoreimport*fromPyQt5.QtGuiimport*fromultralyticsimportYOLOclassCabbageDetectWindow(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle("农田大白菜检测系统")self.setFixedSize(1200,750)self.model=YOLO("best.pt")self.init_ui()self.cap=Noneself.timer=QTimer()self.timer.timeout.connect(self.update_frame)definit_ui(self):central_widget=QWidget()self.setCentralWidget(central_widget)main_layout=QHBoxLayout(central_widget)# 图像显示区self.img_label=QLabel()self.img_label.setStyleSheet("background-color:#f0f0f0;")self.img_label.setAlignment(Qt.AlignCenter)main_layout.addWidget(self.img_label,stretch=3)# 控制面板control_widget=QWidget()control_layout=QVBoxLayout(control_widget)main_layout.addWidget(control_widget,stretch=1)# 功能按钮self.btn_open_img=QPushButton("选择图片")self.btn_open_video=QPushButton("选择视频")self.btn_open_camera=QPushButton("打开摄像头")self.btn_stop=QPushButton("停止")self.btn_save=QPushButton("保存结果")# 统计信息self.result_info=QLabel("检测结果:\n等待检测...")control_layout.addWidget(self.btn_open_img)control_layout.addWidget(self.btn_open_video)control_layout.addWidget(self.btn_open_camera)control_layout.addWidget(self.btn_stop)control_layout.addWidget(self.btn_save)control_layout.addWidget(self.result_info)# 信号连接self.btn_open_img.clicked.connect(self.open_image)self.btn_open_video.clicked.connect(self.open_video)self.btn_open_camera.clicked.connect(self.open_camera)self.btn_stop.clicked.connect(self.stop_all)self.btn_save.clicked.connect(self.save_result)self.result_img=Nonedefopen_image(self):path,_=QFileDialog.getOpenFileName(self,"选择图片","","图片文件 (*.png *.jpg *.jpeg)")ifpath:img=cv2.imread(path)self.detect_and_show(img)defopen_video(self):path,_=QFileDialog.getOpenFileName(self,"选择视频","","视频文件 (*.mp4 *.avi)")ifpath:self.cap=cv2.VideoCapture(path)self.timer.start(30)defopen_camera(self):self.cap=cv2.VideoCapture(0)self.timer.start(30)defupdate_frame(self):ret,frame=self.cap.read()ifnotret:self.timer.stop()returnself.detect_and_show(frame)defdetect_and_show(self,img):results=self.model(img,conf=0.25)show_img=results[0].plot()# 统计各类别数量count={"cabbage":0,"capitata":0,"damaged":0}forboxinresults[0].boxes:cls_id=int(box.cls)name=results[0].names[cls_id]count[name]+=1info="检测结果:\n"info+=f"大白菜(健康):{count['cabbage']}株\n"info+=f"结球状态:{count['capitata']}株\n"info+=f"受损叶片:{count['damaged']}株\n"self.result_info.setText(info)# 显示show_img=cv2.cvtColor(show_img,cv2.COLOR_BGR2RGB)h,w,ch=show_img.shape q_img=QImage(show_img.data,w,h,ch*w,QImage.Format_RGB888)self.img_label.setPixmap(QPixmap.fromImage(q_img).scaled(self.img_label.size(),Qt.KeepAspectRatio))self.result_img=show_imgdefstop_all(self):self.timer.stop()ifself.cap:self.cap.release()defsave_result(self):ifself.result_imgisnotNone:cv2.imwrite("cabbage_result.jpg",cv2.cvtColor(self.result_img,cv2.COLOR_RGB2BGR))QMessageBox.information(self,"提示","结果保存成功!")if__name__=="__main__":app=QApplication(sys.argv)window=CabbageDetectWindow()window.show()sys.exit(app.exec_())五、一键运行命令
- 安装依赖
pipinstallultralytics opencv-python pyqt5- 训练模型
python train_cabbage.py- 启动检测系统
python cabbage_gui.py