HoloLens (1.ª generación) y Azure 307: Machine Learning


Nota

Los tutoriales de Mixed Reality Academy se han diseñado teniendo en cuenta HoloLens (1.ª generación) y los cascos envolventes de realidad mixta. Por lo tanto, creemos que es importante conservar estos tutoriales para los desarrolladores que sigan buscando instrucciones sobre el desarrollo para esos dispositivos. Estos tutoriales no se actualizarán con los conjuntos de herramientas o las interacciones más recientes que se usan para HoloLens 2. Se mantendrán para que sigan funcionando en los dispositivos compatibles. Habrá una nueva serie de tutoriales que se publicarán en el futuro que demostrarán cómo desarrollar para HoloLens 2. Este aviso se actualizará con un vínculo a esos tutoriales cuando se publiquen.


producto final -start

En este curso, aprenderá a agregar funcionalidades de Machine Learning (ML) a una aplicación de realidad mixta mediante Azure Machine Learning Studio (clásico).

Azure Machine Learning Studio (clásico) es un servicio de Microsoft, que proporciona a los desarrolladores un gran número de algoritmos de aprendizaje automático, que pueden ayudar con la entrada de datos, la salida, la preparación y la visualización. A partir de estos componentes, es posible desarrollar un experimento de análisis predictivo, iterar en él y usarlo para entrenar el modelo. Después del entrenamiento, puede hacer que el modelo funcione dentro de la nube de Azure, de modo que pueda puntuar nuevos datos. Para más información, visite la página de Azure Machine Learning Studio (clásico).

Después de completar este curso, tendrá una aplicación de casco envolvente de realidad mixta y habrá aprendido cómo hacer lo siguiente:

  1. Proporcione una tabla de datos de ventas al portal de Azure Machine Learning Studio (clásico) y diseñe un algoritmo para predecir futuras ventas de elementos populares.
  2. Cree un proyecto de Unity, que puede recibir e interpretar los datos de predicción del servicio ml.
  3. Muestre los datos de predicación visualmente dentro del proyecto de Unity, a través de proporcionar los artículos de ventas más populares, en un estante.

En la aplicación, le corresponde la forma en que integrará los resultados con el diseño. Este curso está diseñado para enseñar a integrar un servicio de Azure con el proyecto de Unity. Es su trabajo usar los conocimientos que obtiene de este curso para mejorar la aplicación de realidad mixta.

Este curso es un tutorial independiente, que no implica directamente ningún otro Mixed Reality Labs.

Compatibilidad con dispositivos

Curso HoloLens Cascos envolventes
Realidad mixta y Azure (307): Aprendizaje automático ✔️ ✔️

Nota

Aunque este curso se centra principalmente en Windows Mixed Reality cascos envolventes (VR), también puede aplicar lo que aprende en este curso para Microsoft HoloLens. A medida que siga con el curso, verá notas sobre los cambios que puede que tenga que emplear para admitir HoloLens. Al usar HoloLens, es posible que observe algún eco durante la captura de voz.

Requisitos previos

Nota:

Este tutorial está diseñado para desarrolladores que tienen experiencia básica con Unity y C#. Tenga en cuenta también que los requisitos previos y las instrucciones escritas de este documento representan lo que se ha probado y comprobado en el momento de la escritura (mayo de 2018). Puede usar el software más reciente, como se muestra en el artículo de instalación de las herramientas, aunque no debe asumirse que la información de este curso coincidirá perfectamente con lo que encontrará en el software más reciente que lo que se muestra a continuación.

Se recomienda el siguiente hardware y software para este curso:

Antes de empezar

Para evitar problemas al compilar este proyecto, se recomienda encarecidamente crear el proyecto mencionado en este tutorial en una carpeta raíz o casi raíz (las rutas de acceso de carpeta largas pueden causar problemas en tiempo de compilación).

Capítulo 1: Configuración de la cuenta de Azure Storage

Para usar Azure Translator API, deberá configurar una instancia del servicio para que esté disponible para la aplicación.

  1. Inicie sesión en Azure Portal.

    Nota

    Si aún no tiene una cuenta de Azure, deberá crear una. Si sigue este tutorial en una situación de clase o laboratorio, pida a su instructor o a uno de los proctores que le ayuden a configurar su nueva cuenta.

  2. Una vez que haya iniciado sesión, haga clic en Cuentas de almacenamiento en el menú izquierdo.

    Captura de pantalla de la ventana de Microsoft Azure, que muestra el elemento Cuentas de almacenamiento en el menú de navegación izquierdo.

    Nota

    Es posible que la palabra New se haya reemplazado por Create a resource (Crear un recurso) en portales más recientes.

  3. En la pestaña Cuentas de almacenamiento , haga clic en Agregar.

    Captura de pantalla de la ventana de Microsoft Azure, que muestra la pantalla Cuentas de almacenamiento y el botón Agregar resaltado.

  4. En el panel Crear cuenta de almacenamiento :

    1. Inserte un nombre para su cuenta, tenga en cuenta que este campo solo acepta números y letras minúsculas.

    2. En Modelo de implementación, seleccione Resource Manager.

    3. En Tipo de cuenta, seleccione Almacenamiento (uso general v1) .

    4. En Rendimiento, seleccione Estándar.

    5. En Replicación, seleccione Almacenamiento con redundancia geográfica con acceso de lectura (RA-GRS).

    6. Deje Transferencia segura necesaria como Deshabilitada.

    7. Seleccione una opción en Suscripción.

    8. Elija un grupo de recursos o cree uno nuevo. Un grupo de recursos proporciona una manera de supervisar, controlar el acceso, aprovisionar y administrar la facturación de una colección de recursos de Azure. Se recomienda mantener todos los servicios de Azure asociados a un único proyecto (por ejemplo, estos laboratorios) en un grupo de recursos común).

      Si desea obtener más información sobre los grupos de recursos de Azure, visite el artículo sobre el grupo de recursos.

    9. Determine la ubicación del grupo de recursos (si va a crear un nuevo grupo de recursos). Idealmente, la ubicación sería en la región donde se ejecutaría la aplicación. Algunos recursos de Azure solo están disponibles en determinadas regiones.

  5. También deberá confirmar que ha comprendido los Términos y Condiciones aplicados a este Servicio.

    Captura de pantalla del cuadro de diálogo Crear cuenta de almacenamiento, que muestra la información que el usuario ha rellenado en los campos de texto necesarios.

  6. Una vez que haya hecho clic en Crear, tendrá que esperar a que se cree el servicio, esto puede tardar un minuto.

  7. Una notificación aparecerá en el portal una vez creada la instancia de servicio.

    Captura de pantalla de la notificación Implementación correcta, que informa al usuario de que la implementación en el grupo de recursos se realizó correctamente.

