[Cognitive Services] Extendiendo Face API SDK para LargeFaceList

Hasta hace casi un par de años, la Face API de Microsoft Azure Cognitive Services ofrecía como únicas opciones para persistir rostros, las APIs de FaceList y PersonGroup. Esta situación cambió cuando se introdujeron LargeFaceList y LargePersonGroup

Continue reading “[Cognitive Services] Extendiendo Face API SDK para LargeFaceList”

[Cognitive Services] ¿Qué héroe de MARVEL eres? (I)

Hace unos días, la leyenda del cómic Stan Lee falleció a sus 95 años de edad en un hospital de Los Ángeles. El hombre que le dio vida a los héroes de MARVEL ya no esta con nosotros y este artículo es un gesto por todas esas horas de diversión que tuve y tengo con sus personajes.

En las siguientes publicaciones aprenderemos como desarrollar una aplicación que nos diga ¿Qué héroe de MARVEL eres?, pero antes empezaremos creando una aplicación que nos diga que tanto nos parecemos específicamente a un personaje de MARVEL para tener una base práctica de como trabajar con la Face API de Microsoft Azure Cognitive Services.

Lo primero que tenemos que hacer es crear el recurso correspondiente en el portal de Microsoft Azure, esta tarea no es nada complicada, solo basta con encontrarlo y darle un nombre.

Una vez que ya tenemos nuestro recurso en la nube, ya podemos empezar a hacer uso de algunos de los algoritmos que nos ofrece esta API, que en nuestro caso será Detection y Verification:

  • Detection detecta rostros humanos en una imagen, devuelve rectángulos y, opcionalmente puntos de referencia y atributos.
  • Verification verifica si dos caras pertenecen a una misma persona o en otras palabras: que tanta es la semejanza entre dos rostros.

¿Qué tanto te pareces al personaje?

Esta simple aplicación hecha en WPF permite seleccionar dos imágenes para que luego a través de la Face API podamos compararlas.

Para empezar a trabajar esta aplicación en .NET, tenemos que agregar, a través de NuGet, la siguiente librería: Microsoft.ProjectOxford.Face.

Una vez hecho eso ya podemos crear una instancia de FaceServiceClient utilizando la llave generada al crear el recurso de Face API en el portal de Azure. Seguido de ello utilizaremos el algoritmo de detección de rostros en ambas imágenes seleccionadas para poder obtener el FaceId, el cual es la propiedad que necesitaremos del resultado del envío de ambas imágenes para poder ejecutar el siguiente algoritmo, el de verificación de rostros.

Y una vez incluida la llamada al algoritmo de verificación de rostros solo queda mostrar el resultado en pantalla para empezar a probar nuestro proyecto y apreciar lo sencillo que ha sido realizar esta primera parte.

¿Qué héroe de MARVEL eres?

Ahora, si lo que queremos es reutilizar las imágenes de los héroes de MARVEL que hemos procesado nos toparemos con la sorpresa de que estos FaceId solo son válidos durante 24 horas

En esta situación tenemos que hacer algo un poco más complejo y eso lo descubriremos en el siguiente episodio.

Continuará…

[Cognitive Services] Explorando el Custom Vision Service

Traducido desde:
https://msdn.microsoft.com/en-us/magazine/mt829704

Uno de los servicios cognitivos más fascinantes disponibles en Microsoft Azure es el Custom Vision Service, que permite a los usuarios crear fácilmente modelos personalizados de visión por computadora. Tradicionalmente, el entrenamiento de un clasificador de imágenes requería miles, sino decenas de miles, de imágenes por clase para generar un modelo lo suficientemente preciso para su uso práctico. Además, también necesitarías una comprensión sólida de la mecánica de las redes neuronales. El Custom Vision Service proporciona una interfaz web fácil de usar que enmascara esta complejidad subyacente.

Mejor aún, el Custom Vision Service puede crear clasificadores de imágenes personalizados bastante precisos con tan solo 15 o 20 imágenes por clase, aunque la documentación recomienda un mínimo de 50 imágenes por clase. Generalmente, la calidad del clasificador de imágenes mejorará con más imágenes de entrenamiento. El Custom Vision Service también expone modelos entrenados a través de una API REST para simplificar la implementación de estos modelos.

