⌈ 传知代码 ⌋ 农作物病害分类(Web端实现)

💛前情提要💛

本文是传知代码平台中的相关前沿知识与技术的分享~

接下来我们即将进入一个全新的空间,对技术有一个全新的视角~

本文所涉及所有资源均在传知代码平台可获取

以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦!!!

以下内容干货满满,跟上步伐吧~


📌导航小助手📌

  • 💡本章重点
  • 🍞一. 概述
  • 🍞二. 演示效果
  • 🍞三.核心逻辑
  • 🫓总结


💡本章重点

  • 农作物病害分类(Web端实现)

🍞一. 概述

农作物病害是国家粮食安全的一个主要威胁,是决定农作物产量和质量的主要因素。 由于传统方法缺乏必要的基础设施,并且极大程度依赖于人工经验,故诸多地区难以迅速高效地防治病害,从而影响农业的发展。因此,精确诊断农作物病害对于促进农业可持续发展至关重要。针对传统的农作物病害识别方法具有主观性并且极大程度依赖于人工经验的不足,利用卷积神经网络对农作物病害进行识别与分类。

  1. 首先,利用数据增强技术扩充农作物病害原始数据集,增加数据的多样性和数量,同时可以提高训练网络的泛化能力和识别精度;

  2. 然后搭建卷积神经网络对农作物图像进行病虫害的特征提取和分类,实现对农作物病害的准确识别和分类。

  3. 最后通过搭建本地Web实现识别分类的可视化,可以详见视频。值得注意的是作者本人使用的是PlantVillage数据集进行训练、验证以及测试的。

Plant Village数据集共包含14中植物类别,分别为苹果、蓝莓、樱桃、玉米、葡萄、柑橘、桃、胡椒、马铃薯、树莓、大豆、南瓜、草莓和番茄。


🍞二. 演示效果

在这里插入图片描述

识别界面

在这里插入图片描述


🍞三.核心逻辑

flask的路由设置代码

import os
from flask import Flask, redirect, render_template, request
from PIL import Image
import torchvision.transforms.functional as tf
import CNN
import numpy as np
import torch
import pandas as pd
import smtplib
from email.mime.text import MIMEText

disease_info = pd.read_csv('static/materials/disease_infov1.csv', encoding='utf-8')

supplement_info = pd.read_csv('static/materials/supplement_info.csv', encoding='utf-8')

model = CNN.CNN(38)
model.load_state_dict(torch.load("static/save_model/plant_disease_model_xhh500.pt"))
model.eval()


def prediction(image_path):
    image = Image.open(image_path)
    image = image.resize((224, 224))
    input_data = tf.to_tensor(image)
    input_data = input_data.view((-1, 3, 224, 224))
    output = model(input_data)
    output = output.detach().numpy()
    index = np.argmax(output)
    return index


app = Flask(__name__)


@app.route('/', methods=['GET', 'POST'])
def home_page():
    return render_template('home.html')


@app.route('/contact')
def contact():
    return render_template('contact.html')


@app.route('/services')
def services():
    return render_template('services.html')


@app.route('/about')
def about():
    return render_template('about.html')

@app.route('/typo')
def buchong():
    return render_template('typo.html')

@app.route('/submit', methods=['GET', 'POST'])
def submit():
    if request.method == 'POST':
        image = request.files['image']
        filename = image.filename
        file_path = os.path.join('static/uploads', filename)
        image.save(file_path)
        print(file_path)
        pred = prediction(file_path)
        title = disease_info['disease_name'][pred]
        description = disease_info['description'][pred]
        prevent = disease_info['Possible Steps'][pred]
        image_url = disease_info['image_url'][pred]
        print(f"image_url: {image_url}")
        supplement_name = supplement_info['supplement name'][pred]
        supplement_image_url = supplement_info['supplement image'][pred]
        supplement_buy_link = supplement_info['buy link'][pred]
        return render_template('submit.html', title=title, desc=description, prevent=prevent,
                               image_url=image_url, pred=pred, sname=supplement_name, simage=supplement_image_url,
                               buy_link=supplement_buy_link)


