Doug Sillars

Doug Sillars

Análisis de recibos con la API de Machine Learning de Mindee

Cualquiera que haya presentado un informe de gastos puede confirmarlo: el seguimiento y registro de recibos es un quebradero de cabeza. Aquí entra en juego la API de análisis de recibos de Mindee, que utiliza el aprendizaje profundo para analizar de forma automática, precisa e instantánea los detalles de sus recibos.

En este tutorial, veremos los pasos para usar la API de análisis de recibos de Mindee. ¡Empecemos!

Requisitos previos de la API

  1. Necesitará una cuenta gratuita de Mindee. Regístrese y confirme su correo electrónico para iniciar sesión.
  2. Un recibo. Busque uno reciente en su bolso/cartera, o haga una búsqueda de imágenes en Google de un recibo y descargue algunos para probar.

Configuración de la API

Inicie sesión en su cuenta de Mindee y acceda a su entorno de la API de recibos de gastos haciendo clic en la Recibos de gastos tarjeta:

Para activar la API, haga clic en el botón «Probar gratis» para acceder a nuestro generoso nivel gratuito. Aterrizará en la página del panel de control, donde podrá ver rápidamente el uso de la API (ahora mismo no tiene ninguno, pero eso cambiará). En la navegación izquierda, hay enlaces a «Documentación», «Credenciales» e «Interfaz en vivo». La pestaña de documentación tiene todos los detalles técnicos que necesitará para construir el endpoint de la API de recibos, y la Interfaz en vivo es una demostración interactiva genial. En lugar de probar la demostración, queremos construir con la API, así que haga clic en «Credenciales» para crear un token de API.

Añada un nuevo token. En este ejemplo, lo he llamado «Tutorial»:

Haga clic en «Añadir nueva clave» y podrá ver su token de API,.

Ahora, estamos listos para hacer una llamada a la API. En este ejemplo, usaremos cURL.

curl -X POST \ https://api.mindee.net/products/expense_receipts/v2/predict \
 -H 'X-Inferuser-Token: {apiToken}’ \
 -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
 -F file=@/path/to/your/file.png

Simplemente reemplace {apiToken} con tu nuevo token de API y /path/to/your/file/png con la ruta a tu recibo.

NOTA: También puedes copiar este código directamente desde la pestaña de documentación de la API con tu token de API ya insertado.

En este ejemplo, utilicé un recibo de la tienda de comestibles del aeropuerto de Colonia (mi último viaje de negocios en 2020):

Al pegar el ejemplo de cURL en mi terminal, presioné enter y, aproximadamente un segundo después, recibí una respuesta JSON con los detalles del recibo. El JSON completo se puede acceder aquí. Dado que la respuesta es bastante extensa, repasaremos los distintos campos sección por sección.

Respuesta de la API: Análisis de resultados

Sección Resumen y Documentos:

Las dos primeras secciones de la respuesta contienen información sobre la llamada a la API realizada:

"call": {
    "endpoint": {
        "name": "expense_receipts",
        "version": "2.1"
    },
    "finished_at": "2020-08-29T18:01:22+00:00",
    "id": "e47d8654-0df7-4839-a282-2c04bf293886",
    "n_documents": 1,
    "n_inputs": 1,
    "processing_time": 1.087,
    "started_at": "2020-08-29T18:01:21+00:00"
},
"documents": [
    {
    "id": "66d9adc6-76cf-4c42-8622-3dadb660ac32",
    "name": "IMG_20200301_073354.jpg"
    }
],

La sección de la llamada nos indica que se ejecutó en el endpoint de recibos de gastos, subiendo un documento de una página, y que, después de aproximadamente 1 segundo, el archivo fue procesado. La sección de documentos proporciona el ID de Mindee para el archivo y el nombre del archivo.

Predicciones:

Ahora llegamos a lo interesante. La sección de Predicciones está dividida en varias secciones. Varias de ellas identifican campos en el recibo, y otras utilizan el aprendizaje automático para deducir información del recibo. Repasemos cada sección:

Categoría

category": {
     "probability": 0.51,
     "value": "miscellaneous"
},