En la conferencia Build 2018, una de las demostraciones principales involucró un vehículo aéreo no tripulado, o dron, volando sobre una serie de tuberías para detectar defectos y problemas de mantenimiento. En la demostración, un dron transmitía el vídeo desde su cámara a una computadora portátil. La computadora portátil evaluó las imágenes en comparación con un modelo de visión personalizado entrenado, que alertó al operador de drones de cualquier defecto que se vea en las tuberías. Para este artículo, voy a imitar un modelo de mantenimiento aumentado de inteligencia artificial similar para detectar problemas con las vías del tren. Para hacerlo, exploraré Custom Vision Service y demostraré lo fácil que es agregar una clasificación de imagen personalizada a cualquier aplicación o sitio web.

Abasteciendo Imágenes para el Entrenamiento

La creación de un modelo de visión por computadora con el Servicio de visión personalizada implica tres pasos simples:
  • Suba un conjunto de imágenes y etiquételas.
  • Entrene y genere el modelo haciendo clic en el botón Train (“Entrenar”).
  • Use la interfaz web o las API REST para evaluar el rendimiento del modelo.
En realidad, es así de fácil de comenzar. Pero debe tener cuidado al comenzar a buscar imágenes para su modelo en el que entrenar.

Recientemente, para una demostración de cliente, recopilé una serie de imágenes de vías de tren a través de Internet. Estas imágenes incluyen las vías normales del tren y las que tienen defectos severos. Con tan solo 30 imágenes, pude generar un modelo de visión personalizado para detectar defectos de seguimiento con aproximadamente un 80 por ciento de precisión como parte de mi presentación. Por impresionante que sea, me apresuré en señalarle al cliente que cualquier modelo de clasificación de imágenes listo para la producción requeriría imágenes de las vías del tren en una variedad de diversas condiciones de iluminación, ángulos, etc. Esta diversidad de datos de clasificación reduce la probabilidad de que el algoritmo aísle las características incorrectas de las imágenes de entrenamiento, lo que causaría estragos en los resultados.

Existe una historia de advertencia clásica, y posiblemente apócrifa, sobre el entrenamiento de redes neuronales. La leyenda explica a qué se enfrentaron los investigadores en los años ochenta cuando el ejército de los EE. UU. Decidió entrenar una red neuronal para detectar tanques. Según la historia, la red neuronal se comportó muy bien frente a los datos de prueba como parte del experimento. Sin embargo, cuando la red neuronal recibió nuevas imágenes para clasificar, funcionó terriblemente.

Los investigadores quedaron estupefactos hasta que se dieron cuenta de que todas las imágenes que contenían tanques habían sido tomadas en días nublados, mientras que todas las imágenes que carecían de tanques se tomaron en días soleados. La red neuronal separó las dos clases de fotos y eligió distinguir los dos conjuntos en función del color del cielo en lugar de la presencia de un tanque. Obviamente, esto no es lo que el Ejército necesitaba. Para una exploración completa de la historia de detección de tanques, puede consultar el escrito original de Neil Fraser en bit.ly/2llxudb, pero esta parte de su artículo vale la pena citar aquí:

“Es una ilustración perfecta del mayor problema detrás de las redes neuronales. Con cualquier red entrenada automáticamente con más de unas pocas docenas de neuronas es prácticamente imposible de analizar y comprender. Uno no puede decir si una red ha memorizado entradas, o está ‘engañando’ de alguna otra manera”.

Aunque el artículo se actualizó por última vez en 2003, esta cita sigue siendo válida hoy. Se está trabajando para comprender mejor el funcionamiento interno de las redes neuronales complejas, pero este esfuerzo está en curso y está apenas más allá de su fase naciente. La mejor práctica actualmente es obtener datos que contengan un conjunto variado de datos de entrenamiento. Esto ayuda al algoritmo a distinguir las imágenes en función de las variables correctas.

