File size: 2,682 Bytes
b58ae7b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
from fastai.vision.all import *
import gradio as gr
import pathlib
import os
import platform

# The below is for testing your app.py on a Windows laptop e.g. Visual Studio Code 
print(platform.system())
if platform.system() == 'Windows':
  # NotImplementedError: cannot instantiate 'PosixPath' on your system
  # workaround for Windows where path seperator is '/'. Linux is '\'.
  posix_backup = pathlib.PosixPath # remember the original path thingy
  try:
      pathlib.PosixPath = pathlib.WindowsPath # change to Windows
      path = Path() # get current path in your runtime environment e.g. laptop, Colab, HuggingFace, Kaggle
      learn = load_learner(path/'export.pkl')
  finally: # when program is finished, switch back to original path thingy
      pathlib.PosixPath = posix_backup
else: # Darwin aka MacOS, Linux, etc...
  path = Path()
  learn = load_learner(path/'export.pkl')

# Not needed, since we don't return a dict below
# same as bear_types = ['grizzly','black','teddy']
# bear_types = learn.dls.vocab
# categories = bear_types

def classify_image(img):
  pred,idx,probs = learn.predict(img)
  prob = float(probs[idx]) * 100
  return f"This is a {pred}.\n Confidence Level : {prob:.4f}%"
  # return dict(zip(categories, map(float,probs))) # not really needed here

# Define example images
# These must be local images in your repository.
# URLs to images don't seem to work well ?
# Image source: Wikipedia
examples = ['images/chicken.jpg',
            'images/dog.jpg',
            'images/fish.jpg']

# Define input component for image upload
image_input = gr.Image()

# Define output component for displaying text
text_output = gr.Textbox(type="text", label="Output")

# Define Gradio Interface
iface = gr.Interface(
    fn=classify_image, # the function we defined above
    inputs=image_input,
    outputs=text_output,
    # live=True means you click on any element
    # and all other elements update immediately. 
    # Therefore, there is no Submit button needed anymore.
    # Works fine, but may break Clear button, 
    # since there is no image uploaded yet to predict -> Error
    # AssertionError: Expected an input
    # live=False will give you a Submit button.
    live=True, 
    examples=examples
)

# Run the interface
# To create a public link, set `share=True` in `launch()`.
# iface.launch(share=True)

# Note: share is for notebooks
# When deploying to HuggingFace leave it out, or else -> Error ?
iface.launch()

# Use CTRL-C to stop server in Visual Studio Code 

# ^CKeyboard interruption in main thread... closing server.                                         
# Killing tunnel 127.0.0.1:7860 <> https://6479f1bbea54b008f.gradio.live