基于 YOLO11 的番茄九类病害智能识别系统 | 源码识别系统分享

简介: 本项目基于YOLO11n构建番茄九类病害智能识别系统,支持单图/批量/视频/摄像头输入,精准定位病斑并输出“病害类型+严重等级(健康/轻/中/重)+图文防治建议”,实现从图像检测到农技服务的闭环。模型mAP@0.5达0.944,仅5MB,可部署于田间PAD。

基于 YOLO11 的番茄九 类 病害智能识别系统

让一张番茄叶片照片告诉农户:“这是什么病、有多严重、怎么治。”

一、背景

在这里插入图片描述

1.1 行业痛点

番茄是大棚和大田里产量与产值都最重要的茄科作物之一。但它有个出了名的毛病:怕病——早疫、晚疫、叶霉、斑枯、花叶病毒、黄化曲叶病毒、红蜘蛛、潜叶蛾……每一种都能在一周内把一茬番茄的产量直接打掉一半。

而真正的痛点在田间识别:

  • 农户/合作社最常见的处理方式仍然是"看叶子 → 凭经验喷药",结果误判 / 漏判很常见,错喷药不仅不治病,还伤叶;
  • 一线农技员人少地广,根本跑不过来;
  • 已有的"农业大模型"或多分类模型多偏图像分类,给不出"病害位置 + 严重程度 + 防治建议"这种结构化结果。

本项目用 YOLO11n 把"番茄叶片病害检测"做成一个九类目标检测 + 防治知识库的组合方案,让识别结果不只是一个标签,而是一份能直接喂给农户的"病害体检报告"。

视频演示与源码 下载

https://www.bilibili.com/video/BV1i4aS6SEt1/

在这里插入图片描述

包含: 📦完整项目源码 📦预训练模型权重

🗂️数据集

1.2 项目运行效果

在这里插入图片描述

在这里插入图片描述

1.3 项目介绍

核心创新点:

维度 说明
病害覆盖 9 类常见番茄叶片病害 + 健康叶片对照,覆盖真菌、病毒、虫害三大类
知识库联动 内置每类病害的"症状描述 + 严重等级 + 防治建议",UI 上结果直接附带防治方案
严重程度分级 healthy / mild / moderate / severe 四档,按等级用不同颜色高亮
多输入 Streamlit 单图 / 批量 / 视频 / 摄像头四类输入,巡田、连拍、监控视频都能消费
行业话术 UI 用番茄红 + 叶片绿,配合配置文件 class_severity / disease_info 自动渲染

在这里插入图片描述

九类病害:

番茄早疫病 / 番茄晚疫病 / 番茄叶霉病 / 番茄斑枯病
番茄花叶病毒病 / 番茄黄化曲叶病毒病
番茄红蜘蛛病 / 番茄潜叶蛾
健康叶片

技术栈:

层 选型
检测模型 YOLO11n(ultralytics 官方,预训练 yolo11n.pt)
训练框架 ultralytics ≥ 8.3
后端推理 Python 3.10 + PyTorch
前端 Streamlit + Plotly
视频解码 OpenCV + imageio-ffmpeg
部署形态 Streamlit / Docker;可下沉到田间巡检 PAD

二、设计框架

┌────────────────────────────────────────────┐
│ 农户 / 农技员 / 智慧农业大屏                │
│ 单叶照片 / 田间连拍 / 巡田视频 / 摄像头     │
└─────────────┬──────────────────────────────┘
              ▼ HTTP(默认 8501)
┌────────────────────────────────────────────┐
│ Streamlit 应用 app/streamlit_app.py         │
│ ├─ infer_image_path() 单帧推理              │
│ ├─ render_disease_info(cls) 调防治建议库    │
│ └─ render_batch_analysis() 类别 + 严重程度  │
└─────────────┬──────────────────────────────┘
              ▼ ultralytics.YOLO
