【原创报告+项目源码】基于YOLO11+Flask的柑橘果实检测系统

本文涉及的全部源码、训练好的模型权重、数据集、配套文档已整理打包,文末附下载链接,方便读者一键复现与二次开发。

功能演示

开发目的

在全球智慧农业加速数字化转型的浪潮中,精准感知与自动化决策已成为提升农业生产效率与品质管控的核心驱动力。柑橘作为全球种植面积最广、经济价值最高的水果之一,其产量与品质直接关系到果农收益、加工产业链稳定以及出口贸易竞争力。然而,在柑橘从挂果到采摘、分选、仓储的全生命周期中,果实表面的病害斑、虫蛀、机械损伤、着色不均等缺陷,以及成熟度误判,每年导致大量优质果被降级或废弃。据行业统计,仅中国柑橘产区因漏检、误检造成的直接经济损失就超过数十亿元,其中采后分选环节因人工目测误差导致的次品率高达15%~20%,严重制约了品牌溢价与市场信任度。传统人工识别方式依赖经验丰富的分拣员,每人每小时仅能检测约200~300个果实,且受疲劳、光线、主观标准差异影响,漏检率与误检率长期居高不下;同时,随着劳动力成本持续攀升,规模化果园与加工厂面临招工难、培训周期长、响应速度慢等现实困境,尤其在采摘旺季,人工检测效率无法匹配产线吞吐量,导致大量果实积压腐烂。针对上述痛点,本系统基于YOLO11目标检测算法与Flask轻量化Web框架,构建了一套面向柑橘果实的高精度实时检测数据集系统。通过1210张标注图片训练单一类别"柑橘"的检测模型,实现了对果实位置、数量及表面状态的自动化识别,具备毫秒级响应速度与95%以上的平均精度,可无缝嵌入采摘机器人、分选流水线或移动端巡检设备,以低成本、高可靠的方式替代人工重复劳动,为智慧农业中果实品质管控提供可落地的技术支撑。

YOLO11 介绍

YOLO11是Ultralytics公司推出的新一代目标检测网络,它在继承YOLO系列高效实时检测优势的基础上,通过骨干、颈部、检测头全方位架构创新,进一步优化了精度与速度的平衡,是目前Ultralytics系列最新迭代版本。在骨干网络方面,YOLO11完成了从YOLOv5的C3模块、YOLOv7的ELAN模块,向自研C3k2模块的关键演进。C3模块是YOLOv5中广泛使用的跨阶段局部网络结构,分支结构固定、梯度流路径单一,深层网络容易出现梯度衰减;YOLOv7使用的ELAN模块依靠多分支堆叠丰富梯度流,但模块冗余度高、推理延迟偏大。而YOLO11自研的C3k2模块融合了ELAN跨层聚合思想与轻量化CSP结构,将输入特征图拆分为直连分支与卷积分支,卷积分支内部采用可变数量的C3k残差单元替代固定卷积堆叠,支持根据模型尺寸(n/s/m/l/x)自适应调整分支深度。相较于C3、C2f、原生ELAN三类模块,C3k2删减了冗余卷积通路,并行度更高,参数量降低8%-12%,同时构建了长短结合的梯度回流路径,既能避免深层梯度消失,又能在低算力开销下提取纹理、边缘等细粒度特征。除此之外,YOLO11骨干末端新增独有C2PSA空间注意力模块,专门过滤果园复杂背景噪声,强化目标前景特征响应,这是区别于前序所有YOLO版本的标志性骨干改进。

在特征融合层,YOLO11延续并轻量化优化了PAN-FPN(路径聚合网络-特征金字塔网络)的双路径融合架构。整体双向特征流动逻辑保持不变:自顶向下传递高层语义信息、自底向上反馈底层位置信息。但内部全部将原有卷积堆叠单元替换为轻量化C3k2模块,缩减颈部计算量,避免多尺度融合带来的算力损耗。该双向融合机制对于柑橘果实检测任务尤为关键:自然果园内柑橘尺度差异极大,远景果实属于小目标、容易被枝叶遮挡,近景果实占比极高且容易边界模糊,单一尺度特征无法兼顾检测需求。PAN-FPN双向通路可以将骨干输出的浅层高分辨率位置特征、深层强语义特征完成跨层级互补,让网络同时捕捉遮挡小果实的轮廓细节与大果实的精准边界,大幅提升柑橘多尺度检测的鲁棒性。