Capítulo 2: Azure Machine Learning Studio (clásico)

Para usar Azure Machine Learning, deberá configurar una instancia del servicio Machine Learning para que esté disponible para la aplicación.

  1. En Azure Portal, haga clic en Nuevo en la esquina superior izquierda y busque Área de trabajo de Machine Learning Studio, presione Entrar.

    Captura de pantalla de la ventana de Microsoft Azure, que muestra el área de trabajo de Machine Learning Studio en el panel de contenido.

  2. La nueva página proporcionará una descripción del servicio Área de trabajo de Machine Learning Studio . En la parte inferior izquierda de este símbolo del sistema, haga clic en el botón Crear para crear una asociación con este servicio.

  3. Una vez que haya hecho clic en Crear, aparecerá un panel en el que deberá proporcionar algunos detalles sobre el nuevo servicio Machine Learning Studio:

    1. Inserte el nombre del área de trabajo que desee para esta instancia de servicio.

    2. Seleccione una opción en Suscripción.

    3. Elija un grupo de recursos o cree uno nuevo. Un grupo de recursos proporciona una manera de supervisar, controlar el acceso, aprovisionar y administrar la facturación de una colección de recursos de Azure. Se recomienda mantener todos los servicios de Azure asociados a un único proyecto (por ejemplo, estos laboratorios) en un grupo de recursos común).

      Si desea obtener más información sobre los grupos de recursos de Azure, visite el artículo sobre el grupo de recursos.

    4. Determine la ubicación del grupo de recursos (si va a crear un nuevo grupo de recursos). Idealmente, la ubicación sería en la región donde se ejecutaría la aplicación. Algunos recursos de Azure solo están disponibles en determinadas regiones. Debe usar el mismo grupo de recursos que usó para crear Azure Storage en el capítulo anterior.

    5. En la sección Cuenta de almacenamiento , haga clic en Usar existente y, a continuación, haga clic en el menú desplegable y, desde allí, haga clic en la cuenta de almacenamiento que creó en el último capítulo.

    6. Seleccione el plan de tarifa del área de trabajo adecuado en el menú desplegable.

    7. En la sección Plan de servicio web , haga clic en Crearnuevo y, a continuación, inserte un nombre para él en el campo de texto.

    8. En la sección Plan de tarifa del plan de servicio web , seleccione el plan de precios que prefiera. Un nivel de prueba de desarrollo denominado DEVTEST Standard debe estar disponible sin cargo alguno.

    9. También deberá confirmar que ha comprendido los Términos y Condiciones aplicados a este Servicio.

    10. Haga clic en Crear.

      Captura de pantalla del cuadro de diálogo de Azure Machine Learning Studio, que muestra la información que el usuario ha escrito en los campos de texto.

  4. Una vez que haya hecho clic en Crear, tendrá que esperar a que se cree el servicio, esto puede tardar un minuto.

  5. Una notificación aparecerá en el portal una vez creada la instancia de servicio.

    Captura de pantalla de la ventana de Microsoft Azure, que muestra una notificación no leída en el menú de navegación.

  6. Haga clic en la notificación para explorar la nueva instancia de servicio.

    Captura de pantalla de la notificación Implementación correcta, que informa al usuario de que la implementación del área de trabajo en el grupo de recursos se realizó correctamente.

  7. Haga clic en el botón Ir al recurso en la notificación para explorar la nueva instancia de servicio.

  8. En la página que se muestra, en la sección Vínculos adicionales , haga clic en Iniciar Machine Learning Studio, que dirigirá el explorador al portal de Machine Learning Studio .

    Captura de pantalla de la ventana de Microsoft Azure, que muestra el vínculo Iniciar Machine Learning Studio resaltado en el panel de contenido.

  9. Use el botón Iniciar sesión , en la parte superior derecha o en el centro, para iniciar sesión en Machine Learning Studio (clásico).

    Captura de pantalla de la ventana de Machine Learning Studio, que muestra el botón Iniciar sesión resaltado.

Capítulo 3: Machine Learning Studio (clásico): Configuración del conjunto de datos

Una de las formas en que funcionan los algoritmos de Machine Learning consiste en analizar los datos existentes e intentar predecir resultados futuros en función del conjunto de datos existente. Por lo general, esto significa que cuantos más datos existentes tenga, mejor será el algoritmo para predecir los resultados futuros.

Se le proporciona una tabla de ejemplo, para este curso, denominada ProductsTableCSV y se puede descargar aquí.

Importante

El archivo de .zip anterior contiene productsTableCSV y .unitypackage, que necesitará en el capítulo 6. Este paquete también se proporciona en ese capítulo, aunque es independiente del archivo csv.

Este conjunto de datos de ejemplo contiene un registro de los objetos más vendidos cada hora de cada día del año 2017.

Captura de pantalla de la ventana de Microsoft Excel, que muestra un conjunto de datos de ejemplo de objetos más vendidos cada hora de cada día en el año 2017.

Por ejemplo, el día 1 de 2017, a las 1 p.m. (hora 13), el artículo más vendido era sal y pimienta.

