resnet101 / app.py
modelExperience's picture
Update app.py
1d9aa7b
Raw
History Blame Contribute Delete
3.31 kB
import torch
from torchvision.models import resnet101
from fastapi import FastAPI
# 引入gradio
import gradio as gr
from PIL import Image
import numpy as np
import pickle
from base import BaseUI
# 测试集
from torchvision.transforms import transforms
class Test(BaseUI):
def __init__(self):
super(Test, self).__init__()
def clear_gr(self):
image = None
text = ""
return image, text
def load_model(self):
# 读取模型
model = resnet101()
state_dict = torch.load(self.model_path)
model.load_state_dict(state_dict)
model.eval()
return model
def prediciton_model(self,model,img):
# 预测一个batchsize的数据
pre_y = model(img)
print(pre_y.shape)
_, pre_y = torch.max(pre_y, axis=1)
print("预测的的label下标是: ", pre_y)
# 打开并读取文件
with open(self.contrast_path, 'r', encoding='utf-8') as f:
meta = f.readlines()
for i in meta:
list = i.split()
if pre_y == int(list[0]):
return list[2].rstrip(',')
# 输出标签对应的分类名称
# return str(class_names[pre_y.item()]).split("'")[1]
def model_VGG16(self,value):
# 读取模型
model = self.load_model()
if len(self.transforms_Resize) == 2:
# 修改数据格式
# 将三维数组转换为 PIL.Image 对象
image_pil = Image.fromarray((value * 255).astype(np.uint8))
transform = transforms.Compose([
transforms.Resize((self.transforms_Resize[0],self.transforms_Resize[1])),
transforms.ToTensor(),
transforms.Normalize(mean=self.transforms_Normalize_mean,
std=self.transforms_Normalize_std)
])
img = transform(image_pil)
img = torch.unsqueeze(img, 0)
return self.prediciton_model(model, img)
elif len(self.transforms_Resize) == 1:
# 修改数据格式
# 将三维数组转换为 PIL.Image 对象
image_pil = Image.fromarray((value * 255).astype(np.uint8))
transform = transforms.Compose([
transforms.Resize(self.transforms_Resize[0]),
transforms.CenterCrop(self.transforms_centercrop_value),
transforms.ToTensor(),
transforms.Normalize(mean=self.transforms_Normalize_mean,
std=self.transforms_Normalize_std)
])
img = transform(image_pil)
img = torch.unsqueeze(img, 0)
return self.prediciton_model(model, img)
def webui_framework(self):
# 构建gradio组件
with gr.Blocks() as demo:
with gr.Column():
input = gr.Image()
with gr.Row():
clear = gr.Button(value="Clear")
submit = gr.Button(value="Submit")
text = gr.TextArea()
submit.click(self.model_VGG16, input, text)
clear.click(self.clear_gr, None, [input, text])
if __name__ == '__main__':
with gr.Blocks() as demo:
Test().webui_framework()
demo.launch()