@app.route('/market', methods=['GET', 'POST'])
def market():
    return render_template('market.html', supplement_image=list(supplement_info['supplement image']),
                           supplement_name=list(supplement_info['supplement name']),
                           disease=list(disease_info['disease_name']), buy=list(supplement_info['buy link']))


if __name__ == '__main__':
    app.config['JSON_AS_ASCII'] = False
    app.run(debug=True)

模型训练的代码

import pandas as pd
import torch.nn as nn


class CNN(nn.Module):
    def __init__(self, K):
        super(CNN, self).__init__()
        self.conv_layers = nn.Sequential(
            # conv1
            nn.Conv2d(in_channels=3, out_channels=32, kernel_size=3, padding=1),
            nn.ReLU(),
            nn.BatchNorm2d(32),
            nn.Conv2d(in_channels=32, out_channels=32, kernel_size=3, padding=1),
            nn.ReLU(),
            nn.BatchNorm2d(32),
            nn.MaxPool2d(2),
            # conv2
            nn.Conv2d(in_channels=32, out_channels=64, kernel_size=3, padding=1),
            nn.ReLU(),
            nn.BatchNorm2d(64),
            nn.Conv2d(in_channels=64, out_channels=64, kernel_size=3, padding=1),
            nn.ReLU(),
            nn.BatchNorm2d(64),
            nn.MaxPool2d(2),
            # conv3
            nn.Conv2d(in_channels=64, out_channels=128, kernel_size=3, padding=1),
            nn.ReLU(),
            nn.BatchNorm2d(128),
            nn.Conv2d(in_channels=128, out_channels=128, kernel_size=3, padding=1),
            nn.ReLU(),
            nn.BatchNorm2d(128),
            nn.MaxPool2d(2),
            # conv4
            nn.Conv2d(in_channels=128, out_channels=256, kernel_size=3, padding=1),
            nn.ReLU(),
            nn.BatchNorm2d(256),
            nn.Conv2d(in_channels=256, out_channels=256, kernel_size=3, padding=1),
            nn.ReLU(),
            nn.BatchNorm2d(256),
            nn.MaxPool2d(2),
        )

        self.dense_layers = nn.Sequential(
            nn.Dropout(0.4),
            nn.Linear(50176, 1024),
            nn.ReLU(),
            nn.Dropout(0.4),
            nn.Linear(1024, K),
        )

    def forward(self, X):
        out = self.conv_layers(X)

        # Flatten
        out = out.view(-1, 50176)

        # Fully connected
        out = self.dense_layers(out)

        return out


idx_to_classes = {0: 'Apple___Apple_scab',
                  1: 'Apple___Black_rot',
                  2: 'Apple___Cedar_apple_rust',
                  3: 'Apple___healthy',
                  4: 'Blueberry___healthy',
                  5: 'Cherry___healthy',
                  6: 'Cherry___Powdery_mildew',
                  7: 'Corn___Cercospora_leaf_spot Gray_leaf_spot',
                  8: 'Corn___Common_rust',
                  9: 'Corn___Northern_Leaf_Blight',
                  10: 'Corn___healthy',
                  11: 'Grape___Black_rot',
                  12: 'Grape___Esca_(Black_Measles)',
                  13: 'Grape___Leaf_blight_(Isariopsis_Leaf_Spot)',
                  14: 'Grape___healthy',
                  15: 'Orange___Haunglongbing_(Citrus_greening)',
                  16: 'Peach___Bacterial_spot',
                  17: 'Peach___healthy',
                  18: 'Pepper,_bell___Bacterial_spot',
                  19: 'Pepper,_bell___healthy',
                  20: 'Potato___Early_blight',
                  21: 'Potato___Late_blight',
                  22: 'Potato___healthy',
                  23: 'Raspberry___healthy',
                  24: 'Soybean___healthy',
                  25: 'Squash___Powdery_mildew',
                  26: 'Strawberry___Leaf_scorch',
                  27: 'Strawberry___healthy',
                  28: 'Tomato___Bacterial_spot',
                  29: 'Tomato___Early_blight',
                  30: 'Tomato___Late_blight',
                  31: 'Tomato___Leaf_Mold',
                  32: 'Tomato___Septoria_leaf_spot',
                  33: 'Tomato___Spider_mites Two-spotted_spider_mite',
                  34: 'Tomato___Target_Spot',
                  35: 'Tomato___Tomato_Yellow_Leaf_Curl_Virus',
                  36: 'Tomato___Tomato_mosaic_virus',
                  37: 'Tomato___healthy'}


