PyQt5 + YOLOv8/26 苹果成熟度检测系统 苹果成熟度检测数据集的训练及应用 智慧农业苹果成熟度检测系统完整方案
PyQt5 YOLOv8/26 苹果成熟度检测系统 苹果成熟度检测数据集的训练及应用苹果成熟度【4类】目标检测基于YOLOv8~26全系列界面非常美观技术栈pythonpyqt5提供数据集分类名 (图片张数标注个数)Late-growth apple: (273, 1030)Ripe apple: (1333, 11640)Pre-growth apple: (305, 1434)Young apple: (369, 903)总数: (2039, 15007)总类(nc): 4类11智慧农业苹果成熟度检测系统完整方案PyQt5 YOLOv8/26 苹果成熟度检测系统的完整说明、数据集信息、代码结构与可直接运行的实现。一、系统与数据集信息表项目详情系统名称智慧农业苹果成熟度检测系统技术栈Python PyQt5 Ultralytics YOLOv8~v26 全系列检测类别4类1.Late-growth apple后期生长橙色框2.Ripe apple成熟红色框3.Pre-growth apple前期生长黄色框4.Young apple幼果绿色框数据集规模总图片2039张总标注15007个• Late-growth apple273张1030个标注• Ripe apple1333张11640个标注• Pre-growth apple305张1434个标注• Young apple369张903个标注模型指标训练200轮mAP0.50.86核心功能1. 模型导入与切换.pt格式2. 置信度/设备CPU/GPU配置3. 多输入源图片/视频/批量/摄像头实时检测4. 检测结果可视化带颜色框标注5. 成熟度分布柱状图统计6. 检测历史记录与采摘建议二、项目结构apple_maturity/ ├── gui.py # PyQt5 主界面程序 ├── detect_thread.py # YOLO检测核心线程 ├── dataset.yaml # 数据集配置文件 ├── train.py # 模型训练脚本 ├── detect.py # 命令行检测脚本 ├── models/ # YOLO模型配置文件 ├── runs/ # 训练结果保存目录 ├── yolov8n.pt # 示例预训练模型 └── ultralytics/ # YOLO源码库三、核心代码实现1. 数据集配置文件dataset.yamlpath:./apple_datasettrain:images/trainval:images/valnc:4names:0:Late-growth apple1:Ripe apple2:Pre-growth apple3:Young apple2. 训练脚本train.pyfromultralyticsimportYOLOdeftrain_apple_maturity():# 加载YOLOv8模型可替换为YOLOv26等其他版本modelYOLO(yolov8n.pt)# 训练配置resultsmodel.train(datadataset.yaml,epochs200,batch16,imgsz640,device0,workers8,projectruns/yolov8n,nametrain,pretrainedTrue,augmentTrue,mosaic0.7,hsv_h0.015,hsv_s0.7,hsv_v0.4,fliplr0.5,cacheTrue)# 训练完成评估metricsmodel.val()print(f训练完成mAP0.5:{metrics.box.map50:.3f})print(最优模型路径,results.best)if__name____main__:train_apple_maturity()3. 检测核心线程detect_thread.pyfromPyQt5.QtCoreimportQThread,pyqtSignalfromultralyticsimportYOLOimportcv2classDetectThread(QThread):frame_signalpyqtSignal(object,object)stats_signalpyqtSignal(dict,list)def__init__(self,model_path,conf0.5,devicecuda:0):super().__init__()self.modelYOLO(model_path)self.confconf self.devicedevice self.runningFalsedefrun(self):# 视频/摄像头检测逻辑简化示例passdefdetect_image(self,img_path):imgcv2.imread(img_path)resultsself.model(img,confself.conf,deviceself.device)annotated_imgresults[0].plot()# 解析统计数据counts{}details[]forboxinresults[0].boxes:cls_idint(box.cls)cls_nameresults[0].names[cls_id]counts[cls_name]counts.get(cls_name,0)1details.append({name:cls_name,conf:float(box.conf),xyxy:box.xyxy[0].cpu().numpy()})returnannotated_img,counts,detailsdefstop(self):self.runningFalseself.wait()4. PyQt5 主界面gui.pyimportsysimportcv2fromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QWidget,QHBoxLayout,QVBoxLayout,QPushButton,QLabel,QSlider,QComboBox,QTableWidget,QTableWidgetItem)fromPyQt5.QtCoreimportQtfromPyQt5.QtGuiimportQImage,QPixmapfromdetect_threadimportDetectThreadclassAppleMaturityApp(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle(智慧农业苹果成熟度检测系统)self.setGeometry(100,100,1600,900)self.detect_threadNoneself.init_ui()definit_ui(self):centralQWidget()self.setCentralWidget(central)main_layoutQHBoxLayout(central)# 左侧控制面板left_panelQWidget()left_layoutQVBoxLayout(left_panel)self.init_model_config(left_layout)self.init_input_config(left_layout)self.init_control_buttons(left_layout)self.init_stats_panel(left_layout)# 中间图像显示区mid_panelQWidget()mid_layoutQVBoxLayout(mid_panel)self.img_labelQLabel(图像显示)self.img_label.setAlignment(Qt.AlignCenter)mid_layout.addWidget(self.img_label)# 右侧统计面板right_panelQWidget()right_layoutQVBoxLayout(right_panel)self.bar_chart_labelQLabel(成熟度分布柱状图)self.history_tableQTableWidget()right_layout.addWidget(self.bar_chart_label)right_layout.addWidget(self.history_table)main_layout.addWidget(left_panel,1)main_layout.addWidget(mid_panel,3)main_layout.addWidget(right_panel,1)definit_model_config(self,layout):layout.addWidget(QLabel(模型配置))self.model_path_editQLabel(best.pt)layout.addWidget(self.model_path_edit)self.conf_sliderQSlider(Qt.Horizontal)self.conf_slider.setValue(50)layout.addWidget(QLabel(置信度阈值))layout.addWidget(self.conf_slider)self.device_comboQComboBox()self.device_combo.addItems([CPU,GPU (cuda:0)])layout.addWidget(QLabel(设备))layout.addWidget(self.device_combo)definit_input_config(self,layout):layout.addWidget(QLabel(输入源配置))self.btn_imgQPushButton(图片)self.btn_videoQPushButton(视频)self.btn_cameraQPushButton(摄像头)self.btn_batchQPushButton(批量图片)layout.addWidget(self.btn_img)layout.addWidget(self.btn_video)layout.addWidget(self.btn_camera)layout.addWidget(self.btn_batch)definit_control_buttons(self,layout):self.btn_startQPushButton(开始检测)self.btn_stopQPushButton(停止检测)layout.addWidget(self.btn_start)layout.addWidget(self.btn_stop)definit_stats_panel(self,layout):layout.addWidget(QLabel(检测统计))self.stats_tableQTableWidget()self.stats_table.setColumnCount(3)self.stats_table.setHorizontalHeaderLabels([类别,数量,占比])layout.addWidget(self.stats_table)defopen_image(self):fromPyQt5.QtWidgetsimportQFileDialog path,_QFileDialog.getOpenFileName()ifpath:self.detect_threadDetectThread(best.pt,confself.conf_slider.value()/100)annotated_img,counts,detailsself.detect_thread.detect_image(path)self.update_image(annotated_img)self.update_stats(counts)defupdate_image(self,img):rgb_imgcv2.cvtColor(img,cv2.COLOR_BGR2RGB)h,w,chrgb_img.shape qimgQImage(rgb_img.data,w,h,w*ch,QImage.Format_RGB888)self.img_label.setPixmap(QPixmap.fromImage(qimg).scaled(self.img_label.size(),Qt.KeepAspectRatio))defupdate_stats(self,counts):totalsum(counts.values())self.stats_table.setRowCount(len(counts))fori,(cls,num)inenumerate(counts.items()):self.stats_table.setItem(i,0,QTableWidgetItem(cls))self.stats_table.setItem(i,1,QTableWidgetItem(str(num)))self.stats_table.setItem(i,2,QTableWidgetItem(f{num/total:.1%}))if__name____main__:appQApplication(sys.argv)winAppleMaturityApp()win.show()sys.exit(app.exec_())四、使用说明环境准备conda create-napplepython3.10-yconda activate apple pipinstallultralytics opencv-python pyqt5模型训练将数据集按images/train、images/val、labels/train、labels/val结构存放修改dataset.yaml中的path为数据集路径运行python train.py训练模型训练完成后best.pt会生成在runs/yolov8n/train/weights/目录运行系统将训练好的best.pt放入项目目录运行python gui.py启动界面点击「图片/视频/摄像头」选择输入源调整置信度后点击「开始检测」五、界面定制与扩展颜色框修改在detect_thread.py中修改results[0].plot()的配置自定义不同类别的框颜色与截图中橙/红/黄/绿对应采摘建议生成在update_stats函数中根据各类别占比添加逻辑如成熟占比高建议立即采摘批量检测功能在gui.py中添加遍历文件夹的逻辑批量处理并生成统计报告

