当前位置: 首页 > news >正文

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

智慧农业-LUN文ppt配套)深度学习水果蔬菜识别系统

【YOLOV11模型+高精度识别+即装即用+登录页面】

本项目采用前沿YOLOV11算法,pyqt5前端页面,支持图片/视频/摄像头多模式实时检测,已配置完整环境,免调试

**功能亮点:

  • 图片识别:秒级检测多种类果蔬
  • 视频解析:批量处理果蔬分类
  • 实时检测:摄像头动态捕捉识别
  • 界面友好:可视化操作零门槛
  • 检测速度:RTX3060可达120FPS
  • 完整Python源码(.py)
  • 训练好的YOLOV11模型(.pt)
  • 专属UI界面文件(.ui/.qrc)
  • 1000+标注数据集(含测试图片/视频)
  • 详细环境配置文档
    运行环境:
  • Python=3.9 | OpenCV | PyQt5
  • 提供Anaconda+Pycharm配置指南
    支持Windows系统,独立显卡效果更佳**

这是一份基于您提供的图片和描述整理的关键词表格,以及构建该水果蔬菜识别系统的详细代码。

🍎 水果蔬菜识别系统关键词表

关键词类别关键词
核心算法YOLOv11、深度学习、目标检测、计算机视觉、高精度识别
应用场景水果蔬菜分类、生鲜品质检测(新鲜/腐烂/未成熟)、智慧农业、自动化分拣
开发技术Python、PyQt5、Ultralytics、OpenCV、Anaconda、CUDA加速
检测类别黄瓜、葫芦、生菜、土豆、苹果、香蕉、葡萄、芒果、橙子(涵盖新鲜、成熟、腐烂、未熟等状态)
系统功能登录页面、图片/视频/摄像头多模态检测、实时FPS显示、置信度调节、可视化统计图表

💻 系统构建详细代码

基于PyQt5Ultralytics 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_PATH='best.pt'# 替换为你的YOLOv11模型路径CONFIDENCE_THRESHOLD=0.25IOU_THRESHOLD=0.45# ============================================classLoginWindow(QMainWindow):"""登录界面"""def__init__(self):super().__init__()self.setWindowTitle("系统登录")self.setGeometry(600,300,300,150)central_widget=QWidget()self.setCentralWidget(central_widget)layout=QVBoxLayout(central_widget)self.username_input=QLineEdit()self.username_input.setPlaceholderText("用户名 (任意)")self.password_input=QLineEdit()self.password_input.setPlaceholderText("密码 (任意)")self.password_input.setEchoMode(QLineEdit.Password)login_btn=QPushButton("登录")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_window=MainWindow()self.main_window.show()self.close()else:QMessageBox.warning(self,"错误","请输入用户名和密码")classVideoThread(QThread):"""视频处理线程"""change_pixmap_signal=pyqtSignal(np.ndarray)update_status_signal=pyqtSignal(str,int,float)def__init__(self):super().__init__()self._run_flag=Trueself.model=YOLO(MODEL_PATH)self.conf_threshold=CONFIDENCE_THRESHOLD self.iou_threshold=IOU_THRESHOLD self.source=0# 默认摄像头defrun(self):cap=cv2.VideoCapture(self.source)whileself._run_flag:ret,cv_img=cap.read()ifret:# 目标检测start_time=time.time()results=self.model(cv_img,conf=self.conf_threshold,iou=self.iou_threshold)end_time=time.time()# 绘制结果annotated_frame=results[0].plot()# 统计信息boxes=results[0].boxes num_targets=len(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_targets>0else0)else:breakcap.release()defstop(self):self._run_flag=Falseself.wait()classMainWindow(QMainWindow):"""主检测界面"""def__init__(self):super().__init__()self.setWindowTitle("基于YOLOv11的水果图像识别系统")self.setGeometry(100,100,1200,800)# 初始化变量self.thread=None# UI初始化self.init_ui()definit_ui(self):# 主布局central_widget=QWidget()self.setCentralWidget(central_widget)main_layout=QHBoxLayout(central_widget)# 左侧:图像显示区left_layout=QVBoxLayout()self.image_label=QLabel()self.image_label.setFixedSize(800,600)self.image_label.setStyleSheet("background-color: #000000;")left_layout.addWidget(self.image_label)# 底部表格self.table=QTableWidget()self.table.setColumnCount(5)self.table.setHorizontalHeaderLabels(["序号","文件路径","类别","置信度","坐标位置"])left_layout.addWidget(self.table)# 右侧:控制面板right_layout=QVBoxLayout()# 参数设置param_group=QGroupBox("检测参数设置")param_layout=QFormLayout()self.conf_spin=QDoubleSpinBox()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_group=QGroupBox("检测结果")result_layout=QFormLayout()self.time_label=QLabel("0 ms")self.count_label=QLabel("0")self.conf_result_label=QLabel("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_img=QPushButton("打开图片")btn_open_img.clicked.connect(self.load_image)btn_open_cam=QPushButton("打开摄像头")btn_open_cam.clicked.connect(self.start_camera)btn_stop=QPushButton("停止")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_threshold=valueifself.thread:self.thread.conf_threshold=valuedefload_image(self):file_name,_=QFileDialog.getOpenFileName(self,"选择图片","","Image Files (*.png *.jpg *.bmp)")iffile_name:img=cv2.imread(file_name)results=self.thread.model(img,conf=self.conf_threshold)annotated_frame=results[0].plot()self.display_image(annotated_frame)self.update_table(results[0],file_name)defstart_camera(self):ifself.threadisNone:self.thread=VideoThread()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.thread=Noneself.image_label.clear()defdisplay_image(self,img):img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)h,w,ch=img.shape bytes_per_line=ch*w convert_to_Qt_format=QImage(img.data,w,h,bytes_per_line,QImage.Format_RGB888)p=convert_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_id=int(box.cls[0])conf=box.conf[0].item()xyxy=box.xyxy[0].tolist()self.table.setItem(i,0,QTableWidgetItem(str(i+1)))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__":app=QApplication(sys.argv)# 如果有登录界面,先显示登录,否则直接显示主窗口# login = LoginWindow()# login.show()window=MainWindow()window.show()sys.exit(app.exec_())
代码功能说明
  1. 登录界面 (LoginWindow):
    • 模拟了简单的登录流程,实际项目中可替换为数据库验证。
  2. 主界面 (MainWindow):
    • 左侧: 显示实时检测画面或处理后的图片,下方是详细的结果表格(包含类别、置信度、坐标)。
    • 右侧:
      • 参数设置: 动态调整置信度阈值。
      • 检测结果: 显示推理耗时、目标数量、平均置信度。
      • 操作: 支持打开本地图片、开启摄像头实时检测、停止检测。
  3. 多线程处理 (VideoThread):
    • 使用QThread进行视频捕获和模型推理,防止界面卡顿。
    • 集成 YOLOv11 模型进行实时预测。
