#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

#WindowsML – Ya se puede crear apps con AI nativo en #Hololens #Windows10

 

Buenas!

Hace un par de semanas comente que la nueva capacidad en Windows 10 de poder utilizar modelos de ML de forma nativa en W10 Apps significaría un gran avance en todo el ecosistema de Devices de Windows 10. Como ya sabemos que la nueva version de Hololens incorporar un chip especialmente dedicado a tareas de AI (DNN específicamente), pues era de suponer que en Hololens V2 podríamos comenzar a utilizar Windows ML.

Lo que no esperaba es que en la version Preview de Windows 10 RS4 para Hololens ya tuviésemos acceso a esa capacidad. No he tenido tiempo de dedicarle a mis Hololens para actualizarlas a RS4, sin embargo, grandes referencias han compartido experiencias más que interesantes.

Por ejemplo, veamos este video de Rene Schulte, donde muestra una App que en tiempo real realiza una clasificación de imágenes utilizando el modelo ONNX SqueezeNet

Mike Taulty también ofrece una serie de posts donde realiza un trabajo excelente al respecto. En primer lugar, comenta como crear un modelo utilizando Azure Custom Vision, exportar el mismo a CoreML y luego crear un modelo ONNX.

Importante: actualmente ONNX es el tipo de modelos soportados por Windows ML. Es posible exportar modelos de CoreML, TensorFlow, CNTK y otros frameworks a ONNX.

A partir de aquí, Mike comenta como trabajar con UWP y C# con el modelo exportado. En siguientes posts, Mike también explica cómo, gracias a Hololens RS4 Preview, también se pueden utilizar estas capacidades en aplicaciones para Hololens (ver referencias)

Pues bien, si te animas a poner una version Preview en Hololens, es un momento muy interesante para comenzar a pensar en escenarios donde combinar WinML y Hololens!

Happy Coding!

Saludos @ Toronto

El Bruno

References

#WinML – #GamingML created for #Windows10 gamers (#Unity3D and #Hololens V2 included!)

Hi!

