当前位置: 首页 > news >正文

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

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

项目背景 

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

数据来源与数据详情 

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

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

对数据进行分类处理

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

 

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);}}//===总耗时:510874System.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);}}//===总耗时:55716System.out.println("===总耗时:" + (System.currentTimeMillis() - startTime));}}

登录EasyDL平台

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

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

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

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

 

发布模型并接入小程序

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

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

 查看小程序演示

 

 

相关文章:

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

内容、数据集来源:基于飞桨的农作物病害智能识别系统 - 飞桨AI Studio 项目背景 联合国粮食及农业组织的一份报告表明&#xff0c;每年农业生产的自然损失中有三分之一以上是由农业病虫害造成的&#xff0c;使这些成为当前影响农业生产和农业生产的最重要因素。需要考虑的农业…...

元宇宙又“死”了!Epic老板:你当6亿用户是摆设?

“扎克伯格花了数年时间试图让Metaverse成为现实&#xff0c;但现在它已被AI取代&#xff0c;并走向科技创意的坟墓。”一篇表达“元宇宙已死”的文章近期在推特上引发热议&#xff0c;而游戏制作公司Epic Games CEO Tim Sweeney的还击更是让这个话题热上加热。 “搞一次在线守…...

阶段小结2022

工作马上一年&#xff0c;对于一年工作能力提升可能逐步在提升&#xff0c;业务能力也在慢慢提升&#xff0c;虽然没有一年前想象的飞起状态&#xff0c;但是刚接触这一行&#xff0c;希望越来越好。 之前每次的遇到的问题其实都会在笔记或者博客中记录&#xff0c;但是没有整体…...

linux0.12-8-11-vsprintf.c

[383页] 1、 这一小节可以不看代码如何实现&#xff0c;因为标准的C库函数&#xff1b; 2、 等自己看完的这本书&#xff0c;有兴趣过来研究研究也是可以的。 8-11 vsprintf.c程序 8-11-1 功能描述 该程序主要包括vsprintf(),用于对参数产生格式化的输出。由于该函数是C函数…...

Node.js 与 WebAssembly

目录 1、简介 2、关键概念 3、生成WebAssembly模块 4、如何使用它 5、与操作系统交互 1、简介 首先&#xff0c;让我们了解为什么WebAssembly是一个很棒的工具&#xff0c;并学会自己使用它。 WebAssembly是一种类似汇编的高性能语言&#xff0c;可以从各种语言编译&…...

OpenCL编程指南-4.4矢量操作符

矢量操作符 如下描述了可用于矢量数据类型或矢量和标量数据类型组合的各类操作符。 算术操作符 算术操作符&#xff08;加&#xff08;)、减&#xff08;–)、乘&#xff08;*&#xff09;和除&#xff08;/)&#xff09;&#xff0c;可以作用于内置整数、浮点标量和矢量数…...

索洛模型(二)

索洛模型(二) 文章目录 索洛模型(二)[toc]1 事实2 假设2.1 对生产函数的假设2.2对投入要素的假设 3 索洛模型的动态学3.1 k k k的动态学3.2 平衡增长路径 4 储蓄率变化的影响4.1 对产出的影响4.2 对消费的影响 索罗经济增长模型&#xff08;Solow growth model&#xff09;&am…...

