Share via


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 tutoriels lorsqu’ils seront publiés.


produit final -start

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

Azure Machine Learning Studio (classique) est un service Microsoft, qui fournit aux développeurs un grand nombre d’algorithmes Machine Learning, qui peuvent aider à l’entrée, à la sortie, à la préparation et à la visualisation des 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 terminé 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 de 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 projet Unity, qui peut recevoir et interpréter des données de prédiction à partir du service ML.
  3. Affichez les données de prédication visuellement dans le projet Unity, en fournissant les articles de vente les plus populaires, sur une étagère.

Dans votre application, c’est à vous de choisir la façon dont vous allez intégrer les résultats à votre conception. Ce cours est conçu pour vous apprendre à intégrer un service Azure à votre projet 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 tutoriel 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 avez appris dans ce cours à Microsoft HoloLens. Au fur et à 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 certain écho lors de la capture vocale.

Prérequis

Notes

Ce tutoriel 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 contenues dans ce document représentent ce qui a été testé et vérifié au moment de la rédaction (mai 2018). Vous êtes libre d’utiliser les logiciels les plus récents, comme indiqué dans l’article Installer les outils, mais il ne faut pas supposer que les informations de ce cours correspondront parfaitement à ce que vous trouverez dans les logiciels plus récents que ceux répertoriés ci-dessous.

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

Avant de commencer

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

Chapitre 1 - Configuration du compte de stockage Azure

Pour utiliser l’API Azure Translator, vous devez configurer une instance du service à mettre à la disposition de 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 classe ou de laboratoire, demandez à votre instructeur ou à l’un des surveillants de l’aide pour configurer votre nouveau compte.

  2. Une fois connecté, cliquez sur Comptes de stockage dans le menu de gauche.

    Capture d’écran de la fenêtre Microsoft Azure, qui montre l’élément Comptes de stockage dans le menu de navigation de gauche.

    Notes

    Le mot Nouveau a peut-être été remplacé par Créer une ressource, dans les portails plus récents.

  3. Sous l’onglet Comptes de stockage , cliquez sur Ajouter.

    Capture d’écran de la fenêtre Microsoft Azure, qui montre l’écran Comptes de stockage et le bouton Ajouter en surbrillance.

  4. Dans le panneau Créer un compte de stockage :

    1. Insérez un nom pour votre compte. Sachez que ce champ accepte uniquement les chiffres et les lettres minuscules.

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

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

    4. Pour Performances, sélectionnez Standard.

    5. Pour Réplication, sélectionnez Stockage géoredondant en lecture (RA-GRS).

    6. Laissez Transfert sécurisé requiscomme 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, de contrôler l’accès, de provisionner et de gérer la facturation pour 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 sur les groupes de ressources.

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

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

    Capture d’écran de la boîte de dialogue Créer un compte de stockage, qui montre les informations que l’utilisateur a renseignées dans les champs de texte requis.

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

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

    Capture d’écran de la notification Déploiement réussi, qui informe l’utilisateur que le déploiement sur le groupe de ressources a réussi.

Chapitre 2 - Azure Machine Learning Studio (classique)

Pour utiliser Azure Machine Learning, vous devez configurer une instance du service Machine Learning à mettre à la disposition de votre application.

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

    Capture d’écran de la fenêtre Microsoft Azure, qui montre l’espace de travail Machine Learning Studio dans le volet de contenu.

  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 quelques détails sur votre nouveau service Machine Learning Studio :

    1. Insérez le nom de l’espace de travail souhaité pour ce 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, de contrôler l’accès, de provisionner et de gérer la facturation pour 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 sur les groupes de ressources.

    4. Déterminez l’emplacement de votre groupe de ressources (si vous créez un groupe de ressources). L’emplacement est idéalement situé dans la région où l’application s’exécuterait. 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 Compte de stockage , cliquez sur Utiliser existant, puis sur le menu déroulant, puis cliquez sur le compte de stockage que vous avez créé dans le dernier chapitre.

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

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

    8. Dans la section 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 devez également confirmer que vous avez bien compris les conditions générales appliquées à ce service.

    10. Cliquez sur Créer.

      Capture d’écran de la boîte de dialogue Azure Machine Learning Studio, qui montre les informations que l’utilisateur a entrées dans les champs de texte.

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

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

    Capture d’écran de la fenêtre Microsoft Azure, qui montre une notification non lus dans le menu de navigation.

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

    Capture d’écran de la notification Déploiement réussi, qui informe l’utilisateur que le déploiement de l’espace de travail sur le groupe de ressources a réussi.

  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 dirigera votre navigateur vers le portail Machine Learning Studio .

    Capture d’écran de la fenêtre Microsoft Azure, qui montre le lien Lancer Machine Learning Studio en surbrillance dans le volet de contenu.

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

    Capture d’écran de la fenêtre Machine Learning Studio, qui montre le bouton Se connecter en surbrillance.

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

