HoloLens (1ère génération) et Azure 307 : Machine Learning


Notes

Les tutoriels Mixed Reality Academy ont été conçus pour les appareils HoloLens (1re génération) et les casques immersifs de réalité mixte. Nous estimons qu’il est important de laisser ces tutoriels à la disposition des développeurs qui recherchent encore des conseils pour développer des applications sur ces appareils. Notez que ces tutoriels ne sont pas mis à jour avec les derniers ensembles d’outils ou interactions utilisés pour HoloLens 2. Ils sont fournis dans le but de fonctionner sur les appareils pris en charge. Il y aura une nouvelle série de tutoriels qui seront publiés à l’avenir qui montreront comment développer pour HoloLens 2. Cet avis sera mis à jour avec un lien vers ces didacticiels lorsqu’ils sont publiés.


final product -start

Dans ce cours, vous allez apprendre à ajouter des fonctionnalités Machine Learning (ML) à une application de réalité mixte à l’aide de Azure Machine Learning Studio (classique).

Azure Machine Learning Studio (classique) est un service Microsoft, qui fournit aux développeurs un grand nombre d’algorithmes d’apprentissage automatique, qui peuvent vous aider à entrer, générer, préparer et visualiser les données. À partir de ces composants, il est ensuite possible de développer une expérience d’analyse prédictive, d’itérer dessus et de l’utiliser pour entraîner votre modèle. Après l’entraînement, vous pouvez rendre votre modèle opérationnel dans le cloud Azure afin qu’il puisse ensuite noter de nouvelles données. Pour plus d’informations, consultez la page Azure Machine Learning Studio (classique).

Après avoir suivi ce cours, vous aurez une application de casque immersif de réalité mixte et vous aurez appris comment procéder comme suit :

  1. Fournissez une table des données de ventes au portail Azure Machine Learning Studio (classique) et concevez un algorithme pour prédire les ventes futures d’articles populaires.
  2. Créez un Project Unity, qui peut recevoir et interpréter les données de prédiction du service ML.
  3. Affichez visuellement les données de prédication dans le Project Unity, en fournissant les articles de vente les plus populaires sur une étagère.

Dans votre application, il vous incombe de savoir comment intégrer les résultats à votre conception. Ce cours est conçu pour vous apprendre à intégrer un service Azure à votre Project Unity. C’est votre travail d’utiliser les connaissances que vous obtenez de ce cours pour améliorer votre application de réalité mixte.

Ce cours est un didacticiel autonome, qui n’implique pas directement d’autres Mixed Reality Labs.

Prise en charge des appareils

Cours HoloLens Casques immersifs
Réalité mixte - Azure - Cours 307 : Machine Learning ✔️ ✔️

Notes

Bien que ce cours se concentre principalement sur Windows Mixed Reality casques immersifs (VR), vous pouvez également appliquer ce que vous apprenez dans ce cours à Microsoft HoloLens. À mesure que vous suivez le cours, vous verrez des notes sur les modifications que vous devrez peut-être utiliser pour prendre en charge HoloLens. Lorsque vous utilisez HoloLens, vous pouvez remarquer un écho lors de la capture vocale.

Prérequis

Notes

Ce didacticiel est conçu pour les développeurs qui ont une expérience de base avec Unity et C#. Sachez également que les conditions préalables et les instructions écrites de ce document représentent ce qui a été testé et vérifié au moment de l’écriture (mai 2018). Vous êtes libre d’utiliser le logiciel le plus récent, comme indiqué dans l’article d’installation des outils, bien qu’il ne soit pas supposé que les informations de ce cours correspondent parfaitement à ce que vous trouverez dans les logiciels plus récents que ceux répertoriés ci-dessous.

Nous vous recommandons le matériel et les logiciels suivants pour ce cours :

Avant de commencer

Pour éviter de rencontrer des problèmes lors de la création de ce projet, il est fortement recommandé de créer le projet mentionné dans ce didacticiel dans un dossier racine ou proche (des chemins de dossier longs peuvent provoquer des problèmes au moment de la génération).

Chapitre 1 - Configuration du compte stockage Azure

