
手把手教你30分钟搞定一个能装进口袋的AI植物医生
这篇文章能帮你什么?
你有没有想过:手机拍张叶子照片,AI立刻告诉你“这是早疫病,用代森锰锌”?
这不是科幻。今天,我就带你从零开始,亲手做一个能装进口袋的“植物医生”。
全程分三步:
1. 下载数据集:拿来就能用的高质量病害数据
2. 训练模型:用YOLOv8,几行代码搞定
3. 部署到手机:让AI真正跑在你的手机上
不需要AI博士学历,不需要昂贵的服务器,一个普通电脑、一部安卓手机就够了。
开始。
第一步:下载数据集(5分钟)
先找一套“教材”给AI学。推荐三个经过预处理的现成数据集,开箱即用:
选项1:番茄叶片病害数据集(最推荐)
这个数据集是PlantVillage的“精修版”,已经帮你洗好了:
· 6个类别:细菌性斑点病、早疫病、晚疫病、叶霉病、斑枯病、健康
· 已划分:训练集70%、验证集15%、测试集15%
· 大小:98.2 MB
· 格式:按文件夹分类,无需额外处理
下载地址:Mendeley Data搜索“Processed Tomato Leaf Disease”(DOI: 10.17632/3zwdw6y4pn.1)
选项2:玉米病害增强数据集
如果你对玉米感兴趣,这个数据集用“强化学习+风格迁移”技术做了增强:
· 5个类别:锈病、叶枯病、叶斑病、条纹病毒、健康
· 大小:4,776张增强图像
· 格式:JPEG格式,标准化分辨率
下载地址:Zenodo搜索“RL-NST Corn Leaf Disease”
选项3:茄子叶片病害数据集(真实田间)
想要更“野”的数据?这个是斯里兰卡田间用手机拍的:
· 8个类别:细菌性枯萎病、细菌性叶斑病、白粉病等
· 大小:8,987张真实田间图像
· 特点:自然光照、无控制背景,超接地气
下载地址:Mendeley Data搜索“SLIF-Brinjal”(DOI: 10.17632/6yg6vktrc2.1)
第二步:训练模型(15分钟)
2.1 安装YOLOv8
YOLOv8是目前最“亲民”的目标检测模型,几行代码就能训练:
bash
# 安装ultralytics包
pip install ultralytics
2.2 准备数据
把下载的数据集整理成YOLO格式:
Text
dataset/
├── images/
│ ├── train/ # 训练图片
│ └── val/ # 验证图片
├── labels/
│ ├── train/ # 训练标注(txt文件)
│ └── val/ # 验证标注
└── data.yaml # 数据集配置文件
如果下载的是Mendeley上的番茄数据集,它已经是按文件夹分类好的格式,可以直接使用。
2.3 写一个配置文件 data.yaml
yaml
path:./dataset # 数据集根目录
train:images/train # 训练图片文件夹
val:images/val # 验证图片文件夹
nc: 6 # 类别数量
names: ['Bacterial_spot', 'Early_blight', 'Late_blight',
'Leaf_Mold', 'Septoria_leaf_spot', 'healthy']
2.4 一行命令开始训练
bash
yolo detect train data=data.yaml model=yolov8n.pt epochs=50 imgsz=640
参数说明:
· model=yolov8n.pt:用预训练模型,不用从零学(迁移学习)
· epochs=50:训练50轮,一般够用了
· imgsz=640:输入图片尺寸
训练完会在 runs/detect/train/weights/ 下生成两个文件:
· best.pt:效果最好的模型(部署用这个)
· last.pt:最后一轮的模型
2.5 看一眼效果
python
from ultralytics import YOLO
model = YOLO('runs/detect/train/weights/best.pt')
results = model('test_leaf.jpg', save=True)
如果能正确标出病斑位置和类别,恭喜你,AI医生“毕业”了!
第三步:部署到手机(10分钟)
模型训好了,怎么装进手机?核心思路是:把PyTorch模型转成手机能跑的格式。
3.1 模型转换(PyTorch → ONNX → NCNN/TFLite)
python
from ultralytics import YOLO
# 加载训练好的模型
model = YOLO('best.pt')
# 导出为ONNX格式
model.export(format='onnx', imgsz=640)
会生成 best.onnx 文件。然后可以用 ONNX Runtime 的工具进一步转换成手机端格式(NCNN或TFLite)。
3.2 在Android Studio中集成
1. 添加依赖:在 build.gradle 中加入ONNX Runtime
2. 放模型文件:把转换后的模型放进 assets 文件夹
3. 写推理代码:
kotlin
// 加载模型
val session = OrtSession.createSession(loadModelFile(context, "best.onnx"), env)
// 处理摄像头画面
funprocessImage(bitmap: Bitmap): List<Detection> {
// 1. 预处理:缩放、归一化
val inputTensor = preprocess(bitmap)
// 2. 运行推理
val output = session.run(mapOf("images" to inputTensor))
// 3. 解析结果:提取边界框、类别、置信度
return parseOutput(output)
}
完整代码可以参考ONNX Runtime官方示例,有现成的Android工程可以拿来改。
3.3 测试一下
装到手机上,对准一片叶子拍一张——如果能识别出病害类型并标出位置,你就成功了!
小提示:如果嫌从零配置太麻烦,阿里云开发者社区有打包好的完整项目,包含YOLOv8训练代码+数据集+PyQt5界面,下载即用。开源的YOLOv8水稻病害检测项目也提供了完整的数据集和部署教程。
写在最后:你可以做得更好
今天你走完了“数据→模型→手机”的完整链路。但真正的“植物医生”,还需要在这些方向打磨:
1. 用真实田间数据
实验室拍的数据太“干净”了。去田里拍一些逆光、手抖、被挡住的照片加进去,模型会更皮实。SLIF-Brinjal茄子数据集就是真实田间拍摄的典范。
2. 加知识库
光认病不够,还要告诉农民怎么治。可以参考AgriPestDatabase的做法,构建“病害名称→防治方法”的问答对。
3. 持续迭代
模型不是一次性的。把农民误判的图片收集起来,定期重新训练,模型会越来越聪明。
现在,你已经有了让AI当“植物医生”的全部工具。选一个你最关心的作物,动手试试吧。
有问题?欢迎留言交流。

夜雨聆风