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[

{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()