|
|
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.") |
|
|
|
|
|
|
|
|
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' |
|
|
] |
|
|
|
|
|
|
|
|
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}") |
|
|
|