🫓总结

综上,我们基本了解了“一项全新的技术啦” 🍭 ~~

恭喜你的内功又双叒叕得到了提高!!!

感谢你们的阅读😆

后续还会继续更新💓,欢迎持续关注📌哟~

💫如果有错误❌,欢迎指正呀💫

✨如果觉得收获满满,可以点点赞👍支持一下哟~✨

【传知科技 – 了解更多新知识】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/900665.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

我谈椒盐噪声的统计模型

在成像系统发展长河的早期,椒盐噪声曾经不可避免,但是如今,即使在专用成像设备中(如遥感、医学),椒盐噪声也属罕见了。所以,现在在图像处理领域,研究椒盐噪声的去除没有多少实际意义…

kafka 如何减少数据丢失?

大家好,我是锋哥。今天分享关于【kafka 如何减少数据丢失?】面试题?希望对大家有帮助; kafka 如何减少数据丢失? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Apache Kafka 是一个高吞吐量的分布式消息队列,广泛用…

R实验——logistic回归、LDA、QDAKNN

数据集介绍: mpg,miles per gallon即油耗,这个数据集来自卡内基梅隆大学维护的StatLib库。1983年美国统计协会博览会使用了该数据集。这个数据集是对StatLib库中提供的数据集稍加修改的版本。根据Ross Quinlan(1993)在预测属性“mpg”中的使…

python-PyQt项目实战案例:制作一个视频播放器

文章目录 1. 关键问题描述2. 通过OpenCV读取视频/打开摄像头抓取视频3. 通过PyQt 中的 QTimer定时器实现视频播放4. PyQt 视频播放器实现代码参考文献 1. 关键问题描述 在前面的文章中已经分享了pyqt制作图像处理工具的文章,也知道pyqt通过使用label控件显示图像的…

AI视听新体验!浙大阿里提出视频到音乐生成模型MuVi:可解决语义对齐和节奏同步问题

MuVi旨在解决视频到音乐生成(V2M)中的语义对齐和节奏同步问题。 MuVi通过专门设计的视觉适配器分析视频内容,以提取上下文 和时间相关的特征,这些特征用于生成与视频的情感、主题及其节奏和节拍相匹配的音乐。MuVi在音频质量和时间同步方面表现优于现有基线方法,并展示了其在风…

安装nginx实现多ip访问多网站

一.首先安装nginx [rootserver nginx]# systemctl stop firewalld 关防火墙 [rootserver nginx]# setenforce 0 关selinux [rootserver nginx]# mount /dev/sr0 /mnt 挂载点 [rootserver nginx]# dnf install nginx -y 安装nginx二,添加地址 [rootserver…

Electron入门笔记

Electron入门笔记 ElectronElectron 是什么Electron流程模型创建第一个Electron项目配置自动重启主进程和渲染进程通信打包应用 Electron Electron 是什么 跨平台的桌面应用开发框架使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium和 Node.js Electro…

不使用扩展,win10下网页长截图

安卓手机,各大厂商都会有自带的长截图工具, 用起来很方便, 反而是windows桌面版网页长截图, 偶尔会用下,用得不多, 用一次后下次用又忘记了, 今天正好要用到, 特记录下方便以后查阅…

TCP simultaneous open测试