Pour utiliser l’API Azure Traducteur, vous devez configurer une instance du service à rendre disponible pour votre application.

  1. Connectez-vous au portail Azure.

    Notes

    Si vous n’avez pas encore de compte Azure, vous devez en créer un. Si vous suivez ce tutoriel dans une situation de salle de classe ou de laboratoire, demandez à votre instructeur ou à l’un des proctors d’aider à configurer votre nouveau compte.

  2. Une fois que vous êtes connecté, cliquez sur Stockage Comptes dans le menu de gauche.

    Azure Storage Account Setup

    Notes

    Le mot Nouveau peut avoir été remplacé par Créer une ressource dans des portails plus récents.

  3. Sous l’onglet Comptes Stockage, cliquez sur Ajouter.

    Azure Storage Account Setup

  4. Dans le volet Créer un compte Stockage :

    1. Insérez un nom pour votre compte, n’oubliez pas que ce champ accepte uniquement les chiffres et les lettres minuscules.

    2. Pour le modèle de déploiement, sélectionnez Resource Manager.

    3. Pour le type de compte, sélectionnez Stockage (usage général v1).

    4. Pour Performances, sélectionnez Standard.

    5. Pour la réplication, sélectionnez Stockage géoredondant avec accès en lecture (RA-GRS).

    6. Laissez le transfert sécurisé requis comme désactivé.

    7. Sélectionnez un Abonnement.

    8. Choisissez un groupe de ressources ou créez-en un. Un groupe de ressources permet de surveiller, contrôler l’accès, provisionner et gérer la facturation d’une collection de ressources Azure. Il est recommandé de conserver tous les services Azure associés à un seul projet (par exemple, ces labos) sous un groupe de ressources commun.

      Si vous souhaitez en savoir plus sur les groupes de ressources Azure, consultez l’article du groupe de ressources.

    9. Déterminez l’emplacement de votre groupe de ressources (si vous créez un groupe de ressources). L’emplacement se trouve idéalement dans la région où l’application s’exécute. Certaines ressources Azure sont disponibles uniquement dans certaines régions.

  5. Vous devrez également confirmer que vous avez compris les conditions générales appliquées à ce service.

    Azure Storage Account Setup

  6. Une fois que vous avez cliqué sur Créer, vous devrez attendre la création du service, ce qui peut prendre une minute.

  7. Une notification s’affiche dans le portail une fois l’instance de service créée.

    Azure Storage Account Setup

Chapitre 2 - Le Azure Machine Learning Studio (classique)

Pour utiliser le Azure Machine Learning, vous devez configurer une instance du service Machine Learning à rendre disponible pour votre application.

  1. Dans le portail Azure, cliquez sur Nouveau dans le coin supérieur gauche, puis recherchez Machine Learning Espace de travail Studio, appuyez sur Entrée.

    The Azure Machine Learning Studio (classic)

  2. La nouvelle page fournit une description du service d’espace de travail Machine Learning Studio. En bas à gauche de cette invite, cliquez sur le bouton Créer pour créer une association avec ce service.

  3. Une fois que vous avez cliqué sur Créer, un panneau s’affiche dans lequel vous devez fournir des détails sur votre nouveau service Machine Learning Studio :

    1. Insérez le nom de votre espace de travail souhaité pour cette instance de service.

    2. Sélectionnez un Abonnement.

    3. Choisissez un groupe de ressources ou créez-en un. Un groupe de ressources permet de surveiller, contrôler l’accès, provisionner et gérer la facturation d’une collection de ressources Azure. Il est recommandé de conserver tous les services Azure associés à un seul projet (par exemple, ces labos) sous un groupe de ressources commun.

      Si vous souhaitez en savoir plus sur les groupes de ressources Azure, consultez l’article du groupe de ressources.

    4. Déterminez l’emplacement de votre groupe de ressources (si vous créez un groupe de ressources). L’emplacement se trouve idéalement dans la région où l’application s’exécute. Certaines ressources Azure sont disponibles uniquement dans certaines régions. Vous devez utiliser le même groupe de ressources que celui que vous avez utilisé pour créer le stockage Azure dans le chapitre précédent.

    5. Pour la section Stockage compte, cliquez sur Utiliser l’existant, puis sur le menu déroulant, puis, à partir de là, sur le compte Stockage que vous avez créé dans le dernier chapitre.

    6. Sélectionnez le niveau tarifaire d’espace de travail approprié pour vous, dans le menu déroulant.

    7. Dans la section Plan de service Web , cliquez sur Createnew, puis insérez un nom pour celui-ci dans le champ de texte.

    8. Dans la section du niveau tarifaire du plan de service web , sélectionnez le niveau tarifaire de votre choix. Un niveau de test de développement appelé DEVTEST Standard doit être disponible gratuitement.

    9. Vous devrez également confirmer que vous avez compris les conditions générales appliquées à ce service.

    10. Cliquez sur Créer.

      The Azure Machine Learning Studio (classic)

  4. Une fois que vous avez cliqué sur Créer, vous devrez attendre la création du service, ce qui peut prendre une minute.

  5. Une notification s’affiche dans le portail une fois l’instance de service créée.

    The Azure Machine Learning Studio (classic)

  6. Cliquez sur la notification pour explorer votre nouvelle instance de service.

    The Azure Machine Learning Studio (classic)

  7. Cliquez sur le bouton Accéder à la ressource dans la notification pour explorer votre nouvelle instance de service.

  8. Dans la page affichée, sous la section Liens supplémentaires, cliquez sur Lancer Machine Learning Studio, qui dirige votre navigateur vers le portail Machine Learning Studio.

    The Azure Machine Learning Studio (classic)

  9. Utilisez le bouton Se connecter, en haut à droite ou au centre, pour vous connecter à votre Machine Learning Studio (classique).

    The Azure Machine Learning Studio (classic)

