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.
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 :
- 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.
- Créez un projet Unity, qui peut recevoir et interpréter les données de prédiction du service ML.
- 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 :
- Un PC de développement, compatible avec Windows Mixed Reality pour le développement de casque immersif (VR)
- Windows 10 Fall Creators Update (ou version ultérieure) avec le mode développeur activé
- Le sdk Windows 10 le plus récent
- Unity 2017.4
- Visual Studio 2017
- Un casque immersif Windows Mixed Reality (VR) ou Microsoft HoloLens avec le mode développeur activé
- Accès Internet pour la configuration d’Azure et la récupération des données ML
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.
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.
Une fois connecté, cliquez sur Comptes de stockage dans le menu de gauche.
Remarque
Le mot Nouveau peut avoir été remplacé par Créer une ressource, dans des portails plus récents.
Sous l’onglet Comptes de stockage, cliquez sur Ajouter.
Dans le panneau Créer un compte de stockage :
Insérez un nom pour votre compte, n’oubliez pas que ce champ accepte uniquement les chiffres et les lettres minuscules.
Pour le modèle de déploiement, sélectionnez Resource Manager.
Pour le type de compte, sélectionnez Stockage (usage général v1).
Pour Performances, sélectionnez Standard.
Pour la réplication, sélectionnez Stockage géoredondant avec accès en lecture (RA-GRS).
Laissez le transfert sécurisé requis comme désactivé.
Sélectionnez un Abonnement.
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.
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 devrez également confirmer que vous avez compris les conditions générales appliquées à ce service.
Une fois que vous avez cliqué sur Créer, vous devrez attendre que le service soit créé, cela peut prendre une minute.
Une notification s’affiche dans le portail une fois l’instance de service créée.
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.
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.
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.
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 :
Insérez le nom de votre espace de travail souhaité pour cette instance de service.
Sélectionnez un Abonnement.
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.
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.
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.
Sélectionnez le niveau tarifaire d’espace de travail approprié pour vous, dans le menu déroulant.
Dans la section Plan de service web, cliquez sur Créer, puis insérez un nom pour celui-ci dans le champ de texte.
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.
Vous devrez également confirmer que vous avez compris les conditions générales appliquées à ce service.
Cliquez sur Créer.
Une fois que vous avez cliqué sur Créer, vous devrez attendre que le service soit créé, cela peut prendre une minute.
Une notification s’affiche dans le portail une fois l’instance de service créée.
Cliquez sur la notification pour explorer votre nouvelle instance de service.
Cliquez sur le bouton Accéder à la ressource dans la notification pour explorer votre nouvelle instance de service.
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 .
Utilisez le bouton Se connecter, en haut à droite ou dans le centre, pour vous connecter à votre Machine Learning Studio (classique).
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.
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.
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.
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.
Chargez le nouveau jeu de données en procédant comme suit :
La fenêtre de chargement s’affiche, où vous pouvez parcourir votre disque dur pour le nouveau jeu de données.
Une fois sélectionné et de nouveau dans la fenêtre de chargement, laissez la case à cocher désactivée.
Dans le champ de texte ci-dessous, entrez ProductsTableCSV.csv comme nom du jeu de données (mais doit être ajouté automatiquement).
À l’aide du menu déroulant Type, sélectionnez Fichier CSV générique avec un en-tête (.csv).
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 :
Cliquez de nouveau sur le bouton + Nouveau en bas à gauche de la page, puis cliquez sur Expérience>vide.
Une nouvelle page s’affiche avec une expérience vide :
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.
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é.
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.
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.
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.
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.
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.
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.
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
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.
Connectez la sortie, en bas de la régression logistique multiclasse, à l’entrée supérieure gauche de l’élément Train Model .
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.
Connectez la sortie, du bas du modèle d’apprentissage, à l’entrée supérieure gauche du modèle de score.
Connectez la sortie inférieure droite de Split Data à l’entrée supérieure droite de l’élément Score Model .
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.
Connectez la sortie du modèle de score à l’entrée supérieure gauche du modèle d’évaluation.
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.
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.
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.
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.
Fermez les résultats.
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.
Un nouvel onglet sera créé et le modèle d’apprentissage fusionné pour créer le nouveau service web.
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.
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.
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.
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é.
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.
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.
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.
Ouvrez Unity et créez un projet Unity appelé MR_MachineLearning. Vérifiez que le type de projet est défini sur 3D.
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.
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.
Vérifiez également que :
L’appareil cible est défini sur n’importe quel appareil.
Pour Microsoft HoloLens, définissez l’appareil cible sur HoloLens.
Le type de build est défini sur D3D.
Le Kit de développement logiciel (SDK) est défini sur Latest installé.
La version de Visual Studio est définie sur La dernière version installée.
La génération et l’exécution sont définies sur Ordinateur local.
Ne vous inquiétez pas de la configuration des scènes pour l’instant, car celles-ci sont fournies ultérieurement.
Les paramètres restants doivent être laissés comme valeur par défaut pour l’instant.
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.
Dans ce panneau, quelques paramètres doivent être vérifiés :
Sous l’onglet Autres paramètres :
La version du runtime de script doit être expérimentale (équivalent .NET 4.6)
Le serveur principal de script doit être .NET
Le niveau de compatibilité des API doit être .NET 4.6
Sous l’onglet Paramètres de publication, sous Fonctionnalités, vérifiez :
InternetClient
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é
De retour dans les projets Unity C# des paramètres de build n’est plus grisé ; cochez la case en regard de cela.
Fermez la fenêtre Build Settings.
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 :
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é.
Utilisez le sélecteur de fichiers pour sélectionner le package Azure-MR-307.unitypackage , puis cliquez sur Ouvrir.
Une liste de composants pour cette ressource s’affiche à vous. Confirmez l’importation en cliquant sur Importer.
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.
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.
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é.
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 :
Double-cliquez sur le script ShelfKeeper, dans le dossier Scripts, pour l’ouvrir avec Visual Studio 2017.
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); } }
Veillez à enregistrer vos modifications dans Visual Studio avant de revenir à Unity.
Dans l’éditeur Unity, vérifiez que la classe ShelfKeeper ressemble à ce qui suit :
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 :
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.
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.
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.
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.
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 :
Accédez au dossier Scripts , dans le volet projet.
Cliquez avec le bouton droit dans le dossier, créez>un script C#. Appelez le script ProductPrediction.
Double-cliquez sur le nouveau script ProductPrediction pour l’ouvrir avec Visual Studio 2017.
Si la boîte de dialogue Modification de fichier détectée s’affiche, cliquez sur *Recharger la solution.
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;
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; } }
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.
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)); }
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(); }
Vous pouvez supprimer la méthode Update(), car cette classe ne l’utilisera pas.
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); } }
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(); }
Enregistrez Visual Studio et revenez à Unity.
Faites glisser le script de classe ProductPrediction du dossier Script vers l’objet Main Camera .
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 :
Enregistrez la scène active en cliquant sur Fichier>Enregistrer les scènes.
Accéder aux paramètres de génération de fichiers>
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).
Cliquez sur Ajouter des scènes ouvertes,
Cliquez sur Générer.
Vous serez invité à sélectionner le dossier dans lequel vous souhaitez générer la solution.
Créez un dossier BUILDS et, dans ce dossier, créez un autre dossier avec un nom approprié de votre choix.
Cliquez sur votre nouveau dossier, puis cliquez sur Sélectionner un dossier pour commencer la génération à cet emplacement.
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 :
Accédez à votre nouvelle build Unity (dossier d’application ) et ouvrez le fichier solution avec Visual Studio.
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 :
Dans la configuration de la solution, sélectionnez Déboguer.
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.
Accédez au menu Générer, puis cliquez sur Déployer la solution pour charger l’application sur votre PC.
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.
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.