基于【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 项目背景 联合国粮食及农业组织的一份报告表明,每年农业生产的自然损失中有三分之一以上是由农业病虫害造成的,使这些成为当前影响农业生产和农业生产的最重要因素。需要考虑的农业…...

元宇宙又“死”了!Epic老板:你当6亿用户是摆设?
“扎克伯格花了数年时间试图让Metaverse成为现实,但现在它已被AI取代,并走向科技创意的坟墓。”一篇表达“元宇宙已死”的文章近期在推特上引发热议,而游戏制作公司Epic Games CEO Tim Sweeney的还击更是让这个话题热上加热。 “搞一次在线守…...
阶段小结2022
工作马上一年,对于一年工作能力提升可能逐步在提升,业务能力也在慢慢提升,虽然没有一年前想象的飞起状态,但是刚接触这一行,希望越来越好。 之前每次的遇到的问题其实都会在笔记或者博客中记录,但是没有整体…...

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

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

OpenCL编程指南-4.4矢量操作符
矢量操作符 如下描述了可用于矢量数据类型或矢量和标量数据类型组合的各类操作符。 算术操作符 算术操作符(加()、减(–)、乘(*)和除(/)),可以作用于内置整数、浮点标量和矢量数…...

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

【多微电网】基于粒子群优化算法的面向配电网的多微电网协调运行与优化(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

使用Atmel Studio开发Arduino的ATmega328P单片机
摘要:我们知道Arduino开发板常用的芯片是Atmel公司生产的AVR微控制器系列。最常见的是ATmega328P,被广泛用于Arduino Uno开发板。其他常用的AVR芯片包括ATmega2560和ATmega32U4。使用Arduino平台开发AVR的单片机非常方便。Arduino IDE提供了一个非常简洁…...
docker基础命令
查找镜像 docker search nginx 拉取镜像 不指定镜像版本的话默认拉取最新的版本,可以在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低代码实验室活动。无论您是计算机行业相关从业者、低代码开发爱好者还是普通用户,都可以基于inBuilder低代码开发平台社区版(基于UBML开源项目的一个可以广泛使用的发行版),体验向导式、…...
sql数据定义语句(cascade,set,null,no action的区别)
(一)ADD 基本格式: ALTER TABLE <表名> ADD 新属性名 新属性类型 例:alter table s1 add tele char(12):增加一个电话号码(tele)属性 注: 新增的属…...

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

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

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

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

写给程序员Android Framework 开发,
前言 在 Android 开发者技能中,如果想进大厂,一般拥有较好的学历可能有优势一些。但是如果你靠硬实力也是有机会的,例如死磕Framework。Framework 知识广泛应用在Android各个领域中,重要性显而易见。 成为一名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.列表页面是新的页面,我们需要新建页面文件list.html 2.因为列表页的头部和底部基本一致&#x…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...

【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...