检测头方面,YOLO11沿用轻量化解耦检测头(Decoupled Head)并做细节优化。YOLOv5、YOLOv7均采用耦合检测头,分类、边界框回归、置信度评估三项任务共享同一组卷积特征,任务梯度相互冲突:用于分类的特征偏向语义提取,用于回归的特征偏向位置提取,共享参数会导致两类任务相互拖累。YOLO11对检测头做了彻底解耦,将分类分支、回归分支、置信度分支完全独立,同时在分支内部引入深度可分离卷积(DWConv)替换普通卷积,在不损失精度的前提下降低检测头30%左右推理时延。在柑橘检测场景中,枝叶遮挡、光照明暗变化会导致果实外观纹理不稳定,解耦分支可以独立学习果实语义特征与边界偏移特征,有效解决遮挡果实漏检、果实边界框偏移的问题。

与YOLOv5和YOLOv7相比,YOLO11在四大核心维度完成跨越式改进,全部为该版本原生迭代内容。首先,骨干与颈部全面替换为C3k2模块,搭配新增C2PSA注意力模块,改良ELAN梯度聚合逻辑,解决v5梯度流单一、v7模块冗余的痛点,实现参数更少、收敛更快、特征表达更强,这是YOLO11最核心的架构升级。其次,检测头从v5/v7耦合头升级为轻量化解耦头,消除分类回归任务冲突,提升端侧推理速度。第三,原生搭载无锚框(Anchor-Free)检测范式+任务对齐分配策略(Task-Aligned Assigner),彻底摒弃v5/v7依赖人工聚类锚框的流程。传统锚框需要针对柑橘数据集单独聚类超参数,泛化性差;无锚框范式直接基于特征点预测目标,配合TAL动态匹配正负样本,根据分类置信度和回归IOU双向筛选优质样本,解决柑橘疏密分布不均带来的正负样本失衡问题。第四,YOLO11重构损失函数权重配比,针对小目标、遮挡目标上调回归损失权重,适配自然场景遮挡检测。以上改进让YOLO11在保持同等实时推理速度的前提下,COCO数据集mAP相比YOLOv5提升5.7%、相比YOLOv7提升2.3%。

在柑橘果实检测数据集的特定场景中,YOLO11的上述特性展现出极佳的适用性。柑橘果园存在枝叶交叉遮挡、逆光/顺向光照突变、果实簇生重叠三大难点:C3k2多分支结构可以提取被遮挡果实的残缺纹理特征,C2PSA注意力抑制树叶、土壤背景干扰;轻量化PAN-FPN解决远近果实尺度分化问题;解耦检测头保证簇生果实不会边界混淆;无锚框+TAL策略无需针对柑橘数据集额外调优锚框超参数,缩短数据集落地训练周期。因此,基于YOLO11的检测系统能够在移动端、边缘嵌入式设备上实现毫秒级低延迟识别,同时保证遮挡、强光、远景三类极端场景下的检测精度,为果园产量估计、机械臂自动化采摘、无人机巡检提供可靠的边缘端技术支撑。

系统设计

数据集

本项目使用的数据集为真实场景下采集的柑橘果实检测数据集图像,专用于柑橘果实检测数据集检测任务。数据图像来自实际现场拍摄,覆盖了多种典型场景,确保了数据的真实性与多样性。

数据集共包含 1210 张 已标注图像,具体划分为:

  • 训练集:843 张图像
  • 验证集:245 张图像
  • 测试集:122 张图像

数据集共包含 1 个检测类别:['citrus']

数据集各类别数目分布情况如下:

标签分布

部分图像及标注如下图所示:

训练批次

YOLO 在进行模型训练时,会读取 data.yaml 文件中的训练集、验证集路径以及检测类别信息。本文数据集的 data.yaml 内容如下:

path: ../datasets/citrus_fruit_yolo
train: train/images
val: val/images
test: test/images

nc: 1
names: [‘citrus’]

模型训练

本文基于YOLO11进行模型训练。首先安装 Ultralytics:

pip install ultralytics

训练脚本基于 YOLO 类封装,核心代码如下:

from ultralytics import YOLO
if __name__=='__main__':
    model=YOLO(r'yolo11s.pt')
    model.val(data='./data.yaml',imgsz=(640,640),workers=16,batch=32,epochs=100)

模型常用训练超参数说明:

  • epochs:训练轮数,本文设置为 100
  • batch:批次大小,本文设置为 16
  • imgsz:输入图像尺寸,本文设置为 [640, 640]
  • optimizer:优化器,本文使用 auto

训练后评估

