Dima Timofeev commited on
Commit
c0430d0
·
1 Parent(s): 26d9e8e

minimal app

Browse files
Files changed (2) hide show
  1. app.py +177 -2
  2. requirements.txt +4 -0
app.py CHANGED
@@ -1,4 +1,179 @@
 
 
 
 
1
  import streamlit as st
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
- x = st.slider('Select a value')
4
- st.write(x, 'squared is', x * x)
 
1
+ from copy import deepcopy
2
+
3
+ from huggingface_hub import from_pretrained_fastai
4
+ from PIL import Image
5
  import streamlit as st
6
+ import pandas as pd
7
+
8
+ _LABELS = (
9
+ "affenpinscher",
10
+ "afghan_hound",
11
+ "african_hunting_dog",
12
+ "airedale",
13
+ "american_staffordshire_terrier",
14
+ "appenzeller",
15
+ "australian_terrier",
16
+ "basenji",
17
+ "basset",
18
+ "beagle",
19
+ "bedlington_terrier",
20
+ "bernese_mountain_dog",
21
+ "black-and-tan_coonhound",
22
+ "blenheim_spaniel",
23
+ "bloodhound",
24
+ "bluetick",
25
+ "border_collie",
26
+ "border_terrier",
27
+ "borzoi",
28
+ "boston_bull",
29
+ "bouvier_des_flandres",
30
+ "boxer",
31
+ "brabancon_griffon",
32
+ "briard",
33
+ "brittany_spaniel",
34
+ "bull_mastiff",
35
+ "cairn",
36
+ "cardigan",
37
+ "chesapeake_bay_retriever",
38
+ "chihuahua",
39
+ "chow",
40
+ "clumber",
41
+ "cocker_spaniel",
42
+ "collie",
43
+ "curly-coated_retriever",
44
+ "dandie_dinmont",
45
+ "dhole",
46
+ "dingo",
47
+ "doberman",
48
+ "english_foxhound",
49
+ "english_setter",
50
+ "english_springer",
51
+ "entlebucher",
52
+ "eskimo_dog",
53
+ "flat-coated_retriever",
54
+ "french_bulldog",
55
+ "german_shepherd",
56
+ "german_short-haired_pointer",
57
+ "giant_schnauzer",
58
+ "golden_retriever",
59
+ "gordon_setter",
60
+ "great_dane",
61
+ "great_pyrenees",
62
+ "greater_swiss_mountain_dog",
63
+ "groenendael",
64
+ "ibizan_hound",
65
+ "irish_setter",
66
+ "irish_terrier",
67
+ "irish_water_spaniel",
68
+ "irish_wolfhound",
69
+ "italian_greyhound",
70
+ "japanese_spaniel",
71
+ "keeshond",
72
+ "kelpie",
73
+ "kerry_blue_terrier",
74
+ "komondor",
75
+ "kuvasz",
76
+ "labrador_retriever",
77
+ "lakeland_terrier",
78
+ "leonberg",
79
+ "lhasa",
80
+ "malamute",
81
+ "malinois",
82
+ "maltese_dog",
83
+ "mexican_hairless",
84
+ "miniature_pinscher",
85
+ "miniature_poodle",
86
+ "miniature_schnauzer",
87
+ "newfoundland",
88
+ "norfolk_terrier",
89
+ "norwegian_elkhound",
90
+ "norwich_terrier",
91
+ "old_english_sheepdog",
92
+ "otterhound",
93
+ "papillon",
94
+ "pekinese",
95
+ "pembroke",
96
+ "pomeranian",
97
+ "pug",
98
+ "redbone",
99
+ "rhodesian_ridgeback",
100
+ "rottweiler",
101
+ "saint_bernard",
102
+ "saluki",
103
+ "samoyed",
104
+ "schipperke",
105
+ "scotch_terrier",
106
+ "scottish_deerhound",
107
+ "sealyham_terrier",
108
+ "shetland_sheepdog",
109
+ "shih-tzu",
110
+ "siberian_husky",
111
+ "silky_terrier",
112
+ "soft-coated_wheaten_terrier",
113
+ "staffordshire_bullterrier",
114
+ "standard_poodle",
115
+ "standard_schnauzer",
116
+ "sussex_spaniel",
117
+ "tibetan_mastiff",
118
+ "tibetan_terrier",
119
+ "toy_poodle",
120
+ "toy_terrier",
121
+ "vizsla",
122
+ "walker_hound",
123
+ "weimaraner",
124
+ "welsh_springer_spaniel",
125
+ "west_highland_white_terrier",
126
+ "whippet",
127
+ "wire-haired_fox_terrier",
128
+ "yorkshire_terrier",
129
+ )
130
+
131
+
132
+ def get_breed(path):
133
+ pass
134
+
135
+
136
+ @st.cache_resource
137
+ def get_predictor():
138
+ return from_pretrained_fastai("TheDima/resnet50-dog-breed-identification")
139
+
140
+
141
+ def predict(image):
142
+ # Get predictions
143
+ predictor = get_predictor()
144
+ pred, pred_idx, probs = predictor.predict(image)
145
+ return pred, probs[pred_idx].item(), probs
146
+
147
+
148
+ def print_probabilities(probs, labels, top_n=10):
149
+ df = pd.DataFrame({"Label": labels, "Probability": probs})
150
+ df = df.sort_values(by="Probability", ascending=False).head(top_n)
151
+ st.dataframe(df, column_order=["Label", "Probability"], hide_index=True)
152
+
153
+
154
+ st.title("Dog Breed Recognition")
155
+
156
+ uploaded_file = st.file_uploader("Upload a doggy...", type=["jpg", "jpeg"])
157
+ if uploaded_file is not None:
158
+ # Display uploaded image
159
+ image = Image.open(uploaded_file)
160
+ image_copy = deepcopy(image)
161
+
162
+ # Make a prediction
163
+ with st.spinner("Checking..."):
164
+ pred, prob, probs = predict(image)
165
+
166
+ centered_html = f"""
167
+ <div style="text-align: center;">
168
+ <h3>It is {pred.replace("_", " ").title()}! (I am {100*prob:.1f}% sure 😉)</h3> <br>
169
+ </div>
170
+ """
171
+ st.markdown(centered_html, unsafe_allow_html=True)
172
+ st.image(image_copy, caption="Uploaded doggy", use_column_width=True)
173
+
174
+ st.markdown("---")
175
+ st.markdown("Nerdy Top-10 Probabilities: ")
176
+ print_probabilities(probs, _LABELS)
177
 
178
+ st.markdown("---")
179
+ st.write(f"We know only 120 breeds: {', '.join(_LABELS).replace('_', ' ').title()}.")
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ huggingface_hub
2
+ pandas
3
+ pillow
4
+ streamlit