ELOUNDOU commited on
Commit
ac5172f
1 Parent(s): 042c1cb

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +127 -0
app.py ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #Importation des librairies pour notre application:
2
+ import numpy as np
3
+ import pandas as pd
4
+ import matplotlib.pyplot as plt
5
+ import streamlit as st
6
+ from streamlit_option_menu import option_menu
7
+ import streamlit.components.v1 as html
8
+ import tensorflow as tf
9
+ from tensorflow.keras.utils import load_img, img_to_array
10
+ from tensorflow.keras.preprocessing import image
11
+ from PIL import Image, ImageOps
12
+
13
+ #changement du logo et du titre de mon application en anglais
14
+ st.set_page_config(page_title="PMP", page_icon="ocean", layout="centered", menu_items=None)
15
+
16
+ col1, col2, col3 = st.columns(3)
17
+ xx = col1
18
+ ar = col2.image("medias/keyce.jpg", width=80)
19
+ yy = col3
20
+ #title
21
+ st.title("CLASSIFICATION DES MALADIES PULMONAIRES")
22
+
23
+ def main():
24
+ with st.sidebar:
25
+ choose = option_menu("Menu", ["Acceuil", "Prédiction"], icons=['house', 'bar-chart'], menu_icon="list", default_index=0,
26
+ styles={
27
+ "container": {"padding": "5!important", "background-color": "#fff"},
28
+ "icon": {"color": "#333", "font-size": "20px"},
29
+ "nav-link": {"font-size": "16px", "text-align": "left", "margin":"0px", "--hover-color": "#f9d1ac"},
30
+ "nav-link-selected": {"background-color": "#FF9633", "color": "#333"},
31
+ }
32
+ )
33
+ st.markdown('''<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
34
+ <h6 style='text-align:center;color:grey;font-size:11px;'> © 2023 - KEYCE - Tout droits reservés </h6>''', unsafe_allow_html=True)
35
+
36
+ if choose == "Acceuil":
37
+ st.markdown("<hr/>", unsafe_allow_html=True)
38
+ st.subheader("Bienvenue")
39
+ st.caption(" ")
40
+ #Insertion d'une image
41
+ st.image("medias/fondacc.png", width=None)
42
+ #inserer une case à cocher pour savoir ce que nous faisons
43
+ state = st.checkbox("Que faisons-nous exactement dans cette application ?", value=False)
44
+ if state:
45
+ st.write("Bonjour à tout le monde! concernant notre application elle permet, à partir d'un model.h5 que nous avons généré, de prédire à partir des images radio que vous saisirez si un patient est affecté soit par le COVID19, NORMAL, PNEUMONIE, TURBERCULOSE. et cette application vous donne également la possibilité de télécharger la prédiction du patient dans un fichier Excel.")
46
+ else:
47
+ pass
48
+
49
+
50
+ elif choose=='Prédiction':
51
+ st.markdown("<hr/>", unsafe_allow_html=True)
52
+ menu1, menu2 = st.tabs(["📈 Évaluation du modèle", ":staff_of_aesculapius: Prédiction"])
53
+
54
+ with menu1:
55
+ st.subheader("Évaluer notre modèle")
56
+ #Inserer des images
57
+ st.image("medias/tvl.PNG", width=700)
58
+
59
+ with menu2:
60
+ #Exemple de formulaire:
61
+ st.subheader("Diagnostic et enregistrement du patient")
62
+ f_name = st.text_input("Nom:", max_chars=50)
63
+ l_name = st.text_input("Prénom:", max_chars=50)
64
+ datnaiss = st.date_input("Date de naissance:")
65
+ sexe = st.radio("Sexe:", options=("Masculin", "Féminin"))
66
+ #Charger l'image pour la prédiction
67
+ upload_file = st.file_uploader("Charger le fichier image:", type=['JPG', 'JPEG', 'PNG'])
68
+
69
+ if f_name and l_name and datnaiss and upload_file:
70
+ #Chargons le model.h5
71
+ model = tf.keras.models.load_model("model.h5")
72
+
73
+ predict_classes = {'COVID19':0, 'NORMAL':1, 'PNEUMONIA':2, 'TUBERCULOSIS':3}
74
+
75
+ if upload_file:
76
+ st.image(upload_file, use_column_width=True)
77
+ tets_image = image.load_img(upload_file, target_size=(64, 64))
78
+ image_array = img_to_array(tets_image)
79
+ image_array = np.expand_dims(image_array, axis=0)
80
+
81
+ #Boutton pour effectuer la prédiction
82
+ btn_prediction = st.button("faire le diagnostic")
83
+
84
+ if btn_prediction:
85
+ predictions = model.predict(image_array)
86
+ classes = np.argmax(predictions[0])
87
+
88
+ for cle, valeur in predict_classes.items():
89
+ if valeur == classes:
90
+ # Resultat de la prédiction
91
+ st.markdown("<hr/>", unsafe_allow_html=True)
92
+ col1, col2, col3 = st.columns(3)
93
+ aa = col1
94
+ ag = col2.markdown('''<h6 style='text-align:center;'> État diagnostique de M/Mme ''' f'{f_name}' '''</h6>''', unsafe_allow_html=True)
95
+ ss = col3
96
+
97
+ #Affichage de la prediction
98
+ col1, col2, col3 = st.columns(3)
99
+ xx = col1
100
+ ar = col2.markdown(''' <h2 style='text-align:center; color:#FF9633;'> ''' f'{cle}' ''' </h2> ''', unsafe_allow_html=True)
101
+ yy = col3
102
+
103
+ if cle == "NORMAL":
104
+ st.info(":green[Bien, il est en bonne santé]")
105
+ else:
106
+ st.info(":red[Désolé, il est malade]")
107
+
108
+ #Téléchargeons le diagnostic de la prédiction dans un fichier excel:
109
+ # Créer un DataFrame avec les nouvelles données d'entrée
110
+ donnee_sortie = pd.DataFrame({
111
+ 'Nom':str(f_name),
112
+ 'Prenom':str(l_name),
113
+ 'Date de naissance':str(datnaiss),
114
+ 'Sexe':str(sexe),
115
+ #'Image du scanner':image(upload_file),
116
+ 'Resultat du diqgnostic':str(cle),
117
+ }, index=[0])
118
+ #telechargement de la prediction:
119
+ col1, col2, col3 = st.columns(3)
120
+ xx = col1
121
+ ar = col2.download_button(label="Téléchargez le diagnostic sous forme de fichier .csv", data=donnee_sortie.to_csv(), file_name="Resultat_Diagnostic_"f'{f_name}'".csv", mime="text/csv")
122
+ yy = col3
123
+ else:
124
+ st.info("Merci de renseigner tous les champs avant de valider le diagnostic et son enregistrement")
125
+
126
+ if __name__=='__main__':
127
+ main()