ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

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

基于 YOLO11 的番茄九类病害智能识别系统 | 源码识别系统分享 基于 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自动渲染九类病害番茄早疫病 / 番茄晚疫病 / 番茄叶霉病 / 番茄斑枯病 番茄花叶病毒病 / 番茄黄化曲叶病毒病 番茄红蜘蛛病 / 番茄潜叶蛾 健康叶片技术栈层选型检测模型YOLO11nultralytics 官方预训练 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.pt9 类病害 健康 │ └────────────────────────────────────────────┘YOLO11 网络结构一图速通输入 640×640 │ ┌───▼──── BackboneC3k2 SPPF ────┐ │ 叶片纹理 / 斑点特征提取 │ └───┬───────────────────────────────┘ │ ┌───▼──── NeckFPN PAN ─────────┐ │ 斑点小目标 整叶大目标融合 │ └───┬───────────────────────────────┘ │ ┌───▼── HeadDecoupled DFL ─────┐ │ 9 类分类 DFL 边框回归 │ └───┬───────────────────────────────┘ │ 输出N×(x1,y1,x2,y2,conf,病害类)为什么选 YOLO11n番茄病害的视觉特征横跨多尺度——红蜘蛛是叶背针尖大小的小点叶霉病是大块黄斑潜叶蛾是细长银白色潜道DFL 回归能让边框对这些差异极大的目标都框得准同时 5MB 级别权重适合下沉到田间 PAD/手机。检测流程叶片图 ──▶ letterbox 640 ──▶ YOLO11n 推理 │ ▼ conf ≥ 0.25 NMSIoU 0.7 │ ▼ result.plot() 画框 │ ▼ 查询 disease_info[类名] → 拼出症状建议严重等级三、代码结构核心 50 行# app/streamlit_app.py节选frompathlibimportPathimportstreamlitasst,pandasaspd,yamlfromultralyticsimportYOLO ROOTPath(__file__).parent.parent MODEL_PATHROOT/model/best.ptCFGyaml.safe_load(open(ROOT/configs/project.yaml,encodingutf-8))DISEASE_DBCFG[app][disease_info]# ① 病害知识库SEVERITY{healthy: 健康,mild: 轻度,moderate: 中度,severe: 重度}st.cache_resource(show_spinnerFalse)defload_model(p:str)-YOLO:returnYOLO(p)# ② 权重只加载一次definfer_image_path(model:YOLO,image_path:Path,conf:float):resultmodel.predict(str(image_path),confconf,verboseFalse)[0]# ③ 推理annotatedresult.plot()rows[]ifresult.boxesisnotNone:forboxinresult.boxes:cls_idint(box.cls.item())x1,y1,x2,y2[float(v)forvinbox.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),})returnannotated[:,:,::-1],pd.DataFrame(rows)# ④ BGR→RGB 结构化结果defrender_disease_info(class_names:list[str])-None:# ⑤ 防治知识fornameindict.fromkeys(class_names):# 去重保序infoDISEASE_DB.get(name)ifnotinfo:continuesevSEVERITY.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_titleCFG[app][title],layoutwide)confst.sidebar.slider(置信度阈值,0.1,0.9,0.25,0.05)modelload_model(str(MODEL_PATH))upst.file_uploader(上传番茄叶片图片,type[jpg,jpeg,png,webp,bmp])ifupisnotNone:annotated,dfinfer_image_path(model,Path(up.name),conf)st.image(annotated,caption检测结果)st.dataframe(df)render_disease_info(df[class_name].tolist())# 拼出症状 防治建议5 段解析DISEASE_DB—— 9 类病害的症状 严重程度 防治建议全部从 yaml 配置注入业务专家修订知识库不动一行 Python 代码。st.cache_resource—— 把 YOLO 权重缓存到会话级手机端浏览器刷新页面响应能从 ~2s 降到几十毫秒。model.predict(...)[0]—— ultralytics 标准一行调用自动 letterbox、NMS。把每个 box 拆成结构化记录下游图表、CSV 导出、知识库联动统一基于这份 DataFrame。render_disease_info()—— 用检测到的类名查 DISEASE_DB把图像分类升级成病害体检报告——这是和普通检测项目最大的差异点。四、训练效果模型基于yolo11n.pt在 5000 张番茄叶片图覆盖 8 类病害 健康对照上训练 200 个 epoch实际收敛在 187 epoch 附近imgsz640、batch16。最终训练表现指标数值Precision0.921Recall0.862mAP0.50.944mAP0.5:0.950.857训练曲线总览box / cls / dfl 三路损失稳定下降mAP 在第 100 个 epoch 后已稳定在 0.94 水平mAP0.5:0.95 也有 0.86说明病斑边框定位质量过关。PR 曲线PR 曲线在大部分 Recall 区间保持高 Precision——多数病害类别都能稳定召回少量交叉类别如早疫病 vs 斑枯病斑点形态相近会有可见的下降符合视觉先验。归一化混淆矩阵对角线整体接近 1主要混淆集中在早疫病 ↔ 斑枯病叶霉病 ↔ 早疫病两组——它们在视觉上确实非常接近下一步可以通过加入显微特写样本、边缘高分辨率裁剪进一步压平。五、项目总结做对了什么从分类升级到检测 知识库识别完直接吐出病在哪 多严重 怎么治这是真正能塞给农户用的形态。数据构造合理8 病 1 健康 5000 张样本避开了只做单一病害带来的过拟合。轻量化前端Streamlit 配置驱动没有花哨依赖田间 PAD 浏览器直接跑不需要部署原生 App。还能怎么做加上严重度回归——同一种病按轻/中/重再细分提高用药建议精度接入气象 / 棚内温湿度辅助预测晚疫、灰霉等湿度敏感病害多作物迁移同一套 YOLO11n 模板覆盖到黄瓜、辣椒、茄子等同科作物复用 80% 代码与 UI。一句话总结用 YOLO11n Streamlit 把番茄叶片诊病做成一份带防治方案的体检报告是 5MB 模型撬动十亩大棚的典型样例。
返回列表