Esta tabla de ejemplo contiene 9998 entradas.

  1. Vuelva al portal de Machine Learning Studio (clásico) y agregue esta tabla como un conjunto de datos para el aprendizaje automático. Para ello, haga clic en el botón + Nuevo en la esquina inferior izquierda de la pantalla.

    Captura de pantalla del portal de Microsoft Azure Machine Learning Studio clásico, que muestra el botón Nuevo resaltado en el menú.

  2. Una sección aparecerá desde la parte inferior y, dentro de ella, hay un panel de navegación a la izquierda. Haga clic en Conjunto de datos y, a continuación, a la derecha de ese archivo local.

    Captura de pantalla del cuadro de diálogo Nuevo, que muestra los elementos de menú Conjunto de datos resaltados y Archivo local.

  3. Cargue el nuevo conjunto de datos siguiendo estos pasos:

    1. Aparecerá la ventana de carga, donde puede examinar el disco duro para el nuevo conjunto de datos.

      Captura de pantalla del cuadro de diálogo Cargar un nuevo conjunto de datos, que muestra el botón Examinar para que el usuario busque y seleccione los datos que se van a cargar.

    2. Una vez seleccionada y de nuevo en la ventana de carga, deje la casilla desactivada.

    3. En el campo de texto siguiente, escriba ProductsTableCSV.csv como nombre del conjunto de datos (aunque debería agregarse automáticamente).

    4. Con el menú desplegable tipo, seleccione Archivo CSV genérico con un encabezado (.csv).

    5. Presione el tic en la parte inferior derecha de la ventana de carga y se cargará el conjunto de datos .

Capítulo 4: Machine Learning Studio (clásico): El experimento

Para poder compilar el sistema de aprendizaje automático, deberá crear un experimento para validar la teoría sobre los datos. Con los resultados, sabrá si necesita más datos o si no hay ninguna correlación entre los datos y un resultado posible.