┌────────────────────────────────────────────┐
│ YOLO11n 推理引擎                            │
│ model/best.pt(9 类病害 + 健康)             │
└────────────────────────────────────────────┘

YOLO11 网络结构(一图速通):

 输入 640×640
     │
 ┌───▼──── Backbone(C3k2 + SPPF) ────┐
 │   叶片纹理 / 斑点特征提取            │
 └───┬───────────────────────────────┘
     │
 ┌───▼──── Neck(FPN + PAN) ─────────┐
 │   斑点(小目标)+ 整叶(大目标)融合 │
 └───┬───────────────────────────────┘
     │
 ┌───▼── Head(Decoupled + DFL) ─────┐
 │   9 类分类 + DFL 边框回归          │
 └───┬───────────────────────────────┘
     │
   输出:N×(x1,y1,x2,y2,conf,病害类)

为什么选 YOLO11n:番茄病害的视觉特征横跨多尺度——红蜘蛛是叶背针尖大小的小点,叶霉病是大块黄斑,潜叶蛾是细长银白色潜道,DFL 回归能让边框对这些差异极大的目标都框得准;同时 5MB 级别权重适合下沉到田间 PAD/手机。

检测流程:

叶片图  ──▶ letterbox 640 ──▶ YOLO11n 推理
                                  │
                                  ▼
                        conf ≥ 0.25 + NMS(IoU 0.7)
                                  │
                                  ▼
                       result.plot() 画框
                                  │
                                  ▼
              查询 disease_info[类名] → 拼出"症状+建议+严重等级"

三、代码结构(核心 50 行)

# app/streamlit_app.py(节选)
from pathlib import Path
import streamlit as st, pandas as pd, yaml
from ultralytics import YOLO

ROOT       = Path(__file__).parent.parent
MODEL_PATH = ROOT / "model" / "best.pt"
CFG        = yaml.safe_load(open(ROOT / "configs" / "project.yaml", encoding="utf-8"))
DISEASE_DB = CFG["app"]["disease_info"]                  # ① 病害知识库
SEVERITY   = {
   "healthy": "🌿 健康", "mild": "🟢 轻度",
              "moderate": "🟠 中度", "severe": "🔴 重度"}

@st.cache_resource(show_spinner=False)
def load_model(p: str) -> YOLO:
    return YOLO(p)                                       # ② 权重只加载一次

def infer_image_path(model: YOLO, image_path: Path, conf: float):
    result = model.predict(str(image_path), conf=conf, verbose=False)[0]   # ③ 推理
    annotated = result.plot()
    rows = []
    if result.boxes is not None:
        for box in result.boxes:
            cls_id = int(box.cls.item())
            x1, y1, x2, y2 = [float(v) for v in box.xyxy[0].tolist()]
            rows.append({
   
                "class_name": result.names[cls_id],
                "confidence": round(float(box.conf.item()), 4),
                "x1": round(x1, 1), "y1": round(y1, 1),
                "x2": round(x2, 1), "y2": round(y2, 1),
            })
    return annotated[:, :, ::-1], pd.DataFrame(rows)     # ④ BGR→RGB + 结构化结果

def render_disease_info(class_names: list[str]) -> None:                   # ⑤ 防治知识
    for name in dict.fromkeys(class_names):              # 去重保序
        info = DISEASE_DB.get(name)
        if not info: continue
        sev = SEVERITY.get(info["severity"], "")
        st.markdown(f"### {info['icon']} {name}  {sev}")
        st.write(f"**症状**:{info['symptoms']}")
        st.write(f"**防治建议**:{info['advice']}")

# ---------- Streamlit 入口(单图分支) ----------
st.set_page_config(page_title=CFG["app"]["title"], layout="wide")
conf  = st.sidebar.slider("置信度阈值", 0.1, 0.9, 0.25, 0.05)
model = load_model(str(MODEL_PATH))

