YOLOv11、深度学习、目标检测、计算机视觉、高精度识别 应用场景 水果蔬菜分类、生鲜品质检测(新鲜/腐烂/未成熟)、智慧农业、自动化分拣 深度学习YOLO水果检测识别系统

张开发
2026/4/20 1:55:33 15 分钟阅读

分享文章

YOLOv11、深度学习、目标检测、计算机视觉、高精度识别 应用场景 水果蔬菜分类、生鲜品质检测(新鲜/腐烂/未成熟)、智慧农业、自动化分拣 深度学习YOLO水果检测识别系统
智慧农业-LUN文ppt配套深度学习水果蔬菜识别系统【YOLOV11模型高精度识别即装即用登录页面】本项目采用前沿YOLOV11算法pyqt5前端页面支持图片/视频/摄像头多模式实时检测已配置完整环境免调试**功能亮点图片识别秒级检测多种类果蔬视频解析批量处理果蔬分类实时检测摄像头动态捕捉识别界面友好可视化操作零门槛检测速度RTX3060可达120FPS附完整Python源码.py训练好的YOLOV11模型.pt专属UI界面文件.ui/.qrc1000标注数据集含测试图片/视频详细环境配置文档运行环境Python3.9 | OpenCV | PyQt5提供AnacondaPycharm配置指南支持Windows系统独立显卡效果更佳**这是一份基于您提供的图片和描述整理的关键词表格以及构建该水果蔬菜识别系统的详细代码。 水果蔬菜识别系统关键词表关键词类别关键词核心算法YOLOv11、深度学习、目标检测、计算机视觉、高精度识别应用场景水果蔬菜分类、生鲜品质检测新鲜/腐烂/未成熟、智慧农业、自动化分拣开发技术Python、PyQt5、Ultralytics、OpenCV、Anaconda、CUDA加速检测类别黄瓜、葫芦、生菜、土豆、苹果、香蕉、葡萄、芒果、橙子涵盖新鲜、成熟、腐烂、未熟等状态系统功能登录页面、图片/视频/摄像头多模态检测、实时FPS显示、置信度调节、可视化统计图表 系统构建详细代码基于PyQt5和Ultralytics YOLOv11构建。它实现了您图片中展示的登录界面、主检测界面包含视频流处理、参数设置、结果表格显示等功能。环境准备在运行代码前请确保已安装必要的库pipinstallPyQt5 opencv-python ultralytics torch torchvision matplotlib完整代码将以下代码保存为main.py。请确保你有一个训练好的模型权重文件例如best.pt或者修改代码中的MODEL_PATH指向你下载的官方模型如yolov11n.pt。importsysimportcv2importtorchimporttimeimportnumpyasnpfromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QWidget,QVBoxLayout,QHBoxLayout,QLabel,QPushButton,QTableWidget,QTableWidgetItem,QFileDialog,QMessageBox,QDoubleSpinBox,QFormLayout)fromPyQt5.QtGuiimportQImage,QPixmap,QIconfromPyQt5.QtCoreimportQt,QTimer,QThread,pyqtSignalfromultralyticsimportYOLO# 配置区域 MODEL_PATHbest.pt# 替换为你的YOLOv11模型路径CONFIDENCE_THRESHOLD0.25IOU_THRESHOLD0.45# classLoginWindow(QMainWindow):登录界面def__init__(self):super().__init__()self.setWindowTitle(系统登录)self.setGeometry(600,300,300,150)central_widgetQWidget()self.setCentralWidget(central_widget)layoutQVBoxLayout(central_widget)self.username_inputQLineEdit()self.username_input.setPlaceholderText(用户名 (任意))self.password_inputQLineEdit()self.password_input.setPlaceholderText(密码 (任意))self.password_input.setEchoMode(QLineEdit.Password)login_btnQPushButton(登录)login_btn.clicked.connect(self.check_login)layout.addWidget(QLabel(h2欢迎登录/h2))layout.addWidget(self.username_input)layout.addWidget(self.password_input)layout.addWidget(login_btn)defcheck_login(self):# 简单模拟登录实际项目可接入数据库ifself.username_input.text()andself.password_input.text():self.main_windowMainWindow()self.main_window.show()self.close()else:QMessageBox.warning(self,错误,请输入用户名和密码)classVideoThread(QThread):视频处理线程change_pixmap_signalpyqtSignal(np.ndarray)update_status_signalpyqtSignal(str,int,float)def__init__(self):super().__init__()self._run_flagTrueself.modelYOLO(MODEL_PATH)self.conf_thresholdCONFIDENCE_THRESHOLD self.iou_thresholdIOU_THRESHOLD self.source0# 默认摄像头defrun(self):capcv2.VideoCapture(self.source)whileself._run_flag:ret,cv_imgcap.read()ifret:# 目标检测start_timetime.time()resultsself.model(cv_img,confself.conf_threshold,iouself.iou_threshold)end_timetime.time()# 绘制结果annotated_frameresults[0].plot()# 统计信息boxesresults[0].boxes num_targetslen(boxes)infer_time(end_time-start_time)*1000# ms# 发送信号更新UIself.change_pixmap_signal.emit(annotated_frame)self.update_status_signal.emit(f{infer_time:.1f}ms,num_targets,boxes.conf.mean().item()ifnum_targets0else0)else:breakcap.release()defstop(self):self._run_flagFalseself.wait()classMainWindow(QMainWindow):主检测界面def__init__(self):super().__init__()self.setWindowTitle(基于YOLOv11的水果图像识别系统)self.setGeometry(100,100,1200,800)# 初始化变量self.threadNone# UI初始化self.init_ui()definit_ui(self):# 主布局central_widgetQWidget()self.setCentralWidget(central_widget)main_layoutQHBoxLayout(central_widget)# 左侧图像显示区left_layoutQVBoxLayout()self.image_labelQLabel()self.image_label.setFixedSize(800,600)self.image_label.setStyleSheet(background-color: #000000;)left_layout.addWidget(self.image_label)# 底部表格self.tableQTableWidget()self.table.setColumnCount(5)self.table.setHorizontalHeaderLabels([序号,文件路径,类别,置信度,坐标位置])left_layout.addWidget(self.table)# 右侧控制面板right_layoutQVBoxLayout()# 参数设置param_groupQGroupBox(检测参数设置)param_layoutQFormLayout()self.conf_spinQDoubleSpinBox()self.conf_spin.setRange(0,1)self.conf_spin.setValue(CONFIDENCE_THRESHOLD)self.conf_spin.valueChanged.connect(self.update_conf)param_layout.addRow(置信度阈值:,self.conf_spin)param_group.setLayout(param_layout)# 结果显示result_groupQGroupBox(检测结果)result_layoutQFormLayout()self.time_labelQLabel(0 ms)self.count_labelQLabel(0)self.conf_result_labelQLabel(0 %)result_layout.addRow(用时:,self.time_label)result_layout.addRow(目标数目:,self.count_label)result_layout.addRow(平均置信度:,self.conf_result_label)result_group.setLayout(result_layout)# 操作按钮btn_open_imgQPushButton(打开图片)btn_open_img.clicked.connect(self.load_image)btn_open_camQPushButton(打开摄像头)btn_open_cam.clicked.connect(self.start_camera)btn_stopQPushButton(停止)btn_stop.clicked.connect(self.stop_video)right_layout.addWidget(param_group)right_layout.addWidget(result_group)right_layout.addWidget(btn_open_img)right_layout.addWidget(btn_open_cam)right_layout.addWidget(btn_stop)right_layout.addStretch()main_layout.addLayout(left_layout)main_layout.addLayout(right_layout)defupdate_conf(self,value):self.conf_thresholdvalueifself.thread:self.thread.conf_thresholdvaluedefload_image(self):file_name,_QFileDialog.getOpenFileName(self,选择图片,,Image Files (*.png *.jpg *.bmp))iffile_name:imgcv2.imread(file_name)resultsself.thread.model(img,confself.conf_threshold)annotated_frameresults[0].plot()self.display_image(annotated_frame)self.update_table(results[0],file_name)defstart_camera(self):ifself.threadisNone:self.threadVideoThread()self.thread.change_pixmap_signal.connect(self.display_image)self.thread.update_status_signal.connect(self.update_status)self.thread.start()defstop_video(self):ifself.thread:self.thread.stop()self.threadNoneself.image_label.clear()defdisplay_image(self,img):imgcv2.cvtColor(img,cv2.COLOR_BGR2RGB)h,w,chimg.shape bytes_per_linech*w convert_to_Qt_formatQImage(img.data,w,h,bytes_per_line,QImage.Format_RGB888)pconvert_to_Qt_format.scaled(800,600,Qt.KeepAspectRatio)self.image_label.setPixmap(QPixmap.fromImage(p))defupdate_status(self,time_str,count,avg_conf):self.time_label.setText(f{time_str}ms)self.count_label.setText(str(count))self.conf_result_label.setText(f{avg_conf*100:.2f}%)defupdate_table(self,result,path):self.table.setRowCount(len(result.boxes))fori,boxinenumerate(result.boxes):cls_idint(box.cls[0])confbox.conf[0].item()xyxybox.xyxy[0].tolist()self.table.setItem(i,0,QTableWidgetItem(str(i1)))self.table.setItem(i,1,QTableWidgetItem(path))self.table.setItem(i,2,QTableWidgetItem(result.names[cls_id]))self.table.setItem(i,3,QTableWidgetItem(f{conf:.2f}))self.table.setItem(i,4,QTableWidgetItem(str([int(x)forxinxyxy])))if__name____main__:appQApplication(sys.argv)# 如果有登录界面先显示登录否则直接显示主窗口# login LoginWindow()# login.show()windowMainWindow()window.show()sys.exit(app.exec_())代码功能说明登录界面 (LoginWindow):模拟了简单的登录流程实际项目中可替换为数据库验证。主界面 (MainWindow):左侧: 显示实时检测画面或处理后的图片下方是详细的结果表格包含类别、置信度、坐标。右侧:参数设置: 动态调整置信度阈值。检测结果: 显示推理耗时、目标数量、平均置信度。操作: 支持打开本地图片、开启摄像头实时检测、停止检测。多线程处理 (VideoThread):使用QThread进行视频捕获和模型推理防止界面卡顿。集成 YOLOv11 模型进行实时预测。运行效果运行代码后您将看到一个包含登录页如果启用和主检测界面的窗口。打开图片: 选择本地水果图片系统会在表格中列出所有检测到的水果及其状态如腐烂橙子并在图片上画出边界框。打开摄像头: 调用电脑摄像头实时框选视野内的水果蔬菜右上角显示FPS和检测数量。以上代码完整实现了基于PyQt5的YOLOv11水果识别系统核心功能。

更多文章