Sidoine commited on
Commit
41044eb
·
verified ·
1 Parent(s): a534a1b

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +217 -0
  2. requirements.txt +15 -0
app.py ADDED
@@ -0,0 +1,217 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import tensorflow as tf
3
+ import numpy as np
4
+ from streamlit_option_menu import option_menu
5
+ import streamlit.components.v1 as components
6
+ import os
7
+ from groq import Groq
8
+ from keras.applications import ResNet50
9
+ from keras.utils import load_img, img_to_array
10
+ from keras.models import load_model
11
+ from dotenv import load_dotenv
12
+ from keras.preprocessing import image
13
+
14
+ # Charger les variables d'environnement à partir du fichier .env
15
+ load_dotenv()
16
+
17
+ # Récupérer les clés API depuis les variables d'environnement
18
+ GROQ_API = os.getenv("GROQ_API")
19
+ HF_API = os.getenv("HF_API")
20
+
21
+ #changement du logo et du titre de mon application en anglais
22
+ st.set_page_config(page_title="Amelioration de la santé dentaire", page_icon=":tooth:", layout="centered", menu_items=None)
23
+
24
+
25
+
26
+ # Créer trois colonnes de largeur égale
27
+ col1, col2, col3 = st.columns(3)
28
+
29
+ # Laisser la première et la troisième colonne vides
30
+ with col1:
31
+ st.write("")
32
+
33
+ # Afficher le logo dans la deuxième colonne
34
+ with col2:
35
+ st.image("img/logo2.png", use_column_width=None)
36
+
37
+ with col3:
38
+ st.write("")
39
+
40
+ selected = option_menu(
41
+ menu_title=None, # required
42
+ options=["Accueil", "Chatbot","Prediction"], # required
43
+ icons=["house","chat-dots","bullseye" ], # optional
44
+ menu_icon="cast", # optional
45
+ default_index=0, # optional
46
+ orientation="horizontal",
47
+ )
48
+
49
+ if selected == "Accueil":
50
+ st.image("img/dentaire.jpg",width=300, use_column_width=True)
51
+ st.title(" ***BIENVENUE SUR DENTAIL.AI!*** ")
52
+ # Titre de l'application
53
+ st.title("Application de Prédiction des Maladies Dentaires")
54
+
55
+ # Texte explicatif
56
+ st.markdown("""
57
+ ## Bienvenue dans notre Application de Prédiction des Maladies Cardiaques !
58
+
59
+ Les maladies bucco-dentaires restent un problème de santé publique majeur, et leur détection précoce est essentielle pour prévenir les complications graves. Notre application utilise des techniques avancées d'apprentissage automatique pour aider à prédire le risque de maladies bucco-dentaires chez les individus.
60
+
61
+ ### Comment cela fonctionne :
62
+
63
+ 1. **Saisie des données :** Vous pouvez fournir des informations telles que votre radiographie de la bouche,votre âge, vos habitudes d’hygiène dentaire, vos antécédents médicaux et vos résultats de tests dentaires pour générer une prédiction précise.
64
+
65
+ 2. **Analyse des données :** Grâce à un modèle pré-entraîné, notre application analyse vos données pour évaluer votre risque de développer des maladies bucco-dentaires telles que la carie dentaire, la gingivite ou la parodontite.
66
+
67
+ 3. **Résultats instantanés :** Vous recevrez rapidement une évaluation personnalisée, vous permettant de prendre les mesures nécessaires pour préserver votre santé bucco-dentaire.
68
+ ### Pourquoi utiliser notre application :
69
+
70
+ - **Rapidité :** Obtenez des résultats instantanés sans devoir attendre de longues consultations ou analyses dentaires.
71
+
72
+ - **Facilité d'utilisation :** Notre interface intuitive rend la saisie des données et la compréhension des résultats simple pour tous les utilisateurs..
73
+
74
+ - **Précision :** Basé sur des techniques avancées d’apprentissage automatique, notre modèle vise à fournir des prédictions fiables, pour une prise de décision informée.
75
+
76
+ Prenez soin de votre santé bucco-dentaire dès aujourd'hui grâce à notre application de prédiction des maladies bucco-dentaires !
77
+ """)
78
+ components.html(
79
+ """
80
+ <div style="position: fixed; bottom: 0; left: 0; right: 0; text-align: center; font-size: 15px; color: gray;">
81
+ Tous droits réservés © Septembre 2024 Fosso Tchatat Sidoine
82
+ </div>
83
+ """,
84
+ height=70
85
+ )
86
+ if selected == "Chatbot":
87
+ # Sidebar settings
88
+ with st.sidebar:
89
+ st.sidebar.subheader("PARAMETRES")
90
+ temperature = st.slider("Temperature", 0.0, 5.0, 1.0)
91
+ tokens = st.slider("Max Tokens", 0, 8192, 900)
92
+ stream = st.toggle("Stream", value=True)
93
+ etat = stream
94
+
95
+ class GroqAPI:
96
+ # Handles API operations with Groq to generate chat responses
97
+ def __init__(self, model_name: str):
98
+ self.client = Groq(api_key="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")
99
+ self.model_name = model_name
100
+
101
+ # Internal method to get responses from Groq API
102
+ def _response(self, message):
103
+ return self.client.chat.completions.create(
104
+ model=self.model_name,
105
+ messages=message,
106
+ temperature=temperature,
107
+ max_tokens=tokens,
108
+ stream=etat,
109
+ stop=None,
110
+ )
111
+
112
+ # Generator to stream responses from API
113
+ def response_stream(self, message):
114
+ for chunk in self._response(message):
115
+ if chunk.choices[0].delta.content:
116
+ yield chunk.choices[0].delta.content
117
+
118
+ class Message:
119
+ # Manages chat messages in the Streamlit UI
120
+ system_prompt = "You are a professional AI. Please generate responses in English to all user inputs."
121
+
122
+ # Initializes the chat history if it doesn't exist in session state
123
+ def __init__(self):
124
+ if "messages" not in st.session_state:
125
+ st.session_state.messages = [{"role": "system", "content": self.system_prompt}]
126
+
127
+ # Adds a new message to the session state
128
+ def add(self, role: str, content: str):
129
+ st.session_state.messages.append({"role": role, "content": content})
130
+
131
+ # Displays all past messages in the UI, ignoring system messages
132
+ def display_chat_history(self):
133
+ for message in st.session_state.messages:
134
+ if message["role"] == "system":
135
+ continue
136
+ with st.chat_message(message["role"]):
137
+ st.markdown(message["content"])
138
+
139
+ # Streams API responses to the Streamlit chat messages UI
140
+ def display_stream(self, generator):
141
+ with st.chat_message("assistant"):
142
+ return st.write_stream(generator)
143
+
144
+ class ModelSelector:
145
+ # Allows the user to select a model from a predefined list
146
+ def __init__(self):
147
+ # List of available models to choose from
148
+ self.models = ["llama3-70b-8192", "llama3-8b-8192", "gemma-7b-it", "mixtral-8x7b-32768"]
149
+
150
+ # Displays model selection in the sidebar with a title
151
+ def select(self):
152
+ with st.sidebar:
153
+ return st.selectbox("Model", self.models)
154
+
155
+ # Entry point for the Streamlit app "myChatbot"
156
+ def main():
157
+ user_input = st.chat_input("Chat avec moi...")
158
+ model = ModelSelector()
159
+ selected_model = model.select()
160
+ message = Message()
161
+
162
+ # If there is user input, process it via the selected model
163
+ if user_input:
164
+ llm = GroqAPI(selected_model)
165
+ message.add("user", user_input)
166
+ message.display_chat_history()
167
+ response = message.display_stream(llm.response_stream(st.session_state.messages))
168
+ message.add("assistant", response)
169
+
170
+ main()
171
+
172
+
173
+
174
+ model = load_model('model.h5')
175
+ mal_classes = {'Data_caries': 0, 'Gingivitis': 1, 'Mouth_Ulcer': 2, 'hypodontia': 3}
176
+
177
+ # Fonction pour prédire la classe de l'image
178
+ def predict_image(image):
179
+ #model = tf.keras.models.load_model('../model.h5')
180
+ img = load_img(image, target_size=(224, 224))
181
+ img_array = img_to_array(img)
182
+ img_array = np.expand_dims(img_array, axis=0)
183
+ #img_array = tf.keras.applications.resnet50.preprocess_input(img_array)
184
+ predictions = model.predict(img_array)
185
+ predicted_class = np.argmax(predictions, axis=1)
186
+ return predicted_class[0], predictions
187
+
188
+ if selected == "Prediction":
189
+ # Display prediction page with sidebar and main
190
+ # Sidebar
191
+
192
+ #st.markdown("<h1 style='text-align: center;'>Prédiction</h1>", unsafe_allow_html=True)
193
+
194
+ st.header("Détection des Maladies Bucco-Dentaires")
195
+ uploaded_file = st.file_uploader("Choisissez une image", type=["jpg", "jpeg", "png"])
196
+ if uploaded_file is not None:
197
+ st.image(uploaded_file, caption='Image chargée', use_column_width=True)
198
+ st.write("")
199
+ st.write("Prédiction en cours...")
200
+
201
+ class_index, predictions = predict_image(uploaded_file)
202
+
203
+ classes = ["Data_caries", "Gingivitis", "Mouth_Ulcer", "hypodontia"] # Noms de classes à ajuster
204
+
205
+ st.write(f"Maladie détectée : {classes[class_index]}")
206
+ #st.write("Probabilités :")
207
+ #for i, prob in enumerate(predictions[0]):
208
+ # st.write(f"{classes[i]}: {prob * 100:.2f}%")
209
+
210
+ components.html(
211
+ """
212
+ <div style="position: fixed; bottom: 0; left: 0; right: 0; text-align: center; font-size: 15px; color: gray;">
213
+ Tous droits réservés © Septembre 2024 Fosso Tchatat Sidoine
214
+ </div>
215
+ """,
216
+ height=70
217
+ )
requirements.txt ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ streamlit
2
+ streamlit_option_menu
3
+ extra-streamlit-components
4
+ streamlit_elements==0.1.0
5
+ requests
6
+ time
7
+ os
8
+ groq
9
+ gtts
10
+ langdetect
11
+ speech_recognition
12
+ python-dotenv
13
+ pydub
14
+
15
+