API REST que proporciona las funcionalidades de inferencia y gestión de usuarios para la aplicación “Herramienta para apoyar el diagnóstico de TEP”.
Este proyecto requiere un proyecto de Firebase con los servicios de Authentication y Firestore habilitados. El backend utiliza las siguientes tecnologías y bibliotecas principales:
- FastAPI
- ONNX
- ONNX Runtime
- Firebase Admin SDK
- LIME
- reCAPTCHA
El objetivo del proyecto es proporcionar la infraestructura backend para una aplicación web responsiva que permita utilizar un modelo de inteligencia artificial como herramienta de apoyo al diagnóstico de tromboembolismo pulmonar (TEP).
En particular, este componente aloja el modelo de clasificación de instancias de TEP y proporciona funcionalidades para la gestión de los usuarios registrados en la aplicación.
Antes de ejecutar el proyecto, es necesario contar con los siguientes recursos y configuraciones:
- Un proyecto creado en Firebase con los servicios de Authentication y Cloud Firestore habilitados.
- Firebase Authentication configurado para utilizar Google como proveedor de autenticación.
- Una clave de acceso a la API de Google Drive. Para obtenerla, es necesario crear y configurar un proyecto en Google Cloud.
- Una clave privada para utilizar Google reCAPTCHA v2.
- Las credenciales necesarias para utilizar el Firebase Admin SDK.
- Python y pip instalados.
- Docker, en caso de realizar un despliegue mediante contenedores.
git clone https://github.com/Criser2013/ADT-Backend.git
cd ADT-BackendSe recomienda utilizar un entorno virtual para aislar las dependencias del proyecto.
pip install virtualenv
virtualenv <nombre-entorno>- En Windows:
.\<nombre-entorno>\Scripts\activate- En macOS/Linux:
source <nombre-entorno>/bin/activateUna vez activado el entorno, instalar las dependencias:
pip install -r requirements-dev.txtCrear un archivo .env a partir de .env.example y establecer los valores correspondientes para cada variable de entorno.
fastapi dev "./app/main.py" --port 5000La aplicación estará disponible en el puerto 5000.
La documentación interactiva de la API estará disponible en:
/docs — documentación Swagger UI.
/redoc — documentación ReDoc.
Por ejemplo:
http://localhost:5000/docs
http://localhost:5000/redoc
La aplicación puede desplegarse mediante servicios de alojamiento como Render o utilizando un contenedor Docker.
Se recomienda construir una imagen a partir del Dockerfile incluido en el repositorio.
docker image build -t <nombre-imagen> .Preparar un archivo .env que contenga las variables de entorno requeridas por la aplicación.
docker container create \
--name <nombre-contenedor> \
-p 80:80 \
--env-file <ruta-archivo-env> \
<nombre-imagen>Copiar el archivo de credenciales de Firebase Admin SDK al contenedor:
docker cp <ruta-archivo-creds> <nombre-contenedor>:<ruta-archivo-contenedor>docker start <nombre-contenedor>Una vez iniciado, la API estará disponible en el puerto 80: http://localhost:80. También puede accederse mediante http://127.0.0.1:80.
El proyecto utiliza un modelo de redes neuronales basado en MLPClassifier de Scikit-learn para clasificar las instancias de TEP.
El modelo se encuentra exportado al formato ONNX, lo que permite realizar la inferencia mediante ONNX Runtime y facilita su integración independientemente del lenguaje o framework utilizado para entrenarlo originalmente.
El modelo puede reemplazarse por otra versión compatible sustituyendo el archivo: app/bin/modelo_redes_neuronales.onnx
Las explicaciones de las predicciones se generan mediante la biblioteca LIME (Local Interpretable Model-agnostic Explanations).
El objeto explicador se encuentra almacenado en: app/bin/explicador.pkl
Este objeto está configurado para:
- Generar 2000 muestras a partir de cada instancia analizada.
- Identificar y retornar los 10 atributos más relevantes para la predicción.
Para modificar el comportamiento del explicador, es necesario generar una nueva configuración compatible y reemplazar el archivo explicador.pkl.
El aseguramiento de la calidad y la validación del correcto funcionamiento de la aplicación son aspectos fundamentales durante su desarrollo.
El proyecto cuenta con pruebas unitarias implementadas mediante pytest, orientadas a validar las principales funcionalidades del backend.
Actualmente, los indicadores de cobertura son:
- Cobertura de sentencias: 100 %
- Cobertura de ramas: 96 %
Los casos de prueba y los scripts relacionados se encuentran en: /tests/scripts
Los resultados de las pruebas y los informes de cobertura se almacenan, respectivamente, en:
/tests/resultados
/tests/cobertura
Las pruebas pueden ejecutarse mediante cualquiera de las siguientes opciones:
pytesto, utilizando el script proporcionado por el proyecto:
./ejecutar-tests.sh