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

news2024/11/24 16:17:51

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 models

model = 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.coloradmin.cn/o/1265546.html

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

相关文章

拆解按摩器:有意思的按键与LED控制电路,学习借鉴一下!

拆解 外观和配色个人感觉还行,比较青春 拉开拉链,拆开外面的布面,里面还有一层纱面 按键部分使用魔术贴固定 拆开纱面后,看到里面的结构,整体是一个海绵 可以看到如下,电池,按键板,充电线的三条…

匿名内部类(内部类) - Java

匿名内部类 1、理解2、语法3、使用(1)基于接口的内部类(2)基于类的内部类(3)基于抽象类的匿名内部类 4、细节&注意事项5、最佳应用场景(1)当作实参直接传递,简洁高效…

Alibaba Java诊断工具Arthas查看Dubbo动态代理类

原创/朱季谦 阅读Dubbo源码过程中&#xff0c;会发现&#xff0c;Dubbo消费端在做远程调用时&#xff0c;默认通过 Javassist 框架为服务接口生成动态代理类&#xff0c;调用javassist框架下的JavassistProxyFactory类的getProxy(Invoker invoker, Class<?>[] interfac…

GO 集成Prometheus

一、Prometheus介绍 Prometheus&#xff08;普罗米修斯&#xff09;是一套开源的监控&报警&时间序列数据库的组合&#xff0c;起始是由SoundCloud公司开发的。随着发展&#xff0c;越来越多公司和组织接受采用Prometheus&#xff0c;社会也十分活跃&#xff0c;他们便…

GAN:GAN论文学习

论文&#xff1a;https://arxiv.org/pdf/1406.2661.pdf 发表&#xff1a;2014 一、GAN简介&#xff1a;Generative Adversarial Network GAN是由Ian Goodfellow于2014年提出&#xff0c;GAN&#xff1a;全名叫做生成对抗网络。GAN的目的就是无中生有&#xff0c;以假乱真。 …

day64 django中间件的复习使用

