#WinML – Creando una #Windows10 App con #YOLO para reconocer objetos (3 de 4)

Crear una Windows 10 UWP App y utilizar YoloV2 para reconocer objetos


 

Buenas!

Hoy empiezo por el resultado final ya mucha parte del post será código y mas código. El output esperado en una Windows 10 App de reconocimiento de objetos con YoloV2 es similar a la siguiente imagen

01

Siguiendo con los pasos de mi post anterior, nos encontrábamos con el resultado del proceso de nuestra WebCam con YoloV2 y que es un array de 21125 números Float. Pues bien, este numero no es trivial, ya que releyendo la documentación de YoloV2 vemos que YOLO divide la imagen en una cuadrícula de 13 por 13 celdas:

02

Cada una de estas celdas es responsable de predecir 5 cuadros delimitadores. Un cuadro delimitador describe el rectángulo que encierra un objeto. Y de aquí el numero

13 * 13 * 125 = 21125

Hay muchos posts que describen como funciona Yolo internamente, he dejado algunos en las referencias por si alguien esta interesado en los detalles.

Pues bien, en este escenario el siguiente paso era comenzar a traducir ese Grid[21125] en objetos C# con los que trabajar. Como internet es una fuente de conocimiento muy amplia, en lugar de traducir alguna de las clases Python que ya existen, vi que Rene Schulte tenía entre sus repositorios de GitHub un fork de otro repo donde se podían ver las siguientes clases

  • YoloWinMLParser.cs
    • Esta clase es un parser para convertir la Grid en una colección de frames / marcos con el tamaño y coordenadas de los objetos detectados en la imagen.
  • YoloBoundingBox.cs
    • Esta clase representa el marco / frame de un objeto encontrado.

Para mostrar estos frames, agregamos un Canvas sobre el control que nos muestra el feed de la cámara.

03

El siguiente código completa el ejemplo, con las siguientes consideraciones

  • Hay una serie de variables privadas para trabajar con el modelo, la colección de frames y los estilos visuales con los que se pintaran los mismos.
  • Los Frames de personas se pintan en verde, los demás objetos en amarillo

El único detalle que queda pendiente de comentar es que YoloV2 esta pensado para trabajar con imágenes de tamaño 416 x 416. En este caso hay que redimensionar el control de WebCam y el Canvas a ese tamanio para que los frames se muestren en la posición correcta.

En el siguiente post compartiré el ejemplo final, y además agregare un poco de trabajo de reescalado para poder soportar otras definiciones diferentes a 416 x 416.

Happy Coding!

Saludos @ Toronto

El Bruno

References

Advertisements

#WinML – How to create a #Windows10 App using #YOLO for object detection (2 of 4)

Windows 10 and YOLOV2 for Object Detection Series


Hi!

Now we already have downloaded the YoloV2 ONNX file. We can create an UWP App to use the model. Here’s the step by step and some comments

1. We create a new Windows 10 UWP App. As always the name is super original

01

2. We are going to use the camera as images source to be processed with YoloV2. There are many examples of how to do this. In this case we will use a control of Windows Community Toolkit V 3.0 (as I wrote in a previous post). We add the following Packages Via NuGet

  • Microsoft.Toolkit.Uwp.UI
  • Microsoft.Toolkit.Uwp.UI.Controls

02

3. We add a control CameraPreview In our Xaml and we’re already 2 lines away of having the camera working.

03

4. We enable the necessary permissions to use the camera in the app manifest. With The following lines our app have a functional camera

04

5. The time has come to start using YoloV2. The latest versions of Visual Studio 2017 allow us to import an ONNX model into a project and the IDE will create the classes needed to work with it. We add as an existing file to the file [Tiny-YOLOv2. Onnx].

Our solution should be similar to the following

05

6. The class that is generated in VS to work with the model It’s pretty ugly.

06

7. My suggestion, replace [8d4d0fa662b14686b1865e0e6d3c598eByTinyYoloV2]

07

8. Now we can see the generated class and within it we can find 3 classes

  • An Input class for the Model
  • An Output class for the Model
  • A class to work with the Model