L’une des façons dont les algorithmes Machine Learning fonctionnent consiste à analyser les données existantes, puis à essayer 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, meilleur est l’algorithme pour 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 que 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.

Capture d’écran de la fenêtre Microsoft Excel, qui montre un exemple de jeu de données d’objets les plus vendus à chaque heure de chaque jour de l’année 2017.

Par exemple, au premier jour 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 machine learning. Pour ce faire, cliquez sur le bouton + Nouveau dans le coin inférieur gauche de l’écran.

    Capture d’écran du portail classique Microsoft Azure Machine Learning Studio, qui montre le bouton Nouveau en surbrillance dans le menu.

  2. Une section s’affiche à partir du bas et, à l’intérieur, il y a un panneau de navigation à gauche. Cliquez sur Jeu de données, puis à droite de celui-ci, À partir d’un fichier local.

    Capture d’écran de la boîte de dialogue Nouveau, qui montre les éléments de menu Jeu de données et À partir d’un fichier local en surbrillance.

  3. Chargez 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.

      Capture d’écran de la boîte de dialogue Charger un nouveau jeu de données, qui montre le bouton Parcourir pour que l’utilisateur recherche et sélectionne les données à charger.

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

    3. Dans le champ de texte ci-dessous, entrez ProductsTableCSV.csv comme nom du jeu de données (mais doit être ajouté automatiquement).

    4. Dans le menu déroulant Type, sélectionnez Fichier CSV générique avec un en-tête (.csv).

    5. Appuyez sur la case en bas à droite de la fenêtre de chargement pour que votre jeu de données soit chargé.

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

