Servicios Cognitivos de Microsoft «Custom Vision»

En recientes fechas hemos escuchado noticias respecto a la inversión de Microsoft en México, uno de los rubros que captó mi atención fue el uso de tecnología de inteligencia artificial para el monitoreo de tiburones pelágicos. Si han seguido mis entradas al blog la aplicación de inteligencia artificial para la resolución de problemas es un área donde tengo especial interés, así que me dispuse a escribir una entrada al blog a manera de introducción de alguno de los servicios que Microsoft tiene disponibles para el uso de funciones existentes de inteligencia artificial.

En entradas posteriores profundizaremos en como consumir alguna de estas funciones a través de código para agregarla en nuestras aplicaciones y examinaremos lo que hay en la iniciativa “AI for Earth” que es la que será utilizada para el programa de conservación del tiburón, la intención inicial de esta entrada es dar un marco general de las capacidades e iniciaremos con el servicio denominado “Custom Vision”.

Empezar a utilizar el servicio de custom visión es muy sencillo, desde un browser accedemos a https://www.customvision.ai/ y accedemos usando una cuenta de Azure.

Al acceder nos encontramos con esta pantalla y al dar click en New Project podremos definir el proyecto en el que estamos interesados.

En esta ocasión queremos crear un clasificador de imágenes, es decir, una inteligencia que al suministrarle una imagen pueda determinar a qué categoría pertenece.

Para crear el proyecto es necesario tener un recurso Cognitive Services de Azure, en caso de no tenerlo se puede crear en la misma pagina haciendo click en create new.

Al crear nuestro recurso debemos de introducir los datos pertenecientes a nuestra cuenta a nuestra cuenta, así como al recurso que vamos a crear. Para propósitos de este demo usaremos CustomVision.Training y F0, siendo está la opción gratuita.

Una vez creado nuestro recurso seleccionamos las opciones restantes como aparecen en la imagen y damos click en el botón de Create Project.

Toda inteligencia artificial debe de tener ejemplos de entrenamiento, es de estos ejemplos donde obtendrá la capacidad de diferenciar entre imágenes. Estas imágenes serán diferenciadas por etiquetas dadas por nosotros. Un bonito ejemplo es el siguiente:

¿Cómo logro que mi inteligencia artificial diferencié entre una deliciosa dona y mi amigo peludo dormido?

Justo como lo haría con un niño, dándole ejemplos.

En nuestro caso estos ejemplos se traducen en imágenes y alimentar estas imágenes es un proceso muy sencillo.

Dando click en Add Images podemos subir imágenes de ejemplo a nuestro proyecto.

Al subir las imágenes debemos de llenar el campo My Tags, estas serán las etiquetas sobre las que la inteligencia clasificará.

Una vez que el proyecto posee al menos dos etiquetas y cinco imágenes por etiqueta podemos entrenarlo dando click en el botón Train. Para este ejemplo basta seleccionar la opción de Quick Training.

Una vez entrenado nos encontraremos con esta pantalla.

Los valores de Precision y Recall determinan que tan buena es la inteligencia para determinar a qué etiqueta corresponde cada ejemplo. Precision dice que porcentaje de etiquetas determinadas por nuestro sistema fueron correctas, Recall nos dice a qué porcentaje de etiquetas dadas por nosotros fueron correctamente seleccionadas. Si nuestra inteligencia hubiera asignado a todas las imágenes la etiqueta de Dona, el valor de Precision en Dona sería de 100% ya que todas las donas fueron correctamente clasificadas, sin embargo, el Recall de Amigo sería de 0% ya que no clasificó ningún Amigo correctamente.

En nuestro caso un valor de 100% es excelente, pero esto sólo garantiza que nuestro modelo es capaz de diferenciar ejemplos que nosotros hemos etiquetado. ¿Será capaz de diferenciar imágenes que no ha visto?

Al dar click en Quick Test podemos averiguar esto.

Pues sí, con los ejemplos dados nuestra inteligencia obtuvo suficiente información para diferenciar estas dos imágenes.

Hagamos el ejercicio un poco más difícil.

Estos cuatro caracteres pertenecen al idioma japonés, en particular dos de ellos pertenecen al silabario llamado Hiragana y los otros dos a uno llamado Katakana. Los caracteres pertenecientes al Katakana son formados generalmente con rectas y el Hiragana con curvas. Veamos si la inteligencia puede determinar cual pertenece a cuál.

De la misma manera que en el ejemplo anterior debemos proporcionar imágenes que representen nuestras etiquetas, en este caso Hiragana y Katakana.

Entrenamos y los números nos dicen que todo salió bien, sin embargo…

Error, este carácter no es Katakana pero la inteligencia está muy segura de que lo es. ¿Significa entonces que nuestro proyecto ha fracasado? Para nada, ante errores de clasificación la mejor solución usualmente es alimentar mejor y más datos a nuestra inteligencia.

Incrementando la variedad y cantidad de ejemplos proporcionados mejoró dramáticamente la clasificación de nuestro sistema al punto que realice un trabajo de reconocimiento de buena calidad, todo esto sin necesidad de codificar nada.

Si estamos interesados en realizar un demo o prototipo usando la tecnología dada por Microsoft, la herramienta de customvision hace la creación de este fácil y rápida.

Consumir un servicio SOAP Custom utilizando SoapUI

En algunas ocasiones es necesario consumir un servicio SOAP que codificamos para Dynamics 365 Finance and Operation, desde .Net el proceso de autenticación es más claro pero cuando interactuamos con algún otro lenguaje de programación es muy útil proporcionar el ejemplo de consumo en una herramienta como SoapUI.

Para ello vamos a realizar los siguientes pasos :

Primero creamos nuestro proyecto de tipo SOAP desde el botón SOAP e ingresamos el WSDL y el nombre.

Una vez creado nuestro proyecto lo primero que vamos a configurar va a ser un TestCase para poder generar un token y así poder consumir el servicio. Dentro del proyecto agregamos un nuevo elemento de tipo TestSuit y a su vez dentro de este agregamos un TestCase.

Finalmente, dentro de nuestro TestCase creamos un Step de tipo HTTP Request, asignamos un nombre.

Ya dentro de la ventana de configuración en el campo EndPoint ingresamos la url junto con el tenant id del cliente https://login.microsoftonline.com/”Id tenant”/oauth2/token, después

Agregamos los siguientes 4 parámetros en los 3 últimos utilizaremos los datos del cliente para llenar los campos value. Finalmente, el campo method lo cambiamos a POST.

Ya configurado nuestro TestCase lo ejecutamos y nos mandara como resultado el token y el tipo que necesitamos. Copiamos el token y volvemos a nuestro request de prueba que genero automáticamente SOAPUI. 

En la pantalla de nuestro request abrimos la pestaña de Header y agregamos una línea con nombre Authorization y en value escribimos el tipo de token seguido de un espacio y el token que nos generaron los pasos anteriores. Tener cuidado de no remover la palabra “Bearer”

Una vez realizado, puedes llenar el request con los datos específicos del servicio.