Tom Beer commited on
Commit
4a14ce2
·
0 Parent(s):

git restart

Browse files
Files changed (7) hide show
  1. .gitattributes +35 -0
  2. README.md +13 -0
  3. app.py +22 -0
  4. bird_app.py +30 -0
  5. index_to_name.json +1 -0
  6. model4app.onnx +3 -0
  7. requirements.txt +6 -0
.gitattributes ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tflite filter=lfs diff=lfs merge=lfs -text
29
+ *.tgz filter=lfs diff=lfs merge=lfs -text
30
+ *.wasm filter=lfs diff=lfs merge=lfs -text
31
+ *.xz filter=lfs diff=lfs merge=lfs -text
32
+ *.zip filter=lfs diff=lfs merge=lfs -text
33
+ *.zst filter=lfs diff=lfs merge=lfs -text
34
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
35
+ model4app.onnx filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Birds Israel
3
+ emoji: 🐢
4
+ colorFrom: yellow
5
+ colorTo: green
6
+ sdk: streamlit
7
+ sdk_version: 1.15.2
8
+ app_file: app.py
9
+ pinned: false
10
+ license: cc-by-nc-nd-4.0
11
+ ---
12
+
13
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.py ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from PIL import Image
3
+
4
+ from bird_app import BirdApp
5
+
6
+ bird_app = BirdApp()
7
+
8
+ st.title("A Classifier for Israel's birds")
9
+
10
+ file_name = st.file_uploader("Upload an image of a bird")
11
+
12
+ if file_name is not None:
13
+ col1, col2 = st.columns(2)
14
+ image = Image.open(file_name)
15
+
16
+ predictions = bird_app.predict(file_name)
17
+
18
+ col1.image(image, use_column_width=True)
19
+
20
+ col2.header(f"Predicted species: {predictions['class_name']}")
21
+ # for p in predictions:
22
+ # col2.subheader(f"{ p['label'] }: { round(p['score'] * 100, 1)}%")
bird_app.py ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import numpy as np
3
+ import onnxruntime
4
+ from PIL import Image
5
+
6
+
7
+ class BirdApp:
8
+ def __init__(self):
9
+ self.onnx_session = onnxruntime.InferenceSession("model4app2.onnx")
10
+ self.img_class_map = get_img_class_map()
11
+
12
+ def predict(self, x):
13
+ input_tensor = transform_image(x)
14
+ onnx_inputs = {self.onnx_session.get_inputs()[0].name: input_tensor}
15
+ img_label = self.onnx_session.run(None, onnx_inputs)[0].argmax()
16
+ return {'class_id': int(img_label), 'class_name': self.img_class_map[str(img_label)]}
17
+
18
+
19
+ def transform_image(infile) -> np.array:
20
+ image = (Image
21
+ .open(infile)
22
+ .resize((224, 224))
23
+ )
24
+ return np.expand_dims(np.array(image, dtype=np.float32), 0).transpose([0, 3, 1, 2])
25
+
26
+
27
+ def get_img_class_map():
28
+ with open('index_to_name.json') as f:
29
+ img_class_map = json.load(f)
30
+ return img_class_map
index_to_name.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"0": "blackbird", "1": "blackcap", "2": "bulbul", "3": "crow", "4": "jay", "5": "kestrel", "6": "kingfisher", "7": "laughing_dove", "8": "myna", "9": "parakeet", "10": "pigeon", "11": "prinia", "12": "sparrow", "13": "sunbird", "14": "swallow", "15": "swift", "16": "tit", "17": "wagtail"}
model4app.onnx ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9f388784ed04cc4bb2c88300e9f42e1d038d69bf82a06ee1e684819c08b7610c
3
+ size 94167203
requirements.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ Pillow~=9.0.0
2
+ onnxruntime
3
+ numpy==1.22.3
4
+ jsonschema~=4.4.0
5
+ Flask==2.1.2
6
+ gunicorn==20.0.4