← Volver a artículos

Parser de tickets con OCR: de foto a datos estructurados

Cómo construí un pipeline que toma una foto de cualquier ticket y devuelve JSON limpio — combinando OCR clásico con un LLM para la extracción.

·1 min de lectura·
#Python#AI#OCR#LangChain
Contenido

Los tickets son una pesadilla para los ordenadores: cada tienda usa un formato diferente, las fuentes varían, el papel se deforma. El OCR clásico te da el texto; la parte difícil es extraer significado estructurado de él.

El pipeline

  • Preprocesamiento de imagen: corrección de perspectiva, mejora de contraste, binarización
  • Tesseract OCR para extracción de texto bruto
  • LangChain + GPT-4o-mini para extraer campos estructurados
  • Validación y normalización de esquema JSON

El paso del LLM es la idea clave: en lugar de escribir patrones regex frágiles para cada formato de ticket, describes el esquema que quieres y dejas que el modelo descubra dónde están los campos.

schema = {
  "merchant": "string",
  "date": "ISO 8601 date",
  "total": "number",
  "items": [{"name": "string", "price": "number"}]
}

result = chain.invoke({
  "ocr_text": raw_text,
  "schema": json.dumps(schema)
})

Precisión y casos límite

En un conjunto de prueba de 200 tickets reales, la precisión de extracción de campos fue del 94% para el nombre del comercio, 97% para el total y 89% para las líneas individuales. Los fallos fueron sobre todo tickets manuscritos y papel muy arrugado — áreas donde el preprocesamiento todavía necesita trabajo.

La combinación de preprocesamiento determinista y extracción probabilística es más robusta que cualquiera de los dos enfoques por separado.

← Volver a artículos