Este repositorio (rama main) concentra el trabajo de IA para análisis de rodilla/rótula y deja documentada su integración con la rama de aplicación móvil + microservicios.
BioKnee busca apoyar el análisis clínico de rodilla mediante:
- Segmentación de estructuras anatómicas en imágenes.
- Procesamiento morfológico de máscaras (erosión/desbinarización).
- Obtención de centroides anatómicos.
- Cálculo del ángulo Q como salida cuantitativa.
En esta rama se encuentra el desarrollo del pipeline de IA y experimentación:
.
├── U_Net_BioKnee_Algoritmo.ipynb
├── U_Net_BioKnee_Actualizada.ipynb
├── U-net2D_Rotula.ipynb
├── Desbinarizador_2.py
├── ConvierT.p
├── ConvierTT.m
├── ConvierTT.fig
└── Convertidor2.m
- Notebooks U-Net (
.ipynb): entrenamiento/ajustes de modelos para segmentación de rodilla-rótula. Desbinarizador_2.py: utilidades de posprocesado de máscara.- Scripts/archivos auxiliares (
.m,.p,.fig): apoyo para conversión/procesamiento en flujo de investigación.
- Python 3.10+
- Jupyter Notebook / JupyterLab
- Dependencias de visión por computador y ML (según notebook)
Nota: al ser una rama enfocada en investigación, las dependencias exactas pueden variar por notebook.
La aplicación móvil y los microservicios (documentados previamente) consumen el resultado de esta IA para su flujo clínico.
-
App móvil (React Native + Expo)
- Registro/login de doctor.
- Alta y consulta de pacientes.
- Visualización de resultados del análisis.
-
Microservicio de usuarios (
userservice)- API REST con Express + MongoDB.
- Registro de doctores/pacientes y autenticación JWT.
-
Microservicio de segmentación (
segmenter)- API REST en Flask.
- Carga del modelo TFLite desde GridFS.
- Segmentación + centroides + ángulo Q.
.
├── App.js
├── HomeScreen.js
├── LoginScreen.js
├── DoctorHomeScreen.js
├── PatientListScreen.js
├── PatientDetailScreen.js
├── AngleResultScreen.js
├── userservice/
│ ├── Server_users.js
│ ├── Dockerfile
│ └── package.json
├── segmenter/
│ ├── server_segmentation.py
│ ├── Dockerfile
│ └── requirements.txt
└── docker-compose.yml
mongo:27017userservice:3000segmenter:5000
Variables comunes:
SECRET_KEY=clave_secretaMONGO_URL=mongodb://mongo:27017/users(userservice)MONGO_URL=mongodb://mongo:27017/rodilla_tasks(segmenter)
Usuarios (Express) — http://localhost:3000
POST /register-doctorPOST /register-patient(token)POST /loginGET /patients(token)GET /profile(token)
Header:
Authorization: Bearer <token>Segmentación (Flask) — http://localhost:5000
POST /segment(form-dataimage)
Respuesta JSON:
mask_png_b64overlay_png_b64angle_qcentroids
- La IA segmenta la imagen y extrae centroides.
- Se calcula el ángulo Q automáticamente.
- El microservicio expone estos resultados vía API.
- La app móvil consume y presenta los resultados al médico.
- El servicio de segmentación usa un modelo TFLite en GridFS con nombre esperado:
U-Net_entrenada_DA_45e_GPU.tflite
- Si existe un modelo
.h5en artefactos de entrenamiento, debe convertirse/publicarse a.tflitepara el flujo productivo. - En despliegue con Docker, la conexión Mongo debería parametrizarse por entorno para apuntar al host
mongo.
- Versionar dependencias de notebooks IA en un
requirements.txt/environment.ymlespecífico demain. - Publicar métricas de entrenamiento y validación del modelo en un reporte reproducible.
- Documentar contrato OpenAPI para los microservicios.
- Integrar CI/CD para validación de notebooks y servicios.