水果蔬菜识别 YOLOV8+Pycharm+Anaconda 深度学习中如何构建并实现_基于深度学习的yolov8水果蔬菜识别系统+pyqt5 UI 实现对水果蔬菜进行识别
如何实现——————YOLOV8PycharmAnaconda 深度学习中如何构建并实现_基于深度学习的yolov8水果蔬菜识别系统pyqt5 UI 实现对水果蔬菜进行识别基于深度学习的水果蔬菜识别系统你要是也可以——训练好模型配置好环境可直接使用项目介绍模型YOLOV8软件PycharmAnaconda环境python3.9 opencv_python PyQt5文件1.完整程序文件.py等2.UI界面源文件、图标.ui、.qrc、.py等3.测试图片、视频文件.jpeg、.mp4、.avi等功能 系统实现了对于多种水果蔬菜的识别检测功能包括通过选择图片、视频、摄像头进行实时识别检测速度快、识别精度较高。①选择图片识别水果蔬菜。②选择视频识别水果蔬菜。③摄像头检测识别水果蔬菜。创建一个基于深度学习的水果蔬菜识别系统使用YOLOv8作为检测模型并结合PyQt5构建图形用户界面GUI可以分为以下几个步骤1. 环境搭建首先确保你的开发环境中安装了必要的库。你可以使用Anaconda来管理环境和依赖。创建并激活conda环境conda create-nfruit_vegetable_recognitionpython3.9conda activate fruit_vegetable_recognition安装依赖包condainstallopencv pyqt pipinstallultralytics# YOLOv8库pipinstallPyQt5 pipinstallqdarkstyle# 可选用于美化PyQt5应用程序的样式表2. 准备YOLOv8模型下载或训练好YOLOv8模型这里假设你已经有了预训练好的模型文件yolov8n.pt或其他版本。如果需要训练自己的模型请参考YOLOv8官方文档。3. 编写代码主程序文件main.pyimportsysfromPyQt5.QtWidgetsimportQApplication,QMainWindow,QLabel,QPushButton,QVBoxLayout,QWidget,QFileDialog,QMessageBoxfromPyQt5.QtGuiimportQPixmap,QImagefromPyQt5.QtCoreimportQt,QTimerimportcv2importnumpyasnpfromultralyticsimportYOLOclassFruitVegetableRecognition(QMainWindow):def__init__(self):super().__init__()self.initUI()self.modelYOLO(yolov8n.pt)# 加载YOLOv8模型self.capNoneself.timerQTimer(self)self.timer.timeout.connect(self.update_frame)definitUI(self):self.setWindowTitle(水果蔬菜识别系统)self.setGeometry(100,100,800,600)self.image_labelQLabel(self)self.image_label.setAlignment(Qt.AlignCenter)button_layoutQVBoxLayout()self.button_load_imageQPushButton(选择图片,self)self.button_load_videoQPushButton(选择视频,self)self.button_start_cameraQPushButton(摄像头检测,self)self.button_stop_cameraQPushButton(停止检测,self)self.button_load_image.clicked.connect(self.load_image)self.button_load_video.clicked.connect(self.load_video)self.button_start_camera.clicked.connect(self.start_camera)self.button_stop_camera.clicked.connect(self.stop_camera)button_layout.addWidget(self.button_load_image)button_layout.addWidget(self.button_load_video)button_layout.addWidget(self.button_start_camera)button_layout.addWidget(self.button_stop_camera)main_layoutQVBoxLayout()main_layout.addWidget(self.image_label)main_layout.addLayout(button_layout)containerQWidget()container.setLayout(main_layout)self.setCentralWidget(container)defload_image(self):file_name,_QFileDialog.getOpenFileName(self,选择图片,,Image Files (*.png *.jpg *.jpeg))iffile_name:imagecv2.imread(file_name)resultsself.model(image)annotated_imageself.annotate_results(image,results)self.display_image(annotated_image)defload_video(self):file_name,_QFileDialog.getOpenFileName(self,选择视频,,Video Files (*.mp4 *.avi))iffile_name:self.capcv2.VideoCapture(file_name)self.timer.start(30)# 每30ms刷新一次帧defstart_camera(self):self.capcv2.VideoCapture(0)self.timer.start(30)defstop_camera(self):ifself.capisnotNone:self.cap.release()self.capNoneself.timer.stop()self.image_label.clear()defupdate_frame(self):ret,frameself.cap.read()ifret:resultsself.model(frame)annotated_frameself.annotate_results(frame,results)self.display_image(annotated_frame)else:self.stop_camera()defannotate_results(self,image,results):forresultinresults[0].boxes.data.tolist():x1,y1,x2,y2,score,class_idresult labelf{self.model.names[int(class_id)]}{score:.2f}cv2.rectangle(image,(int(x1),int(y1)),(int(x2),int(y2)),(0,255,0),2)cv2.putText(image,label,(int(x1),int(y1)-10),cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,255,0),2)returnimagedefdisplay_image(self,image):rgb_imagecv2.cvtColor(image,cv2.COLOR_BGR2RGB)h,w,chrgb_image.shape bytes_per_linech*w convert_to_Qt_formatQImage(rgb_image.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))if__name____main__:appQApplication(sys.argv)exFruitVegetableRecognition()ex.show()sys.exit(app.exec_())UI界面源文件ui_main_window.ui要实现这个界面使用Python的PyQt5库来构建GUI并结合YOLOv8模型进行水果蔬菜识别。#### 安装依赖包 bash conda install opencv pyqt pip install ultralytics # YOLOv8库 pip install PyQt5. 准备YOLOv8模型下载或训练好YOLOv8模型这里假设你已经有了预训练好的模型文件yolov8n.pt或其他版本。. 编写代码主程序文件main.pyimportsysfromPyQt5.QtWidgetsimportQApplication,QMainWindow,QLabel,QPushButton,QVBoxLayout,QWidget,QFileDialog,QMessageBoxfromPyQt5.QtGuiimportQPixmap,QImagefromPyQt5.QtCoreimportQt,QTimerimportcv2importnumpyasnpfromultralyticsimportYOLOclassFruitVegetableRecognition(QMainWindow):def__init__(self):super().__init__()self.initUI()self.modelYOLO(yolov8n.pt)# 加载YOLOv8模型self.capNoneself.timerQTimer(self)self.timer.timeout.connect(self.update_frame)definitUI(self):self.setWindowTitle(基于深度学习的水果蔬菜识别系统)self.setGeometry(100,100,1200,800)# 左侧图像显示区域self.image_labelQLabel(self)self.image_label.setAlignment(Qt.AlignCenter)self.image_label.setGeometry(20,100,600,600)# 右侧文件导入区域file_layoutQVBoxLayout()self.file_labelQLabel(文件导入,self)self.file_path_labelQLabel(,self)self.load_image_buttonQPushButton(选择图片,self)self.load_video_buttonQPushButton(选择视频,self)self.camera_buttonQPushButton(摄像头检测,self)self.stop_camera_buttonQPushButton(停止检测,self)self.load_image_button.clicked.connect(self.load_image)self.load_video_button.clicked.connect(self.load_video)self.camera_button.clicked.connect(self.start_camera)self.stop_camera_button.clicked.connect(self.stop_camera)file_layout.addWidget(self.file_label)file_layout.addWidget(self.file_path_label)file_layout.addWidget(self.load_image_button)file_layout.addWidget(self.load_video_button)file_layout.addWidget(self.camera_button)file_layout.addWidget(self.stop_camera_button)# 右侧检测结果区域result_layoutQVBoxLayout()self.result_labelQLabel(检测结果,self)self.time_labelQLabel(,self)self.target_count_labelQLabel(,self)self.target_type_labelQLabel(,self)self.confidence_labelQLabel(,self)self.position_labelQLabel(,self)result_layout.addWidget(self.result_label)result_layout.addWidget(self.time_label)result_layout.addWidget(self.target_count_label)result_layout.addWidget(self.target_type_label)result_layout.addWidget(self.confidence_label)result_layout.addWidget(self.position_label)# 操作按钮button_layoutQVBoxLayout()self.save_buttonQPushButton(保存,self)self.exit_buttonQPushButton(退出,self)button_layout.addWidget(self.save_button)button_layout.addWidget(self.exit_button)# 总布局main_layoutQVBoxLayout()main_layout.addWidget(self.image_label)main_layout.addLayout(file_layout)main_layout.addLayout(result_layout)main_layout.addLayout(button_layout)containerQWidget()container.setLayout(main_layout)self.setCentralWidget(container)defload_image(self):file_name,_QFileDialog.getOpenFileName(self,选择图片,,Image Files (*.png *.jpg *.jpeg))iffile_name:imagecv2.imread(file_name)resultsself.model(image)annotated_imageself.annotate_results(image,results)self.display_image(annotated_image)self.update_result_labels(results)defload_video(self):file_name,_QFileDialog.getOpenFileName(self,选择视频,,Video Files (*.mp4 *.avi))iffile_name:self.capcv2.VideoCapture(file_name)self.timer.start(30)# 每30ms刷新一次帧defstart_camera(self):self.capcv2.VideoCapture(0)self.timer.start(30)defstop_camera(self):ifself.capisnotNone:self.cap.release()self.capNoneself.timer.stop()self.image_label.clear()defupdate_frame(self):ret,frameself.cap.read()ifret:resultsself.model(frame)annotated_frameself.annotate_results(frame,results)self.display_image(annotated_frame)self.update_result_labels(results)else:self.stop_camera()defannotate_results(self,image,results):forresultinresults[0].boxes.data.tolist():x1,y1,x2,y2,score,class_idresult labelf{self.model.names[int(class_id)]}{score:.2f}cv2.rectangle(image,(int(x1),int(y1)),(int(x2),int(y2)),(0,255,0),2)cv2.putText(image,label,(int(x1),int(y1)-10),cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,255,0),2)returnimagedefdisplay_image(self,image):rgb_imagecv2.cvtColor(image,cv2.COLOR_BGR2RGB)h,w,chrgb_image.shape bytes_per_linech*w convert_to_Qt_formatQImage(rgb_image.data,w,h,bytes_per_line,QImage.Format_RGB888)pconvert_to_Qt_format.scaled(600,600,Qt.KeepAspectRatio)self.image_label.setPixmap(QPixmap.fromImage(p))defupdate_result_labels(self,results):time_label_textf用时{results.info[time]:.3f}starget_count_label_textf目标数目{len(results[0].boxes)}target_type_label_textf类型{self.model.names[int(results[0].boxes.cls[0])]}confidence_label_textf置信度{results[0].boxes.conf[0]:.2f}%position_label_textf位置 xmin:{int(results[0].boxes.xyxy[0][0])}, ymin:{int(results[0].boxes.xyxy[0][1])}, xmax:{int(results[0].boxes.xyxy[0][2])}, ymax:{int(results[0].boxes.xyxy[0][3])}self.time_label.setText(time_label_text)self.target_count_label.setText(target_count_label_text)self.target_type_label.setText(target_type_label_text)self.confidence_label.setText(confidence_label_text)self.position_label.setText(position_label_text)if__name____main__:appQApplication(sys.argv)exFruitVegetableRecognition()ex.show()sys.exit(app.exec_())4. 运行项目确保所有文件都在同一个项目目录下然后在命令行中执行以下命令启动应用程序python main.py测试图片、视频文件将测试用的图片和视频放置在一个特定的目录中比如test_data/并在运行时选择这些文件进行测试。4. 运行项目确保所有文件都在同一个项目目录下然后在命令行中执行以下命令启动应用程序python main.py

