基于【EasyDL】【图像分类】实现农作物病害识别小程序

内容、数据集来源:基于飞桨的农作物病害智能识别系统 - 飞桨AI Studio

项目背景 

        联合国粮食及农业组织的一份报告表明,每年农业生产的自然损失中有三分之一以上是由农业病虫害造成的,使这些成为当前影响农业生产和农业生产的最重要因素。需要考虑的农业病虫害众多,依赖于实验室观察和实验的传统方法很容易导致错误的诊断。除此之外,缺乏专业的农业技术人员往往难以及时发现病虫害以采取适当的补救措施。为了克服这些问题,许多研究人员转向使用机器学习方法和计算机视觉技术来识别农业病虫害。这首先涉及分析和处理与植物病虫害相关的图像数据。在此之后,建立机器学习模型以获得与不同图像特征相关的不同层次。最后,使用分类器来快速准确地识别不同类型的病虫害。所有采用这种方法的研究的最终目的都是为农业病虫害的防治提供技术指导。
  农业病害的图像识别比农业病虫害的识别更具挑战性。各种机器学习方法已经解决了这个问题。这些包括聚类方法、SVM分类器、贝叶斯分类器和浅层神经网络方法。许多这项工作正在进行中。然而,传统的机器学习方法在用于农业病害图像识别的实际应用中,往往存在一些不足:它们高度依赖于原始疾病图像的质量;这些方法的实现通常非常复杂;如果训练样本的数量很大,使用这些传统的机器学习方法很难有效地构建相应的模型。
  随着现代智能农业的发展,使得使用更先进、更智能的机器学习方法来利用这些数据提供的机会来提高农业病害图像的有效性变得越来越重要。机器学习方法的最新进展,如深度学习和迁移学习,在许多应用领域取得了重大突破,并开始被用于农业病害图像识别。

数据来源与数据详情 

访问顶部连接 即可自行下载数据集

        基于AI Challenger农作物叶子图像数据集包含10种植物(苹果、樱桃、葡萄、柑桔、桃、草莓、番茄、辣椒、玉米、马铃薯)的27种病害(其中24个病害有分一般和严重两种程度),合计61个分类(按“物种-病害-程度”分)的特性,训练图像总数为31718张,测试图像总数为4540张。每张图包含一片农作物的叶子,叶子占据图片主要位置。

对数据进行分类处理

EasyDL 上传的数据集为压缩包 两种类似 一种JSON文件、图片文件命名都为分类名称、另一种文件夹为分类名称,图片命名随意。小帅丶选择后者。为了快速处理、使用Java代码进行文件的迁移和文件夹创建。代码执行完进行打包生成压缩包文件。

import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * Description
 * ProjectName workrecord
 * Created by 小帅丶 on 2023-05-11 12:35.
 * Version 1.0
 */


@NoArgsConstructor
@Data
public class DiseaseTypeBean {
    //分类编号
    private int disease_class;
    //图片名称
    private String image_id;
}
import cn.hutool.core.io.FileUtil;
import com.alibaba.fastjson.JSON;
import disease.bean.DiseaseTypeBean;

import java.io.File;
import java.nio.charset.Charset;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * Created by 小帅丶 on 2023-05-11 12:34.
 * Version 1.0
 */

public class DiseaseTypeSample {

    public static void main(String[] args) {
       trainDisease();
       validDisease();
    }

    //训练数据集
    private static void trainDisease() {
        String dealPath = "F:\\share\\数据集\\disease\\";
        String filePath = "F:\\share\\数据集\\data\\AgriculturalDisease_trainingset\\";
        String fileName = "AgriculturalDisease_train_annotations.json";
        String fileContent = FileUtil.readString(filePath + fileName, Charset.defaultCharset());
        List<DiseaseTypeBean> diseaseTypeBeanList = JSON.parseArray(fileContent, DiseaseTypeBean.class);
        //基于ID分类
        Map<Integer, List<DiseaseTypeBean>> diseaseClassMap = diseaseTypeBeanList.stream()
                .collect(Collectors.groupingBy(DiseaseTypeBean::getDisease_class));
        long startTime = System.currentTimeMillis();
        //数据拆分
        for (Integer diseaseClass : diseaseClassMap.keySet()) {
            System.out.println("===当前分类:\t" + diseaseClass);
            String newFilePath = dealPath + diseaseClass;
            File file = new File(newFilePath);
            if (!file.exists()) {
                file.mkdirs();
            }
            //读取指定分类的图片信息 存入新的文件夹
            List<DiseaseTypeBean> diseaseTypeBeans = diseaseClassMap.get(diseaseClass);
            System.out.println("===当前分类:\t" + diseaseClass +"分类数量:\t"+diseaseTypeBeans.size());
            for (DiseaseTypeBean diseaseTypeBean : diseaseTypeBeans) {
                FileUtil.copy(filePath + "images\\" + diseaseTypeBean.getImage_id(),
                        newFilePath + File.separator+diseaseTypeBean.getImage_id(),
                        true);
            }
        }
        //===总耗时:510874
        System.out.println("===总耗时:" + (System.currentTimeMillis() - startTime));
    }

