jalesummak's picture
Update src/streamlit_app.py
648a760 verified
Raw
History Blame Contribute Delete
2.01 kB
import os
import streamlit as st
import tensorflow as tf
import numpy as np
from PIL import Image
IMG_SIZE = 224
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MODEL_PATH = os.path.join(BASE_DIR, "cobb_angle_model_mae_3_42.keras")
@st.cache_resource
def load_model():
return tf.keras.models.load_model(MODEL_PATH)
model = load_model()
def yorumla(angle):
if angle < 10:
return "Normal, takip yok"
elif angle < 25:
return "Hafif skolyoz, 6 ayda bir kontrol"
elif angle < 40:
return "Orta şiddetli, korse tedavisi"
else:
return "Şiddetli, cerrahi düşünülür"
def predict_cobb(image):
image = image.convert("RGB")
image = image.resize((IMG_SIZE, IMG_SIZE))
arr = np.array(image) / 255.0
arr = np.expand_dims(arr, axis=0)
pred = model.predict(arr, verbose=0)[0][0]
return float(pred)
st.set_page_config(
page_title="Cobb Angle Estimator",
page_icon="🩻",
layout="centered"
)
st.title("🩻 Cobb Angle Estimator")
st.write("X-Ray görüntüsünden tahmini Cobb açısı ve klinik yorum üretir.")
uploaded_file = st.file_uploader(
"X-Ray görüntüsü yükle",
type=["jpg", "jpeg", "png"]
)
if uploaded_file is not None:
image = Image.open(uploaded_file)
st.image(image, caption="Yüklenen Görüntü", use_container_width=True)
if st.button("Tahmin Et"):
pred_angle = predict_cobb(image)
comment = yorumla(pred_angle)
st.subheader("Tahmin Sonucu")
st.metric("Tahmini Cobb Açısı", f"{pred_angle:.2f}°")
if pred_angle < 10:
st.success(comment)
elif pred_angle < 25:
st.info(comment)
elif pred_angle < 40:
st.warning(comment)
else:
st.error(comment)
st.warning(
"Bu sistem yalnızca araştırma ve eğitim amaçlıdır. "
"Kesin tanı ve tedavi kararı için uzman hekim değerlendirmesi gereklidir."
)