相关新闻

ONES AI解决方案:从问答辅助到主动协作的研发效率提升实践

ONES AI解决方案:从问答辅助到主动协作的研发效率提升实践

那天下午,团队里一位开发同学突然在群里发问:“这个需求里提到的‘用户行为分析模块’,到底该归到哪个迭代?上周的会议记录找不到了,产品文档里也没写清楚。”紧接着就是一连串的和追问,半小时后&#xff0…

2026/7/12 9:20:31 阅读更多 →
npm 10.x 版本升级与依赖管理:从 package.json 到 lockfile 的 3 个关键实践

npm 10.x 版本升级与依赖管理:从 package.json 到 lockfile 的 3 个关键实践

npm 10.x 版本升级与依赖管理:从 package.json 到 lockfile 的 3 个关键实践 随着前端工程的复杂度不断提升,依赖管理已成为现代 JavaScript 开发中的核心挑战。npm 作为 Node.js 生态中最主流的包管理工具,其 10.x 版本引入了一系列针对依赖…

2026/7/12 9:18:31 阅读更多 →
最小生成树算法避坑:3类常见错误与并查集/优先队列优化实践

最小生成树算法避坑:3类常见错误与并查集/优先队列优化实践

最小生成树算法避坑指南:3类典型错误与优化策略实战1. 最小生成树算法核心思想与常见陷阱最小生成树(Minimum Spanning Tree,MST)是图论中的经典问题,旨在找到一个连通无向图中连接所有顶点的边权值和最小的子图。Krus…