运行效果

运行代码后,您将看到一个包含登录页(如果启用)和主检测界面的窗口。

  • 打开图片: 选择本地水果图片,系统会在表格中列出所有检测到的水果及其状态(如腐烂橙子),并在图片上画出边界框。
  • 打开摄像头: 调用电脑摄像头,实时框选视野内的水果蔬菜,右上角显示FPS和检测数量。

以上代码完整实现了基于PyQt5的YOLOv11水果识别系统核心功能。

http://www.jsqmd.com/news/586557/

相关文章:

  • 如何3步禁用Mac Turbo Boost功能:开源工具让你电脑降温20℃
  • 深入MMCM:动态相位偏移(Dynamic Phase Shift)在高速SerDes接口时序校准中的应用与仿真
  • 金蝶云星空与泛微OA数据同步避坑指南:物料、客户、供应商基础资料集成详解
  • Obsidian插件i18n:终极指南,让英文插件说中文的完整解决方案
  • 实战指南:基于快马AI生成物联网终端Keil项目,从传感器到云一气呵成
  • CTGAN完整指南:如何用条件GAN快速生成高质量表格数据
  • 3分钟彻底告别Windows文件夹图片加载等待烦恼!
  • leetcode 1593. 拆分字符串使唯一子字符串的数目最大
  • OpenClaw跨平台同步:Qwen3.5-9B实现多设备任务状态共享
  • 广东高精度NTC热敏电阻的五大应用场景解析
  • Retrieval-based-Voice-Conversion-WebUI完全掌握:从入门到精通的实践指南
  • OpenClaw调用Qwen3.5-9B-VL:多模态文件整理自动化方案
  • AirPodsDesktop:Windows平台苹果耳机功能增强解决方案
  • OpCore-Simplify:15分钟完成黑苹果配置的智能革命
  • ESP8266与STM32F103通信实战:从硬件连接到软件调试的完整解析
  • 变频器寿命短?可能是铝电解电容惹的祸!薄膜电容替换全攻略
  • 2026年帆布制品生产企业推荐,哈尔滨嘉和棚靠厂性价比高吗 - 工业品牌热点
  • OpenFBX:3大突破重新定义轻量级FBX解析引擎
  • intv_ai_mk11开源AI助手教程:7B轻量模型在GPU服务器上的高性价比部署
  • Linux用户专属:P3X OneNote Linux完整指南 - 在Linux上高效使用微软OneNote的终极解决方案
  • 深度解析:关联规则与Apriori算法(原理+流程+案例+代码全攻略)
  • 如何通过Sunshine实现跨设备游戏串流:从技术原理到实战应用
  • leetcode 1594. 矩阵的最大非负积-耗时100-Maximum Non Negative Product in a Matrix
  • 避坑指南:OpenClaw安装Qwen3-4B镜像的5大常见错误
  • 企业级Leantime容器化部署完整指南:从架构设计到生产环境最佳实践
  • UE5.7.4 LyraStarterGame
  • 猫抓浏览器扩展:5个常见问题诊断与优化技巧全解析
  • 收藏备用|AI大模型技术架构全解析(小白+程序员入门必看)
  • 深度解析:K-means聚类算法(原理+流程+图解+代码+优化全攻略)
  • 革新性资源嗅探全链路解决方案:猫抓Cat-Catch技术解析与实战指南