微信小程序+中草药分类+爬虫+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

相关推荐
独隅36 分钟前
PyTorch 模型性能优化:图像分类与 NLP 模型实战指南
pytorch·性能优化·分类
喵手7 小时前
Python爬虫实战:手把手教你Python 自动化构建志愿服务岗位结构化数据库!
爬虫·python·自动化·数据采集·爬虫实战·零基础python爬虫教学·志愿服务岗位结构数据库打造
小邓睡不饱耶7 小时前
Python多线程爬虫实战:爬取论坛帖子及评论
开发语言·爬虫·python
喵手7 小时前
Python爬虫实战:手把手教你如何采集开源字体仓库目录页(Google Fonts / 其他公开字体目录)!
爬虫·python·自动化·数据采集·爬虫实战·零基础python爬虫教学·开源字体仓库目录页采集
志遥7 小时前
我把 Sentry 接进了 7 端小程序:从异常捕获、Breadcrumb 到 Source Map 定位
微信小程序·监控
云起SAAS8 小时前
在线客服系统源码 | 支持PC管理端+H5访客端+实时聊天
微信小程序·ai编程·看广告变现轻·在线客服系统源码
向哆哆8 小时前
人脸眼部特征检测数据集(千张图片已划分、已标注)适用于YOLO系列深度学习分类检测任务
深度学习·yolo·分类
axinawang8 小时前
正则表达式
爬虫·python
2501_933907218 小时前
如何通过上海本凡科技获得优质的小程序开发服务?
科技·微信小程序·小程序
喵手9 小时前
Python爬虫实战:手把手带你打造私人前端资产库 - Python 自动化抓取开源 SVG 图标全目录!
爬虫·python·自动化·爬虫实战·零基础python爬虫教学·前端资产库打造·采集svg图标目录