It’s time to load the model into our App. We do this before initializing the camera as shown in the following Code

 

9. Because we will use the model as part of our App, we have to define that it be treated as a Content in the process of Build

08

10. The next step is to evaluate a Frame Of the camera with the YOLOV2 model. Here the code shows us how we use the classes we create when we import the model.

11. Finally a Break Point is an useful way to show the output of the model and the information of the model output, which we will have to process later.

09

 

Well, at this point we are already using the model YoloV2 to analyze the frames of the camera. In the following posts I’ll write on how to work with the output of the model to get information which makes sense to us!

Important: At some point I should write about the model conversion capabilities that Visual Studio Tools brings to us For AI.

Happy Coding!

Greetings @ Toronto

El Bruno

References

#WinML – Creando una #Windows10 App con #YOLO para reconocer objetos (2 de 4)

Crear una Windows 10 UWP App y utilizar YoloV2 para reconocer objetos


Buenas!

Ahora que ya tenemos el archivo Yolo.ONNX es momento de crear una app en la que utilicemos el mismo. He aquí el paso a paso y algunos comentarios

1. Creamos una nueva Windows 10 UWP App. Como siempre el nombre es super original

01

2. Como vamos a utilizar la cámara como feed de imágenes para procesarlas con YoloV2. Hay muchos ejemplos sobre como realizar esto. En este caso utilizaremos un control de Windows Community Toolkit V 3.0 (como ya escribí en un post anterior). Agregamos los siguientes packages vía NuGet

  • Microsoft.Toolkit.Uwp.UI
  • Microsoft.Toolkit.Uwp.UI.Controls

02

3. Agregamos un control CameraPreview en nuestro Xaml y ya estamos a 2 lineas de tener la cámara funcionando.

03

4. Habilitamos los permisos necesarios para utilizar la camera en el manifiesto con con las siguientes líneas nuestra app ya tiene una camera funcional.

04

5. Llega el momento de comenzar a utilizar YoloV2. Las últimas versiones de Visual Studio 2017 nos permiten importar un modelo ONNX en un proyecto y se crearan las clases necesarias para trabajar con el mismo. Agregamos como un archivo existente al archivo [Tiny-YOLOv2.onnx].

Nuestra solución debería quedar similar a la siguiente

05

6. La clase que se genera en VS para trabajar con el modelo es bastante “fea”.

06

7. Mi sugerencia, reemplazar [8d4d0fa662b14686b1865e0e6d3c598e] por [TinyYoloV2]

07

8. Ahora si ya podemos ver la clase generada y dentro de la misma podremos encontrar 3 clases

  • Una clase de Input para el model
  • Una clase de Output para el model
  • Una clase para trabajar con el model

Es momento de cargar el modelo en nuestra app. Esto lo hacemos antes de inicializar la camera como muestra el siguiente codigo

 

9. Como utilizaremos el modelo como parte de nuestra app, tenemos que definir que el mismo sea tratado como un Content en el proceso de Build

08

10. El siguiente paso es evaluar un frame de la cámara con el modelo YoloV2. Aquí el código nos muestra como utilizamos las clases que creamos cuando importamos el modelo.

11. Finalmente un BreakPoint nos puestra como el output del modelo tiene [información], que deberemos procesar luego.

09

Importante: En algún momento debería escribir sobre las capacidades de conversión de modelos que nos trae Visual Studio Tools for AI. Si estas interesado puedes ver las referencias.

Pues bien, en este punto ya estamos utilizando el modelo YoloV2 para analizar los frames de la cámara. En los siguientes posts comentare como trabajar con el output del modelo para interpretar el mismo.

Happy Coding!

Saludos @ Toronto

El Bruno

References

#WinML – How to create a #Windows10 App using #YOLO for object detection (1 of 4)

Windows 10 and YOLOV2 for Object Detection Series


Hi!

Today’s post is the first one in a series where I’ll explain the steps needed to use YOLO object recognition model in a Windows 10 application. You Only Look Once (YOLO) is a pretty popular model, you only need to check the next trailer ti burn in desire to try the model

 

