import streamlit as st import numpy as np from PIL import Image import base64 import io from tensorflow.keras.models import load_model st.set_page_config(page_title="Hurma Sınıflandırıcı", layout="centered") st.title("📷 Hurma Resmi Sınıflandırma") st.write("Lütfen bir hurma resmi yükleyin ve hangi tür olduğunu tahmin edelim.") # --- MODEL --- try: model = load_model("src/dates_classifier_model.h5") except Exception as e: st.error(f"Model yüklenemedi: {e}") st.stop() class_names = [ 'Rutab', 'Meneifi', 'Sokari', 'Galaxy', 'Shaishe', 'Medjool', 'Ajwa', 'Nabtat Ali', 'Sugaey' ] # --- IMAGE SESSION --- def image_to_base64(image_bytes): return base64.b64encode(image_bytes).decode("utf-8") def base64_to_image(base64_str): return Image.open(io.BytesIO(base64.b64decode(base64_str))).convert("RGB") def process_image(img): img = img.resize((224, 224)) img = np.array(img) / 255.0 img = np.expand_dims(img, axis=0) return img if "image_data" not in st.session_state: st.session_state.image_data = None uploaded_file = st.file_uploader("Resim Seç (.jpg, .jpeg, .png)", type=["jpg", "jpeg", "png"]) if uploaded_file is not None: st.session_state.image_data = image_to_base64(uploaded_file.read()) if st.session_state.image_data: try: img = base64_to_image(st.session_state.image_data) st.image(img, caption="Yüklenen Resim", use_column_width=True) processed_img = process_image(img) prediction = model.predict(processed_img) predicted_class = np.argmax(prediction) st.success(f"Tahmin: **{class_names[predicted_class]}**") except Exception as e: st.error(f"Fotoğraf işlenemedi: {e}")