Chapitre 3 - Le Machine Learning Studio (classique) : configuration du jeu de données

L’une des façons dont Machine Learning algorithmes fonctionnent consiste à analyser les données existantes, puis à tenter de prédire les résultats futurs en fonction du jeu de données existant. Cela signifie généralement que plus vous disposez de données existantes, mieux l’algorithme sera à prédire les résultats futurs.

Un exemple de tableau vous est fourni, pour ce cours, appelé ProductsTableCSV et peut être téléchargé ici.

Important

Le fichier .zip ci-dessus contient à la fois ProductsTableCSV et .unitypackage, dont vous aurez besoin dans le chapitre 6. Ce package est également fourni dans ce chapitre, bien qu’il soit distinct du fichier csv.

Cet exemple de jeu de données contient un enregistrement des objets les plus vendus à chaque heure de chaque jour de l’année 2017.

The Machine Learning Studio (classic): Dataset setup

Par exemple, le jour 1 de 2017, à 13h (heure 13), l’article le plus vendu était le sel et le poivre.

Cet exemple de tableau contient 9998 entrées.

  1. Revenez au portail Machine Learning Studio (classique) et ajoutez cette table en tant que jeu de données pour votre ML. Pour ce faire, cliquez sur le bouton + Nouveau dans le coin inférieur gauche de l’écran.

    The Machine Learning Studio (classic): Dataset setup

  2. Une section s’affiche à partir du bas et, dans ce cas, il y a un panneau de navigation sur la gauche. Cliquez sur Jeu de données, puis à droite de celui-ci, à partir du fichier local.

    The Machine Learning Studio (classic): Dataset setup

  3. Télécharger le nouveau jeu de données en procédant comme suit :

    1. La fenêtre de chargement s’affiche, où vous pouvez parcourir votre disque dur pour le nouveau jeu de données.

      The Machine Learning Studio (classic): Dataset setup

    2. Une fois sélectionnée et de nouveau dans la fenêtre de chargement, laissez la case à cocher désactivée.

    3. Dans le champ de texte ci-dessous, entrez ProductsTableCSV.csv comme nom du jeu de données (bien qu’il soit automatiquement ajouté).

    4. À l’aide du menu déroulant Type, sélectionnez Fichier CSV générique avec un en-tête (.csv).

    5. Appuyez sur la graduation en bas à droite de la fenêtre de chargement, et votre jeu de données sera chargé.

Chapitre 4 - Le Machine Learning Studio (classique) : L’expérience

Avant de pouvoir créer votre système Machine Learning, vous devez créer une expérience pour valider votre théorie sur vos données. Avec les résultats, vous savez si vous avez besoin de plus de données ou s’il n’existe aucune corrélation entre les données et un résultat possible.