Avant de pouvoir créer votre système d’apprentissage automatique, vous devez créer une expérience, afin de valider votre théorie sur vos données. Avec les résultats, vous saurez si vous avez besoin de plus de données ou s’il n’y a 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 Expérience>vide.

    Capture d’écran de la fenêtre Microsoft Azure Machine Learning Studio, qui montre que l’élément de menu Expérience est sélectionné.

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

  3. Dans le panneau de gauche, développez Jeux de données enregistrés>Mes jeux de données , puis faites glisser ProductsTableCSV sur le canevas de l’expérience.

    Capture d’écran de la fenêtre Expérience, qui montre le dossier Mes jeux de données développé dans le menu et la table Des produits C S V dans le canevas de l’expérience.

  4. Dans le panneau de gauche, développez Exemple de transformation> de donnéeset Fractionnement. 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 l’apprentissage de l’algorithme machine learning. La deuxième partie sera utilisée pour évaluer la précision de l’algorithme généré.

    Capture d’écran de la fenêtre Expérience, qui montre les éléments Partition et Exemple et Fractionner les données dans le menu avec Fractionner les données appliquées au canevas.

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

    Capture d’écran du panneau Propriétés, qui montre la case à cocher Fractionnée aléatoire remplie et le champ Fraction des lignes a été défini sur 0 point 7.

  6. Faites glisser une connexion de la base de l’élément ProductsTableCSV sur le canevas vers le 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.

    Capture d’écran du canevas d’expérience, qui montre une connexion établie entre products Table C S V point c s v et Fractionnement des données.

  7. Dans le panneau 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 à ce qui suit.

    Capture d’écran du canevas d’expérience, qui montre une connexion établie entre la table Products Table C S V point c s v et Fractionner les données, avec entraîner le modèle ci-dessous.

  8. En bas à gauche de l’élément Fractionner les données, faites glisser une connexion en 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.

    Capture d’écran du canevas d’expérience, qui montre une connexion établie entre products Table C S V point c s v, Fractionner les données et entraîner le modèle.

  9. Sélectionnez l’élément Entraîner le modèle sur le canevas et, dans le panneau Propriétés (à droite de la fenêtre de votre navigateur), cliquez sur le bouton Lancer le sélecteur de colonne .

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

    Capture d’écran de la boîte de dialogue Sélectionner une colonne unique, qui montre la colonne de produit mise en surbrillance dans le menu colonnes.

  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 d’expliquer les détails des différents algorithmes fournis par le Azure Machine Learning studio, cependant, vous pouvez en savoir plus à partir de la Feuille de triche des algorithmes d’apprentissage automatique

  12. Dans le panneau éléments d’expérience à gauche, développez Machine Learning> Initialiser laclassificationdu modèle>, puis faites glisser l’élément Régression logistique multiclasse vers le canevas de l’expérience.

  13. Connectez la sortie, en bas de la régression logistique multiclasse, à l’entrée en haut à gauche de l’élément Entraîner le modèle .

    Capture d’écran du canevas d’expérience, qui montre entraîner le modèle connecté aux données de régression logistique multiclasse et de fractionnement.

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

  15. Connectez la sortie, en bas du modèle d’apprentissage, à l’entrée en haut à gauche du modèle score.

  16. Connectez la sortie en bas à droite de Fractionner les données à l’entrée en haut à droite de l’élément Scorer le modèle .

    Capture d’écran du canevas de l’expérience, qui montre le modèle de score connecté au modèle d’apprentissage et au fractionnement des données.

  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. Connectez la sortie du modèle score à l’entrée en haut à gauche du modèle Évaluer.

    Capture d’écran du canevas de l’expérience, qui montre l’élément Évaluer le modèle connecté à Score Model.

  19. Vous avez créé votre première expérience 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.

    Capture d’écran du menu Canevas de l’expérience, qui montre les boutons Enregistrer et Exécuter en surbrillance.

  20. Vous pouvez voir les status de l’expérience en haut à droite du canevas. Attendez quelques instants 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.

    Capture d’écran de la fenêtre Canevas de l’expérience, qui montre la status de l’expérience dans le coin supérieur droit.

  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.

    Capture d’écran du menu clic droit de l’élément Évaluer le modèle, qui montre les résultats de l’évaluation en surbrillance et visualiser les éléments de menu.

  22. Les résultats de l’évaluation s’affichent avec les résultats prédits par rapport aux résultats réels. Cela utilise les 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é dans chaque ligne serait l’élément en surbrillance dans les colonnes.

    Capture d’écran du graphique Résultats, qui montre les résultats de l’expérience dans un graphique de zones avec des pourcentages.

  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 Service web prédictif.

    Capture d’écran du menu Expérience, qui montre l’élément de menu Configurer le service web en surbrillance.

  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 le status mis à jour dans le coin supérieur droit du canevas de l’expérience.

    Capture d’écran du menu Expérience, qui montre le bouton de menu Exécuter en surbrillance et l’élément de menu Exécuter.

  27. Une fois l’exécution terminée, un bouton Déployer le 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.

    Capture d’écran du menu Expérience, qui montre l’élément de menu Déployer le service Web Classic en surbrillance dans le bouton de menu Déployer le service web.

    Votre navigateur peut vous inviter à autoriser une fenêtre contextuelle, ce que vous devez autoriser, mais vous devrez peut-être 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 tableau de bord dans laquelle votre clé API s’affiche . 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é.

    Capture d’écran de la fenêtre Microsoft Azure Machine Learning Studio, qui montre la touche A P I et le lien Réponse de la barre oblique de requête en surbrillance.

    Notes

    Si vous cliquez sur Tester dans cette page, vous pourrez entrer des données d’entrée et afficher la sortie. Entrez le jour 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 choisi.

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

    Capture d’écran de la page De documentation de la réponse à la demande A P I, qui montre la demande U R I en surbrillance.

Vous avez maintenant créé un système d’apprentissage automatique qui fournit le produit le plus probable à vendre en fonction des données historiques d’achat, corrélées avec l’heure du jour et le 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é 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 requête-réponse . Vous en aurez besoin dans le chapitre suivant.

