Spaces:
Sleeping
Sleeping
#imports and class names setup | |
import gradio as gr | |
import os | |
import torch | |
import timeit | |
from model import create_eff_model | |
from timeit import default_timer as timer | |
from typing import Tuple,Dict | |
#setup class names | |
with open("class_names.txt","r") as f: | |
class_names=[food.strip() for food in f.readlines()] | |
##model and transforms | |
eff_model,eff_trans=create_eff_model() | |
eff_model.load_state_dict(torch.load(f="eff_b2_20.pth", | |
map_location=torch.device('cpu'))) | |
##predict function | |
def predict(img): | |
#start a timer | |
start_timer=timeit.default_timer() | |
#Transform the input image for use with effnetb2 | |
img=eff_trans(img).unsqueeze(0) | |
#put model into eval mode,make prediction` | |
eff_model.eval() | |
with torch.inference_mode(): | |
#pass transformed image thorugh the model and turn the prediction logits into probabilities | |
pred_probs=torch.softmax(eff_model(img),dim=1) | |
#create a prediction label and prediction probability dictionary | |
pred_labels_and_probs={class_names[i]:float(pred_probs[0][i]) for i in range(len(class_names))} | |
#pred_labels_and_probs=pred_probs | |
#calculate pred time | |
end_time=timeit.default_timer() | |
pred_time=end_time-start_timer | |
#return pred dictionary and pred time | |
return pred_labels_and_probs,f'{pred_time:.4f}' | |
#gradio function | |
#create title,description and article | |
title="Foodvision BIG" | |
description="An efficientnet B2 feature extractor" | |
article="Created in garage" | |
#create example list | |
example_list=[['examples/'+example] for example in os.listdir('examples')] | |
demo=gr.Interface(fn=predict, | |
inputs=gr.Image(type="pil"), | |
outputs=[gr.Label(num_top_classes=5,label="Predictions"), | |
gr.Number(label="Prediction time (s)")], | |
examples=example_list, | |
title=title, | |
description=description, | |
article=article) | |
demo.launch() | |