Pour commencer à créer une expérience :

  1. Cliquez à nouveau sur le bouton + Nouveau en bas à gauche de la page, puis cliquez sur ExperimentBlank Experiment>.

    The Machine Learning Studio (classic): The Experiment

  2. Une nouvelle page s’affiche avec une expérience vide :

  3. Dans le panneau de gauche, développez Jeux de données EnregistrésMy Datasets et faites glisser ProductsTableCSV sur le canevas> de l’expérience.

    The Machine Learning Studio (classic): The Experiment

  4. Dans le panneau de gauche, développez DataTransformationSample> et Split. Faites ensuite glisser l’élément Fractionner les données vers le canevas de l’expérience. L’élément Fractionner les données fractionne le jeu de données en deux parties. Une partie que vous allez utiliser pour entraîner l’algorithme Machine Learning. La deuxième partie sera utilisée pour évaluer la précision de l’algorithme généré.

    The Machine Learning Studio (classic): The Experiment

  5. Dans le panneau droit (alors que l’élément Fractionner les données sur le canevas est sélectionné), modifiez la fraction de lignes du premier jeu de données de sortie sur 0,7. Cela fractionnera les données en deux parties, la première partie sera de 70 % des données, et la deuxième partie sera les 30 % restantes. Pour vous assurer que les données sont fractionnées de manière aléatoire, vérifiez que la case à cocher fractionnée aléatoire reste cochée .

    The Machine Learning Studio (classic): The Experiment

  6. Faites glisser une connexion de la base de l’élément ProductsTableCSV sur le canevas en haut de l’élément Fractionner les données. Cela permet de connecter les éléments et d’envoyer la sortie du jeu de données ProductsTableCSV (les données) à l’entrée Fractionner les données.

    The Machine Learning Studio (classic): The Experiment

  7. Dans le volet Expériences sur le côté gauche, développez Machine Learning>Train. Faites glisser l’élément Entraîner le modèle vers le canevas d’expérience. Votre canevas doit ressembler à celui ci-dessous.

    The Machine Learning Studio (classic): The Experiment

  8. En bas à gauche de l’élément Fractionner les données , faites glisser une connexion vers le haut à droite de l’élément Entraîner le modèle . Le premier fractionnement de 70 % du jeu de données sera utilisé par le modèle d’apprentissage pour entraîner l’algorithme.

    The Machine Learning Studio (classic): The Experiment

  9. Sélectionnez l’élément Entraîner le modèle sur le canevas, puis, dans le volet Propriétés (sur le côté droit de la fenêtre de votre navigateur), cliquez sur le bouton Sélecteur de colonne De lancement .

  10. Dans le produit de type de zone de texte, puis appuyez sur Entrée, le produit est défini en tant que colonne pour entraîner les prédictions. Ensuite, cliquez sur la graduation dans le coin inférieur droit pour fermer la boîte de dialogue de sélection.

    The Machine Learning Studio (classic): The Experiment

  11. Vous allez entraîner un algorithme de régression logistique multiclasse pour prédire le produit le plus vendu en fonction de l’heure du jour et de la date. Il est au-delà de l’étendue de ce document pour expliquer les détails des différents algorithmes fournis par le Azure Machine Learning studio, cependant, vous pouvez en savoir plus à partir de la Machine Learning aide-mémoire de l’algorithme

  12. Dans le panneau éléments de l’expérience de gauche, développez Machine Learning>InitializeModelClassification>, puis faites glisser l’élément De régression logistique multiclasse sur le canevas de l’expérience.

  13. Connecter la sortie, du bas de la régression logistique multiclasse, à l’entrée supérieure gauche de l’élément Entraîner le modèle.

    The Machine Learning Studio (classic): The Experiment

  14. Dans la liste des éléments d’expérience dans le panneau de gauche, développez Machine Learning>Score et faites glisser l’élément Score Model sur le canevas.

  15. Connecter la sortie, du bas du modèle d’apprentissage, à l’entrée supérieure gauche du modèle de score.

  16. Connecter la sortie inférieure droite des données fractionnées vers l’entrée supérieure droite de l’élément Score Model.

    The Machine Learning Studio (classic): The Experiment

  17. Dans la liste des éléments d’expérience dans le panneau de gauche, développez Machine Learning>Évaluer, puis faites glisser l’élément Évaluer le modèle sur le canevas.

  18. Connecter la sortie du modèle de score à l’entrée supérieure gauche du modèle d’évaluation.

    The Machine Learning Studio (classic): The Experiment

  19. Vous avez créé votre première expérience de Machine Learning. Vous pouvez maintenant enregistrer et exécuter l’expérience. Dans le menu en bas de la page, cliquez sur le bouton Enregistrer pour enregistrer votre expérience, puis sur Exécuter pour démarrer l’expérience.

    The Machine Learning Studio (classic): The Experiment

  20. Vous pouvez voir l’état de l’expérience en haut à droite du canevas. Attendez quelques instants pour que l’expérience se termine.

    Si vous avez un jeu de données volumineux (réel), il est probable que l’expérience puisse prendre des heures.

    The Machine Learning Studio (classic): The Experiment

  21. Cliquez avec le bouton droit sur l’élément Évaluer le modèle dans le canevas et, dans le menu contextuel, placez la souris sur Résultats de l’évaluation, puis sélectionnez Visualiser.

    The Machine Learning Studio (classic): The Experiment

  22. Les résultats de l’évaluation s’affichent avec les résultats prédits par rapport aux résultats réels. Cela utilise le 30 % du jeu de données d’origine, qui a été fractionné précédemment, pour évaluer le modèle. Vous pouvez voir que les résultats ne sont pas excellents, dans l’idéal, le nombre le plus élevé de chaque ligne est l’élément mis en surbrillance dans les colonnes.

    The Machine Learning Studio (classic): The Experiment

  23. Fermez les résultats.

  24. Pour utiliser votre modèle Machine Learning nouvellement formé, vous devez l’exposer en tant que service web. Pour ce faire, cliquez sur l’élément de menu Configurer le service web dans le menu en bas de la page, puis cliquez sur Le service web prédictif.

    The Machine Learning Studio (classic): The Experiment

  25. Un nouvel onglet sera créé et le modèle d’apprentissage fusionné pour créer le nouveau service web.

  26. Dans le menu en bas de la page, cliquez sur Enregistrer, puis sur Exécuter. Vous verrez l’état mis à jour dans le coin supérieur droit du canevas d’expérience.

    The Machine Learning Studio (classic): The Experiment

  27. Une fois l’exécution terminée, un bouton Déployer un service web s’affiche en bas de la page. Vous êtes prêt à déployer le service web. Cliquez sur Déployer le service web (classique) dans le menu en bas de la page.

    The Machine Learning Studio (classic): The Experiment

    Votre navigateur peut inviter à autoriser une fenêtre contextuelle, que vous devez autoriser, bien que vous deviez appuyer à nouveau sur Déployer le service web , si la page de déploiement ne s’affiche pas.

  28. Une fois l’expérience créée, vous êtes redirigé vers une page de tableau de bord où vous aurez affiché votre clé API . Copiez-le dans un bloc-notes pour le moment, vous en aurez besoin dans votre code très bientôt. Une fois que vous avez noté votre clé API, cliquez sur le bouton DEMANDE/RÉPONSE dans la section Point de terminaison par défaut sous la clé.

    The Machine Learning Studio (classic): The Experiment

    Notes

    Si vous cliquez sur Tester dans cette page, vous pourrez entrer des données d’entrée et afficher la sortie. Entrez la journée et l’heure. Laissez l’entrée de produit vide. Cliquez ensuite sur le bouton Confirmer . La sortie en bas de la page affiche le json représentant la probabilité que chaque produit soit le choix.

  29. Une nouvelle page web s’ouvre, affichant les instructions et quelques exemples sur la structure de requête requise par le Machine Learning Studio (classique). Copiez l’URI de requête affiché dans cette page, dans votre bloc-notes.

    The Machine Learning Studio (classic): The Experiment

