Cats and dogs
Browse files- app.py +67 -4
- images/cat1.jpeg +0 -0
- images/cat2.jpeg +0 -0
- images/cat3.jpeg +0 -0
- images/dog1.jpeg +0 -0
- images/dog2.jpeg +0 -0
- images/dog3.jpeg +0 -0
- requirements.txt +2 -0
app.py
CHANGED
|
@@ -1,7 +1,70 @@
|
|
|
|
|
| 1 |
import gradio as gr
|
| 2 |
|
| 3 |
-
def
|
| 4 |
-
return
|
| 5 |
|
| 6 |
-
|
| 7 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from fastai.vision.all import *
|
| 2 |
import gradio as gr
|
| 3 |
|
| 4 |
+
def is_cat(x):
|
| 5 |
+
return x[0].isupper()
|
| 6 |
|
| 7 |
+
learn = load_learner('model.pkl')
|
| 8 |
+
|
| 9 |
+
categories = ('Cat', 'Dog')
|
| 10 |
+
|
| 11 |
+
prompts = [
|
| 12 |
+
"# Definitely a {}!",
|
| 13 |
+
"# Well, that must be a {}!",
|
| 14 |
+
"# Oh, that's a {}!",
|
| 15 |
+
"# That's a {}!",
|
| 16 |
+
"# Looks like a {} to me!",
|
| 17 |
+
]
|
| 18 |
+
|
| 19 |
+
failure_prompts = [
|
| 20 |
+
"# I'm not sure what that is.",
|
| 21 |
+
"# I don't know what that thing is.",
|
| 22 |
+
"# I've never seen that before.",
|
| 23 |
+
"# Looks familiar, but unsure.",
|
| 24 |
+
"# Something, something?",
|
| 25 |
+
"# Beats me.",
|
| 26 |
+
]
|
| 27 |
+
|
| 28 |
+
def classify_image(img):
|
| 29 |
+
pred,idx,probs = learn.predict(img)
|
| 30 |
+
return dict(zip(categories, map(float,probs)))
|
| 31 |
+
|
| 32 |
+
def calculate(confidence_threshold, img):
|
| 33 |
+
classifications = classify_image(img)
|
| 34 |
+
classification = random.choice(failure_prompts)
|
| 35 |
+
for key, value in classifications.items():
|
| 36 |
+
if value > confidence_threshold:
|
| 37 |
+
classification = random.choice(prompts).format(key)
|
| 38 |
+
break
|
| 39 |
+
|
| 40 |
+
return [classification, classifications]
|
| 41 |
+
|
| 42 |
+
|
| 43 |
+
with gr.Blocks() as ui:
|
| 44 |
+
|
| 45 |
+
heading = gr.Markdown(" # Dog or Cat?", render=False)
|
| 46 |
+
results = gr.Label(value="Waiting to receive image.", label="Details", show_label=False, render=False)
|
| 47 |
+
|
| 48 |
+
with gr.Row(equal_height=True):
|
| 49 |
+
|
| 50 |
+
with gr.Column():
|
| 51 |
+
gr.Markdown("Upload an image of a cat or a dog.")
|
| 52 |
+
|
| 53 |
+
with gr.Group():
|
| 54 |
+
image = gr.Image(show_label=False, height=300)
|
| 55 |
+
confidence = gr.Slider(minimum=0.0, maximum=1.0, value=0.7, label="Confidence Threshold")
|
| 56 |
+
btn = gr.Button(value="Classify")
|
| 57 |
+
btn.click(calculate, inputs=[confidence, image], outputs=[heading, results])
|
| 58 |
+
|
| 59 |
+
with gr.Column():
|
| 60 |
+
gr.Markdown("Then wait for the magic to happen")
|
| 61 |
+
with gr.Group():
|
| 62 |
+
results.render()
|
| 63 |
+
heading.render()
|
| 64 |
+
|
| 65 |
+
gr.Markdown(" # Examples")
|
| 66 |
+
with gr.Group():
|
| 67 |
+
gr.Examples(inputs=image, examples=['images/cat1.jpeg', 'images/cat2.jpeg', 'images/cat3.jpeg', 'images/dog1.jpeg', 'images/dog2.jpeg', 'images/dog3.jpeg'])
|
| 68 |
+
|
| 69 |
+
if __name__ == "__main__":
|
| 70 |
+
ui.launch()
|
images/cat1.jpeg
ADDED
|
images/cat2.jpeg
ADDED
|
images/cat3.jpeg
ADDED
|
images/dog1.jpeg
ADDED
|
images/dog2.jpeg
ADDED
|
images/dog3.jpeg
ADDED
|
requirements.txt
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
fastai
|
| 2 |
+
gradio
|