Para empezar a crear un experimento:

  1. Haga clic de nuevo en el botón + Nuevo de la parte inferior izquierda de la página y, a continuación, haga clic en Experimento>en blanco.

    Captura de pantalla de la ventana Microsoft Azure Machine Learning Studio, que muestra el elemento de menú Experimento está seleccionado.

  2. Se mostrará una nueva página con un experimento en blanco:

  3. En el panel de la izquierda, expanda Conjuntos de datos guardados Mis conjuntos> dedatos y arrastre ProductsTableCSV al lienzo del experimento.

    Captura de pantalla de la ventana Experimento, que muestra la carpeta Mis conjuntos de datos expandida en el menú y La tabla C S V de productos en el lienzo del experimento.

  4. En el panel de la izquierda, expanda Ejemplo de transformación> de datosy División. A continuación, arrastre el elemento Dividir datos en al lienzo del experimento. El elemento Dividir datos dividirá el conjunto de datos en dos partes. Una parte que usará para entrenar el algoritmo de aprendizaje automático. La segunda parte se usará para evaluar la precisión del algoritmo generado.

    Captura de pantalla de la ventana Experimento, que muestra los elementos Partición y Ejemplo y Dividir datos en el menú con Dividir datos aplicados al lienzo.

  5. En el panel derecho (mientras se selecciona el elemento Dividir datos en el lienzo), edite la fracción de filas del primer conjunto de datos de salida en0,7. Esto dividirá los datos en dos partes, la primera parte será el 70 % de los datos y la segunda parte será el 30 %. Para asegurarse de que los datos se dividan aleatoriamente, asegúrese de que la casilla División aleatoria permanece activada.

    Captura de pantalla del panel Propiedades, que muestra la casilla División aleatoria rellenada y el campo Fracción de filas se ha establecido en 0 punto 7.

  6. Arrastre una conexión desde la base del elemento ProductsTableCSV en el lienzo hasta la parte superior del elemento Dividir datos. Esto conectará los elementos y enviará la salida del conjunto de datos ProductsTableCSV (los datos) a la entrada Dividir datos.

    Captura de pantalla del lienzo del experimento, que muestra una conexión dibujada entre la tabla de productos C S V punto c s v y los datos divididos.

  7. En el panel Experimentos del lado izquierdo, expanda Entrenamiento de Machine Learning>. Arrastre el elemento Entrenar modelo hacia fuera en el lienzo experimento. El lienzo debe tener el mismo aspecto que el siguiente.

    Captura de pantalla del lienzo del experimento, que muestra una conexión dibujada entre la tabla de productos C S V punto c s v y dividir datos, con entrenar modelo a continuación.

  8. En la parte inferior izquierda del elemento Dividir datos , arrastre una conexión a la parte superior derecha del elemento Entrenar modelo . La primera división del 70 % del conjunto de datos la usará el modelo de entrenamiento para entrenar el algoritmo.

    Captura de pantalla del lienzo del experimento, que muestra una conexión dibujada entre la tabla de productos C S V punto c s v, dividir datos y entrenar modelo.

  9. Seleccione el elemento Entrenar modelo en el lienzo y, en el panel Propiedades (en el lado derecho de la ventana del explorador), haga clic en el botón Iniciar selector de columnas .

  10. En el cuadro de texto, escriba product y presione Entrar, el producto se establecerá como una columna para entrenar predicciones. Después de esto, haga clic en el tic de la esquina inferior derecha para cerrar el cuadro de diálogo de selección.

    Captura de pantalla del cuadro de diálogo Seleccionar una sola columna, que muestra la columna de producto resaltada en el menú columnas.

  11. Va a entrenar un algoritmo de regresión logística multiclase para predecir el producto más vendido en función de la hora del día y la fecha. Sin embargo, está fuera del ámbito de este documento para explicar los detalles de los distintos algoritmos proporcionados por el Estudio de Azure Machine Learning, pero puede obtener más información en la hoja de referencia rápida del algoritmo de Machine Learning.

  12. En el panel de elementos del experimento de la izquierda, expanda Machine Learning>Initialize Model Classification (Inicializar clasificación de modelos>) y arrastre el elemento Regresión logística multiclase al lienzo del experimento.

  13. Conecte la salida, desde la parte inferior de la regresión logística multiclase, a la entrada superior izquierda del elemento Entrenar modelo .

    Captura de pantalla del lienzo del experimento, que muestra Entrenar modelo conectado a la regresión logística multiclase y dividir datos.

  14. En la lista de elementos de experimento del panel de la izquierda, expanda Puntuación de Machine Learning> y arrastre el elemento Score Model (Puntuar modelo) al lienzo.

  15. Conecte la salida, desde la parte inferior del modelo de entrenamiento, a la entrada superior izquierda del modelo de puntuación.

  16. Conecte la salida inferior derecha de Split Data (Dividir datos) a la entrada superior derecha del elemento Score Model (Puntuar modelo ).

    Captura de pantalla del lienzo del experimento, que muestra el modelo de puntuación conectado a Entrenar modelo y Dividir datos.

  17. En la lista de elementos Experiment del panel de la izquierda, expanda Machine Learning>Evaluate y arrastre el elemento Evaluate Model (Evaluar modelo ) al lienzo.

  18. Conecte la salida de Score Model (Puntuar modelo ) a la entrada superior izquierda de Evaluate Model (Evaluar modelo).

    Captura de pantalla del lienzo del experimento, que muestra el modelo de evaluación conectado a Puntuar modelo.

  19. Ha creado su primer experimento de Machine Learning. Ahora puede guardar y ejecutar el experimento. En el menú de la parte inferior de la página, haga clic en el botón Guardar para guardar el experimento y, a continuación, haga clic en Ejecutar para iniciar el experimento.

    Captura de pantalla del menú Lienzo del experimento, que muestra los botones Guardar y Ejecutar resaltados.

  20. Puede ver el estado del experimento en la parte superior derecha del lienzo. Espere unos instantes a que finalice el experimento.

    Si tiene un conjunto de datos grande (mundo real), es probable que el experimento tarde horas en ejecutarse.

    Captura de pantalla de la ventana Lienzo del experimento, que muestra el estado del experimento en la esquina superior derecha.

  21. Haga clic con el botón derecho en el elemento Evaluar modelo en el lienzo y, en el menú contextual, mantenga el mouse sobre Resultados de evaluación y, a continuación, seleccione Visualizar.

    Captura de pantalla del menú contextual del elemento Evaluar modelo, que muestra los resultados de evaluación resaltados y los elementos de menú Visualizar.

  22. Los resultados de la evaluación se mostrarán mostrando los resultados previstos frente a los resultados reales. Esto usa el 30 % del conjunto de datos original, que se dividió anteriormente, para evaluar el modelo. Puede ver que los resultados no son excelentes, lo ideal sería que el número más alto de cada fila sea el elemento resaltado en las columnas.

    Captura de pantalla del gráfico Resultados, que muestra los resultados del experimento en un gráfico de cuadros con porcentajes.

  23. Cierre los resultados.

  24. Para usar el modelo de Machine Learning recién entrenado, debe exponerlo como un servicio web. Para ello, haga clic en el elemento de menú Configurar servicio web en el menú de la parte inferior de la página y haga clic en Servicio web predictivo.

    Captura de pantalla del menú Experimento, que muestra el elemento de menú Configurar servicio web resaltado.

  25. Se creará una nueva pestaña y se combinará el modelo de entrenamiento para crear el nuevo servicio web.

  26. En el menú de la parte inferior de la página, haga clic en Guardar y, a continuación, haga clic en Ejecutar. Verá el estado actualizado en la esquina superior derecha del lienzo del experimento.

    Captura de pantalla del menú Experimento, que muestra el botón de menú Ejecutar resaltado y el elemento de menú Ejecutar.

  27. Una vez que haya terminado de ejecutarse, aparecerá un botón Implementar servicio web en la parte inferior de la página. Está listo para implementar el servicio web. Haga clic en Implementar servicio web (clásico) en el menú de la parte inferior de la página.

    Captura de pantalla del menú Experimento, que muestra el elemento de menú Implementar servicio web clásico resaltado en el botón de menú Implementar servicio web.

    El explorador puede pedir que permita un elemento emergente, que debe permitir, aunque es posible que tenga que presionar Implementar servicio web de nuevo, si la página de implementación no se muestra.

  28. Una vez creado el experimento, se le redirigirá a una página panel en la que se mostrará la clave de API . Cópielo en un bloc de notas por el momento, lo necesitará en el código muy pronto. Una vez que haya anotado la clave de API, haga clic en el botón SOLICITUD/RESPUESTA de la sección Punto de conexión predeterminado debajo de la clave.

    Captura de pantalla de la ventana Microsoft Azure Machine Learning Studio, que muestra la tecla A P I y el vínculo Respuesta de la barra diagonal solicitud resaltada.

    Nota

    Si hace clic en Probar en esta página, podrá escribir los datos de entrada y ver la salida. Escriba el día y la hora. Deje en blanco la entrada del producto . A continuación, haga clic en el botón Confirmar . La salida de la parte inferior de la página mostrará el JSON que representa la probabilidad de que cada producto sea la opción.

  29. Se abrirá una nueva página web y se mostrarán las instrucciones y algunos ejemplos sobre la estructura de solicitudes requerida por Machine Learning Studio (clásico). Copie el URI de solicitud que se muestra en esta página en el Bloc de notas.

    Captura de pantalla de la página de documentación de solicitud A P I, que muestra la solicitud U R I resaltada.

Ahora ha creado un sistema de aprendizaje automático que proporciona el producto más probable para venderse en función de los datos históricos de compra, correlacionados con la hora del día y el día del año.

Para llamar al servicio web, necesitará la dirección URL del punto de conexión de servicio y una clave de API para el servicio. Haga clic en la pestaña Consumir , en el menú superior.

La página Información de consumo mostrará la información que necesitará para llamar al servicio web desde el código. Realice una copia de la clave principal y la dirección URL de solicitud-respuesta . Los necesitará en el capítulo siguiente.

