← Volver a proyectos

Pipeline de visión por computadora para corrección de exámenes

Backend / Visión por computadora

Problema

Procesar grandes volúmenes de hojas de respuestas con precisión, sin saturar la CPU del servidor ni requerir calibración manual por hoja.

Impacto

Throughput estable y eliminación de los picos de CPU, con una detección que se autoajusta sin configuración por documento.

El problema

El servicio corregía hojas de respuestas mediante reconocimiento óptico de marcas (OMR). Al escalar aparecieron dos problemas serios: el procesamiento saturaba la CPU al 96%, y la detección dependía de calibrar cada hoja a mano, lo que no escalaba.

La arquitectura

  • API en FastAPI con versionado explícito de endpoints, para evolucionar el contrato sin romper a los consumidores.
  • Pipeline de OpenCV con thresholding adaptativo por zona: la detección se ajusta sola a cada región de la hoja, sin configuración manual.
  • Pool de workers para procesar PDFs en paralelo.
  • Contenedores Docker endurecidos (usuario no-root) para correr de forma segura en producción.

Decisiones clave

  • La causa raíz del 96% de CPU era oversubscription: un pool de procesos combinado con las librerías numéricas de OpenCV (BLAS/TBB/OpenMP) multiplicaba los hilos. La solución fue acotar explícitamente los thread pools de esas librerías. N procesos × M hilos dejaron de pelear por los mismos cores.
  • Detección adaptativa en vez de calibración manual: eliminó el trabajo repetitivo por hoja y volvió el sistema robusto ante variaciones.
  • Hardening del contenedor a usuario no-root: requirió alinear permisos de volúmenes y UID fijo, pero cerró una superficie de ataque real.

Impacto

El uso de CPU dejó de dispararse, el throughput se volvió predecible y la corrección dejó de depender de ajustes manuales por documento.