up = st.file_uploader("上传番茄叶片图片", type=["jpg", "jpeg", "png", "webp", "bmp"])
if up is not None:
    annotated, df = infer_image_path(model, Path(up.name), conf)
    st.image(annotated, caption="检测结果")
    st.dataframe(df)
    render_disease_info(df["class_name"].tolist())       # 拼出"症状 + 防治建议"

5 段解析:

  1. DISEASE_DB —— 9 类病害的"症状 + 严重程度 + 防治建议"全部从 yaml 配置注入,业务专家修订知识库不动一行 Python 代码。
  2. @st.cache_resource —— 把 YOLO 权重缓存到会话级,手机端浏览器刷新页面响应能从 ~2s 降到几十毫秒。
  3. model.predict(...)[0] —— ultralytics 标准一行调用,自动 letterbox、NMS。
  4. 把每个 box 拆成结构化记录,下游图表、CSV 导出、知识库联动统一基于这份 DataFrame。
  5. render_disease_info() —— 用检测到的类名查 DISEASE_DB,把图像分类升级成"病害体检报告"——这是和普通检测项目最大的差异点。

四、训练效果

模型基于 yolo11n.pt 在 5000 张番茄叶片图(覆盖 8 类病害 + 健康对照)上训练 200 个 epoch(实际收敛在 187 epoch 附近),imgsz=640、 batch \=16。最终训练表现:

指标 数值
Precision 0.921
Recall 0.862
mAP@0.5 0.944
mAP@0.5:0.95 0.857

训练曲线总览:

训练结果总览

box / cls / dfl 三路损失稳定下降,mAP 在第 100 个 epoch 后已稳定在 0.94+ 水平;mAP@0.5:0.95 也有 0.86,说明病斑边框定位质量过关。

PR 曲线:

PR 曲线

PR 曲线在大部分 Recall 区间保持高 Precision——多数病害类别都能稳定召回;少量交叉类别(如早疫病 vs 斑枯病,斑点形态相近)会有可见的下降,符合视觉先验。

归一化混淆矩阵:

归一化混淆矩阵

对角线整体接近 1,主要混淆集中在"早疫病 ↔ 斑枯病""叶霉病 ↔ 早疫病"两组——它们在视觉上确实非常接近,下一步可以通过加入显微特写样本、边缘高分辨率裁剪进一步压平。

五、项目总结

做对了什么:

  • 从"分类"升级到"检测 + 知识库":识别完直接吐出"病在哪 + 多严重 + 怎么治",这是真正能塞给农户用的形态。
  • 数据构造合理:8 病 + 1 健康 + 5000 张样本,避开了只做单一病害带来的过拟合。
  • 轻量化前端:Streamlit + 配置驱动,没有花哨依赖,田间 PAD 浏览器直接跑,不需要部署原生 App。

还能怎么做:

  1. 加上"严重度回归"——同一种病按"轻/中/重"再细分,提高用药建议精度;
  2. 接入气象 / 棚内温湿度,辅助预测晚疫、灰霉等湿度敏感病害;
  3. 多作物迁移:同一套 YOLO11n 模板覆盖到黄瓜、辣椒、茄子等同科作物,复用 80% 代码与 UI。

一句话总结: 用 YOLO11n + Streamlit 把"番茄叶片诊病"做成一份带防治方案的体检报告,是 5MB 模型撬动十亩大棚的典型样例。