First of all, I’ll start by saying that I finally found a hashtag for Windows Machine Learning posts: [#WinML]. A small summary of WindowsML (actually from the part that interests me)

The WinML API allows us (Windows 10 developers) to use Machine Learning trained models and make inferences with them on a wide variety of hardware (CPU, GPU, VPU). An ML programmer may choose a Framework, such as CNTK, Caffe2 or Tensorflow, and with it he could build and train a ML model.

That model would then be converted to the Open Neural Network Exchange (ONNX) a format co-developed between Microsoft, Facebook and Amazon. As of this moment, a Windows 10 application can use this ML model internally as part of the App.

This in itself is great, however, there is a new layer more specifically created for games: DirectML. DirectML is built on top of pf Direct3D and represents a special layer for Gaming scenarios that provides Hardware Acceleration GPU for WindowsML operations.

In the references I left the article where all the technical details of DirectML are covered.

WinMLArchitecture

Another interesting point of the news is the announcement of support for Unity ML-Agents. Native WindowsML / DirectML integration will be available for Windows 10 games created with Unity 3D.

Personally, I did not know the Unity Machine Learning Agents. After reading a bit about them, it is clear to me that in the near future, the games and Apps created with Unity3D will be completely different from what we know today.

Bonus

 

It’s time to start connecting dots and entering the area of ​​speculation. A while ago it became public that the new version of Hololens will have a new chip specifically dedicated to operations of [Deep Neural Networks] (see references). From a generic point of view, Hololens is just another type of Windows 10 device.

If we assume that Hololens V2 uses a version of Windows 10 that supports out of the box the capabilities of Windows ML, we already have a Mixed Reality Headset with impressive capabilities where Apps can use ML natively (the chip is already there!).

From the point of view of a C # developer, this is great!

Happy Coding!

Greetings @ Burlington

El Bruno

References

 

#WinML – #GamingML ideal para los Gamers en #Windows10 (#Unity3D y #Hololens V2 included!)

Buenas!

En primer lugar, comenzare diciendo que por fin encontré un hashtag para los posts sobre Windows Machine Learning: [#WinML]. Un pequeño resumen de WindowsML (en realidad de la parte que me interesa a mi)

La API WinML nos permite utilizar modelos entrenados de Machine Learning y realizar inferencias sobre la amplia variedad de hardware (CPU, GPU, VPU). Un ML Expert elegiría un Framework, como CNTK, Caffe2 o Tensorflow, y con el mismo podría construir y entrenar un modelo de ML.

Ese modelo luego se convertiría al formato de Open Neural Network Exchange (ONNX), co-desarrollado entre Microsoft, Facebook y Amazon. A partir de este momento, una aplicación Windows 10 puede utilizar internamente este modelo de ML como una parte más de la App.

Esto de por si es grandioso, sin embargo, hay una nueva capa más específicamente creada para los juegos: DirectML. DirectML está construido sobre Direct3D y representa una capa especial para escenarios de Gaming que provee GPU Hardware Acceleration para las operaciones de WindowsML.

En las referencias he dejado el articulo donde se cubren todos los detalles técnicos de DirectML.

WinMLArchitecture

Otro punto interesante de la noticia es el anuncio del soporte para Unity ML-Agents. La integración nativa de WindowsML / DirectML estará disponible para los juegos para Windows 10 creados con Unity 3D.

En lo personal, yo no conocía los Unity Machine Learning Agents. Despues de leer un poco sobre los mismos, me queda claro que en un futuro cercano, los juegos y Apps creados con Unity3D serán completamente diferente a lo que conocemos hoy.

Bonus

Es momento de comenzar a atar cabos y entrar en la zona de especulaciones. Hace un tiempo se hizo publico que la nueva version de Hololens tendrá un nuevo chip específicamente dedicado a operaciones de [Deep Neural Networks]. Desde un punto de vista genérico, Hololens otro tipo de dispositivo Windows 10.

Si asumimos que Hololens V2 utilizara una version de Windows 10 que soporte out of the box las capacidades de Windows ML, pues ya tenemos un Mixed Reality Headset con capacidades impresionantes donde las Apps pueden utilizar ML de forma nativa.

¡Desde el punto de vista de un C# developer, esto es grandioso!

Happy Coding!

Saludos @ Burlington

El Bruno

References

 

#Event – Mixed Reality Workshop

giphy

Hi !

Next March 17 I will be part of the team in the Mixed Reality Workshop. It is a full day of sessions to help understand how to create Mixed Reality Apps with Windows 10, Unity 2017.2 and Visual Studio 2017. The agenda is as follows

  • Intro to Windows Mixed Reality
  • Building a mixed reality experience
  • Placing a virtual object in a 3D space
  • Interacting with virtual objects
  • Handling user movement in a 3D space
  • Deploying and building a custom 3D launcher
  • Q&A/Wrap-up/Where to go from here

Happy Coding!

Greetings @ Toronto

El Bruno

References

#Event – Mixed Reality Workshop

giphy

Buenas!

Pues que el próximo 17 de Marzo seré parte del equipo en el Workshop de Mixed Reality. Es un dia completo de sesiones para ayudar a comprender como crear Mixed Reality Apps con Windows 10, Unity 2017.2 y Visual Studio 2017. La agenda es la siguiente

  • Intro to Windows Mixed Reality
  • Building a mixed reality experience
  • Placing a virtual object in a 3D space
  • Interacting with virtual objects
  • Handling user movement in a 3D space
  • Deploying and building a custom 3D launcher
  • Q&A/Wrap-up/Where to go from here

Happy Coding!

Saludos @ Toronto

El Bruno

References

#Hololens – How to use clases TapToPlace and InitialScanManager

Hi !

Yesterday I wrote about a custom solution I made to have Tap to Place feature in an Hololens App. The main set of features was

  • We can perform an initial scan of an environment, based on a time constraint. Also we can continue the scan process if we don’t find a minimum of number of planes for floor or wall
  • We can associate one class to an hologram to have the Tap to Place feature
  • This process also allow us to validate if we can place the hologram in a vertical (wall) or horizontal (floor) plane
  • The validation process also have some visual features like change the color of a box collider from red to green depending if we can or can’t place an object and also cast a shadow with the final location of the hologram

The “InitialScanManager.cs” is the one I use to perform the initial environment scan. I usually add this class to an Empty Game Object. The main properties to use are this ones:

  • Limit Scanning by Time and Scan Time, definen how the scan process will be performed. If we set a Scan Time value of N, and check the Limit Scan time, the app will scan the environment for N seconds and then will stop the scan process
  • Minimum Floor and Minimum Wall defines the minimum amount of frames to be searched in the floor and the wall
  • Player, this is optional for the main hologram. When the scan process start it will be hide and when the scan process ends the player will be show again
  • DebugTextPlayer, optional, a TextMesh used for debug actions

Clipboard02.png

The class “TapToPlacePlayer.cs” is the one we must associate to the element where we want this feature. The main properties are

  • Placeable Bounds and Non Placeable Bounds Materials are materials used when we start the “place mode”. I create a collider with this materials and the class change the materials based on if we can place or not the hologram at the selected position
  • Placeable Shadow and Non Placeable Shadow Materials are materials used to display the final position to be placed for the hologram
  • Display Shadow defines if we want to show (or not) the final position of the hologram
  • Placement Surface defines the positioning mode Horizontal or Vertical. I mean Floor or Wall
  • DebugTextPlayer, optional, a TextMesh used for debug actions

Clipboard04.png

The complete source code can be downloaded from GitHub (link).

Greetings @ Toronto

El Bruno

References

El Bruno, my posts

#Hololens – Cómo utilizar las clases TapToPlace y InitialScanManager

Hola !

En el post de ayer compartí una solución para tener las siguientes capacidades en un proyecto de Hololens

  • Realizar un scanner inicial del ambiente basado en tiempo y en cantidad de frames encontrados para piso y pared
  • Se puede iniciar un proceso de Tap to Place sobre un holograma
  • El proceso valida además si la posición a la que se quiere mover el holograma es válida.
  • La validación es en primer lugar sobre mover a planos horizontales o verticales y luego si hay espacio para el holograma

Para la acción de análisis del entorno, he creado la clase “InitialScanManager.cs”. La misma puede ser agregada en un Empty Game Object o en uno existente y las propiedades principales a tener en cuenta son:

  • Limit Scanning by Time y Scan Time, definen si el proceso de scan se realiza en base a N segundos de escaneo
  • Minimum Floor y Minimum Wall definen la cantidad mínima de frames que se deben encontrar en el suelo y en un muro
  • Player, define el holograma o grupo de hologramas que se ocultarán al comienzo del scan y se activarán al terminar el mismo
  • DebugTextPlayer, opcional, un TextMesh utilizado para acciones de Debug

Clipboard02.png

Por otra parte tenemos la clase “TapToPlacePlayer.cs”, que es debe asociarse al elemento que queremos que tenga la capacidad de “Tap to Place”.  Las propiedades principales a tener en cuenta son:

  • Placeable Bounds y Non Placeable Bounds Materials es el material con el que se mostrará un collider cuando estemos posicionando el holograma
  • Placeable Shadow y Non Placeable Shadow Materials es el material con el que se mostrará la posición final que tendrá el holograma sobre el que estamos trabajando
  • Display Shadow define si queremos utilizar las propiedades anteriores
  • Placement Surface define si queremos soportar el posicionamiento en modo horizontal o vertical, es decir en muros o en el piso
  • DebugTextPlayer, opcional, un TextMesh utilizado para acciones de Debug

Clipboard04.png

El código completo del ejemplo se puede descargar desde aquí (link).

Saludos @ Toronto

El Bruno

References

El Bruno, my posts

#Hololens – Alternative fix to the TapToPlace and WorldAnchor issue (until official #HoloToolkit release)

Hi !

If you work with Beta products you will find funny scenarios, like something working, then not working, then working again. The next Hololens forums thread is a must read if you want to understand the frustration you can get in this scenarios:

VS2017/U5.6 Crash – WinRTScriptingObjectWrapper::InternalAddRef Reference Count cannot be zero (link)

TLTR HoloToolkit current version is not officially supported for the combo Visual Studio 2017 and Unity3D 5.6. 

There are features like Tap To Place which are not working fine with VS2017 and Unity3D 5.6. If you implement this, as soon as the Hololens App starts, it will crash and close. Without any clear explanation on what´s happening. It seems to be something related to World Anchors and the way Unity are is working with this,  this issue is still alive on GitHub (link).

So, I need Tap To Place, and I decided to implement this myself. I pickup some code from HoloToolkit and some other pieces from Holographic Academy tutorials and I’ve created 2 main classes which fix the problem, and also add some additional value. Here are the main implemented features

  • We can perform an initial scan of an environment, based on a time constraint. Also we can continue the scan process if we don’t find a minimum of number of planes for floor or wall
  • We can associate one class to an hologram to have the Tap to Place feature
  • This process also allow us to validate if we can place the hologram in a vertical (wall) or horizontal (floor) plane
  • The validation process also have some visual features like change the color of a box collider from red to green depending if we can or can’t place an object and also cast a shadow with the final location of the hologram

In the next animation we can see a cylinder hologram with the following configuration:

  • Green material for the rigid box for valid place
  • Red material for the rigid box for invalid place
  • No shadows enabled

2017 04 26 Holo TapToPlace with Validation 01

The complete source code can be downloaded from GitHub (link).

Greetings @ Toronto

El Bruno

References

#Hololens – Solución al problema con TapToPlace agregando validación de planos (hasta que #HoloToolkit sea compatible)

Hola !

Cuando trabajas con productos en estado Beta puedes encontrarte con errores como el que se comenta en el siguiente post del foro:

VS2017/U5.6 Crash – WinRTScriptingObjectWrapper::InternalAddRef Reference Count cannot be zero (link)

TLTR la versión actual de HoloToolkit no está soportada por Visual Studio 2017 y Unity3D 5.6. 

En otras palabras hay funcionalidades como la de Tap To Place que al momento de lanzar una App hacen que la misma se cierre sin lanzar una excepción ni nada parecido. Parece que es por un problema de cálculo de Anchors, como comentan aquí (link).

Pues bien, tomando un poco de código deHoloToolkit y otro poco de Holographic Academy, he creado 2 clases que me permiten solucionar el problema. Por ahora soporta lo siguiente

  • Realizar un scanner inicial del ambiente basado en tiempo y en cantidad de frames encontrados para piso y pared
  • Se puede iniciar un proceso de Tap to Place sobre un holograma
  • El proceso valida además si la posición a la que se quiere mover el holograma es válida.
  • La validación es en primer lugar sobre mover a planos horizontales o verticales y luego si hay espacio para el holograma

Veamos el siguiente ejemplo. En el mismo trabajo sobre un holograma de tipo cylinder, cuando se activa el TapToPlace se crea un rigidBox para mostrar con colores si podemos posicionar o no el cilindro.

2017 04 26 Holo TapToPlace with Validation 01

El código completo del ejemplo se puede descargar desde aquí (link).

Saludos @ Toronto

El Bruno

References