PulseAI: Diagnóstico Asistido por IA

PulseAI es una plataforma web de apoyo al diagnóstico médico basada en inteligencia artificial. Permite analizar señales cardíacas (ECG) e imágenes de células sanguíneas, entregando predicciones con nivel de confianza y explicaciones en lenguaje natural. No reemplaza el criterio médico; actúa como herramienta de apoyo.

Angular 20 Python FastAPI TensorFlow / Keras Docker Google Cloud Run

1. ¿Qué analiza?

Análisis de Pulso Cardíaco (ECG)

A partir de una señal eléctrica del corazón (electrocardiograma), el sistema evalúa cada latido con datos reales del dataset MIT-BIH y lo clasifica en:

  • Latido Normal (N): Patrón eléctrico regular y saludable.
  • Latido Ventricular (V): Contracción prematura en los ventrículos, tipo de arritmia que puede requerir atención médica.

Análisis de Células Sanguíneas

A partir de imágenes microscópicas (dataset BloodMNIST / MedMNIST), el sistema identifica 8 tipos de células:

Célula Función principal
Neutrófilo Primera línea de defensa contra bacterias
Linfocito Combate virus y genera anticuerpos
Monocito Limpia células muertas e infecciones
Eosinófilo Combate parásitos y responde a alergias
Basófilo Involucrado en reacciones alérgicas
Eritroblasto Glóbulo rojo inmaduro (normalmente en médula ósea)
Granulocito Inmaduro Precursor de glóbulos blancos
Plaqueta Coagulación y cicatrización

2. Arquitectura del Sistema

El backend está construido como una API REST que al iniciar carga en memoria dos modelos de redes neuronales y los datasets de referencia. El frontend Angular se conecta directamente a la API desplegada en Google Cloud Run.

Cliente (Angular) → API REST (FastAPI)
                          │
              ┌───────────┴───────────┐
              │                       │
         Módulo ECG            Módulo Sangre
              │                       │
         model.keras      bloodmnist_cnn.keras
         (MIT-BIH)              (BloodMNIST)

Stack tecnológico

Capa Tecnología
Framework FrontendAngular 20 + TypeScript
VisualizaciónChart.js
API RESTFastAPI + Uvicorn (ASGI)
Inteligencia ArtificialTensorFlow / Keras
Validación de datosPydantic
ContenedoresDocker / Docker Compose
Despliegue backendGoogle Cloud Run

3. Instalación Local

El proyecto está contenerizado con Docker, lo que permite ponerlo en marcha en cualquier entorno con un solo comando, sin depender de configuraciones locales.

Requisitos

  • Python 3.12+ (ejecución directa)
  • Docker y Docker Compose (recomendado)

Con Docker (Recomendado)

# Construir y ejecutar
docker-compose up --build

# En segundo plano
docker-compose up -d --build

# Detener
docker-compose down

Sin Docker

python -m venv .venv
source .venv/bin/activate  # Linux/Mac

pip install -r requirements.txt

uvicorn main:app --host 0.0.0.0 --port 8000 --reload

4. Modelos de Inteligencia Artificial

Al iniciar el servidor se cargan en memoria dos modelos de redes neuronales previamente entrenados. El sistema está optimizado para ejecutarse completamente en CPU, sin necesidad de hardware especializado (GPU).

Modelo ECG — model.keras

Entrenado con datos reales de pacientes del dataset MIT-BIH (formato .npz). Clasifica señales cardíacas en latido Normal (N) o Ventricular (V).

Modelo Células — bloodmnist_cnn.keras

CNN entrenada con el dataset MedMNIST (BloodMNIST). Clasifica imágenes microscópicas en 8 tipos celulares. Devuelve el tipo de célula detectado, su probabilidad de certeza y una explicación en lenguaje natural.

Estructura del proyecto (backend)

back_pulseAI/
├── main.py # Lógica principal de la API
├── requirements.txt
├── Dockerfile
├── docker-compose.yml
├── modelo/
├── model.keras # Modelo ECG
└── bloodmnist_cnn.keras # Modelo células
├── dataset/
└── mitbih_nv_test_360_rr.npz
└── class_names/
└── bloodmnist_class_names.npy

4. API Endpoints

La API REST está documentada con OpenAPI/Swagger y expone los siguientes endpoints principales:

POST /api/v1/predict/ecg

Envía datos de ECG para análisis y obtiene predicción de arritmia.

POST /api/v1/predict/blood

Envía imagen de frotis sanguíneo para clasificación celular.

GET /api/v1/history/{user_id}

Obtiene historial de análisis de un usuario específico.

GET /api/v1/health

Verifica el estado de salud del servicio y conexiones.

Última actualización: Marzo 2026 · v2.0