Microsoft Cognitive Services

Microsoft Cognitive Services | Introducción

En los últimos tiempos las grandes empresas tecnológicas están trabajando muy duro e invirtiendo muchos recursos en una nueva “revolución” basada en las IA, Machine Learning, Big Data, Realidad Virtual, etc. que, aunque no son conceptos nuevos sí que parecían algo abandonados en tiempos pasados. Entre todos estos esfuerzos y dado que se está universalizando su uso, parece lógico que aparezcan potentes plataformas, APIs, frameworks, etc. que hagan uso de esas tecnologías para hacer un poco más sencillo que los desarrolladores implementen soluciones basadas en ellas.

Entre todas estas grandes compañías, Microsoft ha apostado más fuerte que nadie, no sólo universalizando Machine Learning sino poniendo a disposición de los desarrolladores múltiples servicios, generalmente apoyados en Microsoft Azure, muy fáciles de usar y, sobre todo, que pueden ser consumidos desde cualquier otra tecnología.

Es en este punto donde Microsoft Cognitive Services se convierte en un caballo ganador ya que aúna gran cantidad de APIs para dar solución a diferentes escenarios en los que se requiere del análisis de datos o de complejos algoritmos que, por nuestra cuenta sería muy complicado que desarrolláramos.

¿Qué APIs componen Microsoft Cognitive Services?

Microsoft ha dispuesto varios grupos de servicios que, a día de hoy, son Language, Speech, Knowledge, Search y Vision. Estos servicios se apoyan en Machine Learning y hacen uso del resultado de analizar cantidades masivas de datos por algoritmos complejos.

Las aplicaciones que podemos dar al uso de estas APIs son múltiples y ya mi compañero Adrián Díaz y un servidor Santiago Porras, dimos varias charlas al respecto, desde el punto de vista de un desarrollador,

Ejemplos del uso de estas APIs, son las páginas How-Old.net, TwinsOrNot.net, Bing, Bing Image Search, etc. Microsoft incluso dispone de una página para poder poner nuestras aplicaciones como ejemplo de su uso https://www.microsoft.com/cognitive-services/en-us/applications y podemos encontrarnos incluso Uber

Ejemplo de Face API (Vision) en una App Windows 10

Para Windows 10, existe un SDK que podemos descargar desde nuget https://www.nuget.org/packages/Microsoft.ProjectOxford.Face/ además de estar disponible en GitHub con ejemplos y documentación.

Empezamos por agregar el paquete de Nuget, para lo que, en este caso, usaré Package Manager Console y escribiré el comando Install-Package Microsoft.ProjectOxford.Face

Una vez instalado podremos realizar tareas como detectar, reconocer y agrupar caras https://www.microsoft.com/cognitive-services/en-us/face-api/documentation/overview

En este caso, vamos a probar la detección de caras y, veremos cómo con un sencillo código podemos realizar la detección de caras y extraer bastante información útil.

                    var faceServiceClient = new FaceServiceClient("{API Key}");
                    var faces = await faceServiceClient.DetectAsync(fileStream, false, true, new FaceAttributeType[] { FaceAttributeType.Gender, FaceAttributeType.Age, FaceAttributeType.Smile, FaceAttributeType.Glasses, FaceAttributeType.HeadPose, FaceAttributeType.FacialHair });
                    foreach (var face in faces)
                    {
                        DetectedFaces.Add(new Face()
                        {
                            ImagePath = picture.Path,
                            Left = face.FaceRectangle.Left,
                            Top = face.FaceRectangle.Top,
                            Width = face.FaceRectangle.Width,
                            Height = face.FaceRectangle.Height,
                            FaceId = face.FaceId.ToString(),
                            Gender = face.FaceAttributes.Gender,
                            Age = string.Format("{0:#} years old", face.FaceAttributes.Age),
                            IsSmiling = face.FaceAttributes.Smile > 0.0 ? "Smile" : "Not Smile",
                            Glasses = face.FaceAttributes.Glasses.ToString(),
                            FacialHair = string.Format("Facial Hair: {0}", face.FaceAttributes.FacialHair.Moustache + face.FaceAttributes.FacialHair.Beard + face.FaceAttributes.FacialHair.Sideburns > 0 ? "Yes" : "No"),
                            HeadPose = string.Format("Pitch: {0}, Roll: {1}, Yaw: {2}", Math.Round(face.FaceAttributes.HeadPose.Pitch, 2), Math.Round(face.FaceAttributes.HeadPose.Roll, 2), Math.Round(face.FaceAttributes.HeadPose.Yaw, 2))
                        });
                    }

Como se puede observar, simplemente necesitamos una clave para acceder al servicio y que podemos obtener desde la página de la propia API. Una vez establecida la conexión con el servicio, tan sólo hay que enviar el Stream de la imagen al método “DetectAsync” de la API y procesar los resultados.

El resultado final es el mostrado en la imagen a continuación.

Compartir
Publicado por
Santiago Porras Rodríguez

Este sitio web utiliza cookies para que tengas la mejor experiencia de usuario. Si continuas navegando, estás dando tu consentimiento para aceptar las cookies y también nuestra política de cookies (esperemos que no te empaches con tanta cookie 😊)