BeyzaTopbas commited on
Commit
3b1377a
·
verified ·
1 Parent(s): a2f119c

Upload 2 files

Browse files
Files changed (2) hide show
  1. app1.py +118 -0
  2. indian_birds_resnet50.h5 +3 -0
app1.py ADDED
@@ -0,0 +1,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import numpy as np
3
+ from PIL import Image
4
+
5
+ import tensorflow as tf
6
+ from tensorflow.keras.models import load_model
7
+ from tensorflow.keras.applications.resnet50 import preprocess_input
8
+
9
+ # -----------------------------------------------------------
10
+ # 1. Config
11
+ # -----------------------------------------------------------
12
+
13
+ IMG_SIZE = (128, 128) # zelfde als bij training
14
+ MODEL_PATH = "indian_birds_resnet50.h5" # <-- pas aan indien nodig
15
+
16
+ # VUL HIER JOUW LABELS IN (dezelfde volgorde als tijdens training)
17
+ labels = [
18
+ "Asian Green Bee-Eater",
19
+ "Brown-Headed Barbet",
20
+ "Cattle Egret",
21
+ "Common Kingfisher",
22
+ "Common Myna",
23
+ "Common Rosefinch",
24
+ "Common Tailorbird",
25
+ "Coppersmith Barbet",
26
+ "Forest Wagtail",
27
+ "Gray Wagtail",
28
+ "Hoopoe",
29
+ "House Crow",
30
+ "Indian Grey Hornbill",
31
+ "Indian Peafowl",
32
+ "Indian Pitta",
33
+ "Indian Roller",
34
+ "Jungle Babbler",
35
+ "Northern Lapwing",
36
+ "Red Wattled Lapwing",
37
+ "Ruddy Shelduck",
38
+ "Rufous Treepie",
39
+ "Sarus Crane",
40
+ "White Wagtail",
41
+ "White-Breasted Kingfisher",
42
+ "White-Breasted Waterhen"
43
+ ]
44
+
45
+ label_map = {name: i for i, name in enumerate(labels)}
46
+ inv_label_map = {v: k for k, v in label_map.items()}
47
+
48
+ # -----------------------------------------------------------
49
+ # 2. Model laden (gecached)
50
+ # -----------------------------------------------------------
51
+
52
+ @st.cache_resource
53
+ def load_bird_model():
54
+ model = load_model(MODEL_PATH)
55
+ return model
56
+
57
+ model = load_bird_model()
58
+
59
+ # -----------------------------------------------------------
60
+ # 3. Hulpfuncties
61
+ # -----------------------------------------------------------
62
+
63
+ def preprocess_image(img: Image.Image) -> np.ndarray:
64
+ """Resize + preprocess zoals bij training."""
65
+ img = img.convert("RGB").resize(IMG_SIZE)
66
+ x = np.array(img).astype("float32")
67
+ x = preprocess_input(x) # ResNet50 preprocessing
68
+ x = np.expand_dims(x, axis=0) # batch-dimensie
69
+ return x
70
+
71
+ def predict_image(img: Image.Image):
72
+ x = preprocess_image(img)
73
+ probs = model.predict(x, verbose=0)[0] # vorm (25,)
74
+ pred_id = int(np.argmax(probs))
75
+ pred_label = inv_label_map[pred_id]
76
+ pred_prob = float(probs[pred_id])
77
+
78
+ # top-3
79
+ top3_ids = probs.argsort()[-3:][::-1]
80
+ top3 = [(inv_label_map[int(i)], float(probs[i])) for i in top3_ids]
81
+
82
+ return pred_label, pred_prob, top3
83
+
84
+ # -----------------------------------------------------------
85
+ # 4. Streamlit UI
86
+ # -----------------------------------------------------------
87
+
88
+ st.set_page_config(page_title="Indian Bird Classifier", layout="centered")
89
+
90
+ st.title("🕊️ Indian Bird Species Classifier")
91
+ st.write(
92
+ "Upload een vogelafbeelding uit de *25 Indian Bird Species* dataset "
93
+ "en het model (ResNet50) voorspelt de soort."
94
+ )
95
+
96
+ uploaded_file = st.file_uploader(
97
+ "Kies een afbeelding (.jpg, .png)",
98
+ type=["jpg", "jpeg", "png"]
99
+ )
100
+
101
+ if uploaded_file is not None:
102
+ # Afbeelding tonen
103
+ image = Image.open(uploaded_file)
104
+
105
+ st.image(image, caption="Geüploade afbeelding", use_column_width=True)
106
+
107
+ if st.button("🔮 Voorspel vogelsoort"):
108
+ with st.spinner("Model is aan het voorspellen..."):
109
+ pred_label, pred_prob, top3 = predict_image(image)
110
+
111
+ st.success(f"Voorspelling: **{pred_label}** ({pred_prob:.2%} zekerheid)")
112
+
113
+ st.subheader("Top 3 voorspellingen")
114
+ for name, p in top3:
115
+ st.write(f"- {name}: **{p:.2%}**")
116
+
117
+ else:
118
+ st.info("Upload een afbeelding om te starten.")
indian_birds_resnet50.h5 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f5fa69d6edb2bb2551c9a35645c95978bad1ecb6724f00570a85e37911443191
3
+ size 216754364