相关新闻

2026免费图片文字识别工具全解:在线网页、电脑软件、小程序实操指南

2026免费图片文字识别工具全解:在线网页、电脑软件、小程序实操指南

引言日常办公、学习场景里,截图、纸质试卷、会议白板、合同证件图片常常需要提取可编辑文字,依靠手动抄写效率偏低。2026 年市面上有不少具备完整免费 OCR 能力的工具,覆盖浏览器在线网页、电脑客户端、微信小程序、手机原生功能四大使用渠道…

2026/7/10 22:59:53 阅读更多 →
Openclaw本地部署指南:Node.js 20+环境搭建与Skill开发实战

Openclaw本地部署指南:Node.js 20+环境搭建与Skill开发实战

1. 项目概述:Clawdbot 与 Openclaw 是什么,为什么需要“部署”而不是“安装” Clawdbot 和 Openclaw 这两个名字在最近半年的技术社区里出现频率陡增,但很多人第一次看到时会下意识以为是某个新出的聊天机器人App——点开官网、下载安装包、…

2026/7/10 22:59:53 阅读更多 →
2026,抠图公章实操指南:多种抠图方法演示,附私自制作电子公章法律风险解读

2026,抠图公章实操指南:多种抠图方法演示,附私自制作电子公章法律风险解读