Vous avez maintenant créé un système Machine Learning qui fournit le produit le plus probable à vendre en fonction des données d’achat historiques, corrélé avec l’heure du jour et du jour de l’année.

Pour appeler le service web, vous aurez besoin de l’URL du point de terminaison de service et d’une clé d’API pour le service. Cliquez sur l’onglet Consommer , dans le menu supérieur.

La page Informations sur la consommation affiche les informations dont vous aurez besoin pour appeler le service web à partir de votre code. Prenez une copie de la clé primaire et de l’URL de requête-réponse . Vous en aurez besoin dans le chapitre suivant.

Chapitre 5 - Configuration de l’Project Unity

Configurez et testez votre casque immersif Mixed Reality.

Notes

Vous n’aurez pas besoin de contrôleurs de mouvement pour ce cours. Si vous avez besoin de support pour configurer le casque immersif, cliquez ICI.

  1. Ouvrez Unity et créez un Project Unity appelé MR_MachineLearning. Vérifiez que le type de projet est défini sur 3D.

  2. Avec Unity ouvert, il vaut la peine de vérifier que l’éditeur de script par défaut est défini sur Visual Studio. Accédez à EditPreferences>, puis à partir de la nouvelle fenêtre, accédez aux outils externes. Modifiez l’éditeur de script externeen Visual Studio 2017. Fermez la fenêtre Préférences .

  3. Ensuite, accédez à FileBuild>Paramètres et basculez la plateforme en plateforme Windows universelle, en cliquant sur le bouton Basculer la plateforme.

  4. Assurez-vous également que :

    1. L’appareil cible est défini sur n’importe quel appareil.

      Pour le Microsoft HoloLens, définissez l’appareil ciblesur HoloLens.

    2. Le type de build est défini sur D3D.

    3. Le Kit de développement logiciel (SDK) est défini sur La dernière version installée.

    4. Visual Studio Version est définie sur La dernière version installée.

    5. La génération et l’exécution sont définies sur ordinateur local.

    6. Ne vous inquiétez pas de la configuration des scènes dès maintenant, car celles-ci sont fournies ultérieurement.

    7. Les paramètres restants doivent être laissés comme valeur par défaut pour l’instant.

      Setting up the Unity Project

  5. Dans la fenêtre Build Paramètres, cliquez sur le bouton Lecteur Paramètres, ce qui ouvre le panneau associé dans l’espace où se trouve l’Inspecteur.

  6. Dans ce panneau, quelques paramètres doivent être vérifiés :

    1. Sous l’onglet Autres Paramètres :

      1. La version de ScriptingRuntime doit être expérimentale (équivalent.NET 4.6)

      2. Le serveur principal de script doit être .NET

      3. Le niveau de compatibilité de l’API doit être .NET 4.6

        Setting up the Unity Project

    2. Sous l’onglet Publication Paramètres, sous Fonctionnalités, cochez :

      • InternetClient

        Setting up the Unity Project

    3. Plus loin dans le panneau, dans XR Paramètres (trouvé ci-dessous Publier Paramètres), cochez Virtual Reality Pris en charge, assurez-vous que le Kit de développement logiciel (SDK) Windows Mixed Reality est ajouté

      Setting up the Unity Project

  7. Retour dans Build ParamètresUnity C# Projects n’est plus grisé ; cochez la case en regard de cela.

  8. Fermez la fenêtre Build Settings.

  9. Enregistrez votre Project (PROJET D’ENREGISTREMENT DE FICHIER>).

