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/'usk-coffee-convnext_nano_935625.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": "USK-Coffee bean classifer (USK-Coffee|Convnext-nano|fast.ai)", "description": "A coffee bean image classifier(ConvNext nano) fine tuned on the USK-Coffee (https://comvis.unsyiah.ac.id/usk-coffee/) dataset using fastai & timm.", "article": article, "examples" : [f'{EXAMPLES_PATH}/{f.name}' for f in EXAMPLES_PATH.iterdir()], "interpretation": "default", "layout": "horizontal", "allow_flagging": "never", "enable_queue": True } 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)