Arquitectura
El camino de una foto, paso a paso
A diferencia de El proyecto (la historia de cómo se llegó hasta aquí), esto es el sistema tal y como funciona hoy cuando subís una foto en Probarlo: qué modelo se ejecuta primero, qué decide cada etapa, y qué pasa si una etapa no encuentra nada.
Foto subida en /probar.html
en paralelo — dos filtros independientes
¿Esto es un hueso?
/filter/clip — zero-shot contra los 9 grupos
+ "no es un hueso". Sin entrenamiento propio.
Segunda opinión binaria
/filter/is-bone — hueso / no_hueso, modelo
aparte del clasificador multi-clase.
Grounded-SAM localiza el hueso
shared/cv_extractor/extract.py — contorno + recorte a bounding
box con fondo gris. Una sola pasada: alimenta features geométricas y el
recorte que ve la CNN.
Modelo híbrido → grupo morfológico
/hybrid/classify — embedding CNN (ResNet18) + vector
geométrico (elongación, circularidad, Hu...) → uno de 9 grupos
(cranio, hueso_largo, vertebra...).
El modelo de referencia: supera a CNN sola y a geométrico solo.
en paralelo al resultado de la etapa 1 — no la sustituyen
Atajo para hueso_largo
Si elongación > 0.900 → hueso_largo directo, sin CNN.
Generaliza mejor a fotos reales (recall 0.38 → 0.88). Si no salta,
manda la CNN de la etapa 1.
Tercera opinión
/describe/qwen, /describe/qwen/features —
descripción libre + grupo sugerido, o JSON de descriptores anatómicos.
Para auditar casos dudosos, no decide nada.
etapa 2 — según el grupo predicho en la etapa 1
Modelo de hueso concreto
fémur, húmero, astrágalo... — entrenado solo con filas de ese grupo.
Modelo de taxón
humano / no_humano — entrenado solo con filas de ese grupo.
Sin etapa 2 todavía
Se marca stage2_pending en vez de quedar en blanco.
Resultado mostrado al usuario
Todo corre en el mismo proceso FastAPI (ver infraestructura) y se dispara con una sola subida de foto — las cajas punteadas (puerta de elongación, Qwen) son opiniones en paralelo, no pasos obligatorios de la cadena principal.