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

1 介绍

本项目提供中草药数据集,使用gpu、cpu版本的torch版本进行训练,将模型部署到后端flask,最后使用微信小程序进行展示出来。

数据爬虫可以参考:http://t.csdnimg.cn/7Olus 项目中的爬虫代码,并且本项目提供相同的爬虫代码。

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

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

python 复制代码
    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 模型训练和验证

python 复制代码
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")
python 复制代码
#  检查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))  # 打印测试集的大小。
python 复制代码
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端

python 复制代码
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中

python 复制代码
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

相关推荐
hugh_oo13 分钟前
100 天学会爬虫 · Day 16:如何分析登录接口?爬虫视角下的登录流程拆解方法
爬虫
Z单单15 分钟前
微信小程序订单信息录入路径设置
微信小程序·小程序
盼哥PyAI实验室1 小时前
Python 爬虫实战:从 Ajax 到 POST 请求,完整爬取汉堡王门店与产品数据
爬虫·python·ajax
码界奇点1 小时前
基于Spring Boot和微信小程序的小程序商城系统设计与实现
spring boot·微信小程序·小程序·毕业设计·源代码管理
计算机毕设指导62 小时前
基于微信小程序的智慧社区娱乐服务管理系统【源码文末联系】
java·spring boot·微信小程序·小程序·tomcat·maven·娱乐
QuiteCoder3 小时前
机器学习视角下的鸢尾花形态学分类与自动化流水线架构研究报告
机器学习·分类·自动化
JHC0000003 小时前
推特(X)平台推文自动保存(支持保存所有推文相关数据到服务器)
运维·服务器·爬虫·python·dreamweaver
赵庆明老师3 小时前
uniapp 微信小程序页面JS模板
javascript·微信小程序·uni-app
啊阿狸不会拉杆3 小时前
《数字图像处理》实验8-图像识别与分类
图像处理·人工智能·算法·分类·数据挖掘·数字图像处理
幽络源小助理4 小时前
SpringBoot国内旅游景点数据爬虫与可视化分析系统源码 – JavaWeb项目分享
spring boot·后端·爬虫