AI病虫害识别配置:零基础搭建图像识别服务
AI病虫害识别配置的核心是把训练好的图像分类模型封装成可调用的HTTP服务,让前端或移动端上传图片后返回病虫害类别和置信度。
本文以Linux服务器和Python技术栈为例,按零基础可操作的方式讲清环境准备、服务部署、接口调用和验证方法。
适用场景与前置条件
这套配置适合已有模型文件(如.pt、.onnx或.h5格式)或使用开源模型的情况,目标是在自有服务器上提供识别接口。
需要准备:一台可联网的Linux服务器(Ubuntu 20.04/22.04或CentOS 7+),Python 3.8以上版本,至少2GB内存(模型较大时建议4GB以上),以及一个可用的域名或IP。
如果模型需要GPU推理,还需安装对应版本的CUDA驱动,本文以CPU推理为例。
环境准备与依赖安装
先更新系统包并安装Python虚拟环境工具。
以Ubuntu为例:
sudo apt update
sudo apt install -y python3 python3-pip python3-venv
创建项目目录并激活虚拟环境:
mkdir -p /opt/ai-pest && cd /opt/ai-pest
python3 -m venv venv
source venv/bin/activate
安装FastAPI、Uvicorn和图像处理库。
如果使用PyTorch模型,根据官方命令安装对应版本,这里以CPU版为例:
pip install fastapi uvicorn pillow numpy
pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu
安装完成后用pip list确认关键包已存在。
部署识别服务与接口配置
将模型文件放入/opt/ai-pest/models/目录,假设文件名为pest_model.pt。
新建main.py,写入一个最小可用的识别接口:
from fastapi import FastAPI, File, UploadFile
from PIL import Image
import torch
import io
app = FastAPI()
model = torch.jit.load("models/pest_model.pt", map_location="cpu")
model.eval()
CLASSES = ["健康", "稻瘟病", "蚜虫", "白粉病"] # 按实际模型类别修改
@app.post("/predict")
async def predict(file: UploadFile = File(...)):
img = Image.open(io.BytesIO(await file.read())).convert("RGB").resize((224, 224))
tensor = torch.from_numpy(np.array(img)).permute(2, 0, 1).float().unsqueeze(0) / 255.0
with torch.no_grad():
output = model(tensor)
prob = torch.softmax(output, dim=1)
conf, idx = torch.max(prob, 1)
return {"class": CLASSES[idx.item()], "confidence": round(conf.item(), 4)}
保存后启动服务:
uvicorn main:app --host 0.0.0.0 --port 8000
看到Application startup complete即表示服务已运行。
生产环境建议用nohup或systemd托管,避免终端关闭后服务停止。
反向代理与安全加固
直接暴露8000端口不安全,建议用Nginx做反向代理并限制请求大小。
在宝塔面板中新建站点后,修改站点配置,加入:
location /predict {
proxy_pass http://127.0.0.1:8000/predict;
client_max_body_size 5m;
proxy_set_header Host $host;
}
保存后重载Nginx:nginx -t && nginx -s reload。
如果使用云服务器安全组,只放行80和443端口,关闭8000公网访问。
验证接口与常见报错处理
用curl上传一张测试图片:
curl -X POST -F "file=@test.jpg" http://你的域名/predict
预期返回类似{"class":"稻瘟病","confidence":0.92}的JSON。
如果返回502,检查Uvicorn是否在运行、端口是否一致;
返回413说明图片超过client_max_body_size限制;
返回500时查看Uvicorn日志,常见原因是模型路径错误或输入尺寸与模型不匹配。
首次调用较慢属于正常现象,模型加载需要时间。
避坑提醒
模型文件路径要使用绝对路径或确认工作目录正确,否则torch.jit.load会报找不到文件。
输入图片必须统一尺寸和通道数,训练时用的预处理方式(如归一化参数)要与推理代码保持一致。
不要用root用户直接运行服务,建议创建专用系统用户。
修改配置后先nginx -t检查语法再重载,避免站点不可用。
按照以上步骤完成AI病虫害识别配置后,建议先用少量真实图片测试识别准确率,再根据业务量调整服务并发参数。
如果后续需要提升吞吐,可考虑使用Gunicorn多worker或GPU推理,但需同步调整Nginx超时设置。