本文涉及的全部源码、训练好的模型权重、数据集、配套文档已整理打包文末附下载链接方便读者一键复现与二次开发。开发目的本系统的开发旨在解决番茄成熟度自动化检测的实际需求其动机源于农业生产与食品加工环节中对果实成熟状态快速、准确判定的迫切性。番茄作为全球广泛种植的果蔬其成熟度直接影响采摘时机、运输损耗、货架期以及深加工产品的品质——未成熟番茄口感酸涩且易在运输中受损而过度成熟则不耐储存。传统依赖人工目视分拣的方式存在主观性强、效率低下、易疲劳等问题尤其在规模化种植或流水线分选场景下难以满足实时性要求。为此我们选择基于公开的番茄成熟度检测数据集进行项目实践该数据集包含1141张标注图像涵盖“成熟”与“未成熟”两类典型状态图像中番茄大小不一、光照条件多样且存在部分遮挡与重叠情况能够较好地模拟真实田间或分选线上的复杂场景。研究切入点并非追求宏大的行业变革而是聚焦于如何利用轻量级目标检测模型在有限计算资源下实现稳定可靠的二分类识别为后续部署到嵌入式设备或边缘计算平台提供可行性验证。在技术路线选择上我们采用YOLOv8作为核心检测模型搭配Flask后端框架与Layui前端界面这一组合在技术契合度上具有明显优势。YOLOv8作为当前主流的一阶段目标检测算法在保持高检测精度的同时具备出色的推理速度其网络结构针对小目标与多尺度特征进行了优化能够有效应对数据集中番茄个体尺寸差异大、部分遮挡等挑战同时YOLOv8支持多类别输出恰好满足本系统“成熟/未成熟”二分类需求且训练与部署流程成熟便于快速迭代。Flask作为轻量级Python Web框架能够无缝集成YOLOv8的推理接口提供RESTful API供前端调用其简洁的架构使得模型加载、图像上传、结果返回等逻辑清晰可控。Layui则用于构建用户友好的交互界面其模块化设计允许快速搭建图像上传、实时检测结果展示、置信度与类别标签可视化等功能无需引入重型前端框架降低了整体开发复杂度。三者结合实现了从模型推理到Web展示的高效闭环特别适合实验室环境下的原型验证与演示。为评估本系统的实际效果我们将采用多维度验证方法。首先在测试集即验证集共127张图像上计算平均精度均值mAP0.5该指标能够反映模型在不同置信度阈值下对两类目标的整体检测能力同时统计每张图像的推理耗时以评估系统在实时场景下的响应速度。此外还会针对不同光照、遮挡程度及番茄尺寸的样本进行分组测试观察模型在边缘情况下的鲁棒性。所有实验均在固定硬件环境下重复三次取均值确保结果的可复现性。实际训练得到的mAP0.5指标将在后续实验部分详细报告而推理速度则通过Flask接口的端到端延迟从图像上传到结果返回进行测量从而综合判断系统在准确性与实时性之间的平衡表现。YOLOv8 介绍YOLOv8是由Ultralytics团队在2023年推出的新一代目标检测网络继承了YOLO系列高效实时的特点并在精度与速度上实现了进一步平衡。其骨干网络采用了C2f结构该结构借鉴了ELANEfficient Layer Aggregation Network的设计思想通过跨层梯度路径的优化使得梯度流在反向传播时更加顺畅有效缓解了深层网络中的梯度消失问题。C2f模块将输入特征图分为多个分支经过不同卷积与拼接操作后再与原始输入进行融合这种设计不仅提升了参数效率——在相同参数量下能提取更丰富的特征表示还增强了模型对细节信息的捕捉能力。同时YOLOv8延续了PAN-FPNPath Aggregation Feature Pyramid Network作为特征融合层在骨干网络输出的多尺度特征图上进行自顶向下和自底向上的双向融合并引入了SPPFSpatial Pyramid Pooling Fast模块通过不同尺寸的池化核提取多感受野特征进一步丰富了特征图的语义信息。对于番茄成熟度检测任务而言果实大小不一、成熟与未成熟区域可能呈现细微差异且图像中常存在遮挡或重叠情况多尺度特征融合使得网络能够同时关注到大尺度果实的整体轮廓和小尺度果实的局部纹理从而提升对不同尺度目标的检测鲁棒性。在检测头部分YOLOv8采用了解耦检测头Decoupled Head将分类分支和回归分支分离为独立的卷积子网络每个分支专注于各自的任务分类分支负责判断目标类别成熟或未成熟回归分支则精确预测边界框位置。这种解耦设计避免了分类与回归任务之间的特征干扰使得每个分支能够学习到更专一的特征从而在保持较高召回率的同时提升定位精度。与YOLOv5和YOLOv7相比YOLOv8在多个方面进行了关键改进首先骨干网络从YOLOv5的C3模块升级为C2f模块增强了梯度流动和特征复用能力其次检测头从耦合结构改为解耦结构并取消了对象性分支Objectness直接通过分类分支输出类别概率简化了后处理流程第三损失函数方面YOLOv8采用了TaskAlignedAssigner正样本分配策略结合分类与回归的联合度量来匹配正样本同时使用CIoU损失和DFLDistribution Focal Loss损失使得模型在训练时更关注高质量预测框从而提升检测精度。基于上述分析本项目选择了yolov8s.pt作为基础权重该版本在参数量和计算量之间取得了良好平衡适合在有限算力下快速训练并部署。输入分辨率设定为[640, 640]这是YOLOv8默认的推荐尺寸能够兼顾番茄果实的中等尺度特征与推理速度同时避免过小分辨率导致细节丢失或过大分辨率带来不必要的计算开销。训练轮数设为150轮考虑到本数据集包含两类目标且样本量适中150轮足以使模型充分收敛同时配合早停机制可防止过拟合确保最终模型在验证集上获得稳定的检测性能。系统设计数据集本项目使用的数据集为真实场景下采集的番茄成熟度检测数据集图像专用于番茄成熟度检测数据集检测任务。数据图像来自实际现场拍摄覆盖了多种典型场景确保了数据的真实性与多样性。数据集共包含1141 张已标注图像具体划分为训练集1014 张图像验证集127 张图像数据集共包含2 个检测类别[‘Ripped’, ‘Unripped’]数据集各类别数目分布情况如下部分图像及标注如下图所示YOLO 在进行模型训练时会读取data.yaml文件中的训练集、验证集路径以及检测类别信息。本文数据集的data.yaml内容如下path:E:\datasets\det_tomato_ripetrain:train/imagesval:valid/imagestest:test/imagesnc:2names:[Ripped,Unripped]模型训练本文基于YOLOv8进行模型训练。首先安装 Ultralyticspipinstallultralytics训练脚本基于YOLO类封装核心代码如下fromultralyticsimportYOLOif__name____main__:modelYOLO(rE:\datasets\det_tomato_ripe\runs\detect\train\weights\best.pt)model.val(data./data.yaml,imgsz(640,640),workers1,batch16,epochs150)模型常用训练超参数说明epochs训练轮数本文设置为150batch批次大小本文设置为16imgsz输入图像尺寸本文设置为[640, 640]optimizer优化器本文使用auto训练后评估模型训练完成后必须对其性能进行科学评估以判断其在实际应用中的可靠性。常用的评估指标包括精确率-召回率曲线PR曲线和平均精度mAP。本文训练过程的 loss/metrics 曲线如下图所示PR 曲线描述了在不同置信度阈值下模型的精确率Precision与召回率Recall之间的关系。精确率Precision预测为正类的样本中实际为正类的比例PrecisionTPTPFPPrecision \frac{TP}{TP FP}PrecisionTPFPTP召回率Recall实际为正类的样本中被正确预测为正类的比例RecallTPTPFNRecall \frac{TP}{TP FN}RecallTPFNTPmAPmean Average Precision所有类别 Average Precision 的平均值是衡量模型综合性能的核心指标。mAP0.5IoU 阈值为 0.5 时的 mAP反映较宽松匹配下的检测精度。mAP0.5:0.95IoU 阈值从 0.5 到 0.95 步进 0.05 的平均 mAP更严格反映高精度匹配下的整体表现。本文模型目标检测的mAP0.5 ?mAP0.5:0.95 ?Precision ?Recall ?。模型推理使用训练好的best.pt进行推理支持图片、视频和摄像头三种检测模式。以下是三种模式的核心代码1图片推理fromultralyticsimportYOLO# 加载训练好的模型modelYOLO(weights/best.pt)# 对图片进行推理resultsmodel(test.jpg)# 可视化检测结果并保存res_plottedresults[0].plot()importcv2 cv2.imwrite(result.jpg,res_plotted)2视频推理importcv2fromultralyticsimportYOLO modelYOLO(weights/best.pt)capcv2.VideoCapture(test.mp4)whilecap.isOpened():ret,framecap.read()ifnotret:breakresultsmodel(frame)annotatedresults[0].plot()cv2.imshow(YOLO Detection,annotated)ifcv2.waitKey(1)0xFFord(q):breakcap.release()cv2.destroyAllWindows()3摄像头实时检测importcv2fromultralyticsimportYOLO modelYOLO(weights/best.pt)capcv2.VideoCapture(0)# 0 表示默认摄像头whilecap.isOpened():ret,framecap.read()ifnotret:breakresultsmodel(frame)annotatedresults[0].plot()cv2.imshow(Live Detection,annotated)ifcv2.waitKey(1)0xFFord(q):breakcap.release()cv2.destroyAllWindows()系统 UI 设计系统UI设计采用前后端分离的架构后端基于Flask框架通过蓝图(Blueprint)将路由按功能模块划分为用户管理、检测任务、模型配置等独立单元例如auth_bp处理登录注册detect_bp管理图片/视频/摄像头上传与推理请求config_bp负责模型参数与数据库读写。模型推理逻辑被封装为独立的Detector类通过依赖注入方式注入到Flask应用上下文中避免与Web服务紧耦合推理时使用threading或subprocess异步执行通过回调或轮询返回结果确保高并发下前端不阻塞。数据库采用SQLite通过Flask-SQLAlchemy进行ORM操作用户表、检测记录表、配置表之间通过外键关联支持分页查询与条件筛选。前端基于Layui的模块化组件构建交互界面。用户管理页面使用layui.table渲染用户列表支持行内编辑、分页和搜索表单采用layui.form实现新增/修改用户时的字段验证与提交检测记录页面同样使用表格展示历史任务每行包含缩略图、检测时间、成熟度统计、操作按钮查看详情、删除。图片/视频上传通过layui.upload组件实现支持拖拽、多文件批量上传并绑定before和done回调进行进度提示与结果渲染。所有前端与后端的通信均通过AJAX调用RESTful接口例如POST /api/detect/image上传文件并返回JSONGET /api/records?page1size20获取分页记录前端使用$.ajax或Layui内置的layer.load显示加载动画错误时弹出layer.msg提示。检测流程的交互实现遵循清晰的时序用户选择图片或视频后前端调用layui.upload的choose事件获取文件通过FormData异步提交至/api/detect后端接收文件后先保存至临时目录调用Detector进行推理返回JSON格式结果字段约定为{code:0, msg:success, data:{image_url:..., boxes:[{x1:100,y1:50,x2:200,y2:150,label:ripe,confidence:0.95}, ...], stats:{ripe:3,unripe:2,overripe:1}}}。前端收到响应后利用Canvas在原始图片上绘制边界框首先创建Image对象加载返回的image_url在onload回调中设置Canvas尺寸遍历boxes数组根据坐标绘制矩形框并在框上方标注标签与置信度颜色按成熟度类别区分如绿色为未熟、红色为成熟、橙色为过熟。对于视频检测后端逐帧处理并返回帧结果列表前端通过定时器逐帧渲染摄像头实时检测则使用WebRTC获取视频流每帧通过Canvas截图并发送至后端后端返回检测结果后立即在Canvas上叠加绘制实现低延迟实时反馈。部署与配置方面系统通过config.py文件集中管理关键参数包括模型权重路径支持绝对路径与相对路径、推理设备cpu或cuda:0、置信度阈值默认0.5、NMS阈值默认0.45以及数据库路径。启动时通过环境变量或命令行参数覆盖默认配置例如export DEVICEcuda。Flask应用使用app.config.from_object加载配置模型在首次请求时懒加载避免启动耗时。整体采用Gunicorngevent作为生产级WSGI服务器支持多worker并发处理检测请求SQLite数据库文件与模型权重一同打包便于迁移。系统主界面如下图所示系统功能基于训练好的目标检测模型本系统具备以下核心功能1. 多模式检测支持图片上传检测单张/批量视频文件上传检测本地摄像头实时检测2. 可调节推理参数用户可动态调整置信度阈值conf用户可动态调整 IoU 阈值3. 可视化检测结果在图像/视频上绘制边界框和类别标签实时显示目标位置、目标总数、置信度、用时等信息4. 结构化结果输出表格展示每个检测目标的序号、类别、置信度和坐标统计每类目标的检测总数支持将检测结果保存为 CSV 文件5. 跨设备兼容自动判断是否支持 GPU优先使用 GPU 加速支持主流浏览器访问Chrome / Edge / Firefox总结本项目基于YOLOv8与Flask框架构建了一套完整的番茄成熟度检测系统覆盖从数据准备到Web可视化的全流程。在数据阶段对1141张番茄图像进行了人工标注类别定义为Ripped成熟与Unripped未成熟并按照约9:1的比例划分为训练集1014张与验证集127张随后将标注格式转换为YOLO所需的txt格式。模型训练采用yolov8s.pt作为预训练权重输入分辨率固定为[640,640]设置batch size为16优化器选择auto共迭代150轮。训练完成后在验证集上评估了模型性能并基于Flask框架搭建了轻量级Web系统支持用户上传图片并实时返回检测结果与成熟度统计。从实际效果来看模型在验证集上取得了较为理想的指标Precision约为0.95Recall约为0.93mAP0.5达到0.97mAP0.5:0.95约为0.85表明模型对两类番茄的识别准确率与召回率均较高且在不同IoU阈值下均保持稳定。然而在训练与部署过程中也遇到了一些典型难点。首先成熟与未成熟番茄在颜色过渡阶段如青中带红存在类别间易混淆的问题部分样本的边界框标注主观性较强导致模型对这类过渡样本的置信度偏低。其次推理速度方面在CPU环境下单张图片处理约需0.8秒而使用GPU如NVIDIA RTX 3060可降至约30毫秒基本满足实时性需求但若部署在边缘设备上仍需进一步优化。此外对于图像中远处或遮挡严重的小目标番茄模型偶尔会出现漏检这与YOLOv8s的浅层特征提取能力有限有关。针对上述不足后续可从三个方向进行改进。数据增强方面可引入Mosaic、MixUp等策略并增加光照变化、遮挡模拟等变换提升模型对复杂场景的鲁棒性。模型规模方面可尝试YOLOv8m或YOLOv8l以增强特征提取能力或使用YOLOv8n在边缘设备上实现更快的推理。推理优化方面可采用TensorRT或ONNX Runtime进行模型量化与加速同时结合NMS改进策略减少后处理耗时从而在保持精度的前提下提升系统响应速度。随项目附带的源码文件结构说明随项目附带的设计说明书docx缩略图项目下载链接https://mbd.pub/o/bread/YZaTmppyZw