Chapitre 6 - Importation du package Unity MLProducts

Pour ce cours, vous devez télécharger un package de ressources Unity appelé Azure-MR-307.unitypackage. Ce package est fourni avec une scène, avec tous les objets dans ce prédéfini, de sorte que vous pouvez vous concentrer sur l’obtention de tout le travail. Le script ShelfKeeper est fourni, mais contient uniquement les variables publiques, à des fins de structure d’installation de scène. Vous devez effectuer toutes les autres sections.

Pour importer ce package :

  1. Avec le tableau de bord Unity devant vous, cliquez sur Ressources dans le menu en haut de l’écran, puis sur Importer un package personnalisé.

    Importing the MLProducts Unity Package

  2. Utilisez le sélecteur de fichiers pour sélectionner le package Azure-MR-307.unitypackage , puis cliquez sur Ouvrir.

  3. Une liste des composants de cette ressource s’affiche à vous. Confirmez l’importation en cliquant sur Importer.

    Importing the MLProducts Unity Package

  4. Une fois l’importation terminée, vous remarquerez que certains nouveaux dossiers sont apparus dans votre panneau Unity Project. Il s’agit des modèles 3D et des matériaux respectifs qui font partie de la scène prédéfinie sur laquelle vous travaillerez. Vous allez écrire la majorité du code dans ce cours.

    Importing the MLProducts Unity Package

  5. Dans le dossier panneau Project, cliquez sur le dossier Scènes, puis double-cliquez sur la scène à l’intérieur (appelée MR_MachineLearningScene). La scène s’ouvre (voir l’image ci-dessous). Si les diamants rouges sont manquants, cliquez simplement sur le bouton Gizmos , en haut à droite du panneau de jeu.

    Importing the MLProducts Unity Package

Chapitre 7 - Vérification des DLL dans Unity

Pour tirer parti de l’utilisation de bibliothèques JSON (utilisées pour sérialiser et désérialiser), une DLL Newtonsoft a été implémentée avec le package que vous avez introduit. La bibliothèque doit avoir la configuration correcte, bien qu’elle vaut la peine de vérifier (en particulier si vous rencontrez des problèmes avec le code qui ne fonctionne pas).

Pour ce faire :

  • Cliquez avec le bouton gauche sur le fichier Newtonsoft dans le dossier Plug-ins et examinez le panneau Inspecteur. Vérifiez que n’importe quelle plateforme est cochée. Accédez à l’onglet UWP et vérifiez également que Ne pas traiter est coché.

    Importing the DLLs in Unity