Capítulo 5: Configuración del proyecto de Unity

Configure y pruebe el casco envolvente de Mixed Reality.

Nota

No necesitará controladores de movimiento para este curso. Si necesita compatibilidad con la configuración del casco envolvente, haga clic aquí.

  1. Abra Unity y cree un proyecto de Unity denominado MR_MachineLearning. Asegúrese de que el tipo de proyecto está establecido en 3D.

  2. Con Unity abierto, vale la pena comprobar que el Editor de scripts predeterminado está establecido en Visual Studio. Vaya a Editar>preferencias y, a continuación, en la nueva ventana, vaya a Herramientas externas. Cambie el Editor de scripts externos a Visual Studio 2017. Cierre la ventana Preferencias.

  3. A continuación, vaya aConfiguración de compilación de archivos> y cambie la plataforma a Plataforma universal de Windows, haciendo clic en el botón Cambiar plataforma.

  4. Asegúrese también de que:

    1. El dispositivo de destino se establece en Cualquier dispositivo.

      Para la Microsoft HoloLens, establezca Dispositivo de destino en HoloLens.

    2. El tipo de compilación se establece en D3D.

    3. El SDK se establece en Latest installed (Versión más reciente instalada).

    4. La versión de Visual Studio se establece en Latest installed (Versión más reciente instalada).

    5. Compilar y ejecutar se establece en Equipo local.

    6. No se preocupe por configurar Escenas en este momento, ya que se proporcionan más adelante.

    7. La configuración restante debe dejarse como predeterminada por ahora.

      Captura de pantalla del cuadro de diálogo Configuración de compilación, que muestra el elemento de menú Plataforma universal de Windows está seleccionado.

  5. En la ventana Configuración de compilación, haga clic en el botón Configuración del reproductor ; se abrirá el panel relacionado en el espacio donde se encuentra el Inspector .

  6. En este panel, es necesario comprobar algunas opciones de configuración:

    1. En la pestaña Otros valores:

      1. La versióndel entorno de ejecución de scripting debe ser experimental (equivalente a .NET 4.6)

      2. El back-end de scripting debe ser .NET

      3. El nivel de compatibilidad de API debe ser .NET 4.6

        Captura de pantalla de la pestaña Otras configuraciones, que muestra la configuración habilitada según los pasos descritos.

    2. En la pestaña Configuración de publicación , en Funcionalidades, active:

      • InternetClient

        Captura de pantalla de la pestaña Configuración de publicación, que muestra la funcionalidad cliente de Internet está habilitada debajo de Funcionalidades.

    3. Más abajo del panel, en Configuración de XR (que se encuentra a continuación de Configuración de publicación), marque Virtual Reality Supported (Compatible con la realidad virtual), asegúrese de que se agrega el SDK de Windows Mixed Reality.

      Captura de pantalla de la pestaña X R Settings (Configuración de X R), que muestra el Windows Mixed Reality S D K debajo de Virtual Reality S D K está habilitado.

  7. De nuevo en Configuración de compilación, los proyectos de C# de Unity ya no están atenuados; marque la casilla situada junto a esta.

  8. Cierre la ventana Build Settings (Configuración de compilación).

  9. Guarde el proyecto (ARCHIVO > GUARDAR PROYECTO).

Capítulo 6: Importación del paquete de Unity mlProducts

Para este curso, deberá descargar un paquete de recursos de Unity denominado Azure-MR-307.unitypackage. Este paquete viene completo con una escena, con todos los objetos de ese precompilado, por lo que puede centrarse en conseguir que todo funcione. El script de ShelfKeeper se proporciona, aunque solo contiene las variables públicas, con el fin de la estructura de configuración de la escena. Tendrá que realizar todas las demás secciones.

Para importar este paquete:

  1. Con el panel de Unity delante de usted, haga clic en Activos en el menú de la parte superior de la pantalla y, a continuación, haga clic en Importar paquete, Paquete personalizado.

    Captura de pantalla del panel de Unity, que muestra los elementos de menú Importar paquete y Paquete personalizado resaltados.

  2. Use el selector de archivos para seleccionar el paquete Azure-MR-307.unitypackage y haga clic en Abrir.

  3. Se mostrará una lista de componentes para este recurso. Para confirmar la importación, haga clic en Importar.

    Captura de pantalla del cuadro de diálogo Importar paquete de Unity, que muestra que se está importando el paquete de Azure Machine Learning.

  4. Una vez que haya terminado de importarse, observará que algunas carpetas nuevas han aparecido en el Panel de proyectos de Unity. Estos son los modelos 3D y los materiales respectivos que forman parte de la escena pre-hecha en la que trabajará. Escribirá la mayoría del código en este curso.

    Captura de pantalla del panel proyecto de Unity, que muestra las carpetas recién importadas en la carpeta Activos.

  5. En la carpeta Panel de proyectos , haga clic en la carpeta Escenas y haga doble clic en la escena dentro (denominada MR_MachineLearningScene). Se abrirá la escena (consulte la imagen siguiente). Si faltan los diamantes rojos, simplemente haga clic en el botón Gizmos , en la parte superior derecha del Panel de juegos.

    Captura de pantalla de la ventana Escena de Unity, que muestra el elemento de menú Gizmos resaltado en la navegación superior.

Capítulo 7: Comprobación de los archivos DLL en Unity

Para aprovechar el uso de bibliotecas JSON (usadas para serializar y deserializar), se ha implementado un archivo DLL de Newtonsoft con el paquete que ha incorporado. La biblioteca debe tener la configuración correcta, aunque vale la pena comprobar (especialmente si tiene problemas con el código que no funciona).

Para ello:

  • Haga clic con el botón izquierdo en el archivo Newtonsoft dentro de la carpeta Plugins y examine el panel Inspector. Asegúrese de que cualquier plataforma esté marcada. Ve a la pestaña UWP y asegúrate de que No procesar esté marcado.

    Importación de los archivos DLL en Unity

