plant-id-3 / app.py
for876543's picture
Update app.py
c5b118c
import timm
import torch
import torch.nn.functional as nnf
import gradio as gr
import numpy as np
import pandas as pd
import json
from torchvision.transforms import ToTensor, Resize
from PIL import Image
#model = torch.load("/home/user/app/model_scripted.pkl",map_location=torch.device('cpu'))
model = torch.jit.load("/home/user/app/model_scripted.pkl")
model.eval()
with open("/home/user/app/class_mapping.json", "r") as read_file:
classes = json.load(read_file)
def classify_image(inp):
inp = Image.fromarray(inp)
inp= Resize((300, 300))(inp)
inp= ToTensor()(inp)
inp = torch.unsqueeze(inp, 0)
##print(inp.shape)
#inp = inp.astype(np.uint8).reshape((-1, 3, 300, 300))
##print(inp.shape)
#inp = torch.from_numpy(inp).float()
##confidences = model(inp)
preds = model(inp).data[0]
#means = preds.mean(dim=0, keepdim=True)
#stds = preds.std(dim=0, keepdim=True)
#preds = 4 * (preds - means) / stds
##preds = nnf.normalize(model(inp).data[0], dim=0)
preds = nnf.softmax(preds, dim=0)
preds = [pred.cpu() for pred in preds]
preds = [float(pred.detach()) for pred in preds]
print(pd.Series(preds).describe())
#confidences_dict = {classes[i]: float(confidences.data[0][i]) for i in range(len(confidences.data[0]))}
confidences_dict = {classes[str(i)]: float(preds[i]) for i in range(len(preds))}
return confidences_dict
gr.Interface(fn=classify_image,
inputs=gr.Image(shape=(300, 300)),
outputs=gr.Label(num_top_classes=3)).launch(debug = True)