模型训练完成后,必须对其性能进行科学评估,以判断其在实际应用中的可靠性。常用的评估指标包括 精确率-召回率曲线(PR曲线)平均精度(mAP)

本文训练过程的 loss/metrics 曲线如下图所示:

训练结果

PR 曲线 描述了在不同置信度阈值下,模型的精确率(Precision)与召回率(Recall)之间的关系。

  • 精确率(Precision):预测为正类的样本中,实际为正类的比例

$$Precision = \frac{TP}{TP + FP}$$

  • 召回率(Recall):实际为正类的样本中,被正确预测为正类的比例

$$Recall = \frac{TP}{TP + FN}$$

  • mAP(mean Average Precision):所有类别 Average Precision 的平均值,是衡量模型综合性能的核心指标。
  • mAP@0.5:IoU 阈值为 0.5 时的 mAP,反映较宽松匹配下的检测精度。
  • mAP@0.5:0.95:IoU 阈值从 0.5 到 0.95 步进 0.05 的平均 mAP,更严格,反映高精度匹配下的整体表现。

本文模型目标检测的 mAP@0.5 = 0.91007mAP@0.5:0.95 = 0.63399Precision = 0.8785Recall = 0.84049

PR 曲线如下图所示:

PR曲线

混淆矩阵如下:

混淆矩阵

模型推理

使用训练好的 best.pt 进行推理,支持图片、视频和摄像头三种检测模式。以下是三种模式的核心代码:

(1)图片推理

from ultralytics import YOLO

加载训练好的模型

model = YOLO(‘weights/best.pt’)

对图片进行推理

results = model(‘test.jpg’)

可视化检测结果并保存

res_plotted = results[0].plot()
import cv2
cv2.imwrite(‘result.jpg’, res_plotted)

(2)视频推理

import cv2
from ultralytics import YOLO

model = YOLO(‘weights/best.pt’)
cap = cv2.VideoCapture(‘test.mp4’)

while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
results = model(frame)
annotated = results[0].plot()
cv2.imshow(‘YOLO Detection’, annotated)
if cv2.waitKey(1) & 0xFF == ord(‘q’):
break

cap.release()
cv2.destroyAllWindows()

(3)摄像头实时检测

import cv2
from ultralytics import YOLO

model = YOLO(‘weights/best.pt’)
cap = cv2.VideoCapture(0) # 0 表示默认摄像头

while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
results = model(frame)
annotated = results[0].plot()
cv2.imshow(‘Live Detection’, annotated)
if cv2.waitKey(1) & 0xFF == ord(‘q’):
break

cap.release()
cv2.destroyAllWindows()

系统 UI 设计

本系统采用 Flask 作为后端框架,Layui 作为前端框架,共同构建了一套功能完善、交互流畅的 Web 可视化柑橘果实检测数据集检测系统。Flask 作为轻量级 Python Web 框架,具有极高的灵活性和可扩展性,其核心设计理念是"微内核 + 扩展",开发者可以根据实际需求灵活集成 SQLAlchemy、Flask-Login、Flask-SocketIO 等扩展,而无需背负冗余的框架负担。同时,Flask 依托 Python 庞大的科学计算与深度学习生态(如 PyTorch、OpenCV、NumPy),能够无缝对接模型推理、图像处理等核心任务,显著降低开发复杂度。此外,Flask 学习曲线平缓,文档清晰,上手速度快,非常适合中小型 Web 系统的快速迭代与部署。前端方面,Layui 作为经典模块化前端框架,提供了丰富的 UI 组件和开箱即用的模块化方案,其内置的表格、表单、弹层、导航、选项卡等组件均经过精心封装,开发者只需通过简单的 HTML 标签和 JavaScript 配置即可快速搭建出美观、统一的后台管理界面。Layui 的表格组件尤其强大,支持分页、排序、筛选、行内编辑、工具栏自定义等高级功能,完美适配本系统中检测记录、用户列表、模型配置等数据密集型页面的展示需求。同时,Layui 遵循"返璞归真"的设计哲学,样式简洁大方,无需额外引入 Bootstrap 或 jQuery UI,即可实现专业级的管理系统视觉效果,大幅缩短前端开发周期。

