Tabla de Contenidos
En este tutorial, aprenderás a analizar una imagen de recibo usando Python. Esto te puede ayudar a extraer datos de recibos automáticamente sin intervención humana y a usarlos en tus aplicaciones de backend para diversos fines contables.
El script final se puede usar dentro de cualquier aplicación middleware de Python o API REST que sirva a tus interfaces de frontend.
Al final de este tutorial, te mostraremos cómo resaltar los campos extraídos del recibo en la imagen usando la biblioteca de visión artificial de código abierto OpenCV.
El resultado final es el siguiente:

Requisitos previos de la API
- Necesitas tener Python instalado en tu entorno. En este tutorial, estamos usando la versión 3.7.
- Necesitarás una cuenta gratuita de Mindee. Regístrate y confirma tu correo electrónico para iniciar sesión.
- Un recibo. Busca uno reciente en tu bolso/cartera, o haz una búsqueda de imágenes en Google de un recibo y descarga algunos para probar.
Configurar el proyecto
Crea un directorio vacío donde quieras en tu portátil, nosotros lo llamaremos 'python_receipt', y crea un archivo 'main.py' dentro.
Abre una terminal y ve al directorio que acabas de crear. En este tutorial usaremos la librería de Python “requests” para llamar a la API. Si no está instalada en tu entorno, puedes instalarla ejecutando:
Asegúrate de tener una imagen de recibo en algún lugar de tu portátil y de conocer la ruta.
Eso es todo para la configuración, vamos a llamar a la API.
Llama a la API de recibos de Mindee
Inicia sesión en la Mindee y accede a tu entorno de la API de recibos de gastos haciendo clic en la siguiente tarjeta.

Si aún no tienes un token de API para esta API, ve a la sección “credentials” y crea una nueva clave de API.

Haz clic en la sección de documentación de la barra de navegación y luego haz clic en el enlace de Python en el área de código de ejemplo. Copia el código.

Abre el main.py archivo que creaste hace unos minutos y pega tu código de ejemplo, debería verse así:
Reemplaza el “path/to/my/file” marcador de posición en el código con la ruta de la imagen del recibo de la que quieres extraer datos.
Reemplaza el “my-token-here” con el token de API que creaste previamente en la plataforma.
Puedes volver a tu consola y ejecutar el script
Deberías ver un objeto JSON en tu consola con los resultados extraídos de la API de análisis de recibos. Ahora, vamos a analizar este JSON para obtener los datos que necesitamos.
Analizar el resultado
La API extrae una lista de diferentes campos del recibo (importe total, impuestos, fecha...). Puedes encontrar una descripción de todos los campos en la pestaña "documentación" de la página de la plataforma API de Mindee.
Ahora que hemos codificado la solicitud a la API, usaremos el objeto JSON y obtendremos algunas características extraídas.
Primero, vamos a crear una función de análisis que devuelva el importe total del recibo, la fecha y hora del pago y la categoría de gasto. Nos centraremos solo en esas cuatro características para el tutorial.
Las características están dentro del objeto de predicción en la respuesta JSON. Como puedes enviar un PDF de varias páginas a la API, el objeto de predicciones es un array, con un objeto de predicción para cada página.
En nuestro caso, como estamos enviando una imagen JPG simple, el array de predicciones contiene solo un objeto.
Ahora que nuestra función está lista, simplemente imprimiremos el resultado en la consola y añadiremos una comprobación simple para asegurar que la llamada a la API se realizó correctamente y que podemos acceder al resultado. Puedes reemplazar el script main.py por esto:
Ahora que nuestra función está lista, simplemente imprimiremos el resultado en la consola y añadiremos una comprobación simple para asegurar que la llamada a la API se realizó correctamente y que podemos acceder al resultado.
Puedes reemplazar el main.py script por esto:
Ejecuta el script y comprueba los resultados en tu imagen.
Finalmente, vamos a añadir una última pieza de código que resaltará las características extraídas en la imagen. Esto puede ayudarte a ti o a tus usuarios a validar muy rápidamente la extracción de datos.
Resaltar características en la imagen
Vamos a intentar resaltar las características como si alguien lo hubiera hecho con un bolígrafo.
Primero, tendrás que instalar la librería de Python de visión por computadora OpenCV si aún no la tienes instalada en tu entorno. Para ello, ejecuta:
Necesitamos modificar un poco nuestra función get_features para que devuelva las coordenadas de cada característica, ya que la usaremos para saber dónde dibujar los rectángulos.
Una vez hecho esto, vamos a crear nuestra función de resaltado en diferentes pasos, de la siguiente manera:
- Abrir la imagen desde la ruta
- Crear una imagen de máscara
- Iterar sobre las coordenadas de cada característica y dibujar el rectángulo de la característica en nuestra máscara
- Superponer la máscara y la imagen original con alfa
- Mostrar la imagen al usuario
Nota: cada coordenada devuelta por la API es relativa (en % de la imagen). Verás que hay una conversión de relativo a absoluto en el código.
Aquí está el código paso a paso:
Finalmente, solo tenemos que modificar un poco el código para ejecutar la función de resaltado e imprimir los resultados. Así es como se ve el código final:
En la última línea de código, no olvides reemplazar el marcador de posición path/to/my/file por la ruta de tu imagen actual.
¡Y el resultado final!
.webp)
Conclusión
En poco más de 1 segundo, se subió un recibo, la API extrajo los datos del recibo y luego el resultado fue analizado y resaltado en la imagen. ¡Genial, ¿verdad?
Si quisieras usar este tipo de script para mostrar resultados a tus usuarios, te aconsejaría que hicieras el resaltado en la aplicación de front-end, ya que enviar imágenes desde tu middleware no es la mejor opción debido al tamaño de la carga útil. La otra solución sería almacenar la imagen final usando cv2.imwrite(…) pero eso haría que tu cliente descargara el resultado. Para ayudarte con la renderización del lado del cliente para tus imágenes, puedes consultar nuestro SDK de ReactJS de código abierto.
Si tienes preguntas, ¡no dudes en contactarnos!
Acerca de



.webp)
.webp)
.webp)