Partager via


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


Remarque

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.


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 de Machine Learning, qui peuvent vous aider à entrer des données, générer, préparer et visualiser. À 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 des données de ventes au portail Azure Machine Learning Studio (classique) et concevez un algorithme pour prédire les ventes futures d’éléments populaires.
  2. Créez un projet 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 projet Unity, en fournissant les articles de vente les plus populaires, sur une étagère.

Dans votre application, il vous incombe d’intégrer les résultats à votre conception. Ce cours est conçu pour vous apprendre à intégrer un service Azure à votre projet Unity. Il s’agit de 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 laboratoires de réalité mixte.

Prise en charge des appareils

Cours HoloLens Casques immersifs
MR et Azure 307 : Machine Learning ✔️ ✔️

Remarque

Bien que ce cours se concentre principalement sur les casques immersifs Windows Mixed Reality (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 remarquerez peut-être un écho pendant la capture vocale.

Prérequis

Remarque

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 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 quasi-racine (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 Translator, vous devez configurer une instance du service à rendre disponible pour votre application.

  1. Connectez-vous au portail Azure.

    Remarque

    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 proctoreurs de vous aider à 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.

    Remarque

    Le mot Nouveau peut avoir été remplacé par Créer une ressource, dans des 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 mis en surbrillance.

  4. Dans le panneau Créer un compte de 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, de contrôler l’accès, de provisionner et de 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 laboratoires) 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.

    Capture d’écran de la boîte de dialogue Créer un compte de stockage, qui affiche 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éé, cela peut prendre une minute.

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

    Capture d’écran de la notification De déploiement réussie, 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 à rendre disponible pour votre application.

  1. Dans le portail Azure, cliquez sur Nouveau dans le coin supérieur gauche, puis recherchez l’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 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, de contrôler l’accès, de provisionner et de 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 laboratoires) 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 la Stockage Azure dans le chapitre précédent.

    5. Pour la section Compte de stockage, cliquez sur Utiliser existant, puis cliquez sur le menu déroulant, puis, à partir de là, sur le compte de 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 Créer, 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.

      Capture d’écran de la boîte de dialogue Azure Machine Learning Studio, qui affiche 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éé, cela peut prendre une minute.

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

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

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

    Capture d’écran de la notification De déploiement réussie, 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 mis en surbrillance dans le volet de contenu.

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

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

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

L’une des façons dont fonctionnent les algorithmes Machine Learning 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 les données les plus existantes que vous disposez, 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.

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