Para evitar problemas de derechos de autor de imágenes, he decidido aprovechar la gran colección de trenes de juguete de mis hijos para este artículo. Esto también me permite crear imágenes de entrenamiento y prueba rápidamente. Tomé 34 imágenes y las dividí en tres carpetas llamadas Roto, Normal y Prueba. Las imágenes con las vías del tren “rotas” están en la carpeta Roto, y las imágenes con pistas contiguas están en la carpeta Normal. Elegí aleatoriamente una serie de imágenes para probar el modelo y las coloqué en la carpeta Prueba. Con mis imágenes de origen seleccionadas y etiquetadas, es hora de crear un modelo.

Creating the Model

En un navegador, voy a customvision.ai y hago clic en el botón Sign In para iniciar sesión con mi cuenta de Microsoft. Una vez que haya iniciado sesión, hago clic en New project para crear un nuevo proyecto de visión personalizado.

En el diálogo que sigue, ingreso “Toy Trains” para el nombre del proyecto y una breve descripción del proyecto. Dejo la lista desplegable de Resource Group en la configuración predeterminada de Limited trial, y me aseguro de que los botones de opción para Project Types y Domains estén configurados en Clasificación y General, respectivamente. A continuación, hago clic en el botón Create project para crear un nuevo proyecto de visión personalizado.

Subiendo las imágenes

Una vez que se crea el proyecto, el sitio web le pide que cargue imágenes. Hago clic en Add Images y, en el siguiente cuadro de diálogo, hago clic en Browse local files para encontrar las imágenes para cargar. Primero, cargo las imágenes en la carpeta “Broken” seleccionándolas todas y haciendo clic en Abrir en el cuadro de diálogo de navegación. En el cuadro de texto debajo de las imágenes, ingreso el término “Broken” y hago clic en el signo más azul para etiquetar las imágenes con la etiqueta “Broken”. A continuación, hago clic en el botón Upload para cargar las 15 imágenes. A continuación, hago clic en Listo para finalizar este paso.

Ahora que se cargan las imágenes de las vías del tren rotas, es hora de cargar las imágenes en la carpeta Normal. Para hacer esto, hago clic en el ícono en la esquina superior izquierda del panel con el signo más en él. Repito los pasos anteriores para cargar las imágenes de entrada, excepto que esta vez, elijo las imágenes en la carpeta “Normal” y etiqueto las imágenes con la etiqueta “Normal”. Haga clic en el botón Upload para transferir las imágenes y luego haga clic en Done para cerrar el cuadro de diálogo.

Con todas las imágenes de muestra cargadas y etiquetadas, es hora de entrenar y probar el modelo.

Entrenando el Modelo

Hacia la parte superior de la página, hay un botón verde con engranajes. Hago clic en esto para entrenar un modelo con las imágenes actualmente etiquetadas. Tarda uno o dos minutos antes de que la capacitación se complete y la página web regrese con las métricas de desempeño del modelo.

Las dos métricas principales que se muestran son precision y recall. Precision indica con qué frecuencia un resultado predicho es correcto, mientras que recall mide el porcentaje de la frecuencia con la que una etiqueta predicha fue correcta. En otras palabras, recall indica que cuando la respuesta correcta es “Broken”, con qué frecuencia el modelo predecirá “Broken”. Para obtener una explicación más detallada de la terminología de la Matriz de confusión, lea la “Guía simple sobre la terminología de la matriz de confusión” en bit.ly/2IbRoAi

Probando el Modelo

Ahora es el momento de probar el modelo en las imágenes reservadas para las pruebas y ver qué tan bien funcionará el modelo cuando se presente con nuevas imágenes. A la derecha inmediata del botón de entrenamiento verde, hay un botón etiquetado como Quick Test. Hago clic en esto para abrir el cuadro de diálogo de prueba y luego en el botón Browse local files para que aparezca el cuadro de diálogo de carga de archivos. Uso este cuadro de diálogo para seleccionar una imagen en la carpeta “Prueba” y hago clic en “Abrir” para cargar el archivo. Después de un momento, el algoritmo mostrará sus resultados después de evaluar la imagen. La siguiente imagen muestra que esta imagen tiene un 79.2 por ciento de probabilidad de ser una pista Normal y un 60.2 por ciento de probabilidad de ser Rota. Recuerde que para este proyecto, Normal significa que la pista no está rota o es contigua.

