elie77/transferlearning
0
1import streamlit as st2import tensorflow as tf3import numpy as np4import pandas as pd5import plotly.express as px6from PIL import Image7 8# 📌 Charger le modèle9@st.cache_resource10def load_model():11 return tf.keras.models.load_model("kidney_disease_model2.h5")12 13# 📌 Classes du modèle14class_names = ["Cyst", "Normal", "Stone", "Tumor"]15 16# 📌 Fonction de prédiction17def predict(image, model):18 image = image.resize((224, 224))19 img_array = np.array(image) / 255.020 img_array = np.expand_dims(img_array, axis=0)21 predictions = model.predict(img_array)[0]22 predicted_class = np.argmax(predictions)23 confidence = predictions[predicted_class]24 return class_names[predicted_class], confidence25 26# 📌 Configuration de la page27st.set_page_config(page_title="Détection Maladies Rénales", page_icon="🩺", layout="wide")28st.markdown(29 """30 <style>31 /* Appliquer le dégradé uniquement à la barre latérale */32 [data-testid="stSidebar"] {33 background: linear-gradient(to bottom, #ffffff, #0044cc);34 color: black;35 }36 37 .container {38 width: 60%;39 margin: auto;40 }41 42.block {43 background: linear-gradient(to bottom, #ffffff, #ffffff);44 padding: 20px;45 border-radius: 10px;46 box-shadow: 0px 4px 6px rgba(0, 68, 204, 0.5); /* Ombre bleue */47 margin-bottom: 20px;48 animation: pop-in 0.5s ease-out;49 transition: transform 0.3s ease, box-shadow 0.3s ease;50}51 52 .block:hover {53 transform: translateY(-5px);54 box-shadow: 0px 8px 12px rgba(0, 0, 0, 0.2);55 }56 57 @keyframes pop-in {58 from {transform: scale(0.9); opacity: 0;}59 to {transform: scale(1); opacity: 1;}60 }61 </style>62 """,63 unsafe_allow_html=True64)65 66# 📌 Barre latérale67st.sidebar.title("🔍 Navigation")68page = st.sidebar.radio("Aller vers", ["Accueil", "Détection", "À Propos"])69 70# 📌 Accueil71if page == "Accueil":72 st.title("🩺 Détection des Maladies Rénales")73 st.markdown("<div class='container'>", unsafe_allow_html=True)74 75 st.markdown("""76<div class='block'>77 <h3> 📌 Maladies détectées </h3>78 <ul>79 <li>Cyst (Kystes rénaux)</li>80 <li>Normal (Aucun problème détecté)</li>81 <li>Stone (Calculs rénaux)</li>82 <li>Tumor (Tumeur rénale)</li>83 </ul>84</div>85""", unsafe_allow_html=True)86 st.markdown("</div>", unsafe_allow_html=True)87 st.markdown("""88<div class='block'>89 <h3> 🏥 Pourquoi utiliser cette application ? </h3>90<ul>91 <li><strong>Détection rapide</strong> grâce à l'IA</li>92 <li><strong>Facilité d'utilisation</strong> pour tous</li>93 <li><strong>Informations détaillées</strong> sur chaque maladie rénale</li>94 <li><strong>Suivi et prévention</strong> pour une meilleure santé rénale</li>95</ul>96</div>97""", unsafe_allow_html=True)98 99 100 101 st.markdown("""102<div class='block'>103 <h3> 💡 Conseils pour une bonne santé rénale</h3>104<ul>105 <li>Boire suffisamment d'eau chaque jour 💧</li>106 <li>Éviter la consommation excessive de sel et d'aliments transformés 🍔</li>107 <li>Faire de l'exercice régulièrement 🏃♂️</li>108 <li>Consulter un médecin en cas de douleur ou de symptômes persistants 🏥</li>109</ul>110</div>111""", unsafe_allow_html=True)112 113 114 115 st.markdown("</div>", unsafe_allow_html=True)116 st.image("kidney_banner2.png", use_column_width=True)117 st.markdown("</div>", unsafe_allow_html=True)118 119# 📌 Détection120st.title("🔍 Analyse d'une image")121 122# Affichage du GIF en attendant l'upload123st.image("detect.gif", use_column_width=False, width=600)124 125# Upload de l'image126uploaded_file = st.file_uploader("📂 Choisissez une image (JPG, PNG, JPEG)", type=["jpg", "png", "jpeg"])127 128if uploaded_file is not None:129 image = Image.open(uploaded_file)130 131 # 📌 Bouton pour afficher les résultats AU-DESSUS de l'image132 if st.button("🔍 Voir les résultats"):133 with st.expander("📝 Résultats de l'analyse", expanded=True):134 model = load_model()135 class_name, confidence = predict(image, model)136 137 st.success(f"🩺 **Classe prédite : {class_name}** ({confidence*100:.2f}%)")138 139 # 📌 Explications médicales140 if class_name == "Cyst":141 st.info("🔬 **Les kystes rénaux** sont des sacs remplis de liquide dans les reins. Ils sont généralement bénins.")142 elif class_name == "Stone":143 st.info("⚠️ **Les calculs rénaux** sont des dépôts minéraux durs qui peuvent provoquer des douleurs sévères.")144 elif class_name == "Tumor":145 st.warning("🚨 **Une tumeur rénale** peut être bénigne ou maligne. Il est conseillé de consulter un médecin.")146 else:147 st.success("✅ **Aucun problème détecté.** Continuez à surveiller votre santé !")148 149 # 📌 Affichage de l'image chargée en dessous du bouton150 st.image(image, caption="🖼️ Image chargée", use_column_width=True, width=250)151# 📌 À Propos de Nous152elif page == "À Propos":153 st.title("ℹ️ À Propos de Nous")154 st.image("st.gif", use_column_width=False, width=300)155 # 📌 Présentation du modèle ResNet50156 st.markdown("""157 <div class='block'>158 <h3>🧠 Le Modèle : ResNet50</h3>159 <p>Notre application utilise <strong>ResNet50</strong>, un réseau de neurones convolutif profond 160 conçu pour la classification d’images. ResNet50 est puissant grâce à ses couches résiduelles qui 161 améliorent l'apprentissage et réduisent le problème de gradient évanescent.</p>162 </div>163 """, unsafe_allow_html=True)164 165 # 📌 Résultats de l'entraînement166 st.markdown("""167 <div class='block'>168 <h3>📈 Résultats de l'entraînement</h3>169 <ul>170 <li><strong>Nombre d’époques :</strong> 8</li>171 <li><strong>Précision finale :</strong> 64.00%</li>172 <li><strong>Perte finale :</strong> 0.8676</li>173 <li><strong>Précision de validation :</strong> 64.00%</li>174 <li><strong>Perte de validation :</strong> 0.8636</li>175 </ul>176 </div>177 """, unsafe_allow_html=True)178 179 # 📌 À propos du créateur180 st.markdown("""181 <div class='block'>182 <h3>👨💻 Créateur de l'Application</h3>183 <p>Cette application a été développée par <strong>Bea Elie </strong>, un passionné d'IA et de développement 184 d'applications intelligentes. Mon objectif est de rendre la détection des maladies rénales plus 185 accessible grâce à la technologie.</p>186 </div>187 """, unsafe_allow_html=True)188 189# 📌 Affichage de ta photo et contact dans un bloc centré190 st.markdown("""191 <div style="192 display: flex;193 flex-direction: column;194 justify-content: center;195 align-items: center;196 text-align: center;197 background: linear-gradient(to left, #ffffff, #B1AFEB, #ffffff);198 padding: 20px;199 border-radius: 10px;200 box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1);201 width: 50%;202 margin: auto;203 ">204 <h3>BEA ELIE</h3>205 <h3>📩 Contact</h3>206 <p><strong>Email :</strong> <a href='mailto:beaelie239@gmail.com'>beaelie239@gmail.com</a></p>207 </div>208""", unsafe_allow_html=True)209 210 