    //验证数据集
    private static void validDisease() {
        String dealPath = "F:\\share\\数据集\\diseasetrain\\";
        String filePath = "F:\\share\\数据集\\data\\AgriculturalDisease_validationset\\";
        String fileName = "AgriculturalDisease_validation_annotations.json";
        String fileContent = FileUtil.readString(filePath + fileName, Charset.defaultCharset());
        List<DiseaseTypeBean> diseaseTypeBeanList = JSON.parseArray(fileContent, DiseaseTypeBean.class);
        //基于ID分类
        Map<Integer, List<DiseaseTypeBean>> diseaseClassMap = diseaseTypeBeanList.stream()
                .collect(Collectors.groupingBy(DiseaseTypeBean::getDisease_class));
        long startTime = System.currentTimeMillis();
        //数据拆分
        for (Integer diseaseClass : diseaseClassMap.keySet()) {
            System.out.println("===当前分类:\t" + diseaseClass);
            String newFilePath = dealPath + diseaseClass;
            File file = new File(newFilePath);
            if (!file.exists()) {
                file.mkdirs();
            }
            //读取指定分类的图片信息 存入新的文件夹
            List<DiseaseTypeBean> diseaseTypeBeans = diseaseClassMap.get(diseaseClass);
            System.out.println("===当前分类:\t" + diseaseClass +"分类数量:\t"+diseaseTypeBeans.size());
            for (DiseaseTypeBean diseaseTypeBean : diseaseTypeBeans) {
                FileUtil.copy(filePath + "images\\" + diseaseTypeBean.getImage_id(),
                        newFilePath + File.separator+diseaseTypeBean.getImage_id(),
                        true);
            }
        }
        //===总耗时:55716
        System.out.println("===总耗时:" + (System.currentTimeMillis() - startTime));
    }


}

登录EasyDL平台

1.登录EasyDL平台EasyDL-零门槛AI开发平台EasyDL面向企业开发者提供零门槛AI开发平台,一站式支持智能标注、模型训练、服务部署等功能,内置丰富的预训练模型,支持公有云/私有化/设备端等灵活部署方式,已在工业、零售、制造、医疗等领域落地。EasyDL面向零售行业场景还提供了深度定制的EasyDL零售行业版。icon-default.png?t=N7T8https://ai.baidu.com/easydl/2.上传数据集。等待平台处理完成

3.开始训练模型。小帅丶使用的为默认配置的资源(总训练耗时5小时19分钟 自身有4+小时免费额度、后续扣款使用了10块 这个价格个人还是可以接收)

4.等待训练完成(总耗时有8小时以上、反正会发短信通知)

看下图了解训练的精确率、F1召回率等

发布模型并接入小程序

1.发布模型、等待审核通过即可自行调用API

2.体验H5也可以。无需任何代码。即可由官方生成H5的页面进行体验

 查看小程序演示

基于【easydl实现农作物虫害识别的源码主要包含以下几个主要步骤。 首先,我们需要准备训练数据集。这个数据集应包含不同类型的农作物虫害的图像样本。可以从互联网上收集到大量的农作物虫害图像,也可以通过实地调查和拍摄获取。数据集应该尽可能具有多样性,以便训练出更准确的模型。此外,还需要给每个图像样本进行标注,以便让模型知道每个图像对应的农作物虫害类型。 接下来,我们需要固定好模型架构和参数。在【easydl】平台中,可以选择不同的卷积神经网络(CNN)结构,如ResNet、VGG等,来构建模型。此外,还需要确定其他超参数,如学习率、批次大小等。 然后,我们可以使用【easydl】提供的API接口,将准备好的数据集上传至平台。在平台上,可以通过简单的操作创建一个项目,并选择农作物虫害识别任务。然后,可以将训练数据集导入项目,并进行模型训练。在训练过程中,平台会自动进行反向传播、权重更新等操作,以优化模型的性能。 训练完成后,我们可以使用【easydl】提供的API接口,将测试数据集导入项目,并对模型进行验证和测试。平台会根据模型对测试集数据进行预测,并给出每张图像的农作物虫害识别结果。可以通过计算准确率、召回率等指标评估模型的性能。 最后,我们可以将训练好的模型保存,并通过【easydl】提供的API接口,将模型集成到自己的应用或系统中,实现农作物虫害的实时识别。 综上所述,基于【easydl实现农作物虫害识别的源码主要包括数据准备、模型构建和训练、模型验证和测试、模型集成等步骤。通过【easydl】平台提供的API接口,可以方便地完成这些操作,从而实现农作物虫害的快速可靠的识别
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小帅丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值