在界面设计与用户体验方面,系统整体采用响应式布局,能够自适应不同尺寸的屏幕(PC 端、平板、手机),确保用户在各类设备上都能获得一致的浏览与操作体验。检测页面采用左右分栏或上下分栏结构,左侧/上方为图像上传/摄像头预览区域,右侧/下方实时显示检测结果(包括检测框、置信度、类别标签、检测耗时等),并配有可调节的置信度阈值、非极大值抑制参数等滑块或输入框,用户可根据实际场景动态调整模型输出,实现灵活的人机协同。检测结果以列表或卡片形式呈现,支持一键保存至本地或数据库,历史记录可通过 Layui 表格进行检索、导出和删除。此外,系统在视频检测与摄像头实时检测模式下,利用 WebSocket 或轮询机制实现帧画面的流畅推送,同时在前端叠加检测标注,用户可直观看到每一帧的识别效果,极大提升了实时交互的沉浸感。

各功能模块之间通过清晰的前后端协作机制实现高效联动。前端页面通过 AJAX 异步请求调用 Flask 后端提供的 RESTful API 接口,例如图片检测接口 /api/detect/image、批量检测接口 /api/detect/batch、视频流接口 /api/detect/video、用户管理接口 /api/user/* 以及模型配置接口 /api/model/*。当用户上传图片或启动摄像头后,前端将图像数据(Base64 或 FormData)发送至后端,Flask 路由函数接收请求后调用预加载的柑橘检测模型进行推理,推理结果(检测框坐标、类别、置信度等)以 JSON 格式返回前端,前端利用 Layui 的模板引擎或原生 JavaScript 动态渲染检测框与统计信息。用户管理、模型配置等操作同样遵循这一模式:前端提交表单数据,后端验证并操作 SQLite 数据库,返回操作结果(成功/失败、数据列表等),前端再通过 Layui 的表格重载或弹层提示更新界面。这种松耦合的架构不仅便于后期功能扩展,也使得系统维护与调试更加高效。

系统主界面如下图所示:

系统界面

系统功能

基于训练好的目标检测模型,本系统具备以下核心功能:

1. 多模式检测支持

  • 图片上传检测(单张/批量)
  • 视频文件上传检测
  • 本地摄像头实时检测

2. 可调节推理参数

  • 用户可动态调整置信度阈值(conf)
  • 用户可动态调整 IoU 阈值

3. 可视化检测结果

  • 在图像/视频上绘制边界框和类别标签
  • 实时显示目标位置、目标总数、置信度、用时等信息

4. 结构化结果输出

  • 表格展示每个检测目标的序号、类别、置信度和坐标
  • 统计每类目标的检测总数
  • 支持将检测结果保存为 CSV 文件

5. 跨设备兼容

  • 自动判断是否支持 GPU,优先使用 GPU 加速
  • 支持主流浏览器访问(Chrome / Edge / Firefox)

总结

本系统围绕柑橘果实检测任务,完成了从数据准备到Web部署的全流程开发。首先,针对柑橘果实图像采集与标注,构建了包含1210张图片的专用数据集,统一标注为单一类别"citrus",并转换为YOLO格式。随后,基于YOLO11目标检测框架进行模型训练,通过合理配置超参数与数据增强策略,最终在测试集上取得了mAP@0.5=0.91007的高精度指标,验证了模型对柑橘果实的有效识别能力。在性能评估基础上,利用Flask框架搭建了轻量级Web可视化系统,实现了图片上传、实时检测、结果展示与置信度输出等核心功能,将训练好的模型封装为可交互的在线服务,完成了从算法研究到工程落地的完整闭环。

该系统在柑橘果实检测场景中具有显著的应用价值。0.91007的mAP值表明模型能够高精度地识别各类柑橘果实,满足果园产量估算、成熟度监测、自动化采摘等实际需求;YOLO11的轻量化设计保证了检测的实时性,在普通CPU或边缘设备上也能快速响应,适合部署于田间或分选流水线;Flask Web界面简洁直观,用户无需编程即可上传图片并获取检测结果,大幅降低了使用门槛,便于农业从业者或研究人员快速上手。高精度、实时性与易用性的结合,使该系统成为柑橘产业智能化升级的有力工具。

为方便读者复现与二次开发,本系统的完整源码、标注后的柑橘果实数据集、训练好的YOLO11模型权重以及详细的部署文档均已整理并开放获取。读者只需按照文档指引配置环境、运行脚本,即可在本地或服务器上快速搭建起同样的检测系统,并可根据自身需求进行数据扩充或模型微调。欢迎通过项目主页或联系作者获取全部资源,共同推动农业视觉检测技术的发展。

随项目附带的源码文件结构说明:

项目文件结构

随项目附带的设计说明书(docx)缩略图:

设计说明书缩略图

项目下载链接:https://mbd.pub/o/bread/YZaTmZhsZQ==

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

城南皮卡丘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值