1. 团队介绍
队伍名称: 橘农守护队
一句话定位: 一个实习生的 Vibe Coding 作品,加上一位 10 年经验架构师的指导建议,从 0 到 1 两周跑通全流程
饶良 — 技术指导 / 架构建议
- 天工智序资深架构师,10 年全栈开发经验
- 负责架构评审、关键技术决策建议、代码 Review
- 关键时刻点醒过:“模型选分类不选检测,农民不需要知道病斑在哪,知道是什么病怎么治就行”
伍娇 — 独立开发 / 产品 / 设计 / 数据(全链路)
- 天工智序 Agent 实习生,计算机科学与技术专业大三
- 一个人完成:数据清洗、YOLOv8 模型训练、ONNX 导出、FastAPI 服务搭建、Render 部署、知识库编写、Taro 小程序搭建、本地语音生成、构建上线
- 从想法到上线耗时 14 天,全程 Vibe Coding,TRAE 主力开发伙伴
- 擅长把复杂技术用大白话讲清楚,坚信 AI 不只是炫技工具而是能真正帮到人的东西
苏欧涵 — 场景顾问 / 本地数据支持
- 四川省南充市南部县驻村干部
- 提供南部县柑橘病虫害本地数据、农户访谈渠道、知识库农技内容审核
- 帮着把专业术语翻译成农民听得懂的大白话
团队独特优势: 伍娇一个人扛了全部开发,饶良老师把关方向不跑偏,苏欧涵提供了真实的农业场景和本地资源。实习生 + 资深架构师 + 驻村干部,三方互补,既有技术深度也有落地温度。
2. 产品简介(复赛版)
是什么: 面向柑橘种植户的 AI 病虫害识别微信小程序。农民拍一张叶子/果实的照片,AI 立刻告诉他这是什么虫/病、怎么治、用什么药、注意什么。一句话——让不懂植保的农民也能精准防病治虫。
面向谁: 四川省南部县及周边的柑橘种植户,年龄 40-65 岁为主,智能手机基本操作没问题,但对专业病虫害分类一窍不通。
完整功能清单:
| 模块 | 功能 |
|---|---|
| 拍照/选图 → 小程序上传到 Render FastAPI 服务 → ONNX Runtime 推理 → 27 类病虫害分类 | |
| 15 类虫害 + 11 类病害 + 1 类健康,每类含:识别依据、推荐农药、用药时机、安全间隔期、安全警示 | |
| 防治建议一键朗读(本地 30 个 MP3 音频,离线可用) | |
| 本地存储所有扫描,方便追溯对比 | |
| 基于南部县气候数据,推送当月高发病害预警 |
完整用户使用路径:
打开首页 → 点"拍照认病害" → 拍照/从相册选图
↓
图片上传到 Render FastAPI 服务 → ONNX Runtime 推理
↓
返回类别 + 置信度 → 结果页展示
↓
"柑橘溃疡病 · 置信度 89%"
↓
一键语音播报 / 查看完整防治建议
↓
返回首页 → 历史记录自动保存
相比初赛 Demo 的升级:
| 维度 | 初赛 | 复赛 |
|---|---|---|
| 识别类别 | 8 类病害 | 27 类(15 虫害 + 11 病害 + 1 健康) |
| 识别方式 | Mock 模拟数据 | 真实 YOLOv8n-cls ONNX 模型 + Render FastAPI 推理服务 |
| 置信度展示 | ||
| 语音播报 | ||
| 地理位置 | ||
| 季节性提醒 | ||
| 知识库 | 简略 8 类 | 完整 27 类,含农药/时机/安全警示 |
3. 产品演示视频
4. 产品创作历程
想法诞生:
伍娇在天工智序实习期间接触到农业 AI 应用,加上苏欧涵(南部县驻村干部)提到的真实困境——当地农民"见虫就打药、见病就慌神",认错病喷错药的情况每年都有。一个想法冒出来:AI 能不能帮农民伯伯少踩这样的坑? 于是拉上饶良老师把关方向,苏欧涵提供本地资源,三人小团队就开工了。
第一个大坑——数据集不干净:
网上搜到的虫害数据集混了斜纹夜蛾、枯叶夜蛾、茶蚜、绣线菊蚜这些根本不是柑橘上的虫!手动清理后剩 15 类虫害,再从公开数据集和百度图片补充病害数据,最终凑成 27 类共 9068 张(训练集 7369 张 / 验证集 1699 张)。
- 解决思路: Python 脚本批量预览目录 + 百度图片反查确认 + 手动清理。
第二个大坑——训练精度上不去:
第一次训 Top-1 只有 62%,一看混淆矩阵——黑点介壳虫只有 44 张、堆蜡粉蚧只有 2 张,类别数据量差异悬殊。
- 解决思路: 稀少数类用数据增强(随机裁剪/旋转/亮度变化)+ 采样加权。最终训练 50 epochs(CPU 训练耗时约 3 小时),验证集 Top-1 达到 87.9%(最佳轮约 88.2%),Top-5 达到 98.6%。
第三个大坑——模型怎么部署:
直接塞 YOLOv8.pt 有 3MB,小程序主包限制 2MB 加上 ONNX Runtime 依赖太大。
- 饶良老师的建议: 导出 ONNX 格式,用 FastAPI + ONNX Runtime 在 Render 上部署推理服务,小程序通过 HTTP 请求调用。
- 解决思路:
model.export(format="onnx", imgsz=224)导出 best.onnx 约 5.91 MB,FastAPI 封装/predict接口部署到 Render,小程序上传图片获取推理结果。 - 注意点: Render 免费服务存在冷启动,首次请求可能需要数十秒,后续迭代考虑迁移到 Vercel/腾讯云函数。
第四个大坑——语音播报:
微信同声传译插件需要企业主体,个人开发者用不了;在线 TTS 接口在小程序游客模式下会被拦。
- 解决思路: 用 Windows 系统中文语音引擎(SAPI)生成 WAV 音频,再用 FFmpeg 转码为 MP3,共生成 30 个本地音频文件(4 条引导语 + 26 条病虫害播报),全部打包进小程序,零费用 + 完全离线可用。
最重要的设计决策(饶良老师点醒的):
“模型选分类不选检测,农民不需要知道病斑在图片哪个位置,知道是什么病、用什么药、什么时候喷就行。”
放弃了 YOLOv8-det 目标检测方案,改用 YOLOv8n-cls 分类方案,标注成本大幅降低,输出直接对齐农民需求。
5. TRAE 实践过程
完整开发流程:
需求分析 → 数据集清洗 → 模型训练(CPU 50 epochs)→ ONNX 导出 → FastAPI 服务搭建 → Render 部署 → 知识库编写 → 小程序搭建 → 功能联调 → 音频生成 → 构建上线
TRAE 承担的关键工作:
| 阶段 | TRAE 做了什么 |
|---|---|
| 数据 | Python 批量预览脚本、非柑橘类自动检测建议、数据增强代码、训练/验证集划分 |
| 模型 | YOLOv8 训练脚本、混淆矩阵分析、ONNX 导出脚本、FastAPI 推理封装 |
| 部署 | Render 服务配置、启动脚本编写 |
| 前端 | Taro 项目搭建、6 个页面完整实现、27 类知识库 TS 定义、Zustand store、FastAPI 接口对接 |
| 构建 | npm/pnpm 依赖冲突解决、webpack missing 修复、Windows symlink 问题绕过 |
| 音频 | Windows SAPI + FFmpeg 批量生成脚本 |
| 文档 | 复赛帖子撰写、技术方案整理 |
关键步骤截图(建议准备):
1.小程序框架搭建
1782740125503340:ad1a99801383bd159ed8baa38b18455a_6a48a14233cd3b92676add96.6a619d8076773dbfee7adb4d.6a619d804a7cee5c78d57abf:TraeWork CN.0.1.45.no_sid.no_ppe.T(2026/7/23 13:08:58)
2.训练数据集
1782740125503340:9d3ea3eb5de514645467a46ce26c4ef5_6a48a14233cd3b92676add96.6a74ba090470c137c26cad32.6a74ba08a6eabcfc1fa488f4:TraeWork CN.0.1.45.no_sid.no_ppe.T(2026/8/7 00:45:12)
3.删掉 4 个脏类
1782740125503340:c217b8b52e5b636385041a5c542e4222_6a48a14233cd3b92676add96.6a74c2440470c137c26cad80.6a74c244959235222b036a88:TraeWork CN.0.1.45.no_sid.no_ppe.T(2026/8/7 01:21:19)
4.页面全跑通
1782740125503340:48aa6daaaa7c00abc7a06c305060831f_6a48a14233cd3b92676add96.6a757e18e8e288948e8d94c6.6a757e1750a1f94471489016:TraeWork CN.0.1.45.no_sid.no_ppe.T(2026/8/7 14:41:45)
5.做本地音频方案
1782740125503340:2eef77ba5a9b2ed121f2e23d0faf1b22_6a48a14233cd3b92676add96.6a758108e8e288948e8d94f9.6a7581074195706aed748543:TraeWork CN.0.1.45.no_sid.no_ppe.T(2026/8/7 14:58:37)
6.小程序上线
1782740125503340:561aad6eadb092c85621ad1028af2c8c_6a48a14233cd3b92676add96.6a759f5821b0530cb63b3315.6a759f542f1cbd6efeb9ff1e:TraeWork CN.0.1.45.no_sid.no_ppe.T(2026/8/7 17:03:43)
6. 技术方案分享(加分项)
技术栈总览:
前端:Taro + React + TypeScript + Zustand
AI 模型:YOLOv8n-cls 分类模型
输入尺寸:224×224
分类数量:27 类
训练数据:9068 张(训练集 7369 张,验证集 1699 张)
模型格式:best.pt 约 3.04 MB,best.onnx 约 5.91 MB
验证集 Top-1:约 87.9%(最佳轮约 88.2%)
验证集 Top-5:约 98.6%
训练轮数:50 epochs
训练硬件:CPU(耗时约 3 小时)
推理服务:Render 部署 FastAPI + ONNX Runtime
语音:Windows SAPI + FFmpeg 生成,本地 30 个 MP3 音频
识别架构:
小程序(Taro)
│ POST /predict(multipart/form-data 上传图片)
▼
Render 免费服务
│ FastAPI + ONNX Runtime
│ 加载 best.onnx
│ 224×224 推理
▼
返回 { class_id, confidence, top5 }
│
▼
小程序展示结果 + 查知识库
模型架构选型——为什么选分类不选检测?
| 方案 | 优势 | 劣势 |
|---|---|---|
| 目标检测(YOLOv8-det) | 能框出病虫害位置 | 需要框级标注,标注成本高;小目标易漏检;输出需二次解析 |
| 分类(YOLOv8n-cls) |
只需要图级别标签;输出直接是类别+置信度 | 不能定位病虫害位置 |
选分类的核心理由: 农民更关心"这是什么病怎么治",不需要知道病斑在图片哪个位置。分类方案标注成本大幅降低,输出直接对齐用户需求,推理服务实现简单。
数据处理流水线:
原始数据集 27 类
↓ 清洗:删除非柑橘病虫害 4 类(斜纹夜蛾、枯叶夜蛾、茶蚜、绣线菊蚜)
↓ 补数据:百度图片补充稀少数类
最终 27 类 9068 张
↓ 划分:train 7369 / val 1699
训练集 + 验证集
↓ 增强:稀少数类随机裁剪/旋转/亮度变化 + 采样加权
YOLOv8 训练 50 epochs(CPU ~3h)
↓
best.pt 3.04 MB → best.onnx 5.91 MB
验证集 Top-1 87.9% / Top-5 98.6%
当前版本说明:
- 小程序已接入真实 ONNX 模型,通过 Render 部署的 FastAPI 接口(
https://nanbu-citrus-ai.onrender.com/predict)进行推理 - Render 免费服务存在冷启动现象,首次请求可能需要数十秒,后续迭代考虑迁移到稳定的云服务
- 模型为分类模型,只能判断整张图片的主要类别,不具备病斑或害虫定位能力
7. 迭代规划
| 阶段 | 目标 | 状态 |
|---|---|---|
| v1.0(当前) | 27 类模型 + Render FastAPI + 6 页面完整跑通 | |
| v1.1 | Render 冷启动优化(实例保活)+ 迁移到稳定云服务 | |
| v1.2 | 增加地理位置记录 + 病虫害热力图后台 | |
| v1.3 | 南部县 3 个乡镇试点推广,收集真实识别数据 | |
| v2.0 | 用试点数据重新训练模型,增加南部县特有病虫害 | |
| v2.1 | 尝试 YOLOv8-seg 分割方案,同时实现识别 + 定位 |
社会价值: 当前方案解决了"农民认不出病"的核心痛点,能显著减少误用药导致的减产和农药浪费问题。后续通过试点推广和数据回流,模型精度和覆盖范围还能持续提升。
最后想说的话
这个项目从想法到上线,前前后后花了大概 14 天。一个实习生 + 一个 10 年经验架构师 + 一个驻村干部,三个人用 Vibe Coding + TRAE 把想法变成了能跑的小程序。
做的过程中最深的感受是——AI 不是只能用来炫技的大玩具,它真的可以落地帮到人。 南部县的王叔李婶们不懂 AI,但他们懂橘子好不好吃。我们要做的,就是把 AI 翻译成他们能听懂、会用的东西。
比赛不是终点,上线让农民真的用起来才是。
谢谢评委! ![]()