相关文章
|
3天前
|
云安全 人工智能 运维
当攻击全面Agent化,你的安全防御能否跟上AI Speed?
多起客户侧AK泄露事件应急的真实观察
1218 3
|
26天前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
9653 32
|
12天前
|
存储 人工智能 并行计算
大模型本地部署终端选型方法论:以 Qwen3.8-27B 为例的四档分层完整流程
本文提出一套大模型本地部署终端选型方法论:定约束、定档位、定框架、定参数四步决策法,配合入门、主力、质量、无损四档分层模型。以 Qwen3.8-27B 实测数据为例,逐环节解读显存、带宽、存储、散热、系统、预算等要素,给出面向不同预算的优选方案、决策自查清单与市场观察框架。文末前瞻 AI 笔记本的 CPU+GPU 与统一内存两条路线,论证四步决策法在新品类上的延续性。
|
11天前
|
人工智能 JSON 自然语言处理
2026 年 Jev 决策模型深度拆解:原理解读、实战测评与保姆级落地教程
有一款特殊AI模型在开发者圈子刷屏,它摒弃传统大模型擅长的对话聊天能力,专注做高速结构化决策,它就是TypeSafe AI推出的Jev模型。该模型由ChatGPT共同发明人Diogo Almeida主导研发,定位为**System One Model(系统一模型)**,对标人类大脑快速直觉判断的思维模式,在响应延迟、调用成本、结构化输出稳定性上相比传统生成式大模型有着巨大差异。本文会完整拆解Jev底层原理、三大核心原语能力、适用业务场景,同时提供可直接运行的curl、Python代码示例,并且结合多组实测数据,客观分析模型优势与能力边界,帮助普通开发者和AI应用从业者快速上手落地。
832 1
|
7天前
|
人工智能 JSON 自然语言处理
2026 年 Jev 决策模型全解析:核心原理拆解,性能实战测评与落地部署教程
有一款特殊AI模型在开发者圈子刷屏,它摒弃传统大模型擅长的对话聊天能力,专注做高速结构化决策,它就是TypeSafe AI推出的Jev模型。该模型由ChatGPT共同发明人Diogo Almeida主导研发,定位为System One Model(系统一模型),对标人类大脑快速直觉判断的思维模式,在响应延迟、调用成本、结构化输出稳定性上相比传统生成式大模型有着巨大差异。本文会完整拆解Jev底层原理、三大核心原语能力、适用业务场景,同时提供可直接运行的curl、Python代码示例,并且结合多组实测数据,客观分析模型优势与能力边界,帮助普通开发者和AI应用从业者快速上手落地。
549 0
|
4天前
|
Web App开发 人工智能 JavaScript
太猛了,一个月干到15W+,给大家推荐一个最近爆火的开源逆向工具:REA
REA(Reverse Engineer Anything)是近期爆火的开源AI逆向工具,4月发布,1个月内斩获15万+ Star。它让AI Agent无需源码即可分析二进制、APK、JS/Electron、HAR包等17类目标,自动反编译、生成可运行代码,并强制返回带证据与局限的结论。全本地执行,MIT协议,支持Hopper/Ghidra/IDA等引擎,一行命令即可上手。
504 0
太猛了,一个月干到15W+,给大家推荐一个最近爆火的开源逆向工具:REA
|
8天前
|
存储 人工智能 自然语言处理
千问办公官网入口链接在哪?2026年最新QwenWork测评、千问办公怎么样?一文看懂
千问办公(QwenWork)是阿里云推出的AI智能办公平台,提供网页端和阿里云官网双入口。支持PPT/Word/Excel生成、多模态处理、网页全栈搭建、钉钉深度集成等6大核心能力。个人版免费可用,高级版198元/月;企业版198元/人/月。新用户注册即赠2000积分。阿里千问办公QwenWork官网:https://t.aliyun.com/U/0VCTGt 阿里AI工作平台,一句话完成数据分析、PPT 生成、视频剪辑、网页搭建等复杂任务
1111 0
|
6天前
|
存储 人工智能 安全
千问办公官网入口网页版登录:qwenwork.cn 注册送2000积分、登录送100积分
阿里云千问办公(QwenWork)是AI智能工作平台,支持一句话生成PPT、表格、网页、视频及数据分析。个人免费版送2000积分+每日登录赠100分,含1GB存储、5个发布页;企业版198元/席/月起。阿里千问办公QwenWork官网:https://t.aliyun.com/U/0VCTGt 阿里AI工作平台,一句话完成数据分析、PPT 生成、视频剪辑、网页搭建等复杂任务