Ejecuto la prueba nuevamente con otra imagen de una pista rota, al hacer clic de nuevo en el botón Examinar archivos locales. Esta vez escogí una imagen de un conjunto de pistas rotas. El modelo informa que hay un 95.9 por ciento de posibilidades de que esta sea una pista rota y solo el 11.2 por ciento de que la pista sea normal. Probé el modelo con el resto de los archivos en la carpeta Prueba para tener una idea de dónde funciona bien el modelo y dónde tiene problemas para identificar el estado correcto de las pistas.
Para una mayor experimentación, realizo una búsqueda de imágenes en Internet y copio la URL de la imagen y la pego en el cuadro de texto de la interfaz de usuario de prueba. Estas imágenes representan vías de tren desde diferentes ángulos y en diferentes superficies en condiciones de iluminación a diferencia del conjunto de imágenes de entrenamiento. Esto proporcionará una perspectiva de cómo funcionan las redes neuronales y por qué un conjunto diverso de datos de muestra es crucial para el éxito de un modelo listo para la producción. Las siguientes tres URL apuntan a algunas imágenes de ejemplo que encontré en línea (observe cómo el modelo clasifica cada una de las imágenes):
Además, es útil saber cómo se comportará el clasificador cuando se le proporcione una imagen fuera de su alcance. Por ejemplo, ¿cómo funcionará este clasificador, diseñado para determinar el estado de las vías del tren de juguete, cuando se le presente una imagen de un letrero de neón? Esto se conoce como manejo de imagen negativo, y un modelo efectivo debería predecir valores cercanos a cero en estos casos. Para probar esto, introduzco la siguiente URL en el cuadro de texto: http://datadriven.tv/wp-content/uploads/2018/05/50k.png. Mi modelo predictivo produjo un resultado de 1.7 por ciento para Normal y 0 por ciento para “Broken”.

Yendo más lejos

Para los fines de este ejemplo, creé un sistema de clasificación de imágenes de dos clases, donde el modelo solo tenía que etiquetar las imágenes de las vías del tren de juguete como rotas o normales. Sin embargo, puedo crear modelos más complejos. Actualmente, el nivel S0 (estándar) de Custom Vision Service puede admitir hasta 250 etiquetas únicas, lo que significa que puede capacitarse para clasificar 250 etiquetas diferentes. Además, el servicio puede manejar hasta 50,000 imágenes por proyecto.

Además, los modelos generados por el Custom Vision Service se pueden exportar para su uso en dispositivos informáticos de última generación y no dependen del acceso al servicio en la nube. Esto significa que podría cargar el modelo en un dispositivo y clasificar imágenes en un escenario fuera de línea. Actualmente, Custom Vision Service admite exportaciones de modelos en tres formatos: TensorFlow para dispositivos Android, CoreML para dispositivos iOS y ONNX para dispositivos Windows. Además, el Servicio de visión personalizada puede crear un contenedor de Windows o Linux que incorpore un modelo y un código de TensorFlow para llamar a la API de REST. Para obtener más detalles sobre la exportación de modelos para ejecutar dispositivos de borde, asegúrese de consultar la documentación en bit.ly/2K4ibjL.

En este artículo, demostré lo fácil que es comenzar con el Servicio de Visión Personalizada y construir un modelo de visión por computadora con un conjunto limitado de datos de capacitación. Un posible uso de esta tecnología sería acceder a los datos de imagen de las cámaras de tráfico y entrenar un modelo para detectar diferentes niveles de congestión basados ​​únicamente en esos datos. Anteriormente, la automatización de dicha tarea sería desalentadora, ya que requería conocimiento especializado y una gran cantidad de datos de entrenamiento etiquetados. Sin embargo, el Custom Vision Service combina una tecnología de red neuronal de vanguardia con una interfaz fácil de usar para crear una herramienta que abre la visión artificial a un uso más generalizado.

[Cognitive Services] Speech Services & Text Analytics con los #CNMAudios