源代码 /*************************************************************************> File Name: common.h> Author: hsz> Brief:> Created Time: 2024年10月23日 星期三 09时47分51秒**********************************************************************…

深度学习技术演进:从 CNN、RNN 到 Transformer 的发展与原理解析

深度学习的技术演进经历了从卷积神经网络(CNN)到循环神经网络(RNN)再到 Transformer 的重要发展。这三个架构分别擅长处理图像、序列数据和多种任务的特征,标志着深度学习在不同领域取得的进步。 1. 卷积神经网络&…

旧电脑安装Win11提示“这台电脑当前不满足windows11系统要求”,安装中断。怎么办?

前言 最近有很多小伙伴也获取了LTSC版本的Win11镜像,很大一部分小伙伴安装这个系统也是比较顺利的。 有顺利安装完成的,肯定也有安装不顺利的。这都是很正常的事情,毕竟这个镜像对电脑硬件要求还是挺高的。 有一部分小伙伴在安装Windows11 …

Flutter项目打包ios, Xcode 发布报错 Module‘flutter barcode_scanner‘not found

报错图片 背景 flutter 开发的 apple app 需要发布新版本,但是最后一哆嗦碰到个报错,这个小问题卡住了我一天,之间的埪就不说了,直接说我是怎么解决的,满满干货 思路 这个报错 涉及到 flutter_barcode_scanner; 所…

基于Python+SQL Server2008实现(GUI)快递管理系统

快递业务管理系统的设计与实现 摘要: 着网络新零售的到来,传统物流在网购的洗礼下迅速蜕变,在这场以互联网为基础的时代变革中,哪家企业能率先转变其工作模式就能最先分得一杯羹,物流管理也不例外。传统的物流管理模式效率低下&a…

聚焦IOC容器刷新环节postProcessBeanFactory(BeanFactory后置处理)专项

目录 一、IOC容器的刷新环节快速回顾 二、postProcessBeanFactory源码展示分析 (一)模版方法postProcessBeanFactory (二)AnnotationConfigServletWebServerApplicationContext 调用父类的 postProcessBeanFactory 包扫描 …

62页PPT | 项目企业信息化现状调研与流程改进方案

这份PPT详细介绍了企业在C2M项目中的信息化现状调研与流程改进方案,涵盖了销售、采购、仓库、物流、CAD制图、CAM编程、计划、生产、质检和财务管理等多个部门的现行流程分析、作业瓶颈、未来流程建议以及针对性的改善建议,旨在通过信息化手段提升企业的…

这是一篇vue3 的详细教程

Vue 3 详细教程 一、Vue 3 简介 Vue.js 是一款流行的 JavaScript 前端框架,用于构建用户界面。Vue 3 是其最新版本,带来了许多新特性和性能优化,使开发更加高效和灵活。 二、环境搭建 安装 Node.js 前往Node.js 官方网站下载并安装适合你…

网站的SSL证书快到期了怎么办?怎么续签?

网站的SSL证书即将到期时,需要续签一个新的证书以保持网站的安全性和信任度。以下是续签SSL证书的一般步骤: 1. 选择证书提供商 如果您之前使用的是免费证书,您可以选择继续使用同一提供商的免费证书服务进行续签。如果您需要更高级别的证书…

Python:背景知识及环境安装

一、计算机的基础概念 1.1 什么是计算机? 最早我们有计算器,但是他只能完成算数运算的功能 而计算机能完成的工作有: (1)算术运算 (2)逻辑判断 (3)数据存储 &#xff08…

【AI学习】Mamba学习(十二):深入理解S4模型

#1024程序员节|征文# HiPPO的学习暂告一段落,按照“HiPPO->S4->Mamba 演化历程”,接着学习S4。 S4对应的论文:《Efficiently Modeling Long Sequences with Structured State Spaces》 文章链接:https://ar5iv…

Two output files share the same path but have different contents

报错 ✘ [ERROR] Two output files share the same path but have different contents: node_modules/.vite/deps_temp_c5811052/three_examples_jsm_controls_orbitControls__js.js7:48:33 PM [vite] error while updating dependencies: Error: Build failed with 1 error: …