Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import numpy as np | |
| from PIL import Image | |
| import tensorflow as tf | |
| from tensorflow.keras.models import load_model | |
| from pathlib import Path | |
| st.set_page_config(page_title="Rice Classification", page_icon="π", layout="centered") | |
| MODEL_PATH = Path(__file__).resolve().parents[1] / "src/rice_efficientnet_feature_extractor.keras" | |
| CLASS_NAMES = ["Arborio", "Basmati", "Ipsala", "Jasmine", "Karacadag"] | |
| def load_cached_model(): | |
| return load_model(MODEL_PATH) | |
| model = load_cached_model() | |
| def preprocess(File): | |
| img = Image.open(File).convert("RGB") | |
| img = img.resize((224,224)) | |
| x = np.array(img) | |
| x = np.expand_dims(x,axis=0) | |
| return img, x | |
| """def topk(prob, k=3): | |
| idx = np.argsort(prob)[::-1][:k] | |
| return idx, prob[idx] | |
| """ | |
| st.title("π Rice Classification (Transfer Learning)") | |
| st.write("Upload an image and get the predicted rice type.") | |
| """try: | |
| model = load_model() | |
| except Exception as e: | |
| st.error(f"Model load failed. Check MODEL_PATH.\n\nError: {e}") | |
| st.stop()""" | |
| file = st.file_uploader("Upload an image", type=["jpg", "jpeg"]) | |
| if file: | |
| pil_img, x = preprocess(file) | |
| preds = model.predict(x, verbose=0) | |
| preds = np.array(preds) | |
| st.image(pil_img, caption="Uploaded image", use_container_width=True) | |
| prob = preds[0] | |
| best_idx = np.argmax(prob) | |
| best_label = CLASS_NAMES[best_idx] | |
| best_conf = prob[best_idx] | |
| st.subheader("Prediction") | |
| st.success(f"{best_label} | confidence: {best_conf}") | |
| else: | |
| st.caption("No image uploaded yet.") | |