import gradio as gr
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import load_model
from tensorflow.keras.preprocessing import image
# Cargar modelo
MODEL_ISATRON_JEY = 'modelo_isatron_jeysshonl.h5'
cnn_model = load_model(MODEL_ISATRON_JEY)
def make_prediction(test_image):
"""Realiza la predicción de neumonía en la imagen de rayos X"""
# Cargar y preprocesar imagen
test_image = image.load_img(test_image, target_size=(224, 224))
test_image = image.img_to_array(test_image) / 255.0
test_image = np.expand_dims(test_image, axis=0)
# Realizar predicción
result = cnn_model.predict(test_image, verbose=0)
# Retornar resultados
return {
"Normal": float(result[0][0]),
"Neumonía": float(result[0][1])
}
# Configuración de la interfaz
image_input = gr.Image(type="filepath", label="Subir imagen de rayos X")
description = """
El modelo IsaTron es una Red Neuronal Convolucional (CNN) diseñada como un método de apoyo médico
para el diagnóstico en imágenes radiológicas de neumonía pediátrica. IsaTron analiza radiografías torácicas y
proporciona un porcentaje de probabilidad para cada clase (Normal o Neumonía).
⚠️ Advertencia: Esta herramienta está diseñada exclusivamente como apoyo al diagnóstico y NO reemplaza
la evaluación médica profesional. Los resultados deben ser interpretados por personal de salud calificado.
En la parte inferior encontrará imágenes de ejemplo que pueden ser usadas para probar el funcionamiento del modelo.
"""
examples = [
['1normal.jpeg'],
['image1_pneumonia_virus.jpeg'],
['image1_pneumonia_bacteria.jpeg'],
['image2_normal.jpeg'],
['image2_pneumonia_bacteria.jpeg'],
['image3_normal.jpeg'],
['image4_normal.jpeg'],
]
article = """
IsaTron - Sistema de Apoyo al Diagnóstico de Neumonía
Desarrollado por Jeysshon Bustos
Universidad El Bosque ©
"""
# Crear interfaz
interface = gr.Interface(
fn=make_prediction,
inputs=image_input,
outputs=gr.Label(label="Predicción", num_top_classes=2),
title="🏥 IsaTron: Detección de Neumonía con IA",
description=description,
article=article,
examples=examples,
theme=gr.themes.Soft(),
allow_flagging="never"
)
# Lanzar aplicación
if __name__ == "__main__":
interface.launch()