AIGC快速构建图像分类器

本文涉及的产品
交互式建模 PAI-DSW,5000CU*H 3个月
简介: 本文主要说明在win10笔记本上如何构建pipenv虚拟环境,然后利用AIGC工具快速构建图像分类器,最后利用pyinstaller打包生成exe可执行文件,以图文相结合的方式详细说明,供大家参考。

1、安装pipenv虚拟环境管理工具

pip install pipenv
image.png
2、在某目录下创建一个虚拟环境
进入项目目录(比如D:\devCode\d2l-zh\pytorch\learning-d2l\pyqt_img_cls),然后在地址栏输入cmd,进入Windows命令行中,
运行pipenv install命令
image.png
两点需要说明:
(1)python使用的版本:默认的python版本
(2)虚拟环境位置:存放虚拟环境的目录默认指定是C:\Users\xxx.virtualenvs目录下,可通过添加系统环境变量来调整存放目录,小编把存放路径改为D:\devCode\pipenv,所以可以看到上图中的路径为虚拟环境位置:D:\devCode\pipenv\Screen-amTXFjUr。
修改虚拟环境存放位置,需要在win系统环境变量下,增加WORKON_HOME和对应的路径。
image.png
运行完pipenv install命令后,可以在当前目录下看到已经创建 Pipfile和Pipfile.lock两个文件。
image.png
3、修改pipenv的镜像源
(1)修改Pipfile文件

image.png
将url = "https://pypi.org/simple"改为url = "https://pypi.tuna.tsinghua.edu.cn/simple"
(2)修改Pipfile.lock文件
image.png
将Pipfile.lock中的"url": "https://pypi.org/simple",改为
"url": "https://pypi.tuna.tsinghua.edu.cn/simple",
4、运行pipenv shell激活虚拟环境安装依赖包
image.png
(1)安装pyqt5
pipenv install pyqt5
image.png
(2)安装pyqt5-tools
pipenv install pyqt5-tools
image.png
(3)安装pytorch
pipenv install torch==1.13.1
image.png
(4)安装torchvision
pipenv install torchvision==0.14.1
image.png

5、在pycharm中给项目配置安装好的pipenv虚拟环境

选择File-->setting
image.png
image.png
6、利用AIGC工具生成一个简单的图像分离器应用程序
具体功能是:用户可点击上传图片按钮选择图片,上传图片后在gui中可以查看,并通过restnet18模型进行分类,把分类结果显示在gui中。
效果如下
image.png
源代码如下:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QVBoxLayout, QFileDialog
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import Qt
from torchvision import models, transforms
from PIL import Image
import torch
from urllib import request
import os


