跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

基于 Python 和 AI 的智能害虫识别助手搭建

Python 结合深度学习技术实现农作物害虫自动识别。通过 PyTorch 框架加载预训练 ResNet50 模型,利用迁移学习降低训练成本。流程涵盖数据预处理、模型搭建、训练评估及 Gradio Web 部署。最终构建可视化交互界面,用户上传图片即可获取害虫种类及置信度,适用于智慧农业场景下的病虫害预警。

性能调优发布于 2026/3/16更新于 2026/8/2247 浏览
基于 Python 和 AI 的智能害虫识别助手搭建

Python + AI:智能害虫识别助手

图片

在农业生产中,病虫害是影响作物产量和品质的关键因素。传统的害虫识别依赖人工巡查,耗时耗力且易误判。随着智慧农业的普及,AI 技术成为解决这一难题的关键。本文介绍如何使用 Python 从零搭建一个智能害虫识别助手。

一、项目背景

智慧农业的核心是精准、高效、低成本,害虫识别是典型场景:

  • 对农户:无需专业植保知识,拍照即可识别害虫种类,快速匹配防治方案;
  • 对开发者:覆盖 AI 开发全流程,从数据处理到模型部署,适合实战落地;
  • 技术价值:融合 Python、深度学习、Web 部署,是入门 AI+ 垂直领域应用的案例。

二、核心技术栈

  • 编程语言:Python(3.8+)
  • 深度学习框架:PyTorch
  • 数据处理:OpenCV、Pandas
  • 模型优化:迁移学习(基于 ResNet50)
  • 部署工具:Gradio

三、项目实战

第一步:准备数据集

使用公开农业害虫数据集(如 IP102),或自行采集标注。

  • 数据集结构:按害虫种类分文件夹,每个文件夹下放对应图片;
  • 数据预处理:统一图片尺寸(如 224×224)、归一化像素值,划分训练集(80%)、验证集(10%)、测试集(10%)。
import cv2
import os
import numpy as np

# 数据预处理函数
def preprocess_image(img_path, target_size=(224, 224)):
    # 读取图片
    img = cv2.imread(img_path)
    # 调整尺寸
    img = cv2.resize(img, target_size)
    # BGR 转 RGB(PyTorch 默认 RGB)
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    # 归一化
    img = img / 255.0
    # 转换为张量格式
    img = np.transpose(img, (2, 0, 1))
    return img

# 遍历数据集文件夹预处理
data_dir = "pest_dataset"
classes = os.listdir(data_dir)
processed_data = []
labels = []

for idx, cls in enumerate(classes):
    cls_dir = os.path.join(data_dir, cls)
    for img_name in os.listdir(cls_dir):
        img_path = os.path.join(cls_dir, img_name)
        try:
            img = preprocess_image(img_path)
            processed_data.append(img)
            labels.append(idx)
        except:
            continue

processed_data = np.array(processed_data)
labels = np.array(labels)
第二步:搭建 CNN 模型(迁移学习版)

基于预训练的 ResNet50,只替换最后一层分类层。

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import models

# 加载预训练的 ResNet50
model = models.resnet50(pretrained=True)

# 冻结主干网络参数(只训练最后一层)
for param in model.parameters():
    param.requires_grad = False

# 替换最后一层分类器
num_classes = len(classes)
model.fc = nn.Linear(model.fc.in_features, num_classes)

# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.fc.parameters(), lr=0.001)

# 设备配置
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)
第三步:训练与评估模型

将数据转换为 PyTorch DataLoader,开始训练并评估精度。

from torch.utils.data import TensorDataset, DataLoader, random_split

# 转换为张量
X = torch.tensor(processed_data, dtype=torch.float32)
y = torch.tensor(labels, dtype=torch.long)
dataset = TensorDataset(X, y)

# 划分训练集和验证集
train_size = int(0.8 * len(dataset))
val_size = len(dataset) - train_size
train_dataset, val_dataset = random_split(dataset, [train_size, val_size])

# 创建 DataLoader
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
val_loader = DataLoader(val_dataset, batch_size=32, shuffle=False)

# 训练函数
def train_model(model, train_loader, val_loader, epochs=10):
    model.train()
    for epoch in range(epochs):
        running_loss = 0.0
        for inputs, labels in train_loader:
            inputs, labels = inputs.to(device), labels.to(device)
            optimizer.zero_grad()
            outputs = model(inputs)
            loss = criterion(outputs, labels)
            loss.backward()
            optimizer.step()
            running_loss += loss.item()

        model.eval()
        val_correct = 0
        val_total = 0
        with torch.no_grad():
            for inputs, labels in val_loader:
                inputs, labels = inputs.to(device), labels.to(device)
                outputs = model(inputs)
                _, predicted = torch.max(outputs.data, 1)
                val_total += labels.size(0)
                val_correct += (predicted == labels).sum().item()

        print(f"Epoch {epoch+1}/{epochs} | Loss: {running_loss/len(train_loader):.4f} | Val Accuracy: {100* val_correct / val_total:.2f}%")
    return model

