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

⌈ 传知代码 ⌋ 农作物病害分类(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 MIMETextdisease_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 indexapp = 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.filenamefile_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'] = Falseapp.run(debug=True)

模型训练的代码

import pandas as pd
import torch.nn as nnclass CNN(nn.Module):def __init__(self, K):super(CNN, self).__init__()self.conv_layers = nn.Sequential(# conv1nn.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),# conv2nn.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),# conv3nn.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),# conv4nn.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)# Flattenout = out.view(-1, 50176)# Fully connectedout = self.dense_layers(out)return outidx_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'}

🫓总结

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

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

感谢你们的阅读😆

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

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

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

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

http://www.lryc.cn/news/468729.html

相关文章:

  • CMU生成式人工智能大模型:从入门到放弃(九)
  • HTML基础总结
  • EXCELL中如何两条线画入一张图中,标记坐标轴标题?
  • Zabbix企业级分布式监控环境部署
  • 水轮发电机油压自动化控制系统解决方案介绍
  • 今天不分享技术,分享秋天的故事
  • 转录组上游分析流程(三)
  • excel判断某一列(A列)中的数据是否在另一列(B列)中
  • [环境配置]macOS上怎么查看vscode的commit id
  • .net framework 3.5sp1组件安装进度条不动启动错误怎么解决
  • 学习threejs,利用THREE.ExtrudeGeometry拉伸几何体实现svg的拉伸
  • 大模型之三十二-语音合成TTS(coqui) 之二 fine-tune
  • JVM的内存模型是什么,每个区域的作用是什么,以及面试题(含答案)
  • 《设计模式三》Java代理模式实现
  • vue3中计算属性的用法以及使用场景
  • pytorh学习笔记——cifar10(六)MobileNet V1网络结构
  • 报表系统-连接数据库操作
  • [计算机网络] 常见端口号
  • Linux系统块存储子系统分析记录
  • 大数据——本地威胁检测的全球方法
  • 使用postman接口测试
  • Ubuntu24.04双系统安装(Linux/windows共存一文打通)
  • C++ - deque
  • 国产!瑞芯微米尔RK357核心板革新AIoT设备,8核6T高算力
  • 中国人寿财险青岛市分公司践行绿色金融,助力可持续发展
  • ajax 读取文件
  • 火语言RPA流程组件介绍--开始监听网络请求
  • CSS综合案例——新闻详情
  • 【【自动驾驶】车辆运动学模型】
  • 叉尖避障新科技:因泰立科技ILS-T52三维深度成像激光雷达