La API hace una predicción sobre el tipo de compra. En este caso, está 51% segura de que es "varios". Las categorías posibles son [peaje, comida, estacionamiento, transporte, alojamiento, gasolina, varios].

Fecha

Identificada a partir del texto del recibo y convertida a formato ISO. Esta compra se realizó el 3 de febrero de 2020, y el modelo está 99% seguro de esa elección. El cuadro delimitador de segmentación proporciona 4 coordenadas (x,y) que indican de dónde se extrajo la fecha del recibo [(0,0) es la esquina superior izquierda, (1,1) es la esquina inferior derecha].

"date": {
    "iso": "2020-02-03",
    "probability": 0.99,
    "raw": "03-02-2020",
    "segmentation": {
    "bounding_box": [
      [0.64,0.661],
      [0.801,0.661],
      [0.801,0.686],
      [0.64,0.686]
  ]
}

Localización

Utilizando los datos del recibo, la API puede predecir dónde se realizó la compra, el idioma y la moneda:. Consulta la documentación para conocer las últimas actualizaciones de soporte. En el momento de la redacción, el soporte se centra en Europa y Norteamérica.

"locale": {
    "country": "DE",
    "currency": "EUR",
    "language": "de",
    "probability": 0.77,
    "value": "de-DE"
},

En el caso de mi recibo, tiene un 77% de confianza en que la compra está en alemán, se realizó en Alemania y en euros.

Comerciante

"merchant": {
    "name": "REWE",
    "probability": 0.91,
    "segmentation": {
    "bounding_box": [
      [0.279, 0.135],
      [0.719, 0.135],
      [0.719,0.23],
      [0.279,0.23]
     ]
}

La API predijo correctamente (estaba 91% segura) que era una tienda REWE. De nuevo, cuatro puntos (x,y) marcan la ubicación del texto que nombra al Comerciante en la imagen.

Orientación

"orientation": {
   "degrees":0,
   "probability": 0.99
},

¿El documento requirió rotación antes del análisis? Medido en incrementos de 90 grados [0.90.180.270]. En este caso, no requirió ninguna rotación.

Impuestos

"taxes": [],

Si se identifican impuestos en el recibo, aparecerán aquí. En este caso, no se encontraron impuestos (pero este es el resultado correcto).

Hora

"time": {
    "iso": "15:50",
    "probability": 0.99,
    "raw": "15:50",
    "segmentation": {
    "bounding_box": [
      [0.649,0.898],
      [0.732,0.898],
      [0.732,0.925],
      [0.649,0.925]
    ]
}

Hora en que se imprimió el recibo, confianza y las coordenadas (x,y) que delimitan el campo en la imagen.

Total

Quizás la parte más importante del recibo, el total gastado, junto con la confianza y el recuadro que indica la ubicación en el recibo.

"total": {
    "amount": 17.74,
    "probability": 0.99,
    "segmentation": {
    "bounding_box": [
     [0.663,0.589],
     [0.765,0.589],
     [0.765,0.617],
     [0.663,0.617]
   ]
}

Resumen:

En poco más de 1 segundo, se cargó un recibo, se analizó y la respuesta se devolvió al usuario final. Sabemos que se gastaron 17,74 € en un REWE en Alemania el 3 de febrero de 2020 a las 15:50. Utilizando los cuadros delimitadores, podemos hacer que el usuario valide los valores y luego introduzca estos datos en un sistema de gestión de gastos.

Conclusión

Utilizando la API de análisis de recibos de Mindee, puedes validar recibos rápidamente, lo que permite una gestión de gastos más rápida, precisa (y menos tediosa) para nuestros usuarios. Si tienes preguntas, contáctanos a través del widget de chat en la parte inferior derecha.

Acerca de

Desde fotos sencillas hasta PDF complejos o archivos manuscritos, la API de Mindee convierte los datos de tus documentos en JSON estructurado con alta fiabilidad. No se requiere entrenamiento de modelos. Compatible con cualquier alfabeto y cualquier idioma.

,
,

Punto clave

Punto clave