Capítulo 8: Creación de la clase ShelfKeeper

La clase ShelfKeeper hospeda métodos que controlan la interfaz de usuario y los productos generados en la escena.

Como parte del paquete importado, se le habrá dado esta clase, aunque está incompleta. Ahora es el momento de completar esa clase:

  1. Haga doble clic en el script de ShelfKeeper , en la carpeta Scripts , para abrirlo con Visual Studio 2017.

  2. Reemplace todo el código existente en el script por el código siguiente, que establece la hora y la fecha y tiene un método para mostrar un producto.

    using UnityEngine;
    
    public class ShelfKeeper : MonoBehaviour
    {
        /// <summary>
        /// Provides this class Singleton-like behavior
        /// </summary>
        public static ShelfKeeper instance;
    
        /// <summary>
        /// Unity Inspector accessible Reference to the Text Mesh object needed for data
        /// </summary>
        public TextMesh dateText;
    
        /// <summary>
        /// Unity Inspector accessible Reference to the Text Mesh object needed for time
        /// </summary>
        public TextMesh timeText;
    
        /// <summary>
        /// Provides references to the spawn locations for the products prefabs
        /// </summary>
        public Transform[] spawnPoint;
    
        private void Awake()
        {
            instance = this;
        }
    
        /// <summary>
        /// Set the text of the date in the scene
        /// </summary>
        public void SetDate(string day, string month)
        {
            dateText.text = day + " " + month;
        }
    
        /// <summary>
        /// Set the text of the time in the scene
        /// </summary>
        public void SetTime(string hour)
        {
            timeText.text = hour + ":00";
        }
    
        /// <summary>
        /// Spawn a product on the shelf by providing the name and selling grade
        /// </summary>
        /// <param name="name"></param>
        /// <param name="sellingGrade">0 being the best seller</param>
        public void SpawnProduct(string name, int sellingGrade)
        {
            Instantiate(Resources.Load(name),
                spawnPoint[sellingGrade].transform.position, spawnPoint[sellingGrade].transform.rotation);
        }
    }
    
  3. Asegúrese de guardar los cambios en Visual Studio antes de volver a Unity.

  4. De nuevo en el Editor de Unity, compruebe que la clase ShelfKeeper tiene el siguiente aspecto:

    Captura de pantalla de la clase Shelf Keeper, que muestra que los destinos de referencia se establecen en Date Text Mesh y Time Text Mesh.

    Importante

    Si el script no tiene los destinos de referencia (es decir , Date (Text Mesh)), basta con arrastrar los objetos correspondientes desde el Panel de jerarquía hasta los campos de destino. Consulte a continuación para obtener una explicación, si es necesario:

    1. Abra la matriz Spawn Point en el script del componente ShelfKeeper haciendo clic con el botón izquierdo en ella. Aparecerá una subsección denominada Size, que indica el tamaño de la matriz. Escriba 3 en el cuadro de texto situado junto a Tamaño y presione Entrar y se crearán tres ranuras debajo.

    2. Dentro de hierarchy expande el objeto Time Display (haciendo clic con el botón izquierdo en la flecha situada junto a él). A continuación, haga clic en la Cámara principal desde la jerarquía para que el Inspector muestre su información.

    3. Seleccione la cámara principal en el panel jerarquía. Arrastre los objetos Date y Time desde el Panel de jerarquía hasta las ranuras Texto de fecha y hora dentro del Inspector de la cámara principal en el componente ShelfKeeper .

    4. Arrastre los puntos de generar desde el Panel de jerarquía (debajo del objeto Estante ) hasta los destinos de referencia de 3elementos debajo de la matriz Desove de puntos , como se muestra en la imagen.

      Captura de pantalla del Panel de jerarquía, que muestra que los elementos de menú Fecha, Hora y Tres Puntos de generar están en la clase Keeper de estantes.

Capítulo 9: Creación de la clase ProductPrediction

La siguiente clase que va a crear es la clase ProductPrediction .

Esta clase es responsable de:

  • Consulta de la instancia de Machine Learning Service , que proporciona la fecha y hora actuales.

  • Deserialización de la respuesta JSON en datos utilizables.

  • Interpretar los datos y recuperar los 3 productos recomendados.

  • Llamar a los métodos de clase ShelfKeeper para mostrar los datos en la escena.

