File size: 1,732 Bytes
ed2886e
2673557
e1b0813
2673557
e1b0813
2673557
ed2886e
8a38fb8
 
e1b0813
 
 
 
 
 
 
 
 
2673557
 
 
 
 
 
e1b0813
2673557
 
 
 
 
2836436
 
1d863ee
 
2836436
 
 
2673557
 
1d863ee
e1b0813
2836436
2673557
 
8a38fb8
2673557
f59b0ba
2673557
8a38fb8
 
e1b0813
 
8a38fb8
 
2673557
 
e1b0813
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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}")