2026/7/12 9:18:31 阅读更多 →

最新新闻

空洞骑士模组管理器Scarab:新手快速上手指南

空洞骑士模组管理器Scarab:新手快速上手指南

空洞骑士模组管理器Scarab:新手快速上手指南 【免费下载链接】Scarab An installer for Hollow Knight mods written with Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab Scarab是一款专为《空洞骑士》设计的开源模组管理器,它彻…

2026/7/12 10:18:41 阅读更多 →
TB67H480FNG+STM32L041C6电机控制方案解析与优化

TB67H480FNG+STM32L041C6电机控制方案解析与优化

1. 为什么选择TB67H480FNGSTM32L041C6组合?在电机控制领域,硬件选型往往决定了项目天花板。TB67H480FNG是东芝新一代双极步进电机驱动芯片,而STM32L041C6则是ST超低功耗MCU系列中的性价比之王。这套组合拳的独特优势在于:能效比革…

2026/7/12 10:18:41 阅读更多 →
遗传算法工程化实战:参数设计、算子选型与早熟干预

遗传算法工程化实战:参数设计、算子选型与早熟干预

1. 项目概述:为什么“遗传算法第二讲”比第一讲更值得细读“遗传算法”这个词,刚听时容易让人联想到生物课上染色体配对、孟德尔豌豆实验,甚至误以为是生物信息学专属工具。但实际在工业界——从物流路径优化到芯片布线,从金融风控…

