Añade inteligencia a tus aplicaciones con el Proyecto Oxford


Uno de los grandes trending topics del pasado Build 2015 fue la web http://how-old.net, donde al subir una foto te predice la edad y el sexo de las personas que aparecen en ella. Para realizar esta hazaña se utiliza una técnica de aprendizaje automático llamada Deep Learning, que ahora podemos incluir de forma sencilla en nuestras aplicaciones gracias al proyecto Oxford. A través de llamadas a una API REST podremos acceder a los siguientes servicios:

Gracias a estos servicios, podremos incluir en nuestras aplicaciones cualquiera de estas características, proporcionando así inteligencia a nuestras aplicaciones con muy poco esfuerzo.

Aunque hayamos anunciado el proyecto publico hace muy poco, todos estos proyectos llevan mucho tiempo funcionando dentro de los productos de Microsoft, como en el caso del motor de búsquedas de Bing. Cuando realizamos una búsqueda de imágenes, Bing utiliza los algoritmos de visión artificial para identificar automáticamente los elementos que estamos buscando, la idoneidad de las imágenes por rango de edades y cultura, los colores y muchas otras características:

image

La verdadera novedad es que estos servicios ahora están a disposición de cualquier desarrollador y ya podemos incorporar a nuestras aplicaciones los mismos algoritmos de inteligencia que estamos utilizando en Microsoft para nuestros productos como Bing o Cortana.

Uso de las APIs en nuestras aplicaciones

Para empezar a utilizar una de las APIs tenemos que darnos de alta para obtener un código de desarrollador. A través del portal http://www.projectoxford.ai, pulsando en el botón “Sign up” en la página del servicio que queramos utilizar:

image

Esto nos llevará a la página de Azure donde podremos seleccionar el servicio que queremos utilizar. Para este ejemplo utilizaremos la Face API:

image

Una vez creado el servicio del Marketplace ya podremos obtener una clave desde el enlace Manage que nos permitirá regenerar y/o copiar la clave que necesitamos para incorporar en nuestras aplicaciones:

image

En la misma página del proyecto encontraremos el SDK que incluye ejemplos de uso de las librerías cliente. Dependiendo de la API tenemos código para .Net, para Android y para iOS, aunque como al final es una api REST será muy fácil incorporarla a cualquier otro lenguaje que pueda realizar una llamada HTTP.

Detección facial

La API de detección facial nos permite detectar caras en cualquier foto, predecir su edad y sexo, verificar si la misma persona sale en dos fotos, agrupar las personas que salen en un listado de fotos, encontrar caras similares e identificar a la persona que sale en la foto.

image

Los ejemplos vienen con una librería “portable” que ya hace el trabajo de comunicar con la API REST, de forma que la podamos incluir la funcionalidad en nuestras aplicaciones de forma muy sencilla. En la librería cliente ya tenemos los métodos que realizan las llamadas REST por nosotros:

image

Para poder utilizar el proyecto de ejemplo tenemos que introducir la clave de suscripción dentro del MainWindow.Xaml.cs:

image

Visión artificial

Las aplicaciones modernas utilizan muchísimo contenido audiovisual y resulta muy costoso clasificar e identificar si ese contenido es correcto en cada contexto. Mediante las APIs de visión artificial podremos extraer gran cantidad de información de una simple imagen. Por ejemplo, nos permitirá identificar qué parte de la foto es la más importante para poder realizar un recorte correctamente a la hora de generar una miniatura:

image

También es capaz de detectar desnudos e identificar si es un desnudo adulto o una foto de un bebé y nos proporcionará mucha información útil para clasificar la imagen que le hemos proporcionado. De la siguiente imagen nos explica que no es ni clipart ni un dibujo, no tiene contenido adulto y entra dentro de las categorías “exteriores” y “exteriores con agua”. Además nos indica que el color predominante es el gris y si queremos utilizar un color de contraste para la foto nos propone el #3F668C:

WP_20150531_14_53_07_Pro

image

Las categorías que nos proporciona el sistema están basadas en un modelo entrenado sobre 86 categorías diferentes provenientes de Bing:

image

Los colores dominante y resaltado nos permitirán crear vistas de las imágenes con un buen contraste con la página que las contiene. De esta forma podremos adaptar el aspecto de nuestra aplicación dependiendo de las imágenes que estemos mostrando, proporcionando una interfaz mucho más equilibrada y agradable a la vista.

Por último, los valores Adult y Racy nos dicen si las imágenes contienen desnudos o bien son imágenes sugerentes que pueden herir la sensibilidad en ciertas culturas. Estas mismas técnicas se utilizan en Bing Safe Search.

Utilizando el SDK de .Net, realizar un análisis, OCR o creación inteligente de miniatura sería así:

image

 

APIs de voz

Con este SDK podremos convertir voz a texto y texto a voz desde cualquier plataforma (Windows, iOS y Android), con el mismo motor que está utilizando Cortana para reconocer nuestra voz. Por ahora reconoce chino, inglés, francés, alemán, italiano y español. La conversión de texto a voz añade el portugués y el ruso, además de algunas variantes de cada uno de los idiomas.

Como todos los otros proyectos, además de poder descargarnos el SDK e incorporarlo a nuestras aplicaciones, tenemos una página de demostración donde podremos utilizar el servicio en directo:

image

LUIS

Complementando a los algoritmos de reconocimiento de voz está el servicio de comprensión LUIS (Language Understanding Intelligent Service). Es el mismo que Bing y Cortana utilizan para entender la intención que tenemos al hablar con el asistente. Esto nos permitirá hablar con nuestras aplicaciones y que estas entiendan los comandos que queremos que ejecuten, como “Enciende la luz” o “Pon la calefacción a 22 grados”. Por ahora, este servicio está en beta privada y sólo disponible por invitación.

El servicio dispondrá de modelos programados con los comandos más habituales y también podremos crear nuestros propios modelos que entiendan las acciones específicas de nuestra aplicación. Nos proporcionará un json con el comando más probable y la puntuación sobre otros comandos:

image

Empieza ya con el proyecto Oxford

Incorporar todos estos servicios a tus aplicaciones es muy fácil, sólo tienes que darte de alta, obtener tu clave y empezar a utilizarlos:

  1. Abre http://www.projectoxford.ai y selecciona “Sign up” en cualquiera de los servicios
  2. Crea el servicio a través del Azure Marketplace como Free Tier
  3. Obtén tus claves de desarrollo
  4. Descarga el SDK

¡Esperamos ver pronto vuestras aplicaciones!

Juan Manuel Servera
@jmservera

Web & IoT Technical Evangelist

Comments (3)

  1. Sergio Parra says:

    La verdad es que las posibilidades que ofrece Proyecto Oxford son inmensas. Muy buen trabajo.

  2. Buenas tardes,

    Muy interesante el tema, si se quisiera llevar este tipo de aplicaciones a nível de vídeos para implementar un sistema de alertas que enviara un mensaje de advertencia al encontrar menores de edad solos en sitios de riego (por ejemplo: una piscina sin el acompañemiento de un adulto, niños en áreas de mucha afluencia vehícular), que podría hacer para tener control sobre la edad que devuelve y así poder verificar si se trata de un niño una vez se compare su edad con un rango considerado como niño, y como puedo controlar que la imagen que llegan sea identificada como un niño que se encuentra solo o que acaba de llegar a ese sitio, estoy probando la aplicación WPF eb C#, muchas gracias.

  3. Buenas tardes, soy estudiante de ingeniera de sistemas y deseo realizar un proyecto tomando como base el proyecto OXFORD.

    He visto que la librería idenfica la edad de una persona y su sexo.

    Me gustaría realizar una aplicación que me permitiera saber la edades de las personas y enviar mensajes de alerta cuando niños esten expuestos a sitios peligrosos. Como puedo utilizar el método que me recibe la edad para compararla y poder saber si es un niño.

    Esa es una pequeña idea, me gustaría que e pudieran orientar para poder trabajar con el poyecto Oxford y poder realizar una aplicación interesante. Gracias.

Skip to main content