import streamlit as st from PIL import Image import numpy as np import io import base64 from tensorflow.keras.models import load_model st.set_page_config(page_title="Hurma Sınıflandırıcı", layout="centered") # Model yükle model = load_model("src/dates_classifier_model.h5") class_names = [ 'Rutab', 'Meneifi', 'Sokari', 'Galaxy', 'Shaishe', 'Medjool', 'Ajwa', 'Nabtat Ali', 'Sugaey' ] # Base64 saklama 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 st.title("📷 Hurma Resmi Sınıflandırma") st.write("Lütfen bir hurma resmi yükleyin.") # Session state ile güvenli saklama if "image_data" not in st.session_state: st.session_state.image_data = None uploaded_file = st.file_uploader("Resim Seçin (.jpg, .png)", type=["jpg", "jpeg", "png"]) # Yeni yükleme varsa base64 sakla if uploaded_file is not None: st.session_state.image_data = image_to_base64(uploaded_file.read()) # Görsel işleme 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 = process_image(img) prediction = model.predict(processed) predicted_class = np.argmax(prediction) st.success(f"Tahmin: **{class_names[predicted_class]}**") except Exception as e: st.error(f"Hata oluştu: {e}")