This model is a real-time neural network for object detection that detects 20 different classes. It is made up of 9 convolutional layers and 6 max-pooling layers and is a smaller version of the more complex full YOLOv2 network.

Now that we can use ONNX models in Windows 10, we can take advantage of the same. The first thing we must do is convert the model to ONNX format. We can use the ONNX tools, or download the already converted model from the Azure Artificial Intelligence Gallery:

Tiny YOLO V2

Now we only need Windows 10 and the latest Visual Studio 2017 version. In the Next Post Comment on the steps necessary to use YoloV2 in a Windows App 10.

Happy Coding!

Greetings @ Burlington

El Bruno

References

#WinML – Creando una #Windows10 App con #YOLO para reconocer objetos (1 de 4)

Crear una Windows 10 UWP App y utilizar YoloV2 para reconocer objetos


Buenas!

En el post de hoy comenzare con los pasos necesarios para utilizar el modelo de reconocimiento de objetos YOLO en una Aplicación Windows 10. You only look once (YOLO) es un modelo bastante popular, solo hay que ver el siguiente tráiler para quedarse con ganas de probar el mismo

 

 

YOLO es una red neuronal en tiempo real para la detección de objetos que detecta 20 clases diferentes. Está compuesto por 9 capas convolucionales y 6 capas de combinación máxima. Para este ejemplo utilizaremos Tiny YoloV2, que es una versión más pequeña de la red YOLO V2 completa.

Ahora que podemos utilizar modelos ONNX en Windows 10, podemos sacar partido del mismo. Lo primero que debemos hacer es convertir el modelo a formato ONNX. Podemos utilizar las herramientas de ONNX, o descargar el modelo ya convertido desde la galería de Inteligencia Artificial de Azure:

Tiny YOLO V2

Ahora solo necesitamos Windows 10 y la ultima version de Visual Studio 2017. En el próximo post comentare los pasos necesarios para utilizar YoloV2 en una App Windows 10.

Happy Coding!

Saludos @ Burlington

El Bruno

References

#Windows10 – Windows Community Toolkit V 3.0 makes life incredibly easy if you need working with the camera in a #UWP App

giphy

Hi!

These are worldcup days so the posts will be short and at directly to the foot. Today I was in need to work with the camera in a UWP App; and of course, this requires a few lines of code, but I know they can be just one line of code. I remembered that the latest version of Windows Community Toolkit V 3.0 We Allowed reduce the code to the following

Xaml code:

<controls:CameraPreview x:Name=”CameraPreviewControl” />

C# code:

await CameraPreviewControl.StartAsync(); ();

CameraPreviewControl.CameraHelper.FrameArrived += CameraPreviewControl_FrameArrived;

Incredibly Easy! Some time ago I wrote about other features in previous versions. In example: we could work with Bluetooth Low Energy also with a couple of lines of code, and as in version 1.2 this Toolkit It helped us to use the correct way the pool of connections HttpClient.

Important: If you haven’t read this post, you should. The class HttpClient may give you some headaches if you do not know how it works internally.

So, today with only 3 lines I have integrated the camera to my App and I can still see the surprises that leaves the World Cup!

Happy coding!

Greetings @ Burlington

El Bruno

PS: If you are a parent, you must know Pusheen The Cat

References

My blogs on Community Toolkit

#Windows10 – Windows Community Toolkit v3.0 te hace la vida increíblemente fácil si necesitas trabajar con la cámara en una #UWP App

giphy

Buenas!

Son días de mundial así que los posts serán cortos y al pie. Hoy me encontraba con la necesidad de trabajar con la cámara en una UWP App; y claro, son pocas líneas de código, pero pueden ser solo una. Recordé que la última versión de Windows Community Toolkit v3.0 nos permitia reducir el código a lo siguiente

Xaml code:

<controls:CameraPreview x:Name=”CameraPreviewControl” />

C# code:

await CameraPreviewControl.StartAsync(); ();

CameraPreviewControl.CameraHelper.FrameArrived += CameraPreviewControl_FrameArrived;

