AI+农业应用入门:从数据采集到模型推理的完整落地步骤
想在农业场景里用上 AI,不一定先买昂贵设备。
一台普通云服务器加一个 USB 摄像头或模拟传感器数据,就能跑通“采集—处理—推理—反馈”的最小闭环。
本文按零基础可照做的顺序,讲清环境准备、数据接入、模型调用和结果检查,最后给出常见故障的排查方向。
先明确你要跑通的最小流程
农业 AI 应用范围很广,包括病害识别、长势监测、灌溉决策等。
对新手来说,最现实的切入点是单张图片或单条传感器数据的分类推理,先验证链路通不通,再考虑多设备和大规模部署。
开始前请确认以下条件:
- 一台 Linux 云服务器或本地虚拟机,建议 2 核 4G 以上,Ubuntu 22.04 或 Debian 12 均可。
- 已安装
python3和pip,可通过python3 --version检查。 - 一个可用的图片或 CSV 数据样本,例如作物叶片照片或温湿度记录。
- 能通过 SSH 登录服务器,具备
sudo权限。
如果使用宝塔面板,可以在“软件商店”中安装 Python 项目管理器,但本文以命令行方式为主,便于复现和排错。
安装依赖并准备推理环境
登录服务器后,先创建独立虚拟环境,避免污染系统 Python:
sudo apt update
sudo apt install -y python3-venv python3-pip
mkdir -p ~/agri-ai && cd ~/agri-ai
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install numpy pandas pillow onnxruntime
这里选用 onnxruntime 作为推理引擎,它体积小、CPU 即可运行,适合农业场景中常见的边缘设备或低配服务器。
安装完成后用 pip list 确认 onnxruntime 出现在列表中。
如果服务器无法访问外网,需要提前配置内网 pip 源或离线安装包,否则 pip install 会卡在下载阶段。
接入数据:从传感器或文件读取
农业数据来源通常分两类:实时传感器和离线文件。
新手建议先用 CSV 文件模拟,跑通后再换成串口或 MQTT 数据。
假设有一份 sensor.csv,包含 temperature 和 humidity 两列。
用 Python 读取并做简单清洗:
import pandas as pd
df = pd.read_csv('sensor.csv')
df = df.dropna()
df['temperature'] = df['temperature'].astype(float)
print(df.head())
如果数据来自摄像头,可以用 OpenCV 抓取一帧并保存为图片,再送入模型。
注意图片尺寸要与模型输入保持一致,常见为 224×224 或 640×640,具体取决于你使用的模型。
避坑点:传感器数据常出现空值或单位不一致,直接喂给模型会导致推理结果异常。
建议在读取后先检查 df.isnull().sum() 和数值范围。
调用轻量模型完成一次推理
为了不依赖 GPU,这里以 ONNX 格式的作物病害分类模型为例。
假设模型文件为 crop_model.onnx,输入为 1×3×224×224 的图片张量。
import onnxruntime as ort
import numpy as np
from PIL import Image
session = ort.InferenceSession('crop_model.onnx')
input_name = session.get_inputs()[0].name
img = Image.open('leaf.jpg').convert('RGB').resize((224, 224))
arr = np.array(img).astype(np.float32) / 255.0
arr = np.transpose(arr, (2, 0, 1))[None, ...]
result = session.run(None, {input_name: arr})[0]
print(result)
运行后应得到一组概率值或分类标签。
如果输出全为 0 或报错 Invalid input shape,优先检查图片通道数、尺寸和归一化方式是否与模型训练时一致。
模型文件需要从可信来源获取,或使用公开的农业图像数据集自行训练后导出。
不要直接使用来路不明的模型文件,以免引入安全风险。
把结果变成可用的农业反馈
拿到推理结果后,需要映射回业务含义。
例如输出索引 0 表示健康,1 表示叶斑病,2 表示锈病。
可以写一个简单映射字典,并把结果写入日志或通过接口返回:
labels = {0: '健康', 1: '叶斑病', 2: '锈病'}
pred = int(np.argmax(result))
print('识别结果:', labels.get(pred, '未知'))
如果需要定时采集,可以用 cron 每 30 分钟执行一次脚本:
crontab -e
# 添加一行
*/30 * * * * cd /home/ubuntu/agri-ai && ./venv/bin/python infer.py >> infer.log 2>&1
之后用 tail -f infer.log 观察输出,确认任务按预期运行。
常见报错与排查方向
ModuleNotFoundError: No module named 'onnxruntime':虚拟环境未激活或安装失败,重新执行source venv/bin/activate后再安装。Invalid input shape:图片尺寸或通道顺序不匹配,检查是否做了transpose和归一化。- 推理结果始终不变:输入数据可能全为同一张图或未做预处理,打印
arr.shape和arr.min()确认。 - 定时任务不执行:检查
cron服务状态systemctl status cron,并确认脚本路径使用绝对路径。
验证效果与下一步扩展
完成上述步骤后,用 3 到 5 张不同图片或不同时间段的数据重复推理,观察输出是否随输入变化。
如果结果合理,说明最小链路已经跑通;
如果偏差较大,优先回查数据质量和模型输入格式。
后续可以按需扩展:接入真实传感器、增加图片上传接口、把结果推送到手机通知,或者改用更轻量的量化模型降低资源占用。
每一步都建议先在小样本上验证,再投入生产环境。
AI+农业应用教程的核心不是一次部署多复杂,而是先让数据流动起来,再逐步替换和优化。
按照本文顺序操作,遇到异常时回看避坑部分,多数环境问题都能定位到具体命令或配置项。