import gradio as gr
import keras
import tensorflow as tf
from PIL import Image
import numpy as np
import base64
# créer deux interfaces gradio
demo = gr.Blocks(theme='Yntec/HaleyCH_Theme_Yellow_Blue')
# modèles
model1 = keras.models.load_model("Pneunomia_model.h5")
model2 = keras.models.load_model("Tuberculosis_model.h5")
model3 = keras.models.load_model("Image_TB_classifier.h5")
# Interface components (define outside the Blocks)
image = gr.Image(type="filepath")
label = gr.Label(num_top_classes=2)
image1 = gr.Image(type="filepath")
label1 = gr.Label(num_top_classes=2)
image2 = gr.Image(type="filepath")
label2 = gr.Label(num_top_classes=2)
# Fonction 1
def imageToArray_tuberculosis(image_path):
width, height = 64, 64
image = Image.open(image_path).convert('RGB')
image = image.resize((width, height))
image_array = np.asarray(image)
image_array = image_array / 255.0
image_array = image_array.reshape(-1, width, height, 3)
labels = ['Normal', 'Tuberculosis']
preds = model1.predict(image_array)
preds_single = labels[int(np.round(preds[0][0]))]
if preds_single == 'Normal':
return {preds_single: 1-preds[0][0], 'Tuberculosis': preds[0][0]}
else:
return {preds_single: preds[0][0], 'Normal': 1-preds[0][0]}
# Fonction 2
def imageToArray_pneunomia(image_path):
width, height = 64, 64
image = Image.open(image_path).convert('RGB')
image = image.resize((width, height))
image_array = np.asarray(image)
image_array = image_array / 255.0
image_array = image_array.reshape(-1, width, height, 3)
labels = ['Normal', 'Pneunomia']
preds = model2.predict(image_array)
preds_single = labels[int(np.round(preds[0][0]))]
if preds_single == 'Normal':
return {preds_single: 1-preds[0][0], 'Pneumonia': preds[0][0]}
else:
return {preds_single: preds[0][0], 'Normal': 1-preds[0][0]}
# Fonction 3
def imageToArray_tuberculosis1(image_path):
width, height = 256, 256
image = Image.open(image_path).convert('RGB')
image = image.resize((width, height))
image_array = np.asarray(image)
image_array = image_array / 255.0
image_array = image_array.reshape(-1, width, height, 3)
labels = ['Normal', 'Tuberculosis']
preds = model3.predict(image_array)
return {'Normal': preds[0][0], 'Tuberculosis': preds[0][1]}
# Function to encode image to Base64
def encode_image_to_base64(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
# Define team members with their details
team_members = [
{"name": "Yacin Mouhoumed Elmi", "role": "Doctorant en Économétrie-statistique et Data Scientist", "bio": "", "image": "yacin.jpg"},
{"name": "Abdoul Wahab Diallo", "role": "Professeur Permanent à DIT | Chercheur en IA", "bio": "", "image": "awd.jpg"},
{"name": "Lauriane MBAGDJE DORENAN", "role": "AWS AI & ML Scholar'24 | Junior Data Scientist | Biomedical Equipment Technician", "bio": "", "image": "laurian.jpg"},
{"name": "Oumar KRA", "role": "Ingénieur en Intelligence Artificielle, Spécialiste en Coopération au Développement", "bio": "", "image": "oumar.jpg"}
]
# Function to generate the team presentation
def show_team():
team_html = "
"
for member in team_members:
# Encode the image to Base64
image_base64 = encode_image_to_base64(member['image'])
team_html += f"""
{member['name']}
{member['role']}
"""
if member['bio']: # Only add bio if it's not empty
team_html += f"
{member['bio']}
"
team_html += "
"
team_html += "
"
return team_html
description1 = """Ce modèle permet de prédire la présence de tuberculose (TB) à partir d'images pulmonaires en utilisant les réseaux de neurones convolutifs (CNN)."""
description2 = """Ce modèle permet de prédire la présence de la pneunomia à partir d'images pulmonaires en utilisant les réseaux de neurones convolutifs (CNN)."""
interface1 = gr.Interface(fn=imageToArray_tuberculosis, inputs=image, outputs=label, title='Modèle de Prédiction de la Tuberculose', description=description1) # Define interface1 within the TabItem
interface2 = gr.Interface(fn=imageToArray_pneunomia, inputs=image1, outputs=label1, title='Modèle de Prédiction de la Pneumonie', description=description2) # Define interface2 within the TabItem
interface3 = gr.Interface(fn=imageToArray_tuberculosis1, inputs=image2, outputs=label2, title='Modèle de Prédiction de la Tuberculose', description=description1)
# Create Gradio interface
interface4 = gr.Interface(
fn=show_team,
inputs=None,
outputs=gr.HTML(),
title="Découvrez notre équipe",
description="Faites connaissance avec les personnes extraordinaires qui sont à l'origine de ce projet !"
)
# Fonction pour afficher les informations sur la tuberculose
def info_tuberculose(sujet):
if sujet == "Description":
return (
"**Description de la tuberculose**\n\n"
"La tuberculose (TB) est une maladie infectieuse causée par la bactérie *Mycobacterium tuberculosis*. "
"Elle affecte principalement les poumons (tuberculose pulmonaire), mais peut aussi toucher d'autres organes (tuberculose extrapulmonaire). "
"Les symptômes courants incluent :\n"
"- Une toux persistante (parfois avec du sang),\n"
"- De la fièvre,\n"
"- Des sueurs nocturnes,\n"
"- Une perte de poids,\n"
"- Une fatigue intense.\n\n"
"La TB se transmet par l'inhalation de gouttelettes contaminées provenant de la toux ou des éternuements d'une personne infectée. "
"Elle peut être latente (asymptomatique) ou active (symptomatique)."
)
elif sujet == "Prévention":
return (
"**Prévention de la tuberculose**\n\n"
"1. **Vaccination** :\n"
" - Le vaccin BCG (Bacille Calmette-Guérin) est utilisé dans de nombreux pays pour prévenir les formes graves de TB, notamment chez les enfants.\n\n"
"2. **Dépistage précoce** :\n"
" - Identifier et traiter rapidement les cas actifs de TB pour éviter la propagation.\n"
" - Utiliser des tests comme la radiographie pulmonaire, le test cutané à la tuberculine (TST) ou les tests sanguins (IGRA).\n\n"
"3. **Mesures d'hygiène** :\n"
" - Couvrir la bouche et le nez en toussant ou en éternuant.\n"
" - Se laver régulièrement les mains avec de l'eau et du savon.\n\n"
"4. **Ventilation des espaces** :\n"
" - Améliorer la circulation de l'air dans les lieux fermés pour réduire le risque de transmission.\n\n"
"5. **Traitement préventif** :\n"
" - Pour les personnes exposées à un risque élevé (comme les proches de patients atteints de TB ou les personnes vivant avec le VIH), un traitement préventif à base d'antibiotiques peut être prescrit."
)
elif sujet == "Traitements":
return (
"**Traitements de la tuberculose**\n\n"
"Le traitement de la tuberculose dépend de sa forme (latente ou active) et de sa résistance aux médicaments :\n\n"
"1. **Traitement antibiotique** :\n"
" - La TB active se soigne avec une combinaison d'antibiotiques pris sur une période prolongée (généralement 6 à 9 mois).\n"
" - Les médicaments les plus courants sont l'isoniazide, la rifampicine, l'éthambutol et le pyrazinamide.\n\n"
"2. **Traitement directement observé (DOT)** :\n"
" - Pour s'assurer de l'observance du traitement, un professionnel de santé supervise souvent la prise des médicaments.\n\n"
"3. **Traitement des formes résistantes** :\n"
" - En cas de TB multirésistante (TB-MR) ou ultrarésistante (TB-UR), des schémas thérapeutiques plus complexes et plus longs sont nécessaires.\n"
" - Des médicaments de deuxième ligne, comme la lévofloxacine ou le bédaquiline, peuvent être utilisés.\n\n"
"4. **Traitement de la TB latente** :\n"
" - Pour éviter que la TB latente ne devienne active, un traitement préventif à base d'isoniazide ou de rifampicine peut être prescrit.\n\n"
"5. **Suivi médical** :\n"
" - Des examens réguliers, y compris des tests d'imagerie (radiographie pulmonaire) et des analyses de crachats, sont essentiels pour surveiller l'efficacité du traitement.\n"
" - Un suivi rigoureux est nécessaire pour prévenir les rechutes."
)
else:
return "Sélectionnez un sujet pour obtenir des informations."
# Ajouter un composant pour la tuberculose
with interface1:
gr.Markdown("## Informations sur la tuberculose")
sujet_tb = gr.Dropdown(choices=["Description", "Prévention", "Traitements"], label="Choisissez un sujet")
info_tb = gr.Markdown(label="Informations sur la tuberculose")
sujet_tb.change(fn=info_tuberculose, inputs=sujet_tb, outputs=info_tb)
# Fonction pour afficher les informations sur la pneumonie
def info_pneumonie(sujet):
if sujet == "Description":
return (
"**Description de la pneumonie**\n\n"
"La pneumonie est une infection des poumons causée principalement par des bactéries, des virus ou des champignons. "
"Elle entraîne une inflammation des alvéoles pulmonaires, qui se remplissent de liquide ou de pus, provoquant des difficultés respiratoires. "
"Les symptômes courants incluent :\n"
"- Une toux (souvent avec des crachats),\n"
"- De la fièvre,\n"
"- Des frissons,\n"
"- Un essoufflement,\n"
"- Une douleur thoracique,\n"
"- Une fatigue intense.\n\n"
"La pneumonie peut être légère ou grave, voire mortelle, en particulier chez les jeunes enfants, les personnes âgées et les individus dont le système immunitaire est affaibli."
)
elif sujet == "Prévention":
return (
"**Prévention de la pneumonie**\n\n"
"1. **Vaccination** :\n"
" - Vaccin contre le pneumocoque (bactérie courante responsable de la pneumonie).\n"
" - Vaccin contre la grippe (la grippe peut entraîner une pneumonie secondaire).\n"
" - Vaccin contre le COVID-19 (pour prévenir les complications pulmonaires).\n\n"
"2. **Hygiène** :\n"
" - Se laver les mains régulièrement avec de l'eau et du savon.\n"
" - Utiliser un désinfectant pour les mains à base d'alcool en l'absence d'eau et de savon.\n"
" - Couvrir la bouche et le nez avec un mouchoir ou le coude en cas de toux ou d'éternuement.\n\n"
"3. **Mode de vie sain** :\n"
" - Éviter de fumer (le tabagisme endommage les poumons et augmente le risque d'infections).\n"
" - Adopter une alimentation équilibrée pour renforcer le système immunitaire.\n"
" - Faire de l'exercice régulièrement pour améliorer la santé pulmonaire.\n\n"
"4. **Éviter les contacts avec des personnes infectées** :\n"
" - Limiter les contacts avec des personnes atteintes de pneumonie ou d'autres infections respiratoires."
)
elif sujet == "Traitements":
return (
"**Traitements de la pneumonie**\n\n"
"Le traitement de la pneumonie dépend de sa cause (bactérienne, virale ou fongique) et de la gravité de l'infection :\n\n"
"1. **Traitement antibiotique** :\n"
" - Pour les pneumonies bactériennes, des antibiotiques comme l'amoxicilline ou l'azithromycine sont prescrits.\n"
" - Il est essentiel de suivre le traitement jusqu'au bout, même si les symptômes s'améliorent.\n\n"
"2. **Traitement antiviral** :\n"
" - Pour les pneumonies virales (comme celles causées par la grippe ou le COVID-19), des antiviraux comme l'oseltamivir (Tamiflu) peuvent être utilisés.\n\n"
"3. **Traitement antifongique** :\n"
" - Pour les pneumonies fongiques, des médicaments antifongiques comme le fluconazole sont prescrits.\n\n"
"4. **Traitement symptomatique** :\n"
" - Prendre des antipyrétiques (paracétamol) pour réduire la fièvre.\n"
" - Boire beaucoup de liquides pour éviter la déshydratation.\n"
" - Se reposer pour permettre au corps de récupérer.\n\n"
"5. **Hospitalisation** :\n"
" - Dans les cas graves (difficultés respiratoires sévères, faible taux d'oxygène dans le sang), une hospitalisation peut être nécessaire.\n"
" - Un traitement par oxygène ou une assistance respiratoire (ventilation mécanique) peut être requis.\n\n"
"6. **Suivi médical** :\n"
" - Des radiographies pulmonaires et des analyses de sang peuvent être utilisées pour surveiller la progression de la maladie.\n"
" - Un suivi régulier est nécessaire pour s'assurer d'une guérison complète."
)
else:
return "Sélectionnez un sujet pour obtenir des informations."
with interface2:
gr.Markdown("## Informations sur la pneumonie")
sujet_pn=gr.Dropdown(choices=["Description", "Prévention", "Traitements"], label="Choisissez un sujet")
info_pn=gr.Markdown(label="Informations sur la pneumonie")
sujet_pn.change(fn=info_pneumonie, inputs=sujet_pn, outputs=info_pn)
with interface3:
gr.Markdown("## Informations sur la tuberculose")
sujet_tb = gr.Dropdown(choices=["Description", "Prévention", "Traitements"], label="Choisissez un sujet")
info_tb = gr.Markdown(label="Informations sur la tuberculose")
sujet_tb.change(fn=info_tuberculose, inputs=sujet_tb, outputs=info_tb)
# faire un tabbing des interfaces
with demo:
gr.TabbedInterface([interface4, interface3,interface1, interface2], ['Notre équique','Mod Tub 1','Mod Tub 2', 'Mod Pne'])
# gr.TabbedInterface([interface1, interface2], ['Modèle pour la Tuberculos', 'Modèle pour la Pneumonie'])
# lancer l'interface
demo.launch()