Para crear esta clase:

  1. Vaya a la carpeta Scripts , en el Panel del proyecto.

  2. Haga clic con el botón derecho dentro de la carpeta Crear>script de C#. Llame al script ProductPrediction.

  3. Haga doble clic en el nuevo script ProductPrediction para abrirlo con Visual Studio 2017.

  4. Si aparece el cuadro de diálogo Modificación de archivo detectado , haga clic en *Volver a cargar solución.

  5. Agregue los siguientes espacios de nombres a la parte superior de la clase ProductPrediction:

    using System;
    using System.Collections.Generic;
    using UnityEngine;
    using System.Linq;
    using Newtonsoft.Json;
    using UnityEngine.Networking;
    using System.Runtime.Serialization;
    using System.Collections;
    
  6. Dentro de la clase ProductPrediction , inserte los dos objetos siguientes que se componen de una serie de clases anidadas. Estas clases se usan para serializar y deserializar el JSON para Machine Learning Service.

        /// <summary>
        /// This object represents the Prediction request
        /// It host the day of the year and hour of the day
        /// The product must be left blank when serialising
        /// </summary>
        public class RootObject
        {
            public Inputs Inputs { get; set; }
        }
    
        public class Inputs
        {
            public Input1 input1 { get; set; }
        }
    
        public class Input1
        {
            public List<string> ColumnNames { get; set; }
            public List<List<string>> Values { get; set; }
        }
    
        /// <summary>
        /// This object containing the deserialised Prediction result
        /// It host the list of the products
        /// and the likelihood of them being sold at current date and time
        /// </summary>
        public class Prediction
        {
            public Results Results { get; set; }
        }
    
        public class Results
        {
            public Output1 output1;
        }
    
        public class Output1
        {
            public string type;
            public Value value;
        }
    
        public class Value
        {
            public List<string> ColumnNames { get; set; }
            public List<List<string>> Values { get; set; }
        }
    
  7. A continuación, agregue las siguientes variables encima del código anterior (para que el código relacionado con JSON esté en la parte inferior del script, debajo del resto de código y fuera del camino):

        /// <summary>
        /// The 'Primary Key' from your Machine Learning Portal
        /// </summary>
        private string authKey = "-- Insert your service authentication key here --";
    
        /// <summary>
        /// The 'Request-Response' Service Endpoint from your Machine Learning Portal
        /// </summary>
        private string serviceEndpoint = "-- Insert your service endpoint here --";
    
        /// <summary>
        /// The Hour as set in Windows
        /// </summary>
        private string thisHour;
    
        /// <summary>
        /// The Day, as set in Windows
        /// </summary>
        private string thisDay;
    
        /// <summary>
        /// The Month, as set in Windows
        /// </summary>
        private string thisMonth;
    
        /// <summary>
        /// The Numeric Day from current Date Conversion
        /// </summary>
        private string dayOfTheYear;
    
        /// <summary>
        /// Dictionary for holding the first (or default) provided prediction 
        /// from the Machine Learning Experiment
        /// </summary>    
        private Dictionary<string, string> predictionDictionary;
    
        /// <summary>
        /// List for holding product prediction with name and scores
        /// </summary>
        private List<KeyValuePair<string, double>> keyValueList;
    

    Importante

    Asegúrese de insertar la clave principal y el punto de conexión de solicitud-respuesta, desde el Portal de Machine Learning, en las variables aquí. En las imágenes siguientes se muestra dónde se habría tomado la clave y el punto de conexión.

    Captura de pantalla del Microsoft Azure Machine Learning Studio, que muestra el vínculo Solicitud de respuesta de barra diagonal debajo de la página de ayuda de P I.

    Captura de pantalla de la página de documentación de solicitud A P I, que muestra la solicitud POST U R I resaltada.

  8. Inserte este código en el método Start(). Se llama al método Start() cuando la clase inicializa:

        void Start()
        {
            // Call to get the current date and time as set in Windows
            GetTodayDateAndTime();
    
            // Call to set the HOUR in the UI
            ShelfKeeper.instance.SetTime(thisHour);
    
            // Call to set the DATE in the UI
            ShelfKeeper.instance.SetDate(thisDay, thisMonth);
    
            // Run the method to Get Predication from Azure Machine Learning
            StartCoroutine(GetPrediction(thisHour, dayOfTheYear));
        }
    
  9. A continuación se muestra el método que recopila la fecha y hora de Windows y la convierte en un formato que nuestro experimento de Machine Learning puede usar para comparar con los datos almacenados en la tabla.

        /// <summary>
        /// Get current date and hour
        /// </summary>
        private void GetTodayDateAndTime()
        {
            // Get today date and time
            DateTime todayDate = DateTime.Now;
    
            // Extrapolate the HOUR
            thisHour = todayDate.Hour.ToString();
    
            // Extrapolate the DATE
            thisDay = todayDate.Day.ToString();
            thisMonth = todayDate.ToString("MMM");
    
            // Extrapolate the day of the year
            dayOfTheYear = todayDate.DayOfYear.ToString();
        }
    
  10. Puede eliminar el método Update(), ya que esta clase no la usará.

  11. Agregue el siguiente método que comunicará la fecha y hora actuales al punto de conexión de Machine Learning y recibirá una respuesta en formato JSON.

        private IEnumerator GetPrediction(string timeOfDay, string dayOfYear)
        {
            // Populate the request object 
            // Using current day of the year and hour of the day
            RootObject ro = new RootObject
            {
                Inputs = new Inputs
                {
                    input1 = new Input1
                    {
                        ColumnNames = new List<string>
                        {
                            "day",
                            "hour",
                        "product"
                        },
                        Values = new List<List<string>>()
                    }
                }
            };
    
            List<string> l = new List<string>
            {
                dayOfYear,
                timeOfDay,
                ""
            };
    
            ro.Inputs.input1.Values.Add(l);
    
            Debug.LogFormat("Score request built");
    
            // Serialize the request
            string json = JsonConvert.SerializeObject(ro);
    
            using (UnityWebRequest www = UnityWebRequest.Post(serviceEndpoint, "POST"))
            {
                byte[] jsonToSend = new System.Text.UTF8Encoding().GetBytes(json);
                www.uploadHandler = new UploadHandlerRaw(jsonToSend);
    
                www.downloadHandler = new DownloadHandlerBuffer();
                www.SetRequestHeader("Authorization", "Bearer " + authKey);
                www.SetRequestHeader("Content-Type", "application/json");
                www.SetRequestHeader("Accept", "application/json");
    
                yield return www.SendWebRequest();
                string response = www.downloadHandler.text;
    
                // Deserialize the response
                DataContractSerializer serializer;
                serializer = new DataContractSerializer(typeof(string));
                DeserialiseJsonResponse(response);
            }
        }
    
  12. Agregue el siguiente método, que es responsable de deserializar la respuesta JSON y de comunicar el resultado de la deserialización a la clase ShelfKeeper . Este resultado será los nombres de los tres elementos previstos para vender el máximo en la fecha y hora actuales. Inserte el código siguiente en la clase ProductPrediction , debajo del método anterior.

        /// <summary>
        /// Deserialize the response received from the Machine Learning portal
        /// </summary>
        public void DeserialiseJsonResponse(string jsonResponse)
        {
            // Deserialize JSON
            Prediction prediction = JsonConvert.DeserializeObject<Prediction>(jsonResponse);
            predictionDictionary = new Dictionary<string, string>();
    
            for (int i = 0; i < prediction.Results.output1.value.ColumnNames.Count; i++)
            {
                if (prediction.Results.output1.value.Values[0][i] != null)
                {
                    predictionDictionary.Add(prediction.Results.output1.value.ColumnNames[i], prediction.Results.output1.value.Values[0][i]);
                }
            }
    
            keyValueList = new List<KeyValuePair<string, double>>();
    
            // Strip all non-results, by adding only items of interest to the scoreList
            for (int i = 0; i < predictionDictionary.Count; i++)
            {
                KeyValuePair<string, string> pair = predictionDictionary.ElementAt(i);
                if (pair.Key.StartsWith("Scored Probabilities"))
                {
                    // Parse string as double then simplify the string key so to only have the item name
                    double scorefloat = 0f;
                    double.TryParse(pair.Value, out scorefloat);
                    string simplifiedName =
                        pair.Key.Replace("\"", "").Replace("Scored Probabilities for Class", "").Trim();
                    keyValueList.Add(new KeyValuePair<string, double>(simplifiedName, scorefloat));
                }
            }
    
            // Sort Predictions (results will be lowest to highest)
            keyValueList.Sort((x, y) => y.Value.CompareTo(x.Value));
    
            // Spawn the top three items, from the keyValueList, which we have sorted
            for (int i = 0; i < 3; i++)
            {
                ShelfKeeper.instance.SpawnProduct(keyValueList[i].Key, i);
            }
    
            // Clear lists in case of reuse
            keyValueList.Clear();
            predictionDictionary.Clear();
        }
    
  13. Guarde Visual Studio y vuelva a Unity.

  14. Arrastre el script de clase ProductPrediction desde la carpeta Script hasta el objeto Cámara principal .

  15. Guarde la escena y el proyecto Archivo>guardar escena/Archivo>Guardar proyecto.