Chapitre 8 - Créer la classe ShelfKeeper

La classe ShelfKeeper héberge des méthodes qui contrôlent l’interface utilisateur et les produits générés dans la scène.

Dans le cadre du package importé, vous aurez reçu cette classe, bien qu’elle soit incomplète. Il est maintenant temps de terminer cette classe :

  1. Double-cliquez sur le script ShelfKeeper, dans le dossier Scripts, pour l’ouvrir avec Visual Studio 2017.

  2. Remplacez tout le code existant dans le script par le code suivant, qui définit l’heure et la date et possède une méthode pour afficher un produit.

    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. Veillez à enregistrer vos modifications dans Visual Studio avant de revenir à Unity.

  4. Dans l’Éditeur Unity, vérifiez que la classe ShelfKeeper ressemble à ce qui suit :

    Create the ShelfKeeper class

    Important

    Si votre script n’a pas les cibles de référence (c’est-à-dire date (texte Mesh)), faites simplement glisser les objets correspondants du panneau hiérarchie dans les champs cibles. Consultez ci-dessous pour obtenir des explications, si nécessaire :

    1. Ouvrez le tableau de points de génération dans le script du composant ShelfKeeper en cliquant dessus avec le bouton gauche. Une sous-section s’affiche appelée Taille, qui indique la taille du tableau. Tapez 3 dans la zone de texte en regard de Taille et appuyez sur Entrée, et trois emplacements seront créés sous.

    2. Dans la hiérarchie , développez l’objet Time Display (en cliquant sur la flèche en regard de celle-ci). Cliquez ensuite sur la caméra principale à partir de la hiérarchie afin que l’inspecteur affiche ses informations.

    3. Sélectionnez la caméra principale dans le panneau Hiérarchie. Faites glisser les objets Date et Heure du panneau Hiérarchie vers les emplacements texte de date et d’heure dans l’inspecteur de la caméra principale du composant ShelfKeeper.

    4. Faites glisser les points de génération du panneau hiérarchie (sous l’objet Shelf) vers les cibles de référence 3Element sous le tableau de points de génération, comme illustré dans l’image.

      Create the ShelfKeeper class

Chapitre 9 - Créer la classe ProductPrediction

La classe suivante que vous allez créer est la classe ProductPrediction .

Cette classe est responsable des opérations suivantes :

  • Interrogation de l’instance de service Machine Learning, en fournissant la date et l’heure actuelles.

  • Désérialisation de la réponse JSON en données utilisables.

  • Interprétation des données, récupération des 3 produits recommandés.

  • Appel des méthodes de classe ShelfKeeper pour afficher les données dans la scène.

Pour créer cette classe :

  1. Accédez au dossier Scripts, dans le volet Project.

  2. Cliquez avec le bouton droit dans le dossier, CreateC># Script. Appelez le script ProductPrediction.

  3. Double-cliquez sur le nouveau script ProductPrediction pour l’ouvrir avec Visual Studio 2017.

  4. Si la boîte de dialogue Modification de fichier détectée s’affiche, cliquez sur *Recharger la solution.

  5. Ajoutez les espaces de noms suivants en haut de la classe 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. Dans la classe ProductPrediction , insérez les deux objets suivants qui sont composés d’un certain nombre de classes imbriquées. Ces classes sont utilisées pour sérialiser et désérialiser le JSON pour le service Machine Learning.

        /// <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. Ajoutez ensuite les variables suivantes au-dessus du code précédent (de sorte que le code associé JSON se trouve en bas du script, sous tous les autres codes et hors du chemin) :

        /// <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;
    

    Important

    Veillez à insérer la clé primaire et le point de terminaison de réponse aux requêtes, à partir du portail Machine Learning, dans les variables ici. Les images ci-dessous montrent où vous avez pris la clé et le point de terminaison.

    The Machine Learning Studio (classic): The Experiment

    The Machine Learning Studio (classic): The Experiment

  8. Insérez ce code dans la méthode Start(). La méthode Start() est appelée lorsque la classe initialise :

        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. Voici la méthode qui collecte la date et l’heure de Windows et les convertit dans un format que notre expérience de Machine Learning peut utiliser pour comparer les données stockées dans la table.

        /// <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. Vous pouvez supprimer la méthode Update() car cette classe ne l’utilisera pas.

  11. Ajoutez la méthode suivante qui communiquera la date et l’heure actuelles au point de terminaison Machine Learning et recevez une réponse au format 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. Ajoutez la méthode suivante, qui est chargée de désérialiser la réponse JSON et de communiquer le résultat de la désérialisation à la classe ShelfKeeper . Ce résultat sera le nom des trois éléments prédits pour vendre le plus à la date et à l’heure actuelles. Insérez le code ci-dessous dans la classe ProductPrediction , sous la méthode précédente.

        /// <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. Enregistrez Visual Studio et revenez à Unity.

  14. Faites glisser le script de classe ProductPrediction à partir du dossier Script , sur l’objet Main Camera .

  15. Enregistrez votre scène et votre projet FileSave Scene/FileSave>>Project.