django中间件 django中间件是django的门户 1.请求来的时候需要先经过中间件才能达到真正的django后端 2.响应走的时候也需要经过中间件 ​ djangp自带七个中间件MIDDLEWARE [django.middleware.security.SecurityMiddleware,django.contrib.sessions.middleware.SessionMiddle…

java开发需要掌握的maven相关知识和Junit单元测试

maven简介 什么是maven&#xff1a; maven是一款管理和构建java项目的工具&#xff0c;是apache旗下的一个开源项目。 maven的作用&#xff1a; 依赖管理&#xff1a; 方便快捷的管理项目依赖的资源&#xff08;jar包&#xff09;。 项目构建&#xff1a; 标准化的跨平台&#…

MacBook如何远程控制华为手机?

将手机屏幕投影到电脑上可以提供更大的屏幕空间&#xff0c;方便观看电影、浏览照片、阅读文档等。然而&#xff0c;除了想将手机投屏到电脑&#xff0c;还想要在电脑上直接操作手机&#xff0c;有方法可以实现吗&#xff1f; 现在使用AirDroid Cast的远程控制手机功能就可以实…

【数据结构】树与二叉树(廿五):树搜索给定结点的父亲(算法FindFather)

文章目录 5.3.1 树的存储结构5. 左儿子右兄弟链接结构 5.3.2 获取结点的算法1. 获取大儿子、大兄弟结点2. 搜索给定结点的父亲a. 算法FindFatherb. 算法解析c. 代码实现 3. 代码整合 5.3.1 树的存储结构 5. 左儿子右兄弟链接结构 【数据结构】树与二叉树&#xff08;十九&…

Linux dig指令的十三种用法

文章目录 dig指令有哪些作用dig 具体用法推荐阅读 dig指令有哪些作用 DIG命令(Domain Information Groper命令)是一个网络工具&#xff0c;具有基本的命令行接口&#xff0c;用于进行不同的DNS(域名系统)查询。您可以使用DIG命令: 诊断您的域名服务器。检查所有这些服务器或每…

《数据结构与测绘程序设计》试题详细解析(仅供参考)

一. 选择题&#xff08;每空2分&#xff0c;本题共30分&#xff09; &#xff08;1&#xff09;在一个单链表中&#xff0c;已知q所指结点是p所指结点的前驱结点&#xff0c;若在q和p之间插入结点s&#xff0c;则执行( B )。 A. s->nextp->next; p->nexts; …

Qt路径和Anaconda中QT路径冲突(ubuntu系统)

最近做一个项目需要配置QT库&#xff0c;本项目配置环境如下&#xff1a; Qt version 5 Operating system, version and so on ubuntu 20.04 Description 之前使用过anaconda环境安装过QT5&#xff0c;所以在项目中CMakeLists文件中使用find_package时候&#xff0c;默认使用An…

C#,数值计算——插值和外推,径向基函数插值(RBF_inversemultiquadric)的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public class RBF_inversemultiquadric : RBF_fn { private double r02 { get; set; } public RBF_inversemultiquadric(double scale 1.0) { this.r02 Globals.SQR(scale); …

Spring Boot实现图片上传和展示

Spring Boot实现图片上传和展示 本文将介绍如何使用Spring Boot框架搭建后端服务&#xff0c;实现接收前端上传的图片并保存到resources/images目录下。同时&#xff0c;我们还将展示如何在前端编写一个HTML页面&#xff0c;实现上传图片和从resources/images目录下获取图片并…

PHP+vue+elementui高校学生社团信息管理系统o7q4a

社团是由高校用户依据兴趣爱好自愿组成&#xff0c;按照章程自主开展活动的用户组织。高校社团是实施素质教育的重要途径和有效方式&#xff0c;在加强校园文化建设、提高用户综合素质、引导用户适应社会、促进用户交流等方面发挥着重要作用&#xff0c;是新形势下有效凝聚用户…

[Python入门系列之十一]在windows上安装OpenCV

1-安装OpenCV 如果是python3.7–python3.9(已测试)&#xff0c;直接安装即可 注&#xff1a;conda需要先激活虚拟环境后再安装 pip install opencv-python如果安装速度慢&#xff0c;使用下面的指令&#xff1a; pip install opencv-python -i https://pypi.tuna.tsinghua.e…

AIGC-文生视频

stable diffusion&#xff1a; stable diffusion原理解读通俗易懂&#xff0c;史诗级万字爆肝长文&#xff0c;喂到你嘴里 - 知乎个人网站一、前言&#xff08;可跳过&#xff09;hello&#xff0c;大家好我是 Tian-Feng&#xff0c;今天介绍一些stable diffusion的原理&#…

Micropython STM32F4外部中断实验

Micropython STM32F4外部中断实验 &#x1f4cc;固件刷可参考前面一篇《STM32刷Micropython固件参考指南》&#x1f33f; 相关篇《Micropython STM32F4入门点灯》&#x1f4cd;固件下载&#xff1a;https://micropython.org/download/?mcustm32f4&#x1f516;本例程基于STM32…

「C++」红黑树的插入(手撕红黑树系列)

&#x1f4bb;文章目录 &#x1f4c4;前言红黑树概念红黑树的结构红黑树节点的定义红黑树的定义红黑树的调整 红黑树的迭代器迭代器的声明operator( )opeartor--( ) 完整代码 &#x1f4d3;总结 &#x1f4c4;前言 作为一名程序员相信你一定有所听闻红黑树的大名&#xff0c;像…

【区块链】产品经理的NFT初探

常见的FT如比特币&#xff08;BTC&#xff09;&#xff0c;以太币&#xff08;ETH&#xff09;等&#xff0c;两个代币之间是完全可替换的。而NFT具有唯一性&#xff0c;不可以互相替换。本文作者对NET的发展现状、相关协议、应用场景等方面进行了分析&#xff0c;一起来看一下…