Increiblemente facil! Hace un tiempo ya escribi sobre como en versiones anteriores, podíamos trabajar con BlueTooth Low Energy también con un par de líneas de código, y como en la versión 1.2 (creo) este toolkit nos ayudaba a utilizar forma correcta el pool de conexiones de HttpClient.

Importante: si no has leído este post, deberías. La clase HttpClient te puede dar algunos dolores de cabeza si no conoces como funciona internamente.

Así que, hoy con solo 3 líneas he integrado la cámara a mi App y ya puedo seguir tranquilo viendo las sorpresas que nos deja el mundial!

Happy coding!

Saludos @ Burlington

El Bruno

PD: Si eres padre, debes conocer a Pusheen The Cat

References

My blogs on Community Toolkit

#VS2017 – Using Microsoft.Recognizers to recognize and solve numbers, units and date / time; in multiple languages

Hi!

During the session of the Global Azure Bootcamp, one of the topics that I shared was related to Language Understanding. We live in days where is very easy to add natural language capabilities to our applications. In general, the first thing we usually think about is to use LUIS for this, however, there are situations where we can save an HTTP call and carry out the analysis “in local mode”. Welcome to Microsoft.Recognizers

Since it is best to let the code explain itself, here is a portion of the code directly from the Github repository that explains some of the scenarios covered to recognize numbers,
units of measurement, dates, etc. (see references)

 

It is very interesting at the same time useful, and to date it supports the languages ​​Chinese, English, French, Spanish and Portuguese.

Greetings @ Toronto

El Bruno

References

#VS2017 – Utilizando Microsoft.Recognizers para reconocer y resolver números, unidades y fecha / hora; en múltiples idiomas

Buenas!

Durante la sesión del Global Azure Bootcamp, uno de los temas que comente fue que estamos en un momento donde es muy simple agregar capacidades de lenguaje natural a nuestras aplicaciones. Por lo general, lo primero que solemos pensar es utilizar LUIS para esto, sin embargo, existen situaciones donde podemos ahorrarnos una llamada HTTP y realizar el análisis “en local”. Para esto existe Microsoft.Recognizers

Como lo mejor es dejar que el código se explique por si mismo, he aquí una porción de código directamente desde el repositorio de Github que explica algunos de los escenarios cubiertos para reconocer números, unidades de medida, fechas, etc. (ver referencias)

Es muy interesante a la par que útil, y al día de la fecha soporta los lenguajes Chino, Inglés, Francés, Español y Portugués.

Saludos @ Toronto

El Bruno

References

#WindowsML – Create Native AI apps for #Hololens #Windows10

Hi!

A couple of weeks ago I wrote about a new feature in Windows 10 to be able to use ML models natively in W10 Apps. For me, that would mean a breakthrough in the entire Windows 10 Device ecosystem. In example, as we already know, the new version of Hololens incorporates a chip specially dedicated to AI tasks (DNN specifically),
so I assumed that in Hololens V2 we could start using Windows ML using the device capabilities.

What I did not expect is that in the Preview version of Windows 10 RS4 for Hololens we already had access to that feature. I have not had time to update my Hololens to RS4, however, a couple of community experts have shared more than interesting experiences.

For example, let’s see this video by Rene Schulte, where he shows an App that performs a real time image classification using the SqueezeNet ONNX model

Mike Taulty also offers a series of posts where he does an excellent research job in Windows ML and Hololens. He started on how to create a model using Azure Custom Vision, export it to CoreML and then create an ONNX model.

Important: currently ONNX is the type of models supported by Windows ML. It is possible to export CoreML models, TensorFlow, CNTK and other frameworks to ONNX.

From here, Mike comments on how to work with UWP and C # with the exported model. In subsequent posts, Mike also explains how, thanks to Hololens RS4 Preview, these capabilities can also be used in applications for Hololens (see references)

As well, If you dare to upgrade your Hololens to RS4 Preview, it is a very interesting moment to start thinking about scenarios where you can combine WinML and Hololens!

Happy Coding!

Greetings @ Toronto

El Bruno

References