Chapitre 10 - Créer la solution UWP

Il est maintenant temps de créer votre projet en tant que solution UWP, afin qu’il puisse s’exécuter en tant qu’application autonome.

Pour générer :

  1. Enregistrez la scène actuelle en cliquant sur Scènes FileSave>.

  2. Accédez à FileBuild>Paramètres

  3. Cochez la case appelée Projets Unity C# (c’est important, car cela vous permettra de modifier les classes une fois la build terminée).

  4. Cliquez sur Ajouter des scènes ouvertes,

  5. Cliquez sur Générer.

    Build the UWP Solution

  6. Vous êtes invité à sélectionner le dossier dans lequel vous souhaitez générer la solution.

  7. Créez un dossier BUILDS et, dans ce dossier, créez un autre dossier avec un nom approprié de votre choix.

  8. Cliquez sur votre nouveau dossier, puis cliquez sur Sélectionner un dossier pour commencer la build à cet emplacement.

    Build the UWP Solution

    Build the UWP Solution

  9. Une fois que Unity a terminé la génération (il peut prendre un certain temps), elle ouvre une fenêtre Explorateur de fichiers à l’emplacement de votre build (vérifiez votre barre de tâches, car elle peut ne pas toujours apparaître au-dessus de vos fenêtres, mais vous informera de l’ajout d’une nouvelle fenêtre).

Chapitre 11 - Déployer votre application

Pour déployer votre application :

  1. Accédez à votre nouvelle build Unity (dossier d’application) et ouvrez le fichier de solution avec Visual Studio.

  2. Avec Visual Studio ouvert, vous devez restaurer NuGet packages, ce qui peut être effectué en cliquant avec le bouton droit sur votre solution MachineLearningLab_Build, à partir du Explorateur de solutions (trouvé à droite de Visual Studio), puis en cliquant sur Restaurer les packages NuGet :

    Add NuGet Packages

  3. Dans la configuration de la solution, sélectionnez Déboguer.

  4. Dans la plateforme de solutions, sélectionnez x86, Ordinateur local.

    Pour le Microsoft HoloLens, vous pouvez trouver plus facile de définir cette option sur l’ordinateur distant afin que vous ne soyez pas attachés à votre ordinateur. Toutefois, vous devez également effectuer les opérations suivantes :

    • Connaissez l’adresse IP de votre HoloLens, qui se trouve dans l’Paramètres > Internet réseau &> Wi-Fi > options avancées ; l’adresse IPv4 est l’adresse que vous devez utiliser.
    • Vérifiez que le mode développeur est activé ; trouvé dans Paramètres > Update & Security > for developers.

    Add NuGet Packages

  5. Accédez au menu Générer , puis cliquez sur Déployer la solution pour charger l’application sur votre PC.

  6. Votre application doit maintenant apparaître dans la liste des applications installées, prête à être lancée.

Lorsque vous exécutez l’application Mixed Reality, vous verrez le banc configuré dans votre scène Unity et à partir de l’initialisation, les données que vous avez configurées dans Azure seront récupérées. Les données seront désérialisées dans votre application, et les trois premiers résultats de votre date et heure actuelles seront fournis visuellement, en tant que trois modèles sur le banc.

Votre application Machine Learning terminée

Félicitations, vous avez créé une application de réalité mixte qui tire parti de la Azure Machine Learning pour effectuer des prédictions de données et l’afficher sur votre scène.

Add NuGet Packages

Exercice

Exercice 1

Tester l’ordre de tri de votre application et avoir les trois prédictions inférieures s’affichent sur le plateau, car ces données seraient potentiellement utiles également.

Exercice 2

L’utilisation des tables Azure remplit une nouvelle table avec des informations météorologiques et crée une nouvelle expérience à l’aide des données.