Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import numpy as np | |
| import joblib | |
| import tensorflow as tf | |
| from tensorflow.keras.applications import ResNet50 | |
| from tensorflow.keras.applications.resnet50 import preprocess_input | |
| from tensorflow.keras.preprocessing.image import img_to_array | |
| import cv2 | |
| # Load KNN model and class labels | |
| knn_model = joblib.load("knn_model.pkl") | |
| class_labels = joblib.load("class_labels.pkl") | |
| # Load ResNet50 model (same as used in training) | |
| resnet_model = ResNet50(weights="imagenet", include_top=False, input_shape=(224, 224, 3)) | |
| resnet_model = tf.keras.Model(inputs=resnet_model.input, outputs=tf.keras.layers.GlobalAveragePooling2D()(resnet_model.output)) | |
| def extract_features(image): | |
| """Extract features from image using ResNet50 (same as training).""" | |
| image = cv2.resize(image, (224, 224)) # Resize image | |
| image = img_to_array(image) | |
| image = np.expand_dims(image, axis=0) | |
| image = preprocess_input(image) | |
| features = resnet_model.predict(image) # Extract features | |
| return features.reshape(1, -1) # Ensure shape matches KNN input | |
| def predict_animal(image): | |
| """Predict the class of the input image.""" | |
| processed_image = extract_features(image) # Extract features | |
| prediction = knn_model.predict(processed_image)[0] # Predict class index | |
| return list(class_labels.keys())[list(class_labels.values()).index(prediction)] # Convert index to label | |
| # Streamlit UI | |
| st.title("🐾 Animal Image Classifier") | |
| uploaded_file = st.file_uploader("📤 Upload an image", type=["jpg", "png", "jpeg"]) | |
| if uploaded_file: | |
| image = cv2.imdecode(np.frombuffer(uploaded_file.read(), np.uint8), 1) | |
| st.image(image, caption="📷 Uploaded Image", use_container_width=True) | |
| if st.button("🔍 Identify"): | |
| prediction = predict_animal(image) | |
| st.success(f"🎯 Predicted Animal: {prediction}") | |