【多微电网】基于粒子群优化算法的面向配电网的多微电网协调运行与优化(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

使用Atmel Studio开发Arduino的ATmega328P单片机

摘要&#xff1a;我们知道Arduino开发板常用的芯片是Atmel公司生产的AVR微控制器系列。最常见的是ATmega328P&#xff0c;被广泛用于Arduino Uno开发板。其他常用的AVR芯片包括ATmega2560和ATmega32U4。使用Arduino平台开发AVR的单片机非常方便。Arduino IDE提供了一个非常简洁…...

docker基础命令

查找镜像 docker search nginx 拉取镜像 不指定镜像版本的话默认拉取最新的版本&#xff0c;可以在dockerhub上查看镜像的版本 dockerhub地址:Docker docker pull nginx docker pull nginx:1.23 查看镜像列表 docker images 打包镜像 打包的镜像可以迁移到其它的主机上部署 …...

数组名+1和数组名+1的区别

数组名和&数组名区别 #include <stdio.h>int main() {int a[5] {1,2,3,4,5};int *ptr (int *)(&a 1);printf("%d,%d,%d\n",*(a 4),*(ptr - 1),*ptr); // 2 5 为什么是5printf("数组a[4]的地址%p,(ptr-1)地址%p, ptr的地址%p",(a 4)…...

开放原子训练营(第三季)inBuilder低代码开发实验室初体验

一、活动介绍 开放原子训练营开启inBuilder低代码实验室活动。无论您是计算机行业相关从业者、低代码开发爱好者还是普通用户&#xff0c;都可以基于inBuilder低代码开发平台社区版&#xff08;基于UBML开源项目的一个可以广泛使用的发行版&#xff09;&#xff0c;体验向导式、…...

sql数据定义语句(cascade,set,null,no action的区别)

&#xff08;一&#xff09;ADD 基本格式&#xff1a; ALTER TABLE <表名> ADD 新属性名 新属性类型 例&#xff1a;alter table s1 add tele char&#xff08;12&#xff09;&#xff1a;增加一个电话号码&#xff08;tele&#xff09;属性 注&#xff1a; 新增的属…...

Java进程(基础)

基本概念 1、进程&#xff1a;程序的执行过程 2、线程&#xff1a;一个进程可以有单个线程也就是我们说的单线程&#xff0c;还可以有多个线程也就是我们说的多线程&#xff0c; 线程 1、当一个类继承了Thread类就可以当成一个线程用 2、我们会重写run方法写上我们自己的业务…...

Android之 Activity活动详解

一 四大组件 1.1 Activity组件&#xff0c;它一个单独的窗口&#xff0c;程序流程都必须在Activity中运行。 1.2 service组件&#xff0c;用于在后台完成用户指定的操作。 1.3 content provider组件&#xff0c;会为所有的应用准备一个内容窗口&#xff0c;并且保留数据库、…...

车载软件架构——闲聊几句AUTOSAR BSW(五)

我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 我们并不必要为了和谐,而时刻保持通情达理;我们需要具备的是,偶尔有肚量欣然承认在某些方面我们可能会有些不可理喻。该有主见的时候能掷地有声地镇得住场…...

APP图标尺寸规范一文了解清楚

在进行图标设计前&#xff0c;熟知手机 app 图标尺寸规范&#xff0c;能更好地去针对不同平台设计出更极致的图标。当前智能手机系统主要以 iOS 及 Android 为主&#xff0c;APP 图标是产品给用户的第一印象&#xff0c;图标视觉设计的美感与吸引力&#xff0c;与用户是否选择下…...

写给程序员Android Framework 开发,

前言 在 Android 开发者技能中&#xff0c;如果想进大厂&#xff0c;一般拥有较好的学历可能有优势一些。但是如果你靠硬实力也是有机会的&#xff0c;例如死磕Framework。Framework 知识广泛应用在Android各个领域中&#xff0c;重要性显而易见。 成为一名Android Framework…...

html实现一个一闪一闪的按钮,CSS实现一个一闪一闪的按钮,Css闪烁点标,css设置按钮层次感,css按钮美化,CSS按钮动画过渡,CSS按钮添加阴影

效果 动态 静态 实现 底部多加了几个过渡按钮 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><style>#app {margin: 2% auto;text-align: center;}.lay-btn-box {position: relative;display: …...

品优购项目学习记录04--列表页

文章目录 1.品优购项目列表页制作准备工作2.列表页header和nav修改2.1 秒杀logo的制作2.2 导航栏nav修改 3.列表页主体sk_container 1.品优购项目列表页制作准备工作 1.列表页面是新的页面&#xff0c;我们需要新建页面文件list.html 2.因为列表页的头部和底部基本一致&#x…...

字符串字典序最大后缀问题详解

字符串字典序最大后缀问题详解 一、问题定义与背景1.1 问题描述1.2 实际应用场景 二、暴力解法及其局限性2.1 暴力解法思路2.2 代码示例2.3 局限性分析 三、双指针算法&#xff1a;高效解决方案3.1 算法核心思想3.2 算法步骤3.3 代码实现3.4 与暴力解法对比 四、复杂度分析4.1 …...

[蓝桥杯]整理玩具

整理玩具 题目描述 小明有一套玩具&#xff0c;一共包含 NMNM 个部件。这些部件摆放在一个包含 NMNM 个小格子的玩具盒中&#xff0c;每个小格子中恰好摆放一个部件。 每一个部件上标记有一个 0 ~ 9 的整数&#xff0c;有可能有多个部件标记相同的整数。 小明对玩具的摆放有…...

buuctf——web刷题第二页

[网鼎杯 2018]Fakebook和[SWPU2019]Web1没有&#xff0c;共30题 目录 [BSidesCF 2020]Had a bad day [网鼎杯 2020 朱雀组]phpweb [BJDCTF2020]The mystery of ip [BUUCTF 2018]Online Tool [GXYCTF2019]禁止套娃 [GWCTF 2019]我有一个数据库 [CISCN2019 华北赛区 Day2…...

Python训练营打卡Day42

知识点回顾 回调函数lambda函数hook函数的模块钩子和张量钩子Grad-CAM的示例 1. 回调函数&#xff08;Callback Function&#xff09; 回调函数是作为参数传递给另一个函数的函数&#xff0c;目的是在某个事件发生后执行。 def fetch_data(callback):# 模拟数据获取data {&quo…...

qt控制台程序与qt窗口程序在读取数据库中文字段的差异!!巨坑

问题&#xff1a;最近在自己编写一个类&#xff0c;这个类需要对mysql数据库进行插入和查询。因为最后是以一个类文件的形式拿来单独使用&#xff0c;所以在创建项目的时候就创建了一个qt的控制台程序。但是在对数据库的内容进行查询时&#xff0c;出现了中文乱码。参考了之前的…...

Python打卡训练营学习记录Day43

作业&#xff1a; kaggle找到一个图像数据集&#xff0c;用cnn网络进行训练并且用grad-cam做可视化 进阶&#xff1a;并拆分成多个文件 从谷歌图片中拍摄的 10 种不同类别的动物图片 数据预处理 import os from torchvision import datasets, transforms from torch.utils…...

精益数据分析(95/126):Socialight的定价转型启示——B2B商业模式的价格策略与利润优化

精益数据分析&#xff08;95/126&#xff09;&#xff1a;Socialight的定价转型启示——B2B商业模式的价格策略与利润优化 在创业过程中&#xff0c;从B2C转向B2B不仅是商业模式的转变&#xff0c;更是定价策略与成本结构的全面重构。今天&#xff0c;我们将通过Socialight的实…...

Linux文件系统详解:从入门到精通

无论是开发高性能应用还是进行系统级编程&#xff0c;文件系统都是我们必须掌握的基础知识。今天&#xff0c;我将带大家深入浅出地了解Linux文件系统的核心概念和工作原理。 一、Linux文件系统概述 Linux文件系统是操作系统中负责管理持久存储设备上数据的子系统。它不仅仅是…...

Odoo 19 路线图(新功能)

Odoo 19 路线图(新功能) Odoo 19 路线图是Odoo官方针对下一版本的发布计划&#xff0c;将在自动化、合规性、用户体验、碳排放报告及本地化等领域推出超过16项新功能。本路线图详细阐述了Odoo 19如何在过往版本基础上进一步提升&#xff0c;助力企业优化销售、财务、运营及客户…...

Windows系统中如何使用符号链接将.vscode等配置文件夹迁移到D盘(附 CMD PowerShell 双版本命令)

在日常开发和使用中&#xff0c;很多应用程序都会在 Windows 用户目录&#xff08;如 C:\Users\你的用户名\&#xff09;下创建一些以点开头的隐藏配置文件夹&#xff0c;例如&#xff1a; .vscode — Visual Studio Code 的设置和插件数据.cursor — Cursor 编辑器的缓存和设…...