Capítulo 10: Compilación de la solución para UWP

Ahora es el momento de compilar el proyecto como una solución para UWP, de modo que se pueda ejecutar como una aplicación independiente.

Para compilar:

  1. Para guardar la escena actual, haga clic en Guardarescenasde archivo>.

  2. Vaya a Configuración de compilación de archivos>.

  3. Active la casilla Proyectos de C# de Unity (esto es importante porque le permitirá editar las clases una vez completada la compilación).

  4. Haga clic en Agregar escenas abiertas,

  5. Haga clic en Generar.

    Captura de pantalla del cuadro de diálogo Configuración de compilación, que muestra el elemento de menú Plataforma universal de Windows está resaltado.

  6. Se le pedirá que seleccione la carpeta en la que desea compilar la solución.

  7. Cree una carpeta BUILDS y dentro de esa carpeta cree otra carpeta con un nombre adecuado de su elección.

  8. Haga clic en la nueva carpeta y, a continuación, haga clic en Seleccionar carpeta para comenzar la compilación en esa ubicación.

    Captura de pantalla de la ventana Explorador de archivos, que muestra la carpeta Compilaciones resaltada.

    Captura de pantalla de la ventana Explorador de archivos, que muestra el contenido de la carpeta Compilaciones y el botón Seleccionar carpeta resaltado.

  9. Una vez que Unity haya terminado de compilar (es posible que tarde algún tiempo), abrirá una ventana de Explorador de archivos en la ubicación de la compilación (compruebe la barra de tareas, ya que puede que no siempre aparezca encima de las ventanas, pero le notificará la adición de una nueva ventana).

Capítulo 11: Implementación de la aplicación

Para implementar la aplicación:

  1. Vaya a la nueva compilación de Unity (la carpeta Aplicación ) y abra el archivo de solución con Visual Studio.

  2. Con Visual Studio abierto, debe restaurar paquetes NuGet, que se pueden realizar haciendo clic con el botón derecho en la solución de MachineLearningLab_Build, desde el Explorador de soluciones (que se encuentra a la derecha de Visual Studio) y, a continuación, haciendo clic en Restaurar paquetes NuGet:

    Captura de pantalla de la ventana de Visual Studio, que muestra el elemento de menú Restaurar paquetes Nu Get resaltado.

  3. En Configuración de la solución, seleccione Depurar.

  4. En plataforma de soluciones, seleccione x86, Equipo local.

    Para la Microsoft HoloLens, es posible que le resulte más fácil establecer esto en Máquina remota, de modo que no esté anclado a su equipo. Sin embargo, también tendrá que hacer lo siguiente:

    • Conozca la dirección IP de HoloLens, que se puede encontrar en la red de configuración > & Internet > Wi-Fi > Opciones avanzadas; IPv4 es la dirección que debe usar.
    • Asegúrese de que el modo de desarrollador está activado; se encuentra en Configuración > Update & Security > Para desarrolladores.

    Captura de pantalla del menú de Microsoft Visual Studio, que muestra que la máquina local está seleccionada en la plataforma de soluciones.

  5. Vaya al menú Compilar y haga clic en Implementar solución para transferir localmente la aplicación a su PC.

  6. La aplicación debería aparecer ahora en la lista de aplicaciones instaladas, lista para iniciarse.

Al ejecutar la aplicación Mixed Reality, verá el banco que se configuró en la escena de Unity y, desde la inicialización, se capturarán los datos configurados en Azure. Los datos se deserializarán dentro de la aplicación y los tres resultados principales de la fecha y hora actuales se proporcionarán visualmente, como tres modelos en el banco.

La aplicación de Machine Learning finalizada

Enhorabuena, ha creado una aplicación de realidad mixta que aprovecha Azure Machine Learning para realizar predicciones de datos y mostrarla en la escena.

Captura de pantalla de la ventana de Microsoft Visual Studio, que muestra un estante con tres objetos y una tarjeta con el texto 15 a las 23 de febrero.

Ejercicio

Ejercicio 1

Experimente con el criterio de ordenación de la aplicación y haga que las tres predicciones inferiores aparezcan en el estante, ya que estos datos podrían ser útiles también.

Ejercicio 2

El uso de Tablas de Azure rellena una nueva tabla con información meteorológica y crea un nuevo experimento mediante los datos.