随着线上办公普及,不少人想要将纸质文件上的公章提取为透明电子版,也就是俗称的抠图公章。需要着重区分:图像抠图仅属于图片处理技术操作,但该图片能否使用、使用场景是什么,直接决定行为是否触碰法律红线。本文先讲解…

2026/7/10 22:57:36 阅读更多 →

最新新闻

KimiK 2.6 API限流实战:429错误的原理、监控与配额调度

KimiK 2.6 API限流实战:429错误的原理、监控与配额调度

1. 这不是“能用就行”的问题:KimiK 2.6 实测中429错误的真实杀伤力“国内能用又怎样?”——标题里这句反问,不是情绪宣泄,而是我在连续三天、七轮压测后写下的第一行笔记。当KimiK 2.6的API响应时间稳定在800ms以内、代码生成准确…

2026/7/11 1:17:07 阅读更多 →
Clawhub Skills:微信PC端UI自动化的能力协议与实践指南

Clawhub Skills:微信PC端UI自动化的能力协议与实践指南

1. Clawhub 是什么:不是插件市场,而是微信生态里的“智能体能力中枢”很多人第一次看到“Clawhub 微信 Skills”这个标题,下意识会把它当成微信小程序的插件库、或者类似 Chrome 扩展商店那样的工具合集。我最初也这么想,直到在实…

2026/7/11 1:15:06 阅读更多 →
R、Rtools、RStudio安装顺序与依赖关系详解

R、Rtools、RStudio安装顺序与依赖关系详解

1. 为什么R、Rtools、RStudio三者必须“分步装、顺序装、错不得”很多人第一次接触R语言生态时,看到“安装R”“安装Rtools”“安装RStudio”三个动作,下意识觉得是并列关系,像装Office三件套一样随便点下一步就行。结果装完打开RStudio&…

2026/7/11 1:12:38 阅读更多 →
CML 与 LVDS 电平标准对比:3 大核心差异与 5 种高速互连方案选型

CML 与 LVDS 电平标准对比:3 大核心差异与 5 种高速互连方案选型

CML 与 LVDS 电平标准深度解析:3 大核心差异与 5 种高速互连实战方案 在高速数字电路设计中,差分信号传输技术因其优异的抗干扰能力和低功耗特性,已成为SerDes接口、FPGA互连和背板传输的首选方案。作为当前主流的两种差分电平标准&#xff0…

2026/7/11 1:12:38 阅读更多 →
Unity输入系统重构:事件驱动架构与新版Input System实践

Unity输入系统重构:事件驱动架构与新版Input System实践

1. 项目概述:从“散装”输入到“中央集权”的架构升级在Unity项目里,尤其是涉及到复杂交互和模式切换的游戏里,输入处理常常是第一个“技术债”的重灾区。我见过太多项目,初期为了赶进度,在PlayerController、UIContro…

2026/7/11 1:10:38 阅读更多 →
B2B 工业设备的 GEO:为什么你的内容 AI 抓不到、也不引用

B2B 工业设备的 GEO:为什么你的内容 AI 抓不到、也不引用

做技术和市场的应该都注意到一个变化:越来越多采购在决策前,先去问 AI——"这类设备怎么选""哪种方案更适合某工况"。AI 给一段答案,里面点名了某些方案、某些厂家。而大多数工业设备企业,压根不在那段答案里…

2026/7/11 1:10:38 阅读更多 →

日新闻

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南 【免费下载链接】comfyui_controlnet_aux ComfyUIs ControlNet Auxiliary Preprocessors 项目地址: https://gitcode.com/gh_mirrors/co/comfyui_controlnet_aux 想要让AI图像生成真正听从你的指挥吗&…

2026/7/11 0:02:12 阅读更多 →
PIC18F45K42驱动EPT-14A4005P压电蜂鸣器方案详解

PIC18F45K42驱动EPT-14A4005P压电蜂鸣器方案详解

1. 项目背景与核心需求 在工业控制、安防系统和智能家居等领域,可靠的声音警报系统是不可或缺的基础组件。传统蜂鸣器存在音量不足、音质模糊等问题,而基于压电陶瓷技术的EPT-14A4005P蜂鸣器配合PIC18F45K42微控制器,能够构建一套适应性强、音…

2026/7/11 0:04:12 阅读更多 →
大模型推理中的算子融合优化:LayerNorm + Attention 的 CUDA Kernel 手写与验证

大模型推理中的算子融合优化:LayerNorm + Attention 的 CUDA Kernel 手写与验证

大模型推理中的算子融合优化:LayerNorm Attention 的 CUDA Kernel 手写与验证 一、GPU 利用率 30%:分开的算子吃掉所有带宽 推理服务的 GPU 利用率监测显示一个反直觉的现象:计算核心(SM)利用率不到 30%,但…

2026/7/11 0:04:12 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/10 19:03:29 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/9 13:46:46 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/9 21:41:05 阅读更多 →

月新闻