import gradio as gr from datetime import datetime import cv2 import numpy as np # Simulación de progresión tisular con Fibonacci def simulador_fibonacci(n: int): if n <= 0: return [0] elif n == 1: return [0, 1] secuencia = [0, 1] for i in range(2, n): secuencia.append(secuencia[i - 1] + secuencia[i - 2]) return f"Secuencia generada: {secuencia}" # Procesamiento y vista previa de imagen def mostrar_imagen(imagen): return imagen # Análisis facial simple: detección de rostros def analisis_facial(imagen): img = np.array(imagen) gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) detector = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml") faces = detector.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5) for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2) if len(faces) == 0: return img, "No se detectaron rostros." else: return img, f"Se detectaron {len(faces)} rostro(s)." # Consentimiento informado (demo) def consentimiento(): return "Consentimiento informado aceptado." # Encuesta de satisfacción opciones_satisfaccion = ["Excelente", "Buena", "Regular", "Mala"] def registrar_satisfaccion(seleccion, comentario): return f"Gracias por su opinión: {seleccion}. Comentario: {comentario}" # Interfaz Gradio with gr.Blocks(title="Panacea Ícono - Plataforma Tecnológica en Salud") as demo: gr.Markdown("## 🧠 Plataforma Panacea Ícono S.A. - Tecnología en Salud, Blockchain y Simulación") with gr.Tabs(): with gr.TabItem("🔁 Simulador Médico-Quirúrgico"): iteraciones = gr.Slider(1, 20, step=1, label="Iteraciones quirúrgicas") resultado_simulacion = gr.Textbox(label="Resultado de la simulación") gr.Button("Ejecutar simulación").click(fn=simulador_fibonacci, inputs=iteraciones, outputs=resultado_simulacion) with gr.TabItem("📷 Subida de Imágenes Clínicas"): imagen_subida = gr.Image(type="pil", label="Imagen médica") imagen_preview = gr.Image(label="Vista previa") imagen_subida.change(fn=mostrar_imagen, inputs=imagen_subida, outputs=imagen_preview) with gr.TabItem("🧠 Análisis Facial Médico"): imagen_facial = gr.Image(type="pil", label="Foto frontal") imagen_analizada = gr.Image(label="Detección facial") resultado_rostros = gr.Textbox(label="Resultado del análisis facial") imagen_facial.change(fn=analisis_facial, inputs=imagen_facial, outputs=[imagen_analizada, resultado_rostros]) with gr.TabItem("🧾 Consentimiento Informado"): gr.Markdown("Revise y acepte el consentimiento para procedimientos médicos.") gr.Button("Aceptar consentimiento").click(fn=consentimiento, outputs=gr.Textbox()) with gr.TabItem("📊 Encuesta de Satisfacción"): seleccion = gr.Radio(opciones_satisfaccion, label="¿Cómo califica su experiencia?") comentario = gr.Textbox(label="Comentarios adicionales") resultado_encuesta = gr.Textbox(label="Resultado del registro") gr.Button("Enviar opinión").click(fn=registrar_satisfaccion, inputs=[seleccion, comentario], outputs=resultado_encuesta) if __name__ == "__main__": demo.launch(server_port=7862)