Par exemple, le 1er 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 ce tableau en tant que jeu de données pour votre MACHINE Learning Studio. 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 mis en surbrillance dans le menu.

  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.

    Capture d’écran de la boîte de dialogue Nouveau, qui montre les éléments de menu Jeu de données et Fichier local mis 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 affiche le bouton Parcourir pour que l’utilisateur recherche et sélectionne les données à charger.

    2. Une fois sélectionné 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 (mais doit être ajouté automatiquement).

    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 coche 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 de 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 l’élément de menu Expérience 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 et faites glisser ProductsTableCSV sur le canevas> d’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 produits C S V dans le canevas d’expérience.

  4. Dans le panneau de gauche, développez l’exemple de transformation>de données et le fractionnement. Faites ensuite glisser l’élément Fractionner les données vers le canevas d’expérience. L’élément Fractionner les données fractionnera le jeu de données en deux parties. Une partie que vous utiliserez 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 Échantillon et Fractionner les données dans le menu avec fractionnement des données appliquées au canevas.

  5. Dans le panneau droit (tandis 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 fractionne les données en deux parties, la première partie sera de 70 % des données, et la deuxième partie sera la 30 % restante. Pour vous assurer que les données sont fractionnées de manière aléatoire, assurez-vous 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 de 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 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.

    Capture d’écran du canevas d’expérience, qui montre une connexion dessinée entre la table products C S V point c s v et split data.

  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 De l’expérience. Votre canevas doit ressembler à celui ci-dessous.

    Capture d’écran du canevas d’expérience, qui montre une connexion dessinée entre la table products C S V point c s v et split data, 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 Train Model. 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 dessinée entre la table produits C S V point c s v, fractionnement des données et le modèle d’apprentissage.

  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 lancer.

  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. Cliquez ensuite sur la graduation 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 seule colonne, 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 pour expliquer les détails des différents algorithmes fournis par Azure Machine Learning Studio, cependant, vous pouvez en savoir plus à partir de la aide-mémoire de l’algorithme Machine Learning

  12. Dans le panneau éléments de l’expérience situé à gauche, développez Machine Learning>Initialize Model>Classification et faites glisser l’élément De 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 supérieure gauche de l’élément Train Model .

    Capture d’écran du canevas d’expérience, qui montre Entraîner le modèle connecté à la régression logistique multiclasse et aux données fractionnées.

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

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

  16. Connectez la sortie inférieure droite de Split Data à l’entrée supérieure droite de l’élément Score Model .

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

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

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

    Capture d’écran du canevas d’expérience, qui montre le modèle Évaluer connecté au modèle de score.

  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 cliquez sur Exécuter pour démarrer l’expérience.

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

  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 peut prendre des heures pour s’exécuter.

    Capture d’écran de la fenêtre Canevas d’expérience, qui montre l’état 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 d’évaluation, puis sélectionnez Visualiser.

    Capture d’écran du menu Contextuel de l’élément Évaluer le modèle, qui affiche les résultats d’évaluation mis en surbrillance et les éléments de menu Visualiser.

  22. Les résultats de l’évaluation s’affichent en affichant 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é divisé 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.

    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 mis 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 l’état 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 Exécuter le 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 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.

    Capture d’écran du menu Expérience, qui montre l’élément de menu Deploy Web Service Classic mis en surbrillance à partir du bouton Déployer un service web.

    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 que l’expérience a été créée, vous êtes redirigé vers une page de tableau de bord où 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 REQUÊTE/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 à la barre oblique de requête en surbrillance.

    Remarque

    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 le choix.

  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 documentation de la réponse de demande A P I, qui montre la demande U R I mise 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 d’achat historiques, en corrélation 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é API pour le service. Cliquez sur l’onglet Consommer , dans le menu supérieur.

La page Informations de 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 du projet Unity

Configurez et testez votre casque immersif de réalité mixte.

Remarque

Vous n’aurez pas besoin des 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 projet 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 à Modifier>les préférences, puis à partir de la nouvelle fenêtre, accédez à Outils externes. Remplacez l’é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 vers plateforme Windows universelle, en cliquant sur le bouton Basculer la plateforme.

  4. Vérifiez également que :

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

      Pour Microsoft HoloLens, définissez l’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 Latest installé.

    4. La version de Visual Studio 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 pour l’instant, car celles-ci sont fournies ultérieurement.

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

      Capture d’écran de la boîte de dialogue Paramètres de génération, qui montre 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, 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 du runtime de script doit être expérimentale (équivalent .NET 4.6)

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

      3. Le niveau de compatibilité des 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, vérifiez :

      • 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 les paramètres XR (trouvés ci-dessous Paramètres de publication), cochez Virtual Reality Pris en charge, vérifiez que le Kit de développement logiciel (SDK ) Windows Mixed Reality est ajouté

      Capture d’écran de l’onglet Paramètres X R, qui montre que windows Mixed Reality S D K sous Virtual Reality S D K s’est activé.

  7. De retour dans les projets Unity C# des paramètres de build n’est plus grisé ; cochez la case en regard de cela.

  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 l’obtention de tout le travail. Le script ShelfKeeper est fourni, même s’il contient uniquement 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 sur Importer un package personnalisé.

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

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

  3. Une liste de composants pour cette ressource s’affiche à vous. 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 importé.

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

    Capture d’écran du panneau 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 apporté. La bibliothèque doit avoir la configuration correcte, même si 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é.

    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 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 a 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 :

    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 à partir du panneau Hiérarchie, dans les champs cibles. Consultez ci-dessous pour obtenir une explication, si nécessaire :

    1. Ouvrez le tableau De point de génération dans le script du composant ShelfKeeper en cliquant dessus avec la 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 à côté de celle-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 Heure dans l’Inspecteur de la caméra principale dans le composant ShelfKeeper.

    4. Faites glisser les points de génération à partir du panneau Hierarchy (sous l’objet Shelf) vers les cibles de référence d’élément 3 sous le tableau De point de génération, comme indiqué dans l’image.

      Capture d’écran du panneau Hiérarchie, qui montre que les éléments de menu Date, Heure et Trois éléments de menu Spawn Point 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 points suivants :

  • Interrogation de l’instance de Machine Learning Service , 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 projet.

  2. Cliquez avec le bouton droit dans le dossier, créez>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 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 du 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 lié AU 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 demande-réponse, à partir du portail Machine Learning, dans les variables ici. Les images ci-dessous indiquent l’emplacement à partir duquel vous avez pris la clé et le point de terminaison.

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

    Capture d’écran de la page documentation de la réponse de requête A P I, qui montre la requête POST en surbrillance U R I.

  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 recevrez 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 du dossier Script vers l’objet Main Camera .

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

Chapitre 10 - Générer 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 active en cliquant sur Fichier>Enregistrer les scènes.

  2. Accéder aux paramètres de génération de fichiers>

  3. Cochez la case intitulée Projets C# Unity (c’est important, car cela 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 montrant 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 un nom approprié de votre choix.

  8. Cliquez sur votre nouveau dossier, puis cliquez 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 mis en surbrillance.

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

  9. Une fois que Unity a terminé la génération (cela peut prendre un certain temps), il ouvre une fenêtre de Explorateur de fichiers à l’emplacement de votre build (vérifiez votre barre des 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 solution avec Visual Studio.

  2. Avec Visual Studio ouvert, vous devez restaurer des packages NuGet, qui peuvent être effectués 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 :

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

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

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

    Pour Microsoft HoloLens, vous trouverez peut-être plus facile de définir ce paramètre sur l’ordinateur distant afin que vous ne soyez pas attaché à votre ordinateur. Toutefois, vous devez également effectuer les opérations suivantes :

    • Connaissez l’adresse IP de votre HoloLens, qui se trouve dans les > options avancées paramètres réseau et Wi-Fi > Internet > ; L’adresse IPv4 est l’adresse que vous devez utiliser.
    • Vérifiez que le mode développeur est activé ; trouvé dans La mise à jour des paramètres > et la sécurité > pour les développeurs.

    Capture d’écran du menu Microsoft Visual Studio, qui montre que l’ordinateur local est sélectionné dans la plateforme de solutions.

  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êtes à être lancées.

Lorsque vous exécutez l’application Mixed Reality, vous verrez 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 seront 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 l’afficher sur votre scène.

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

Exercice

Exercice 1

Expérimentez avec 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’utilisation des tables Azure remplit une nouvelle table avec des informations météorologiques et crée une expérience à l’aide des données.