# 开始训练
trained_model = train_model(model, train_loader, val_loader, epochs=15)

# 保存模型
torch.save(trained_model.state_dict(), "pest_recognition_model.pth")
第四步:用 Gradio 部署成 Web 应用

训练好的模型通过 Gradio 搭建可视化页面。

import gradio as gr

# 加载训练好的模型
model.load_state_dict(torch.load("pest_recognition_model.pth"))
model.eval()

# 定义识别函数
def recognize_pest(img):
    img = cv2.resize(img, (224, 224))
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    img = img / 255.0
    img = np.transpose(img, (2, 0, 1))
    img = torch.tensor(img, dtype=torch.float32).unsqueeze(0).to(device)

    with torch.no_grad():
        outputs = model(img)
        _, predicted = torch.max(outputs, 1)
        pest_name = classes[predicted.item()]
        confidence = torch.softmax(outputs, dim=1)[0][predicted.item()].item() * 100
    return f"识别结果:{pest_name} | 置信度:{confidence:.2f}%"

# 创建 Gradio 界面
interface = gr.Interface(
    fn=recognize_pest,
    inputs=gr.Image(type="numpy"),
    outputs=gr.Textbox(),
    title="智能害虫识别助手",
    description="上传农作物害虫图片,自动识别害虫种类"
)

# 启动应用
interface.launch(share=True)

运行代码后生成本地链接,打开即可交互:上传图片,显示识别结果和置信度。

四、进阶优化方向

  1. 数据增强:使用 torchvision.transforms 进行旋转、翻转、裁剪;
  2. 调参优化:调整学习率、批次大小,尝试不同优化器;
  3. 多标签识别:修改模型输出层支持多种害虫共存;
  4. 部署优化:使用 ONNX 转换模型,部署至云服务器。

五、项目总结

该项目覆盖了 AI 开发的核心流程:数据预处理→模型搭建→训练评估→部署应用。对于初学者是实战项目,对于农业从业者能解决生产问题。通过几行代码将技术落地到具体场景,可拓展至作物病害识别、产量预估等更多智慧农业应用。

目录

  1. Python + AI:智能害虫识别助手
  2. 一、项目背景
  3. 二、核心技术栈
  4. 三、项目实战
  5. 第一步:准备数据集
  6. 数据预处理函数
  7. 遍历数据集文件夹预处理
  8. 第二步:搭建 CNN 模型(迁移学习版)
  9. 加载预训练的 ResNet50
  10. 冻结主干网络参数(只训练最后一层)
  11. 替换最后一层分类器
  12. 定义损失函数和优化器
  13. 设备配置
  14. 第三步:训练与评估模型
  15. 转换为张量
  16. 划分训练集和验证集
  17. 创建 DataLoader
  18. 训练函数
  19. 开始训练
  20. 保存模型
  21. 第四步:用 Gradio 部署成 Web 应用
  22. 加载训练好的模型
  23. 定义识别函数
  24. 创建 Gradio 界面
  25. 启动应用
  26. 四、进阶优化方向
  27. 五、项目总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • OpenClaw 对接腾讯 QQ 实战操作详解
  • Python 数据科学工具链入门:NumPy、Pandas 与 Matplotlib 实战
  • 基于 Python 与 Selenium 的大麦网自动抢票脚本实现
  • 利用腾讯云 HAI 与 DeepSeek 快速构建个人网页
  • LangChain v0.2 新特性解析与核心架构演进
  • 基于 Python 的商品销售数据分析与可视化
  • ToDesk AI 桌面助手 ToClaw:零门槛体验 OpenClaw 自动化能力
  • LeetCode 20. 有效的括号:栈的典型应用
  • AES CCM 算法的 FPGA/Verilog 实现
  • 本地 AI 智能体 OpenClaw 安装与配置教程
  • 微软漏洞研究员谈从爱好到职业的挖洞经验与建议
  • Python 最新官方教程中文版及 Pandas 学习指南
  • Agent Skills 完全指南:从零开发智能体技能
  • 9 款免费 AI 论文工具实测与使用指南
  • 软件测试人员必备的 AI 工具清单:接口、UI 与自动化
  • Flutter 使用 groq_sdk 在 OpenHarmony 上实现 LPU 推理应用
  • 低小慢无人机目标识别跟踪技术解析
  • Docker Compose 部署 OpenClaw 并接入飞书机器人
  • OpenClaw 多飞书机器人部署与多 Agent 团队协作实战
  • Android 开发工程师秋招面试真题汇总与备考经验

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online