Power Automate, AI Builder y el conjuro para leer recibos de compra

Original article was published by Javier Ferreiro on Artificial Intelligence on Medium


En ambos casos, nuestro modelo de AI trata de identificar estos atributos de salida en la correspondiente imagen digitalizada del recibo de compra. A la izquierda, observamos que el bloque de acción ha logrado identificar Merchant Name, Transaction time, Transaction date y Total. A la derecha, el bloque de acción sólo ha sido capaz de identificar Merchant Name y Transaction Date. En ambos casos, cada uno de estos atributos de salida va acompañado de su correspondiente Intervalo de confianza (Confidence) que en una escala de 0 a 1, nos indica el grado de fiabilidad del resultado.

En ambos casos (aunque la captura de pantalla no es la más adecuada) observamos un atributo de salida denominado readResults de tipo matriz -array-. Examinaremos más detenidamente su contenido si añadimos un bloque de acción ‘Create HTML table’ a continuación del bloque de acción del AI builder, asignándole como entrada este atributo:

Una vez modificado nuestro flujo, desde la consola de Power Automate podemos repetir la ejecución ‘fallida’, e inspeccionar el comportamiento de nuestro nuevo bloque de acción:

Nuestra matriz –array– consta de elementos de tipo objeto –object-. Cada uno de estos elementos consta de tres atributos:

Observemos el detalle de uno de estos objetos:

{  "@odata.type": "#Microsoft.Dynamics.CRM.expando",  "text": "Solred S",  "location": {    "@odata.type": "#Microsoft.Dynamics.CRM.expando",    "page": 1,    "boundingBox": {      "@odata.type": "#Microsoft.Dynamics.CRM.expando",      "left": 0.2123015873015873,      "top": 0.09871031746031745,      "width": 0.1488095238095238,      "height": 0.01984126984126984,      "polygon": {        "@odata.type": "#Microsoft.Dynamics.CRM.expando",        "coordinates@odata.type":            "#Collection(Microsoft.Dynamics.CRM.crmbaseentity)",        "coordinates": [          {            "@odata.type": "#Microsoft.Dynamics.CRM.expando",            "x": 0.2123015873015873,            "y": 0.10094246031746032          },          {            "@odata.type": "#Microsoft.Dynamics.CRM.expando",            "x": 0.36078042328042325,            "y": 0.09871031746031745          },          {            "@odata.type": "#Microsoft.Dynamics.CRM.expando",            "x": 0.3611111111111111,            "y": 0.11681547619047619          },          {            "@odata.type": "#Microsoft.Dynamics.CRM.expando",            "x": 0.2123015873015873,            "y": 0.1185515873015873          }        ]      }    }  }}

El contenido de esta matriz se parece sospechosamente al resultado en formato JSON que devuelve una de las APIs de Azure: nos referimos a la Cognitive Vision API. ¿Qué significa esto?

Significa que la nueva funcionalidad anunciada por Microsoft se apoya en dos capas de AI independientes entre sí:

  • una primera capa a cuenta de la Computer Vision API encargada de identificar texto en una imagen, y proporcionar la posición del mismo
  • una segunda capa a cuenta de AI Builder que en base a la información que le proporciona la primera pata tata de identificar una serie de parámetros: el importe total, la fecha de la transacción, el nombre del comercio, la hora de la transacción.

Como curiosidad, apuntar que la Computer Vision API cuenta con su propio conector en Power Automate. Encontraréis más información sobre los bloques de acción que actualmente soporta aquí o desde el propio editor de Power Automate:

Pero volvamos al problema que teníamos entre manos: ¿cuál de las dos capas ese la responsable de no identificar el importe total en nuestro recibo de Campsa? Para salir de dudas modificaremos ligeramente nuestro bloque de acción ‘Create HTML table’ para mostrar únicamente el contenido del atributo ‘text’:

Desde la consola de Power Automate reejecutamos nuestro flujo, y examinamos los resultados de la tabla:

Solred
S
SOLRED
DR ESQUERDO
.
CAMPSA ESTACIONES SERVICI
DR ESQUERDO 153 (MADRID)
SOLRED
Fecha : 29/07/20
Hora: 20:13
Comercio: 183009307-01
Tme :01
N. Oper. : 0889 Tipo:2-V Fich/ Rem:BJ
Cod. Oper: 009889
N. Autor :982009
EL CORTE INGLES**** **** **** **** *** (*)
Titular: ******** ****** /*.
IMPORTE
SOLRED - SOLRED - SOLRED
PRODUCTO
E/L.
LITROS
DIESEL e+ Neo
1,159
41,26
47,82
IMPORTE VENTA: 47,82 6
COPIA PARA EL CLIENTE
***************************************** .
Disfruta de tu descuento del 4%en todos los departamentos de
El Corte Ingles, en Hipercor, Supercor,SOLRED
Supercor Express y Opencor.Consulta secciones en repsol.com
-o elcorteingles.es
En esta operacion
has conseguido 1,91 EUR
***********************************

Conclusiones y próximos pasos

Por suerte para nosotros, el origen de no poder identificar el importe total en el recibo ejemplo de Campsa es la segunda capa de AI, la correspondiente al AI Builder. ¿Que por qué son buenas noticias? Por lo ya comentado anteriormente, es una funcionalidad que se encuentra en Preview y que de seguro incorporará muchas mejoras en los próximos meses. Si por el contrario el problema fuera de la primera capa de AI, la correspondiente a la Computer Vision API, la situación resultaría más compleja, puesto que

De modo que a aquell@s CitiZen Developers pacientes, es muy muy posible que en pocos meses esta nueva funcionalidad mejore de forma notable sus resultados. Pero para aquell@s CitiZen Developers impacientes, os propongo complementar esta nueva funcionalidad de AI Builder con alguna de estas dos alternativas:

  • La incorporación de un bloque de acción de tipo Condición que analice la presencia de la cadena –string– ‘CAMPSA’, y en caso afirmativo extraiga el Importe Total de aquel elemento de la matriz –array– readResults que contenga la expresión ‘IMPORTE VENTA’
  • El uso de la tecnología de Adaptive Cards para mostrar al usuario la imagen del recibo de compra, y darle la opción de seleccionar el Nombre del Comercio, el Importe Total y la Fecha de la transacción

De acuerdo, ninguna de ellas se basa en AI, auque nos permitirán complementar temporalmente las lagunas de esta nueva y prometedora funcionalidad. ¿Interesad@? en ese caso tengo una buena y una mala noticia. La mala, que este artículo ya se ha extendido demasiado. La buena, que exploraremos estas dos alternativas en sucesivos artículos.

Saludos, FlowNautas!