Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| from tensorflow.keras.models import load_model | |
| from PIL import Image | |
| import numpy as np | |
| # ----------------------------- | |
| # SAYFA AYARLARI | |
| # ----------------------------- | |
| st.set_page_config( | |
| page_title="Deri Kanseri Sınıflandırma", | |
| page_icon="🧬", | |
| layout="centered" | |
| ) | |
| # ----------------------------- | |
| # MODEL YÜKLEME | |
| # ----------------------------- | |
| def load_skin_model(): | |
| return load_model("src/skin_cancer_model.h5") | |
| model = load_skin_model() | |
| # ----------------------------- | |
| # GÖRSEL İŞLEME | |
| # ----------------------------- | |
| def process_image(img): | |
| img = img.convert("RGB") | |
| img = img.resize((170, 170)) | |
| img_array = np.array(img) | |
| img_array = img_array / 255.0 | |
| img_array = np.expand_dims(img_array, axis=0) | |
| return img_array | |
| # ----------------------------- | |
| # TASARIM | |
| # ----------------------------- | |
| st.markdown(""" | |
| <style> | |
| .main-title { | |
| text-align: center; | |
| font-size: 38px; | |
| font-weight: 800; | |
| color: #d6336c; | |
| } | |
| .sub-title { | |
| text-align: center; | |
| font-size: 18px; | |
| color: #555; | |
| } | |
| .result-box { | |
| padding: 25px; | |
| border-radius: 16px; | |
| text-align: center; | |
| margin-top: 20px; | |
| font-size: 22px; | |
| font-weight: 700; | |
| } | |
| .cancer { | |
| background-color: #ffe3e3; | |
| color: #c92a2a; | |
| border: 2px solid #ff8787; | |
| } | |
| .safe { | |
| background-color: #d3f9d8; | |
| color: #2b8a3e; | |
| border: 2px solid #69db7c; | |
| } | |
| .warning { | |
| background-color: #fff3bf; | |
| color: #e67700; | |
| border: 2px solid #ffd43b; | |
| } | |
| </style> | |
| """, unsafe_allow_html=True) | |
| st.markdown("<div class='main-title'>🧬 Deri Kanseri Görsel Sınıflandırma</div>", unsafe_allow_html=True) | |
| st.markdown( | |
| "<div class='sub-title'>Bir deri lezyonu resmi yükle. Model, görselin kanserli olup olmadığını tahmin etsin.</div>", | |
| unsafe_allow_html=True | |
| ) | |
| st.divider() | |
| # ----------------------------- | |
| # DOSYA YÜKLEME | |
| # ----------------------------- | |
| file = st.file_uploader( | |
| "Bir deri görüntüsü yükle", | |
| type=["jpg", "jpeg", "png"] | |
| ) | |
| if file is not None: | |
| img = Image.open(file) | |
| col1, col2 = st.columns([1, 1]) | |
| with col1: | |
| st.image(img, caption="Yüklenen Görsel", use_container_width=True) | |
| with col2: | |
| st.write("### Analiz Sonucu") | |
| processed_img = process_image(img) | |
| prediction = model.predict(processed_img)[0][0] | |
| cancer_probability = float(prediction) | |
| non_cancer_probability = 1 - cancer_probability | |
| threshold = 0.5 | |
| if cancer_probability >= threshold: | |
| st.markdown( | |
| f""" | |
| <div class='result-box cancer'> | |
| ⚠️ Kanserli Görsel Tespit Edildi<br><br> | |
| Kanser olasılığı: %{cancer_probability * 100:.2f} | |
| </div> | |
| """, | |
| unsafe_allow_html=True | |
| ) | |
| st.error( | |
| "Model bu görseli kanserli sınıfa daha yakın tahmin etti. " | |
| "Bu sonuç kesin tıbbi tanı değildir. Dermatoloji uzmanına başvurulmalıdır." | |
| ) | |
| else: | |
| st.markdown( | |
| f""" | |
| <div class='result-box safe'> | |
| ✅ Kanser Değil Olarak Tahmin Edildi<br><br> | |
| Kanser değil olasılığı: %{non_cancer_probability * 100:.2f} | |
| </div> | |
| """, | |
| unsafe_allow_html=True | |
| ) | |
| st.warning( | |
| "Bu görselde kanserli hücre / kanserli lezyon tespit edilmedi. " | |
| "Kanserli fotoğraf yüklenmemiş olabilir." | |
| ) | |
| st.divider() | |
| st.write("### Model Olasılıkları") | |
| st.progress(cancer_probability) | |
| st.write(f"Kanser olasılığı: **%{cancer_probability * 100:.2f}**") | |
| st.write(f"Kanser değil olasılığı: **%{non_cancer_probability * 100:.2f}**") | |
| else: | |
| st.info("Analiz yapmak için bir deri görüntüsü yükleyin.") | |
| st.divider() | |
| st.caption( | |
| "Not: Bu uygulama eğitim ve demo amaçlıdır. Tıbbi tanı koymaz. " | |
| "Şüpheli durumlarda mutlaka uzman doktora başvurulmalıdır." | |
| ) |