import streamlit as st | |
import numpy as np | |
from PIL import Image | |
from tensorflow.keras.models import load_model | |
from tensorflow.keras.applications.resnet50 import preprocess_input | |
class_names = [ | |
'Asian Green Bee-Eater', | |
'Brown-Headed Barbet', | |
'Cattle Egret', | |
'Common Kingfisher', | |
'Common Myna', | |
'Common Rosefinch', | |
'Common Tailorbird', | |
'Coppersmith Barbet', | |
'Forest Wagtail', | |
'Gray Wagtail', | |
'Hoopoe', | |
'House Crow', | |
'Indian Grey Hornbill', | |
'Indian Peacock', | |
'Indian Pitta', | |
'Indian Roller', | |
'Jungle Babbler', | |
'Northern Lapwing', | |
'Red-Wattled Lapwing', | |
'Ruddy Shelduck', | |
'Rufous Treepie', | |
'Sarus Crane', | |
'White Wagtail', | |
'White-Breasted Kingfisher', | |
'White-Breasted Waterhen' | |
] | |
model = load_model("src/indianBirds_InceptionV3Model.keras") | |
st.title("Indian Bird Species Classifier") | |
uploaded_file = st.file_uploader("Upload a bird image", type=["jpg", "jpeg", "png"]) | |
if uploaded_file: | |
image = Image.open(uploaded_file).convert("RGB") | |
st.image(image, use_container_width=True) | |
img = image.resize((224, 224)) | |
x = np.expand_dims(np.array(img), axis=0) | |
x = preprocess_input(x) | |
preds = model.predict(x) | |
idx = np.argmax(preds[0]) | |
st.markdown(f"### Predicted Species: **{class_names[idx]}**") | |