class ImageClassifierApp(QWidget):
    def __init__(self):
        super().__init__()

        self.init_ui()
        self.download_resnet18_model()

    def init_ui(self):
        self.setWindowTitle('Image Classifier App')

        self.image_label = QLabel(self)
        self.image_label.setAlignment(Qt.AlignCenter)
        self.result_label = QLabel(self)
        self.result_label.setAlignment(Qt.AlignCenter)

        self.load_image_button = QPushButton('Load Image', self)
        self.load_image_button.clicked.connect(self.load_image)
        self.classify_button = QPushButton('Classify Image', self)
        self.classify_button.clicked.connect(self.classify_image)

        layout = QVBoxLayout()
        layout.addWidget(self.load_image_button)
        layout.addWidget(self.image_label)
        layout.addWidget(self.classify_button)
        layout.addWidget(self.result_label)

        self.setLayout(layout)

    def load_image(self):
        file_dialog = QFileDialog()
        file_path, _ = file_dialog.getOpenFileName(self, 'Open Image', '', 'Images (*.png *.jpg *.jpeg)')
        if file_path:
            pixmap = QPixmap(file_path)
            self.image_label.setPixmap(pixmap)
            self.image_label.show()
            self.image_path = file_path

    def download_resnet18_model(self):
        model_path = "resnet18.pth"
        if not os.path.exists(model_path):
            print("Downloading ResNet18 model...")
            url = "https://download.pytorch.org/models/resnet18-5c106cde.pth"
            request.urlretrieve(url, model_path)

    def classify_image(self):
        if hasattr(self, 'image_path'):
            image = Image.open(self.image_path)
            model_path = "resnet18.pth"
            resnet18 = models.resnet18(weights=None)
            resnet18.load_state_dict(torch.load(model_path))
            transform = transforms.Compose([
                transforms.Resize(256),
                transforms.CenterCrop(224),
                transforms.ToTensor(),
                transforms.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)
            resnet18.eval()
            with torch.no_grad():
                output = resnet18(input_batch)

            _, predicted_idx = torch.max(output, 1)
            class_names = self.get_imagenet_classes()
            result = f"Predicted Class: {class_names[predicted_idx.item()]}"
            self.result_label.setText(result)
        else:
            self.result_label.setText("Please load an image first.")

    def get_imagenet_classes(self):
        classes_path = "imagenet_classes.txt"
        if not os.path.exists(classes_path):
            print("Downloading ImageNet classes file...")
            url = "https://raw.githubusercontent.com/anishathalye/imagenet-simple-labels/master/imagenet-simple-labels.json"
            request.urlretrieve(url, classes_path)
        with open(classes_path, "r") as file:
            classes = [line.strip() for line in file.readlines()]
        return classes


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = ImageClassifierApp()
    window.show()
    sys.exit(app.exec_())

7、打包exe
安装打包工具
image.png
运行pyinstaller -F img_cls_pyqt.py命令,进行打包
image.png
打包完成后,可以在当前目录下面生成一个dist文件夹,然后里面有一个exe文件
image.png
将imagenet_classes.txt和resnet18.pth两个依赖文件拷贝到dist目录,双击exe文件运行效果如下:
image.png
本文完毕,希望对您有帮助!

目录
相关文章
|
1天前
|
人工智能 自然语言处理 前端开发
【AIGC】通过人工智能总结PDF文档摘要服务的构建
【5月更文挑战第9天】 使用Python和预训练的AI模型,结合Gradio前端框架,创建了一个文本及PDF摘要聊天机器人。通过加载"FalconsAI/text_summarization"模型,实现文本和PDF的预处理,包括PDF合并与文本提取。聊天机器人接收用户输入,判断是文本还是PDF,然后进行相应的摘要生成。用户可以通过运行`app.py`启动机器人,访问`localhost:7860`与之交互,快速获取内容摘要。这个工具旨在帮助忙碌的人们高效获取信息。
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
【AIGC】基于大语言模型构建多语种聊天机器人(基于Bloom大语言模型)
【5月更文挑战第8天】基于大语言模型Bloom构建多语种聊天机器人
|
3天前
|
存储 人工智能 API
【AIGC】基于检索增强技术(RAG)构建大语言模型(LLM)应用程序
【5月更文挑战第7天】基于检索增强技术(RAG)构建大语言模型(LLM)应用程序实践
|
5月前
|
机器学习/深度学习 数据采集 自然语言处理
24 LLM错误代码补全:机器学习顶会NeurIPS‘23 智能体评估:自行构建数据集Buggy-HumanEval、Buggy-FixEval+错误代码补全+修复模型【网安AIGC专题11.22】
24 LLM错误代码补全:机器学习顶会NeurIPS‘23 智能体评估:自行构建数据集Buggy-HumanEval、Buggy-FixEval+错误代码补全+修复模型【网安AIGC专题11.22】
130 0
|
5月前
|
人工智能 弹性计算 TensorFlow
构建AIGC对话类应用:阿里云GPU产品技术指南
人工智能图形计算(AIGC)对话类应用在当今技术领域中占据着重要地位,为用户提供了更智能、自然的交互方式。本文将详细介绍如何借助阿里云GPU产品,构建高性能的AIGC对话类应用。我们将深入了解产品功能、编写对话类应用代码,并提供具体的使用流程,帮助你在云端快速搭建起这类应用。
179 0
|
5月前
|
搜索推荐 数据可视化 关系型数据库
OneCode AIGC快速无代码构建应用
OneCode是一款基于DDD模型驱动设计的低代码引擎。从2022年底推出以来,现在的最新版本是1.1.0。本文重点是采用OneCode提供的工具来实际搭建一个简单的(员工请销假)业务应用。在搭建过程中穿插讲解一些功能设计思想以及使用方法。
|
7月前
|
搜索推荐 数据可视化 关系型数据库
OneCode 低代码平台 AIGC快速构建无代码应用
OneCode是一款基于DDD模型驱动设计的低代码引擎。从2022年底推出以来,现在的最新版本是1.1.0。本文重点是采用OneCode提供的工具来实际搭建一个简单的(员工请销假)业务应用。在搭建过程中穿插讲解一些功能设计思想以及使用方法。
|
8月前
|
存储 人工智能 自然语言处理
课时1:AIGC无处不在,把AI应用构建于Serverless之上
课时1:AIGC无处不在,把AI应用构建于Serverless之上
485 1
|
8月前
|
存储 人工智能 缓存
课时1:AIGC无处不在,把AI应用构建于Serverless之上(二)
AIGC无处不在,把AI应用构建于Serverless之上
193 1
|
12月前
|
存储 OLAP 数据库
AnalyticDB(ADB)+LLM,构建AIGC时代下企业专属Chatbot
如何基于向量数据库+LLM(大语言模型),打造更懂你的企业专属Chatbot。
5156 2

热门文章

最新文章