Hoy 7 de Agosto del 2018 es un día especial para la Justicia y el Perú, y esto es porque hoy se cumple exactamente 1 mes, desde que IDL Reporteros empezó a difundir los primeros audios que revelarían presuntas manipulaciones de sentencias, favorcitos, negociaciones de ascensos de funcionarios, entre otros delitos de corrupción que involucrarían a jueces, miembros del Consejo Nacional de la Magistratura y a la Señora K.

Probablemente existan más de 20 mil audios y si vemos la cantidad de vídeos publicados hasta el momento en el canal de IDL pues parece que aún queda mucho trabajo por hacer. No me imagino lo tedioso que debe ser escuchar cada uno de los 20 mil audios, transcribirlos, clasificarlos y relacionarlos con otros audios, sería excelente que existiera una aplicación donde solo tengas que seleccionar el archivo de audio para que la computadora lo vaya leyendo por ti, lo cual es completamente factible gracias a la Inteligencia Artificial, y mientras vas seleccionando otros audios y preparándote algo de comer, la computadora pueda ir encontrando las palabras relevantes dentro de cada una de las conversaciones y mostrártelas para que en primera instancia puedas clasificar y relacionar los audios a la velocidad de la luz.

Plataforma de desarrollo y Azure

En caso no existan, si estas ejecutando Windows de 64 bits, tienes que crear una nueva configuración de plataforma llamada x64 y si estas ejecutando Windows de 32 bits, tienes que crear una nueva configuración de plataforma llamada x86.

Y en nuestra suscripción de Azure debemos crear un servicio Speech (preview) y Text Analytics respectivamente para poder continuar.

Seleccionando nuestros archivos de audio

En nuestra primera tarea, lo que tenemos que hacer es definir una clase, con sus respectivas propiedades, que nos permita administrar los datos en relación a un audio y también la lógica necesaria para seleccionar un archivo.

Así como definir el código necesario para leer archivos de audio y empezar su procesamiento usando programación paralela.

Reconociendo la voz

Primero ordenemos los pasos que daremos para procesar un audio.

Ahora, según la documentación sobre el Speech Service de Microsoft Azure, solo podemos trabajar con audios que tengan el formato “single-channel (mono) WAV / PCM with a sampling rate of 16 kHz”. Por eso lo primero que tenemos que hacer es corregir el formato de los archivos seleccionados con ayuda de CSCore.

Y una vez con el audio listo ya podemos consumir el servicios a través del Speech SDK.

De la siguiente forma:

Detectando las palabras clave

Este caso es muy similar al anterior, solo necesitamos el paquete adecuado

Y hacer los request como corresponden según el siguiente ejemplo:

Y eso es todo amiguitos ;)!

[Cognitive Services] ¿Qué es la IA?

De seguro la mayoría ha escuchado alguna vez sobre semáforos inteligentes, autos inteligentes, ciudades inteligentes, teléfonos inteligentes, congresistas inteligentes, no eso último definitivamente no, pero sobre lo anterior ¿hay realmente inteligencia? y ¿a qué le llamamos inteligencia artificial?

Actualmente para diferentes personas, la Inteligencia Artificial significa diferentes cosas y esta confusión no es culpa netamente de los medios de comunicación con su sensacionalismo. Hay un par de motivos a considerar…

¿Por qué la percepción pública de la IA es tan nebulosa?

El primer motivo es porque a medida que vamos avanzando, la tecnología que alguna vez se pensó que requería de inteligencia se elimina de la definición. Por ejemplo, los métodos automatizados para realizar búsquedas o el reconocimiento óptico de caracteres ya no se perciben como un ejemplo de la “inteligencia artificial”, sino tecnología común. Del mismo modo, ciertos métodos para procesar información incierta se están comprendiendo tan bien que es probable que se muevan de la IA a estadísticas o probabilidad muy pronto. A esto, vale mencionar que el éxito de los modernos métodos de la IA en comparación con los de hace 50 años se debe a la habilidad de lidear mejor con la incertidumbre, y la probabilidad ha resultado ser el mejor enfoque para razonar bajo incertidumbre. Actualmente, casi todas las aplicaciones de IA se basan, al menos en cierto grado, en las probabilidades. De hecho nuestro universo esta construido de probabilidades ¿Han escuchado de la función de onda en la Mecánica Cuántica? Bueno, no nos salgamos del tema.