Chapitre 5 - Configuration du projet 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 d’aide pour configurer le casque immersif, cliquez ICI.

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

  2. Avec Unity ouvert, il est utile de vérifier que l’Éditeur de script par défaut est défini sur Visual Studio. Accédez à Modifier les>préférences , puis, dans la nouvelle fenêtre, accédez à Outils externes. Remplacez Éditeur de script externe par Visual Studio 2017. Fermez la fenêtre Préférences.

  3. Ensuite, accédez à>Paramètres de génération de fichiers et basculez la plateforme sur plateforme Windows universelle, en cliquant sur le bouton Changer de plateforme.

  4. Assurez-vous également que :

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

      Pour le Microsoft HoloLens, définissez Appareil cible sur HoloLens.

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

    3. Le Kit de développement logiciel (SDK) est défini sur Dernier installé.

    4. La version de Visual Studio est définie sur Dernière installation.

    5. Générer et exécuter est défini sur Ordinateur local.

    6. Ne vous inquiétez pas de la configuration de Scènes pour l’instant, car celles-ci sont fournies ultérieurement.

    7. Les autres paramètres doivent être conservés par défaut pour l’instant.

      Capture d’écran de la boîte de dialogue Paramètres de build, qui montre que l’élément de menu plateforme Windows universelle est sélectionné.

  5. Dans la fenêtre Paramètres de build, cliquez sur le bouton Paramètres du lecteur. Le panneau associé s’ouvre 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 duruntime de script 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

        Capture d’écran de l’onglet Autres paramètres, qui montre les paramètres activés en fonction des étapes décrites.

    2. Sous l’onglet Paramètres de publication, sous Fonctionnalités, case activée :

      • InternetClient

        Capture d’écran de l’onglet Paramètres de publication, qui montre que la fonctionnalité client Internet est activée sous Fonctionnalités.

    3. Plus loin dans le panneau, dans Paramètres XR (situé sous Paramètres de publication), cochez Réalité virtuelle prise en charge, vérifiez que le Windows Mixed Reality SDK est ajouté

      Capture d’écran de l’onglet Paramètres X R, qui montre l’Windows Mixed Reality SD K sous Virtual Reality SD K est activé.

  7. Retour dans Paramètres de buildUnity C# Projects n’est plus grisé ; cochez la case à côté de cette case.

  8. Fermez la fenêtre Build Settings.

  9. Enregistrez votre projet (FILE > SAVE PROJECT).

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, afin que vous puissiez vous concentrer sur le fonctionnement de tout cela. Le script ShelfKeeper est fourni, mais ne contient que les variables publiques, à des fins de structure de configuration de scène. Vous devrez 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 cliquez sur Importer le package, package personnalisé.

    Capture d’écran du tableau de bord Unity, qui montre les éléments de menu Importer le package et Package personnalisé en surbrillance.

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

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

    Capture d’écran de la boîte de dialogue Importer un package Unity, qui montre que le package Azure Machine Learning est en cours d’importation.

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

    Capture d’écran du panneau de projet Unity, qui montre les dossiers nouvellement importés dans le dossier Assets.

  5. Dans le dossier Panneau de projet , 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.

    Capture d’écran de la fenêtre Scène Unity, qui montre l’élément de menu Gizmos mis en surbrillance dans la navigation supérieure.

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, même si cela vaut la peine d’être vérifié (en particulier si vous rencontrez des problèmes avec le code qui ne fonctionne pas).

Pour cela, procédez de la façon suivante :

  • Cliquez avec le bouton gauche sur le fichier Newtonsoft à l’intérieur du 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é.

    Importation des DLL dans 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 d’effectuer 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 dispose d’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. De retour dans l’éditeur Unity, case activée que la classe ShelfKeeper ressemble à ce qui suit :

    Capture d’écran de la classe Shelf Keeper, qui montre que les cibles de référence sont définies sur Date Text Mesh et Time Text Mesh.

    Important

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

    1. Ouvrez le tableau Spawn Point dans le script du composant ShelfKeeper en cliquant dessus avec le bouton gauche. Une sous-section appelée Size s’affiche, qui indique la taille du tableau. Tapez 3 dans la zone de texte en regard de Taille , puis appuyez sur Entrée. Trois emplacements seront créés en dessous.

    2. Dans la hiérarchie , développez l’objet Affichage de l’heure (en cliquant sur la flèche à côté de celui-ci). Cliquez ensuite sur la caméra principale à partir de la hiérarchie pour que l’inspecteur affiche ses informations.

    3. Sélectionnez l’appareil photo principal dans le panneau hiérarchie. Faites glisser les objets Date et Heure du panneau Hiérarchie vers les emplacements Texte de date et Texte d’heure dans l’inspecteur de l’appareil photo principal dans le composant ShelfKeeper.

    4. Faites glisser les points d’apparition du panneau hierarchy (sous l’objet Shelf ) vers les cibles de référence à 3éléments sous le tableau Spawn Point , comme illustré dans l’image.

      Capture d’écran du panneau Hiérarchie, montrant que les éléments de menu Date, Heure et Point d’apparition se trouvent dans la classe Shelf Keeper.

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 du service Machine Learning instance, 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 panneau Projet.

  2. Cliquez avec le bouton droit dans le dossier Créer un>script C#. 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 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 json associé se trouve en bas du script, en dessous de tout le code et en dehors de la route) :

        /// <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 demande-réponse, à partir du portail Machine Learning, dans les variables ici. Les images ci-dessous montrent d’où vous auriez pris la clé et le point de terminaison.

    Capture d’écran de l’Microsoft Azure Machine Learning Studio, qui montre le lien Réponse de la barre oblique de requête sous la page d’aide d’UNE IP.

    Capture d’écran de la page Documentation A IP de la réponse à la demande, qui montre l’URL de demande POST mise en surbrillance.

  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 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 recevra 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évus pour se 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 du dossier Script vers l’objet Main Camera .

  15. Enregistrez votre scène et votre projet Fichier>Enregistrer la scène/Fichier>Enregistrer le projet.

