File size: 1,477 Bytes
86cfa24
 
 
 
 
 
3d3df40
 
 
 
86cfa24
 
 
3d3df40
 
86cfa24
3d3df40
86cfa24
3d3df40
 
 
86cfa24
 
 
 
 
463babe
ee64bdc
86cfa24
 
 
f160d6c
86cfa24
 
3d3df40
86cfa24
 
 
 
a4d4ec4
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import gradio
from fastai.vision.all import *

MODELS_PATH = Path('./models')
EXAMPLES_PATH = Path('./examples')

# Required function expected by fastai learn object
# it wasn't exported as a part of the pickle
# as it was defined externally to the learner object
# during the training time dataloaders setup
def label_func(filepath):
    return filepath.parent.name

LEARN = load_learner(MODELS_PATH/'food-101-resnet50.pkl')
LABELS = LEARN.dls.vocab

def gradio_predict(img):
    img = PILImage.create(img)
    _pred, _pred_idx, probs = LEARN.predict(img)
    labels_probs = {LABELS[i]: float(probs[i]) for i, _ in enumerate(LABELS)}
    return labels_probs

with open('gradio_article.md') as f:
    article = f.read()

interface_options = {
    "title": "Food Image Classifier (Food-101|ResNet50|fast.ai)",
    "description": "A food image classifier trained on the Food-101 dataset, using ResNet50 via fast.ai.(Dataset from : https://data.vision.ee.ethz.ch/cvl/datasets_extra/food-101/)",
    "article": article,
    "examples" : [f'{EXAMPLES_PATH}/{f.name}' for f in EXAMPLES_PATH.iterdir()],
    "layout": "horizontal",
    "theme": "default",
}

demo = gradio.Interface(fn=gradio_predict,
                      inputs=gradio.inputs.Image(shape=(512, 512)),
                      outputs=gradio.outputs.Label(num_top_classes=5),
                      **interface_options)

launch_options = {
    "enable_queue": True,
    "share": False, 
}

demo.launch(**launch_options)