El segundo motivo es el legado de la ciencia ficción que nos dejan historias sobre sirvientes humanoides amigables que proporcionan diálogos excesivamente ingeniosos, pero que a veces pueden seguir los pasos de Pinocho preguntándose si pueden volverse humanos o se adhieren a motivos siniestros y se vuelven contra sus amos o creadores.

¿Qué es la Inteligencia Artificial?

Para entenderla bien, primero tenemos que considerar dos términos clave para su definición: Autonomía y Adaptabilidad. La autonomía describe la habilidad para realizar tareas en ambientes complejos sin la guía constante de un usuario y la adaptabilidad hace referencia a la habilidad para mejorar el rendimiento aprendiendo de la experiencia y mejorar las capacidades de adaptación.

Y segundo, tenemos que tener en claro cuales son los ámbitos de esta inteligencia, es importante darse cuenta de que la inteligencia no es una sola dimensión como la temperatura o la distancia. ¿Es un algoritmo de juego de ajedrez más inteligente que un filtro de correo no deseado, o es un sistema de recomendación de música más inteligente que un auto sin conductor? Estas preguntas no tienen sentido porque ser capaz de resolver un problema no nos dice nada sobre la capacidad de resolver otro problema diferente. Y por esto debemos diferenciar y rescatar los siguientes conceptos: inteligencia artificial estrecha o clásica, general, débil y fuerte.

La inteligencia artificial estrecha o clásica hace referencia a que un sistema puede realizar una única tarea inteligente. Un automóvil sin conductor es un ejemplo de un elemento de inteligencia (conducir un automóvil) que puede automatizarse. Sin embargo, no participa de una inteligencia real, el sistema de inteligencia artificial en el automóvil no ve ni comprende su entorno, y no sabe cómo conducir con seguridad, de la forma en que un ser humano ve, comprende y sabe. El comportamiento inteligente es fundamentalmente diferente a ser realmente inteligente. Una persona que se comunica bien en chino porque usa un diccionario para entender no quiere decir que realmente sabe chino, sino que simplemente logra un comportamiento de alguien que sabe chino.

La inteligencia general artificial o inteligencia artificial general hace referencia a los sistemas que pueden realizar cualquier tarea inteligente. Actualmente, todos los métodos o tecnologías basadas en inteligencia artificial que usamos hoy en día caen bajo la definición de inteligencia artificial estrecha o clásica y la IA general solo la podemos encontrar en el reino de la ciencia ficción.

Una dicotomía relacionada es la IA “fuerte” y “débil”. Esto se reduce a la distinción anterior entre ser inteligente y actuar inteligentemente. Una IA fuerte equivaldría a una “mente” que es genuinamente inteligente y consciente de sí misma. La IA débil es lo que realmente tenemos, es decir, sistemas que exhiben comportamientos inteligentes a pesar de ser “simples” computadoras.

“La IA es la disciplina científica encargada de estudiar modelos de cómputo capaces de realizar actividades autónomas con adaptabilidad y un campo de la ciencia computacional encargado de la aplicación y desarrollo del conjunto de tecnologías que permiten que las computadoras ayuden y resuelvan problemas de forma similar a los humanos en base a la percepción, aprendizaje y razonamiento.”

Grupos de capacidades de la IA


Visión computacional

Esta es la capacidad de las computadoras para “ver” mediante el reconocimiento de objetos y sus relaciones en una imagen o video.

Reconocimiento y síntesis de voz

Esta es la capacidad de las computadoras para “escuchar” al comprender las palabras que las personas dicen y transcribirlas en texto, y también para leer el texto en voz alta con una voz natural.

Comprensión del lenguaje

La capacidad de las computadoras para “comprender” el significado de las palabras y responder, teniendo en cuenta los muchos matices y complejidades del lenguaje (como la jerga y las expresiones idiomáticas). Cuando las computadoras pueden participar efectivamente en un diálogo con humanos, lo llamamos “IA conversacional”.

Conocimiento

La capacidad de una computadora para “razonar” al representar y comprender la relación entre personas, cosas, lugares y eventos.