2026/7/12 10:18:40 阅读更多 →
如何用一款开源抽奖工具解决活动现场三大痛点

如何用一款开源抽奖工具解决活动现场三大痛点

如何用一款开源抽奖工具解决活动现场三大痛点 【免费下载链接】Magpie-LuckyDraw 🏅A fancy lucky-draw tool supporting multiple platforms💻(Mac/Linux/Windows/Web/Docker) 项目地址: https://gitcode.com/gh_mirrors/ma/Magpie-LuckyDraw Ma…

2026/7/12 10:16:40 阅读更多 →
5步快速上手小红书下载神器:新手完整使用指南

5步快速上手小红书下载神器:新手完整使用指南

5步快速上手小红书下载神器:新手完整使用指南 【免费下载链接】XHS-Downloader 小红书(XiaoHongShu、RedNote)链接提取/作品采集工具:提取账号发布、收藏、点赞、专辑作品链接;提取搜索结果作品、用户链接;…

2026/7/12 10:16:40 阅读更多 →
过敏调理赛道消费需求攀升 牛初乳改善常年复发性鼻炎功效成关注焦点

过敏调理赛道消费需求攀升 牛初乳改善常年复发性鼻炎功效成关注焦点

近日,针对国内超两亿过敏性鼻炎人群长期调理的迫切诉求,合规牛初乳产品对常年反复发作鼻炎的实际改善作用,成为大健康行业与消费端共同聚焦的热点方向。 根据《中国过敏性鼻炎诊疗指南》公开数据,我国过敏性鼻炎患病率已达17.6%&…

2026/7/12 10:14:40 阅读更多 →

日新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/12 0:03:13 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/12 0:03:14 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/12 0:03:14 阅读更多 →

周新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/12 0:03:13 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/12 0:03:14 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/12 0:03:14 阅读更多 →

月新闻