Chapitre 10 - Générer la solution UWP

Il est maintenant temps de générer 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 surScènes d’enregistrement de fichier>.

  2. Accédez àParamètres de build defichier>

  3. Cochez la case intitulée Unity C# Projects (ceci est important, car elle vous permettra de modifier les classes une fois la génération terminée).

  4. Cliquez sur Ajouter des scènes ouvertes,

  5. Cliquez sur Générer.

    Capture d’écran de la boîte de dialogue Paramètres de build, qui montre l’élément de menu plateforme Windows universelle est mis en surbrillance.

  6. Vous serez 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 le nom approprié de votre choix.

  8. Cliquez sur votre nouveau dossier, puis sur Sélectionner un dossier pour commencer la génération à cet emplacement.

    Capture d’écran de la fenêtre Explorateur de fichiers, qui montre le dossier Builds en surbrillance.

    Capture d’écran de la fenêtre Explorateur de fichiers, qui montre le contenu du dossier Builds et le bouton Sélectionner un dossier en surbrillance.

  9. Une fois la génération terminée (cela peut prendre un certain temps), Unity ouvre une fenêtre Explorateur de fichiers à l’emplacement de votre build (case activée votre barre des tâches, car elle n’apparaît peut-être pas toujours au-dessus de vos fenêtres, mais vous informe 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 (le dossier App ) et ouvrez le fichier solution avec Visual Studio.

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

    Capture d’écran de la fenêtre Visual Studio, qui montre l’élément de menu Restaurer les packages Nu Get mis en surbrillance.

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

  4. Dans Plateforme de solution, sélectionnez x86, Ordinateur local.

    Pour le Microsoft HoloLens, il peut être plus facile de définir cette option sur Ordinateur distant, afin de ne pas être attaché à votre ordinateur. Toutefois, vous devez également effectuer les opérations suivantes :

    • Connaissez l’adresse IP de votre HoloLens, qui se trouve dans les paramètres > réseau & Internet > Wi-Fi > options avancées ; IPv4 est l’adresse que vous devez utiliser.
    • Vérifiez que le mode développeur est activé ; disponible dans Paramètres > Mise à jour & Sécurité > pour les développeurs.

    Capture d’écran du menu Microsoft Visual Studio, montrant que l’option Ordinateur local est sélectionnée dans la plateforme de solution.

  5. Accédez au menu Générer et cliquez sur Déployer la solution pour charger une version test de l’application sur votre PC.

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

Lorsque vous exécutez l’application Mixed Reality, vous voyez le banc qui a été configuré dans votre scène Unity, et à partir de l’initialisation, les données que vous avez configurées dans Azure sont extraites. 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, sous la forme de 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 d’Azure Machine Learning pour effectuer des prédictions de données et les afficher sur votre scène.

Capture d’écran de la fenêtre Microsoft Visual Studio, qui montre une étagère avec trois objets et un carte avec le texte 15 h 23 février.

Exercice

Exercice 1

Testez l’ordre de tri de votre application et faites apparaître les trois prédictions inférieures sur le plateau, car ces données seraient potentiellement utiles également.

Exercice 2

À l’aide de Tables Azure, remplissez une nouvelle table avec des informations météorologiques et créez une expérience à l’aide des données.