Clasificador de figuras CAD y tickets con One-Shot Learning

- 1 min

Sistema de clasificación de imágenes pensado para un caso muy concreto: dado un documento escaneado, distinguir automáticamente si es una figura geométrica/CAD (como un cilindro) o un ticket de compra — y si es un ticket, extraer el texto que contiene. La idea es que un mismo pipeline reciba cualquiera de los dos tipos de documento y decida, sin reentrenar nada, cómo procesarlo.

Ejemplos de las dos clases: figura CAD (cilindro) y ticket

Para lograrlo sin necesitar miles de ejemplos por clase se usa one-shot learning: en vez de un clasificador tradicional, una red siamesa aprende a comparar pares de imágenes y decidir si pertenecen a la misma clase, entrenando con relativamente pocos ejemplos por categoría.

Arquitectura del servicio web de cv-demo

Pipeline:

  1. Preprocesamiento con OpenCV (escala de grises, binarización de Otsu, transformaciones morfológicas, normalización a [0, 1]).
  2. Red siamesa entrenada para few-shot learning (pesos en siamese.weights.h5).
  3. Si la imagen es un ticket, se activa OCR con Pytesseract para extraer el texto.
  4. API con Flask/FastAPI: /inference para clasificación, /inference-ocr para clasificación + texto detectado.

Datos de entrenamiento tomados de datasets públicos de Kaggle (“3D Geometric Objects in 2D plane” y “Find it again!”).

Repositorio: github.com/RodolfoFerro/cv-demo

Rodolfo Ferro

Rodolfo Ferro

With great power comes great responsibility.

comments powered by Disqus