Réalité mixte - Azure - Cours 302 : Vision par ordinateurMR and Azure 302: Computer vision


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.The Mixed Reality Academy tutorials were designed with HoloLens (1st gen) and Mixed Reality Immersive Headsets in mind. 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.As such, we feel it is important to leave these tutorials in place for developers who are still looking for guidance in developing for those devices. Notez que ces tutoriels ne sont pas mis à jour avec les derniers ensembles d’outils ou interactions utilisés pour HoloLens 2.These tutorials will not be updated with the latest toolsets or interactions being used for HoloLens 2. Ils sont fournis dans le but de fonctionner sur les appareils pris en charge.They will be maintained to continue working on the supported devices. Une nouvelle série de didacticiels sera publiée à l’avenir qui vous montrera comment développer pour HoloLens 2.There will be a new series of tutorials that will be posted in the future that will demonstrate how to develop for HoloLens 2. Cet avis sera mis à jour avec un lien vers ces didacticiels lors de leur publication.This notice will be updated with a link to those tutorials when they are posted.


Dans ce cours, vous allez apprendre à reconnaître du contenu visuel dans une image fournie, à l’aide des fonctionnalités d’Azure Vision par ordinateur dans une application de réalité mixte.In this course, you will learn how to recognize visual content within a provided image, using Azure Computer Vision capabilities in a mixed reality application.

Les résultats de la reconnaissance s’affichent sous forme de balises descriptives.Recognition results will be displayed as descriptive tags. Vous pouvez utiliser ce service sans avoir à former un modèle de Machine Learning.You can use this service without needing to train a machine learning model. Si votre implémentation nécessite l’apprentissage d’un modèle de Machine Learning, consultez Mr et Azure 302b.If your implementation requires training a machine learning model, see MR and Azure 302b.

résultat de l’atelier

Le Vision par ordinateur Microsoft est un ensemble d’API conçu pour fournir aux développeurs un traitement et une analyse d’image (avec des informations de retour), à l’aide d’algorithmes avancés, le tout à partir du Cloud.The Microsoft Computer Vision is a set of APIs designed to provide developers with image processing and analysis (with return information), using advanced algorithms, all from the cloud. Les développeurs téléchargent une image ou une URL d’image, et les algorithmes de API Vision par ordinateur Microsoft analysent le contenu visuel, en fonction des entrées choisies par l’utilisateur, qui peuvent ensuite retourner des informations, notamment, identifier le type et la qualité d’une image, détecter les visages humains (en retournant leurs coordonnées) et marquer ou catégoriser les images.Developers upload an image or image URL, and the Microsoft Computer Vision API algorithms analyze the visual content, based upon inputs chosen the user, which then can return information, including, identifying the type and quality of an image, detect human faces (returning their coordinates), and tagging, or categorizing images. Pour plus d’informations, consultez la page API vision par ordinateur Azure.For more information, visit the Azure Computer Vision API page.

Une fois ce cours terminé, vous disposerez d’une application HoloLens de réalité mixte, qui sera en mesure d’effectuer les opérations suivantes :Having completed this course, you will have a mixed reality HoloLens application, which will be able to do the following:

  1. À l’aide du mouvement TAP, l’appareil photo de HoloLens capture une image.Using the Tap gesture, the camera of the HoloLens will capture an image.
  2. L’image sera envoyée au service Azure API Vision par ordinateur.The image will be sent to the Azure Computer Vision API Service.
  3. Les objets reconnus seront listés dans un groupe d’interface utilisateur simple positionné dans la scène Unity.The objects recognized will be listed in a simple UI group positioned in the Unity Scene.

Dans votre application, c’est à vous de savoir comment vous allez intégrer les résultats à votre conception.In your application, it is up to you as to how you will integrate the results with your design. Ce cours est conçu pour vous apprendre à intégrer un service Azure à votre projet Unity.This course is designed to teach you how to integrate an Azure Service with your Unity project. C’est votre travail d’utiliser les connaissances que vous avez acquises dans ce cours pour améliorer votre application de réalité mixte.It is your job to use the knowledge you gain from this course to enhance your mixed reality application.

Prise en charge des appareilsDevice support

CoursCourse HoloLensHoloLens Casques immersifsImmersive headsets
Réalité mixte - Azure - Cours 302 : Vision par ordinateurMR and Azure 302: Computer vision ✔️✔️ ✔️✔️

Notes

Bien que ce cours se concentre principalement sur HoloLens, vous pouvez également appliquer ce que vous allez apprendre dans ce cours à des casques pour Windows Mixed Reality (VR).While this course primarily focuses on HoloLens, you can also apply what you learn in this course to Windows Mixed Reality immersive (VR) headsets. Étant donné que les casques immersifs ne disposent pas de caméras accessibles, vous aurez besoin d’une caméra externe connectée à votre PC.Because immersive (VR) headsets do not have accessible cameras, you will need an external camera connected to your PC. À mesure que vous suivez le cours, vous verrez des remarques sur les modifications que vous devrez peut-être utiliser pour prendre en charge les écouteurs immersifs (VR).As you follow along with the course, you will see notes on any changes you might need to employ to support immersive (VR) headsets.

PrérequisPrerequisites

Notes

Ce didacticiel est conçu pour les développeurs qui ont une expérience de base avec Unity et C#.This tutorial is designed for developers who have basic experience with Unity and C#. Sachez également que les conditions préalables et les instructions écrites dans ce document représentent les éléments qui ont été testés et vérifiés au moment de l’écriture (mai 2018).Please also be aware that the prerequisites and written instructions within this document represent what has been tested and verified at the time of writing (May 2018). Vous êtes libre d’utiliser le logiciel le plus récent, tel qu’indiqué dans l’article installer les 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.You are free to use the latest software, as listed within the install the tools article, though it should not be assumed that the information in this course will perfectly match what you'll find in newer software than what's listed below.

Nous vous recommandons d’utiliser le matériel et les logiciels suivants pour ce cours :We recommend the following hardware and software for this course:

Avant de commencerBefore you start

  1. 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 dans un dossier racine (les chemins de dossiers longs peuvent entraîner des problèmes au moment de la génération).To avoid encountering issues building this project, it is strongly suggested that you create the project mentioned in this tutorial in a root or near-root folder (long folder paths can cause issues at build-time).
  2. Configurez et testez votre HoloLens.Set up and test your HoloLens. Si vous avez besoin de la prise en charge de la configuration de votre HoloLens, consultez l’article Configuration de hololens.If you need support setting up your HoloLens, make sure to visit the HoloLens setup article.
  3. Il est judicieux d’effectuer un réglage de l’étalonnage et du capteur au début du développement d’une nouvelle application HoloLens (parfois, il peut être utile d’effectuer ces tâches pour chaque utilisateur).It is a good idea to perform Calibration and Sensor Tuning when beginning developing a new HoloLens App (sometimes it can help to perform those tasks for each user).

Pour obtenir de l’aide sur l’étalonnage, veuillez suivre ce lien vers l’article d’étalonnage HoloLens.For help on Calibration, please follow this link to the HoloLens Calibration article.

Pour obtenir de l’aide sur le réglage du capteur, veuillez suivre ce lien vers l’article sur le paramétrage du capteur HoloLens.For help on Sensor Tuning, please follow this link to the HoloLens Sensor Tuning article.

Chapitre 1 – portail AzureChapter 1 – The Azure Portal

Pour utiliser le service de API vision par ordinateur dans Azure, vous devez configurer une instance du service qui sera mise à la disposition de votre application.To use the Computer Vision API service in Azure, you will need to configure an instance of the service to be made available to your application.

  1. Tout d’abord, connectez-vous au portail Azure.First, log in to the Azure Portal.

    Notes

    Si vous n’avez pas encore de compte Azure, vous devez en créer un.If you do not already have an Azure account, you will need to create one. Si vous suivez ce didacticiel dans une situation de classe ou de laboratoire, demandez à votre formateur ou à l’un des prostructors de vous aider à configurer votre nouveau compte.If you are following this tutorial in a classroom or lab situation, ask your instructor or one of the proctors for help setting up your new account.

  2. Une fois que vous êtes connecté, cliquez sur nouveau dans l’angle supérieur gauche, recherchez API vision par ordinateur, puis cliquez sur entrée.Once you are logged in, click on New in the top left corner, and search for Computer Vision API, and click Enter.

    Créer une ressource dans Azure

    Notes

    Le mot nouveau peut avoir été remplacé par créer une ressource, dans les portails plus récents.The word New may have been replaced with Create a resource, in newer portals.

  3. La nouvelle page fournit une description du service API vision par ordinateur .The new page will provide a description of the Computer Vision API service. En bas à gauche de cette page, cliquez sur le bouton créer pour créer une association avec ce service.At the bottom left of this page, select the Create button, to create an association with this service.

    À propos du service d’API vision par ordinateur

  4. Une fois que vous avez cliqué sur créer:Once you have clicked on Create:

    1. Insérez le nom de votre choix pour cette instance de service.Insert your desired Name for this service instance.

    2. Sélectionnez un Abonnement.Select a Subscription.

    3. Sélectionnez le niveau tarifaire approprié, s’il s’agit de la première fois que vous créez un service API vision par ordinateur , vous devez disposer d’un niveau gratuit (nommé F0).Select the Pricing Tier appropriate for you, if this is the first time creating a Computer Vision API Service, a free tier (named F0) should be available to you.

    4. Choisissez un groupe de ressources ou créez-en un.Choose a Resource Group or create a new one. Un groupe de ressources permet de surveiller, de contrôler l’accès, de configurer et de gérer la facturation d’un regroupement de ressources Azure.A resource group provides a way to monitor, control access, provision and manage billing for a collection of Azure assets. Il est recommandé de conserver tous les services Azure associés à un seul projet (par exemple, ces laboratoires) sous un groupe de ressources commun).It is recommended to keep all the Azure services associated with a single project (e.g. such as these labs) under a common resource group).

      Si vous souhaitez en savoir plus sur les groupes de ressources Azure, consultez l’article du groupe de ressources.If you wish to read more about Azure Resource Groups, please visit the resource group article.

    5. Déterminez l’emplacement de votre groupe de ressources (si vous créez un groupe de ressources).Determine the Location for your resource group (if you are creating a new Resource Group). L’emplacement devrait idéalement se trouver dans la région où l’application s’exécutait.The location would ideally be in the region where the application would run. Certaines ressources Azure sont uniquement disponibles dans certaines régions.Some Azure assets are only available in certain regions.

    6. Vous devrez également confirmer que vous avez compris les conditions générales appliquées à ce service.You will also need to confirm that you have understood the Terms and Conditions applied to this Service.

    7. Cliquez sur Créer.Click Create.

      Informations sur la création du service

  5. Une fois que vous avez cliqué sur créer, vous devez attendre que le service soit créé, cette opération peut prendre une minute.Once you have clicked on Create, you will have to wait for the service to be created, this might take a minute.

  6. Une notification s’affichera dans le portail une fois l’instance de service créée.A notification will appear in the portal once the Service instance is created.

    Consultez la nouvelle notification pour votre nouveau service

  7. Cliquez sur la notification pour explorer votre nouvelle instance de service.Click on the notification to explore your new Service instance.

    Sélectionnez le bouton atteindre la ressource.

  8. Cliquez sur le bouton atteindre la ressource dans la notification pour explorer votre nouvelle instance de service.Click the Go to resource button in the notification to explore your new Service instance. Vous êtes dirigé vers votre nouvelle instance de service API Vision par ordinateur.You will be taken to your new Computer Vision API service instance.

    Votre nouvelle image de service API Vision par ordinateur

  9. Dans ce didacticiel, votre application doit effectuer des appels à votre service, à l’aide de la clé d’abonnement de votre service.Within this tutorial, your application will need to make calls to your service, which is done through using your service’s Subscription Key.

  10. Dans la page démarrage rapide de votre service API vision par ordinateur , accédez à la première étape, saisissez vos clés, puis cliquez sur clés (vous pouvez également y parvenir en cliquant sur les touches de lien bleu, situées dans le menu de navigation services, indiqué par l’icône de clé).From the Quick start page, of your Computer Vision API service, navigate to the first step, Grab your keys, and click Keys (you can also achieve this by clicking the blue hyperlink Keys, located in the services navigation menu, denoted by the key icon). Cela permet de révéler vos clés de service.This will reveal your service Keys.

  11. Prenez une copie de l’une des clés affichées, car vous en aurez besoin plus tard dans votre projet.Take a copy of one of the displayed keys, as you will need this later in your project.

  12. Revenez à la page de démarrage rapide et, à partir de là, récupérez votre point de terminaison.Go back to the Quick start page, and from there, fetch your endpoint. N’oubliez pas que la vôtre peut être différente, en fonction de votre région (si c’est le cas, vous devrez apporter une modification à votre code ultérieurement).Be aware yours may be different, depending on your region (which if it is, you will need to make a change to your code later). Prendre une copie de ce point de terminaison pour une utilisation ultérieure :Take a copy of this endpoint for use later:

    Votre nouveau service API Vision par ordinateur

    Conseil

    Vous pouvez vérifier les différents points de terminaison ici.You can check what the various endpoints are HERE.

Chapitre 2 : configurer le projet UnityChapter 2 – Set up the Unity project

Ce qui suit est une configuration classique pour le développement avec une réalité mixte, et, par conséquent, est un bon modèle pour d’autres projets.The following is a typical set up for developing with mixed reality, and as such, is a good template for other projects.

  1. Ouvrez Unity et cliquez sur nouveau.Open Unity and click New.

    Démarrez le nouveau projet Unity.

  2. Vous devez maintenant fournir un nom de projet Unity.You will now need to provide a Unity Project name. Insérez MR_ComputerVision.Insert MR_ComputerVision. Assurez-vous que le type de projet est défini sur 3D.Make sure the project type is set to 3D. Définissez l' emplacement approprié pour vous (n’oubliez pas que les répertoires racine sont mieux adaptés).Set the Location to somewhere appropriate for you (remember, closer to root directories is better). Ensuite, cliquez sur créer un projet.Then, click Create project.

    Fournissez des détails pour le nouveau projet Unity.

  3. Si Unity est ouvert, il est conseillé de vérifier que l' éditeur de script par défaut est défini sur Visual Studio.With Unity open, it is worth checking the default Script Editor is set to Visual Studio. Accédez à modifier > préférences puis, dans la nouvelle fenêtre, accédez à outils externes.Go to Edit > Preferences and then from the new window, navigate to External Tools. Remplacez l' éditeur de script externe par Visual Studio 2017.Change External Script Editor to Visual Studio 2017. Fermez la fenêtre Préférences .Close the Preferences window.

    Mettre à jour la préférence éditeur de script.

  4. Accédez ensuite à fichier > paramètres de build et sélectionnez plateforme Windows universelle, puis cliquez sur le bouton changer de plateforme pour appliquer votre sélection.Next, go to File > Build Settings and select Universal Windows Platform, then click on the Switch Platform button to apply your selection.

    Fenêtre Paramètres de build, basculez plateforme vers UWP.

  5. Tout en conservant les paramètres de génération de > de fichiers et assurez-vous que :While still in File > Build Settings and make sure that:

    1. L' appareil cible est défini sur HoloLensTarget Device is set to HoloLens

      Pour les casques immersifs, définissez appareil cible sur n’importe quel appareil.For the immersive headsets, set Target Device to Any Device.

    2. Le type de build est D3DBuild Type is set to D3D

    3. Le SDK est configuré sur le dernier installéSDK is set to Latest installed

    4. Version de Visual Studio définie sur le dernier installéVisual Studio Version is set to Latest installed

    5. La génération et l’exécution sont définies sur l' ordinateur localBuild and Run is set to Local Machine

    6. Enregistrez la scène et ajoutez-la à la Build.Save the scene and add it to the build.

      1. Pour ce faire, sélectionnez Ajouter des scènes ouvertes.Do this by selecting Add Open Scenes. Une fenêtre d’enregistrement s’affiche.A save window will appear.

        Cliquez sur le bouton Ajouter des scènes ouvertes

      2. Créez un dossier pour cela, ainsi que toute nouvelle scène, puis sélectionnez le bouton nouveau dossier pour créer un nouveau dossier, puis nommez-le scenes.Create a new folder for this, and any future, scene, then select the New folder button, to create a new folder, name it Scenes.

        Créer un dossier de scripts

      3. Ouvrez le dossier scenes nouvellement créé, puis dans le champ nom de fichier:, tapez MR_ComputerVisionScene, puis cliquez sur Enregistrer.Open your newly created Scenes folder, and then in the File name: text field, type MR_ComputerVisionScene, then click Save.

        Donnez un nom à la nouvelle scène.

        Sachez que vous devez enregistrer vos scènes Unity dans le dossier ressources , car elles doivent être associées au projet Unity.Be aware, you must save your Unity scenes within the Assets folder, as they must be associated with the Unity Project. La création du dossier scenes (et d’autres dossiers similaires) est un moyen classique de structurer un projet Unity.Creating the scenes folder (and other similar folders) is a typical way of structuring a Unity project.

    7. Les paramètres restants, dans paramètres de build, doivent être laissés par défaut pour le moment.The remaining settings, in Build Settings, should be left as default for now.

  6. Dans la fenêtre paramètres de build , cliquez sur le bouton Paramètres du lecteur pour ouvrir le panneau correspondant dans l’espace où se trouve l' inspecteur .In the Build Settings window, click on the Player Settings button, this will open the related panel in the space where the Inspector is located.

    Ouvrez les paramètres du lecteur.

  7. Dans ce volet, quelques paramètres doivent être vérifiés :In this panel, a few settings need to be verified:

    1. Sous l’onglet autres paramètres :In the Other Settings tab:

      1. La version du runtime de script doit être stable (équivalent .net 3,5).Scripting Runtime Version should be Stable (.NET 3.5 Equivalent).

      2. Le backend de script doit être .netScripting Backend should be .NET

      3. Le niveau de compatibilité de l’API doit être .net 4,6API Compatibility Level should be .NET 4.6

        Mettez à jour d’autres paramètres.

    2. Dans l’onglet paramètres de publication , sous fonctionnalités, activez la case à cocher :Within the Publishing Settings tab, under Capabilities, check:

      1. InternetClientInternetClient

      2. WebcamWebcam

        Mise à jour des paramètres de publication.

    3. Plus bas dans le volet, dans les paramètres XR (situés sous paramètres de publication), cochez la réalité virtuelle prise en charge, assurez-vous que le Kit de développement logiciel (SDK) Windows Mixed Reality est ajouté.Further down the panel, in XR Settings (found below Publish Settings), tick Virtual Reality Supported, make sure the Windows Mixed Reality SDK is added.

      Mettez à jour les paramètres X R.

  8. De retour dans les paramètres de build . les projets C# ne sont plus grisés. Cochez la case en regard de cette option.Back in Build Settings Unity C# Projects is no longer greyed out; tick the checkbox next to this.

  9. Fermez la fenêtre Build Settings.Close the Build Settings window.

  10. Enregistrez votre scène et votre projet (fichier > enregistrer la scène/le fichier > enregistrer le projet).Save your Scene and Project (FILE > SAVE SCENE / FILE > SAVE PROJECT).

Chapitre 3 – Configuration de l’appareil photo principalChapter 3 – Main Camera setup

Important

Si vous souhaitez ignorer le composant Unity Set up de ce cours et continuer directement dans le code, n’hésitez pas à télécharger ce fichier . pour Unity, à l’importer dans votre projet en tant que package personnalisé, puis à passer au Chapitre 5.If you wish to skip the Unity Set up component of this course, and continue straight into code, feel free to download this .unitypackage, import it into your project as a Custom Package, and then continue from Chapter 5.

  1. Dans le panneau hiérarchie, sélectionnez l' appareil photo principal.In the Hierarchy Panel, select the Main Camera.

  2. Une fois sélectionné, vous pouvez voir tous les composants de la caméra principale dans le panneau Inspecteur.Once selected, you will be able to see all the components of the Main Camera in the Inspector Panel.

    1. L' objet Camera doit être nommé Camera main (Notez l’orthographe !)The Camera object must be named Main Camera (note the spelling!)

    2. La balise principale de l’appareil photo doit être définie sur MainCamera (Notez l’orthographe !)The Main Camera Tag must be set to MainCamera (note the spelling!)

    3. Vérifiez que la position de la transformation est définie sur 0, 0, 0Make sure the Transform Position is set to 0, 0, 0

    4. Affectez à effacer les indicateurs la couleur unie (ignorer ce point pour le casque immersif).Set Clear Flags to Solid Color (ignore this for immersive headset).

    5. Définissez la couleur d' arrière-plan du composant Camera sur Black, alpha 0 (Code hex : #00000000) (ignorez-le pour le casque immersif).Set the Background Color of the Camera Component to Black, Alpha 0 (Hex Code: #00000000) (ignore this for immersive headset).

      Mettez à jour les composants de l’appareil photo.

  3. Ensuite, vous devez créer un objet « Cursor » simple attaché à l' appareil photo principal, ce qui vous aidera à positionner la sortie de l’analyse d’image lorsque l’application est en cours d’exécution.Next, you will have to create a simple “Cursor” object attached to the Main Camera, which will help you position the image analysis output when the application is running. Ce curseur détermine le point central du focus de l’appareil photo.This Cursor will determine the center point of the camera focus.

Pour créer le curseur :To create the Cursor:

  1. Dans le panneau hiérarchie, cliquez avec le bouton droit sur l' appareil photo principal.In the Hierarchy Panel, right-click on the Main Camera. Sous objet 3D, cliquez sur sphère.Under 3D Object, click on Sphere.

    Sélectionnez l’objet curseur.

  2. Renommez la sphère en curseur (double-cliquez sur l’objet curseur ou appuyez sur le bouton clavier F2 avec l’objet sélectionné) et vérifiez qu’il est situé en tant qu’enfant de l' appareil photo principal.Rename the Sphere to Cursor (double click the Cursor object or press the ‘F2’ keyboard button with the object selected), and make sure it is located as child of the Main Camera.

  3. Dans le volet de la hiérarchie, cliquez sur le curseur à gauche.In the Hierarchy Panel, left click on the Cursor. Après avoir sélectionné le curseur, ajustez les variables suivantes dans le panneau Inspecteur:With the Cursor selected, adjust the following variables in the Inspector Panel:

    1. Définir la position de la transformation sur 0, 0,5Set the Transform Position to 0, 0, 5

    2. Définir l' échelle sur 0,02, 0,02, 0,02Set the Scale to 0.02, 0.02, 0.02

      Mettez à jour la position et l’échelle de la transformation.

Chapitre 4-configurer le système d’étiquetteChapter 4 – Setup the Label system

Une fois que vous avez capturé une image à l’aide de la caméra HoloLens, cette image est envoyée à votre instance Azure API vision par ordinateur service à des fins d’analyse.Once you have captured an image with the HoloLens’ camera, that image will be sent to your Azure Computer Vision API Service instance for analysis.

Les résultats de cette analyse seront une liste d’objets reconnus appelés balises.The results of that analysis will be a list of recognized objects called Tags.

Vous allez utiliser des étiquettes (comme du texte 3D dans l’espace universel) pour afficher ces balises à l’emplacement où la photo a été prise.You will use Labels (as a 3D text in world space) to display these Tags at the location the photo was taken.

Les étapes suivantes montrent comment configurer l’objet label .The following steps will show how to setup the Label object.

  1. Cliquez avec le bouton droit n’importe où dans le volet de la hiérarchie (l’emplacement n’a pas d’importance à ce stade), sous objet 3D, ajoutez un texte 3D.Right-click anywhere in the Hierarchy Panel (the location does not matter at this point), under 3D Object, add a 3D Text. Nommez-le LabelText.Name it LabelText.

    Créez un objet de texte 3D.

  2. Dans le volet de la hiérarchie, cliquez sur le LabelText.In the Hierarchy Panel, left click on the LabelText. Une fois le LabelText sélectionné, ajustez les variables suivantes dans le panneau Inspecteur:With the LabelText selected, adjust the following variables in the Inspector Panel:

    1. Définir la position sur 0, 0, 0Set the Position to 0,0,0
    2. Définir l' échelle sur 0,01, 0,01, 0,01Set the Scale to 0.01, 0.01, 0.01
    3. Dans la maille du texte du composant :In the component Text Mesh:
    4. Remplacer tout le texte dans le texte par « ... »Replace all the text within Text, with "..."
    5. Définir le point d’ancrage au milieu centralSet the Anchor to Middle Center
    6. Définir l' alignement sur CenterSet the Alignment to Center
    7. Définir la taille des tabulations sur 4Set the Tab Size to 4
    8. Définir la taille de la police sur 50Set the Font Size to 50
    9. Définir la couleur sur #FFFFFFFFSet the Color to #FFFFFFFF

    Composant de texte

  3. Faites glisser le LabelText à partir du panneau de la hiérarchie, dans le dossier Asset, dans le panneau Projet.Drag the LabelText from the Hierarchy Panel, into the Asset Folder, within in the Project Panel. Cela rend le LabelText Prefab, afin qu’il puisse être instancié dans le code.This will make the LabelText a Prefab, so that it can be instantiated in code.

    Créez un Prefab de l’objet LabelText.

  4. Vous devez supprimer le LabelText du panneau de hiérarchie, afin qu’il ne s’affiche pas dans la scène d’ouverture.You should delete the LabelText from the Hierarchy Panel, so that it will not be displayed in the opening scene. Comme il s’agit maintenant d’un Prefab, que vous allez appeler pour des instances individuelles à partir de votre dossier de ressources, il n’est pas nécessaire de le conserver dans la scène.As it is now a prefab, which you will call on for individual instances from your Assets folder, there is no need to keep it within the scene.

  5. La dernière structure de l’objet dans le volet de la hiérarchie doit être similaire à celle illustrée dans l’image ci-dessous :The final object structure in the Hierarchy Panel should be like the one shown in the image below:

    Structure finale du panneau de la hiérarchie.

Chapitre 5 : créer la classe ResultsLabelChapter 5 – Create the ResultsLabel class

Le premier script que vous devez créer est la classe ResultsLabel , qui est chargée des opérations suivantes :The first script you need to create is the ResultsLabel class, which is responsible for the following:

  • Création des étiquettes dans l’espace universel approprié, par rapport à la position de l’appareil photo.Creating the Labels in the appropriate world space, relative to the position of the Camera.
  • Affichage des balises à partir de l’image analyse.Displaying the Tags from the Image Anaysis.

Pour créer cette classe :To create this class:

  1. Cliquez avec le bouton droit dans le panneau Projet, puis créez > dossier.Right-click in the Project Panel, then Create > Folder. Nommez le dossier scripts.Name the folder Scripts.

    Créer un dossier de scripts.

  2. Avec le dossier scripts créer, double-cliquez dessus pour l’ouvrir.With the Scripts folder create, double click it to open. Ensuite, dans ce dossier, cliquez avec le bouton droit, puis sélectionnez créer > script C#.Then within that folder, right-click, and select Create > then C# Script. Nommez le script ResultsLabel.Name the script ResultsLabel.

  3. Double-cliquez sur le nouveau script ResultsLabel pour l’ouvrir avec Visual Studio.Double click on the new ResultsLabel script to open it with Visual Studio.

  4. À l’intérieur de la classe, insérez le code suivant dans la classe ResultsLabel :Inside the Class insert the following code in the ResultsLabel class:

        using System.Collections.Generic;
        using UnityEngine;
    
        public class ResultsLabel : MonoBehaviour
        {   
            public static ResultsLabel instance;
    
            public GameObject cursor;
    
            public Transform labelPrefab;
    
            [HideInInspector]
            public Transform lastLabelPlaced;
    
            [HideInInspector]
            public TextMesh lastLabelPlacedText;
    
            private void Awake()
            {
                // allows this instance to behave like a singleton
                instance = this;
            }
    
            /// <summary>
            /// Instantiate a Label in the appropriate location relative to the Main Camera.
            /// </summary>
            public void CreateLabel()
            {
                lastLabelPlaced = Instantiate(labelPrefab, cursor.transform.position, transform.rotation);
    
                lastLabelPlacedText = lastLabelPlaced.GetComponent<TextMesh>();
    
                // Change the text of the label to show that has been placed
                // The final text will be set at a later stage
                lastLabelPlacedText.text = "Analysing...";
            }
    
            /// <summary>
            /// Set the Tags as Text of the last Label created. 
            /// </summary>
            public void SetTagsToLastLabel(Dictionary<string, float> tagsDictionary)
            {
                lastLabelPlacedText = lastLabelPlaced.GetComponent<TextMesh>();
    
                // At this point we go through all the tags received and set them as text of the label
                lastLabelPlacedText.text = "I see: \n";
    
                foreach (KeyValuePair<string, float> tag in tagsDictionary)
                {
                    lastLabelPlacedText.text += tag.Key + ", Confidence: " + tag.Value.ToString("0.00 \n");
                }    
            }
        }
    
  5. Veillez à enregistrer vos modifications dans Visual Studio avant de revenir à Unity.Be sure to save your changes in Visual Studio before returning to Unity.

  6. De retour dans l' éditeur Unity, cliquez et faites glisser la classe ResultsLabel du dossier scripts vers l’objet Camera principal dans le panneau hiérarchie.Back in the Unity Editor, click and drag the ResultsLabel class from the Scripts folder to the Main Camera object in the Hierarchy Panel.

  7. Cliquez sur l' appareil photo principal et observez le panneau de l' inspecteur.Click on the Main Camera and look at the Inspector Panel.

Vous remarquerez qu’à partir du script que vous venez de faire glisser dans l’appareil photo, il y a deux champs : Cursor et label Prefab.You will notice that from the script you just dragged into the Camera, there are two fields: Cursor and Label Prefab.

  1. Faites glisser l’objet appelé Cursor du volet de la hiérarchie vers l’emplacement nommé Cursor, comme indiqué dans l’image ci-dessous.Drag the object called Cursor from the Hierarchy Panel to the slot named Cursor, as shown in the image below.

  2. Faites glisser l’objet appelé LabelText du dossier composants du panneau projet vers l’emplacement nommé étiquette Prefab, comme indiqué dans l’image ci-dessous.Drag the object called LabelText from the Assets Folder in the Project Panel to the slot named Label Prefab, as shown in the image below.

    Définissez les cibles de référence dans Unity.

Chapitre 6 : créer la classe ImageCaptureChapter 6 – Create the ImageCapture class

La classe suivante que vous allez créer est la classe ImageCapture .The next class you are going to create is the ImageCapture class. Cette classe est chargée des opérations suivantes :This class is responsible for:

  • Capture d’une image à l’aide de la caméra HoloLens et stockage dans le dossier de l’application.Capturing an Image using the HoloLens Camera and storing it in the App Folder.
  • Capture des gestes TAP de l’utilisateur.Capturing Tap gestures from the user.

Pour créer cette classe :To create this class:

  1. Accédez au dossier scripts que vous avez créé précédemment.Go to the Scripts folder you created previously.

  2. Cliquez avec le bouton droit dans le dossier, créez > script C#.Right-click inside the folder, Create > C# Script. Appelez le script ImageCapture.Call the script ImageCapture.

  3. Double-cliquez sur le nouveau script ImageCapture pour l’ouvrir avec Visual Studio.Double click on the new ImageCapture script to open it with Visual Studio.

  4. Ajoutez les espaces de noms suivants au début du fichier :Add the following namespaces to the top of the file:

        using System.IO;
        using System.Linq;
        using UnityEngine;
        using UnityEngine.XR.WSA.Input;
        using UnityEngine.XR.WSA.WebCam;
    
  5. Ajoutez ensuite les variables suivantes à l’intérieur de la classe ImageCapture , au-dessus de la méthode Start () :Then add the following variables inside the ImageCapture class, above the Start() method:

        public static ImageCapture instance; 
        public int tapsCount;
        private PhotoCapture photoCaptureObject = null;
        private GestureRecognizer recognizer;
        private bool currentlyCapturing = false;
    

La variable tapsCount stocke le nombre de gestes TAP capturés par l’utilisateur.The tapsCount variable will store the number of tap gestures captured from the user. Ce nombre est utilisé pour nommer les images capturées.This number is used in the naming of the images captured.

  1. Vous devez maintenant ajouter le code des méthodes éveillés () et Start () .Code for Awake() and Start() methods now needs to be added. Ils sont appelés lorsque la classe est initialisée :These will be called when the class initializes:

        private void Awake()
        {
            // Allows this instance to behave like a singleton
            instance = this;
        }
    
        void Start()
        {
            // subscribing to the HoloLens API gesture recognizer to track user gestures
            recognizer = new GestureRecognizer();
            recognizer.SetRecognizableGestures(GestureSettings.Tap);
            recognizer.Tapped += TapHandler;
            recognizer.StartCapturingGestures();
        }
    
  2. Implémentez un gestionnaire qui sera appelé quand un mouvement TAP se produit.Implement a handler that will be called when a Tap gesture occurs.

        /// <summary>
        /// Respond to Tap Input.
        /// </summary>
        private void TapHandler(TappedEventArgs obj)
        {
            // Only allow capturing, if not currently processing a request.
            if(currentlyCapturing == false)
            {
                currentlyCapturing = true;
    
                // increment taps count, used to name images when saving
                tapsCount++;
    
                // Create a label in world space using the ResultsLabel class
                ResultsLabel.instance.CreateLabel();
    
                // Begins the image capture and analysis procedure
                ExecuteImageCaptureAndAnalysis();
            }
        }
    

La méthode TapHandler () incrémente le nombre de clics capturés à l’utilisateur et utilise la position actuelle du curseur pour déterminer où positionner une nouvelle étiquette.The TapHandler() method increments the number of taps captured from the user and uses the current Cursor position to determine where to position a new Label.

Cette méthode appelle ensuite la méthode ExecuteImageCaptureAndAnalysis () pour commencer les fonctionnalités principales de cette application.This method then calls the ExecuteImageCaptureAndAnalysis() method to begin the core functionality of this application.

  1. Une fois qu’une image a été capturée et stockée, les gestionnaires suivants sont appelés.Once an Image has been captured and stored, the following handlers will be called. Si le processus réussit, le résultat est passé au VisionManager (que vous êtes en train de créer) à des fins d’analyse.If the process is successful, the result is passed to the VisionManager (which you are yet to create) for analysis.

        /// <summary>
        /// Register the full execution of the Photo Capture. If successful, it will begin 
        /// the Image Analysis process.
        /// </summary>
        void OnCapturedPhotoToDisk(PhotoCapture.PhotoCaptureResult result)
        {
            // Call StopPhotoMode once the image has successfully captured
            photoCaptureObject.StopPhotoModeAsync(OnStoppedPhotoMode);
        }
    
        void OnStoppedPhotoMode(PhotoCapture.PhotoCaptureResult result)
        {
            // Dispose from the object in memory and request the image analysis 
            // to the VisionManager class
            photoCaptureObject.Dispose();
            photoCaptureObject = null;
            StartCoroutine(VisionManager.instance.AnalyseLastImageCaptured()); 
        }
    
  2. Ajoutez ensuite la méthode utilisée par l’application pour démarrer le processus de capture d’image et stocker l’image.Then add the method that the application uses to start the Image capture process and store the image.

        /// <summary>    
        /// Begin process of Image Capturing and send To Azure     
        /// Computer Vision service.   
        /// </summary>    
        private void ExecuteImageCaptureAndAnalysis()  
        {    
            // Set the camera resolution to be the highest possible    
            Resolution cameraResolution = PhotoCapture.SupportedResolutions.OrderByDescending((res) => res.width * res.height).First();    
    
            Texture2D targetTexture = new Texture2D(cameraResolution.width, cameraResolution.height);
    
            // Begin capture process, set the image format    
            PhotoCapture.CreateAsync(false, delegate (PhotoCapture captureObject)    
            {    
                photoCaptureObject = captureObject;    
                CameraParameters camParameters = new CameraParameters();    
                camParameters.hologramOpacity = 0.0f;    
                camParameters.cameraResolutionWidth = targetTexture.width;    
                camParameters.cameraResolutionHeight = targetTexture.height;    
                camParameters.pixelFormat = CapturePixelFormat.BGRA32;
    
                // Capture the image from the camera and save it in the App internal folder    
                captureObject.StartPhotoModeAsync(camParameters, delegate (PhotoCapture.PhotoCaptureResult result)
                {    
                    string filename = string.Format(@"CapturedImage{0}.jpg", tapsCount);
    
                    string filePath = Path.Combine(Application.persistentDataPath, filename);
    
                    VisionManager.instance.imagePath = filePath;
    
                    photoCaptureObject.TakePhotoAsync(filePath, PhotoCaptureFileOutputFormat.JPG, OnCapturedPhotoToDisk);
    
                    currentlyCapturing = false;
                });   
            });    
        }
    

Avertissement

À ce stade, vous remarquerez qu’une erreur s’affiche dans le panneau de la console de l' éditeur Unity.At this point you will notice an error appearing in the Unity Editor Console Panel. Cela est dû au fait que le code fait référence à la classe VisionManager que vous allez créer dans le chapitre suivant.This is because the code references the VisionManager class which you will create in the next Chapter.

Chapitre 7 – appel à Azure et à l’analyse des imagesChapter 7 – Call to Azure and Image Analysis

Le dernier script que vous devez créer est la classe VisionManager .The last script you need to create is the VisionManager class.

Cette classe est chargée des opérations suivantes :This class is responsible for:

  • Chargement de la dernière image capturée sous la forme d’un tableau d’octets.Loading the latest image captured as an array of bytes.
  • Envoi du tableau d’octets à votre instance Azure API vision par ordinateur service à des fins d’analyse.Sending the byte array to your Azure Computer Vision API Service instance for analysis.
  • Réception de la réponse sous forme de chaîne JSON.Receiving the response as a JSON string.
  • Désérialisation de la réponse et transmission des balises résultantes à la classe ResultsLabel .Deserializing the response and passing the resulting Tags to the ResultsLabel class.

Pour créer cette classe :To create this class:

  1. Double-cliquez sur le dossier scripts pour l’ouvrir.Double click on the Scripts folder, to open it.

  2. Cliquez avec le bouton droit dans le dossier scripts , puis cliquez sur créer > script C#.Right-click inside the Scripts folder, click Create > C# Script. Nommez le script VisionManager.Name the script VisionManager.

  3. Double-cliquez sur le nouveau script pour l’ouvrir avec Visual Studio.Double click on the new script to open it with Visual Studio.

  4. Mettez à jour les espaces de noms pour qu’ils soient identiques à ce qui suit, en haut de la classe VisionManager :Update the namespaces to be the same as the following, at the top of the VisionManager class:

        using System;
        using System.Collections;
        using System.Collections.Generic;
        using System.IO;
        using UnityEngine;
        using UnityEngine.Networking;
    
  5. En haut de votre script, à l' intérieur de la classe VisionManager (au-dessus de la méthode Start () ), vous devez maintenant créer deux classes qui représenteront la réponse JSON désérialisée à partir d’Azure :At the top of your script, inside the VisionManager class (above the Start() method), you now need to create two Classes that will represent the deserialized JSON response from Azure:

        [System.Serializable]
        public class TagData
        {
            public string name;
            public float confidence;
        }
    
        [System.Serializable]
        public class AnalysedObject
        {
            public TagData[] tags;
            public string requestId;
            public object metadata;
        }
    

    Notes

    Les classes TagData et AnalysedObject doivent avoir l’attribut [System. Serializable] ajouté avant la déclaration pour pouvoir être désérialisées avec les bibliothèques Unity.The TagData and AnalysedObject classes need to have the [System.Serializable] attribute added before the declaration to be able to be deserialized with the Unity libraries.

  6. Dans la classe VisionManager, vous devez ajouter les variables suivantes :In the VisionManager class, you should add the following variables:

        public static VisionManager instance;
    
        // you must insert your service key here!    
        private string authorizationKey = "- Insert your key here -";    
        private const string ocpApimSubscriptionKeyHeader = "Ocp-Apim-Subscription-Key";
        private string visionAnalysisEndpoint = "https://westus.api.cognitive.microsoft.com/vision/v1.0/analyze?visualFeatures=Tags";   // This is where you need to update your endpoint, if you set your location to something other than west-us.
    
        internal byte[] imageBytes;
    
        internal string imagePath;
    

    Avertissement

    Veillez à insérer votre clé d’authentification dans la variable authorizationKey .Make sure you insert your Auth Key into the authorizationKey variable. Vous aurez noté votre clé d’authentification au début de ce cours, Chapitre 1.You will have noted your Auth Key at the beginning of this course, Chapter 1.

    Avertissement

    La variable visionAnalysisEndpoint peut être différente de celle spécifiée dans cet exemple.The visionAnalysisEndpoint variable might differ from the one specified in this example. L' ouest des États-Unis fait strictement référence aux instances de service créées pour la région États-Unis de l’Ouest.The west-us strictly refers to Service instances created for the West US region. Mettez-le à jour avec votre URL de point de terminaison; Voici quelques exemples de ce qui peut ressembler à ceci :Update this with your endpoint URL; here are some examples of what that might look like:

    • Europe Ouest : https://westeurope.api.cognitive.microsoft.com/vision/v1.0/analyze?visualFeatures=TagsWest Europe: https://westeurope.api.cognitive.microsoft.com/vision/v1.0/analyze?visualFeatures=Tags
    • Asie du sud-est : https://southeastasia.api.cognitive.microsoft.com/vision/v1.0/analyze?visualFeatures=TagsSoutheast Asia: https://southeastasia.api.cognitive.microsoft.com/vision/v1.0/analyze?visualFeatures=Tags
    • Est de l’Australie : https://australiaeast.api.cognitive.microsoft.com/vision/v1.0/analyze?visualFeatures=TagsAustralia East: https://australiaeast.api.cognitive.microsoft.com/vision/v1.0/analyze?visualFeatures=Tags
  7. Le code pour éveillé doit maintenant être ajouté.Code for Awake now needs to be added.

        private void Awake()
        {
            // allows this instance to behave like a singleton
            instance = this;
        }
    
  8. Ensuite, ajoutez la Coroutine (avec la méthode de flux statique ci-dessous), qui obtiendra les résultats de l’analyse de l’image capturée par la classe ImageCapture .Next, add the coroutine (with the static stream method below it), which will obtain the results of the analysis of the image captured by the ImageCapture Class.

        /// <summary>
        /// Call the Computer Vision Service to submit the image.
        /// </summary>
        public IEnumerator AnalyseLastImageCaptured()
        {
            WWWForm webForm = new WWWForm();
            using (UnityWebRequest unityWebRequest = UnityWebRequest.Post(visionAnalysisEndpoint, webForm))
            {
                // gets a byte array out of the saved image
                imageBytes = GetImageAsByteArray(imagePath);
                unityWebRequest.SetRequestHeader("Content-Type", "application/octet-stream");
                unityWebRequest.SetRequestHeader(ocpApimSubscriptionKeyHeader, authorizationKey);
    
                // the download handler will help receiving the analysis from Azure
                unityWebRequest.downloadHandler = new DownloadHandlerBuffer();
    
                // the upload handler will help uploading the byte array with the request
                unityWebRequest.uploadHandler = new UploadHandlerRaw(imageBytes);
                unityWebRequest.uploadHandler.contentType = "application/octet-stream";
    
                yield return unityWebRequest.SendWebRequest();
    
                long responseCode = unityWebRequest.responseCode;     
    
                try
                {
                    string jsonResponse = null;
                    jsonResponse = unityWebRequest.downloadHandler.text;
    
                    // The response will be in Json format
                    // therefore it needs to be deserialized into the classes AnalysedObject and TagData
                    AnalysedObject analysedObject = new AnalysedObject();
                    analysedObject = JsonUtility.FromJson<AnalysedObject>(jsonResponse);
    
                    if (analysedObject.tags == null)
                    {
                        Debug.Log("analysedObject.tagData is null");
                    }
                    else
                    {
                        Dictionary<string, float> tagsDictionary = new Dictionary<string, float>();
    
                        foreach (TagData td in analysedObject.tags)
                        {
                            TagData tag = td as TagData;
                            tagsDictionary.Add(tag.name, tag.confidence);                            
                        }
    
                        ResultsLabel.instance.SetTagsToLastLabel(tagsDictionary);
                    }
                }
                catch (Exception exception)
                {
                    Debug.Log("Json exception.Message: " + exception.Message);
                }
    
                yield return null;
            }
        }
    
        /// <summary>
        /// Returns the contents of the specified file as a byte array.
        /// </summary>
        private static byte[] GetImageAsByteArray(string imageFilePath)
        {
            FileStream fileStream = new FileStream(imageFilePath, FileMode.Open, FileAccess.Read);
            BinaryReader binaryReader = new BinaryReader(fileStream);
            return binaryReader.ReadBytes((int)fileStream.Length);
        }  
    
  9. Veillez à enregistrer vos modifications dans Visual Studio avant de revenir à Unity.Be sure to save your changes in Visual Studio before returning to Unity.

  10. De retour dans l’éditeur Unity, cliquez et faites glisser les classes VisionManager et ImageCapture du dossier scripts vers l’objet Camera principal dans le panneau hiérarchie.Back in the Unity Editor, click and drag the VisionManager and ImageCapture classes from the Scripts folder to the Main Camera object in the Hierarchy Panel.

Chapitre 8 – avant la générationChapter 8 – Before building

Pour effectuer un test minutieux de votre application, vous devez l’chargement sur votre HoloLens.To perform a thorough test of your application you will need to sideload it onto your HoloLens. Avant cela, assurez-vous que :Before you do, ensure that:

  • Tous les paramètres mentionnés dans le Chapitre 2 sont correctement définis.All the settings mentioned in Chapter 2 are set correctly.
  • Tous les scripts sont attachés à l’objet Camera principal .All the scripts are attached to the Main Camera object.
  • Tous les champs du volet principal de l’inspecteur de l' appareil photo sont correctement affectés.All the fields in the Main Camera Inspector Panel are assigned properly.
  • Veillez à insérer votre clé d’authentification dans la variable authorizationKey .Make sure you insert your Auth Key into the authorizationKey variable.
  • Vérifiez que vous avez également vérifié votre point de terminaison dans votre script VisionManager et qu’il est aligné sur votre région (ce document utilise par défaut West-US ).Ensure that you have also checked your endpoint in your VisionManager script, and that it aligns to your region (this document uses west-us by default).

Chapitre 9 : créer la solution UWP et chargement l’applicationChapter 9 – Build the UWP Solution and sideload the application

Tout ce qui est nécessaire pour la section Unity de ce projet est maintenant terminé. il est donc temps de la générer à partir d’Unity.Everything needed for the Unity section of this project has now been completed, so it is time to build it from Unity.

  1. Accédez au fichier des paramètres de build - > paramètres de Build...Navigate to Build Settings - File > Build Settings…

  2. Dans la fenêtre paramètres de build , cliquez sur générer.From the Build Settings window, click Build.

    Génération de l’application à partir d’Unity

  3. Si ce n’est pas déjà le cas, Tick Unity C# Projects.If not already, tick Unity C# Projects.

  4. Cliquez sur Générer.Click Build. Unity lance une fenêtre de l' Explorateur de fichiers , dans laquelle vous devez créer, puis sélectionner un dossier dans lequel générer l’application.Unity will launch a File Explorer window, where you need to create and then select a folder to build the app into. Créez ce dossier maintenant, puis nommez-le application.Create that folder now, and name it App. Ensuite, avec le dossier d' application sélectionné, appuyez sur Sélectionner un dossier.Then with the App folder selected, press Select Folder.

  5. Unity commence à générer votre projet dans le dossier de l' application .Unity will begin building your project to the App folder.

  6. Une fois la génération de Unity terminée (cela peut prendre un certain temps), une fenêtre de l' Explorateur de fichiers s’ouvre à l’emplacement de votre Build (Vérifiez la barre des tâches, car elle ne s’affiche pas toujours au-dessus de votre Windows, mais vous informera de l’ajout d’une nouvelle fenêtre).Once Unity has finished building (it might take some time), it will open a File Explorer window at the location of your build (check your task bar, as it may not always appear above your windows, but will notify you of the addition of a new window).

Chapitre 10 – déployer dans HoloLensChapter 10 – Deploy to HoloLens

Pour effectuer un déploiement sur HoloLens :To deploy on HoloLens:

  1. Vous aurez besoin de l’adresse IP de votre HoloLens (pour le déploiement à distance) et vérifiez que votre HoloLens est en mode développeur.You will need the IP Address of your HoloLens (for Remote Deploy), and to ensure your HoloLens is in Developer Mode. Pour ce faire :To do this:

    1. Tout en portant votre HoloLens, ouvrez les paramètres.Whilst wearing your HoloLens, open the Settings.
    2. Accéder au réseau & Internet > Wi-Fi options avancées >Go to Network & Internet > Wi-Fi > Advanced Options
    3. Notez l’adresse IPv4 .Note the IPv4 address.
    4. Ensuite, revenez aux paramètres, puis à mettre à jour & > de sécurité pour les développeursNext, navigate back to Settings, and then to Update & Security > For Developers
    5. Définissez le mode développeur sur.Set Developer Mode On.
  2. Accédez à votre nouvelle build Unity (le dossier de l' application ) et ouvrez le fichier solution avec Visual Studio.Navigate to your new Unity build (the App folder) and open the solution file with Visual Studio.

  3. Dans la configuration de la solution, sélectionnez Déboguer.In the Solution Configuration select Debug.

  4. Dans la plateforme de la solution, sélectionnez x86, ordinateur distant.In the Solution Platform, select x86, Remote Machine.

    Déployez la solution à partir de Visual Studio.

  5. Accédez au menu Générer , puis cliquez sur déployer la solution pour chargement l’application à votre HoloLens.Go to the Build menu and click on Deploy Solution, to sideload the application to your HoloLens.

  6. Votre application doit maintenant apparaître dans la liste des applications installées sur votre HoloLens, prête à être lancée.Your App should now appear in the list of installed apps on your HoloLens, ready to be launched!

Notes

Pour effectuer un déploiement sur un casque immersif, définissez la plateforme de la solution sur ordinateur local et définissez la configuration sur Déboguer, avec x86 comme plateforme.To deploy to immersive headset, set the Solution Platform to Local Machine, and set the Configuration to Debug, with x86 as the Platform. Déployez ensuite sur l’ordinateur local, à l’aide du menu Générer, en sélectionnant déployer la solution.Then deploy to the local machine, using the Build menu, selecting Deploy Solution.

Votre application API Vision par ordinateur terminéeYour finished Computer Vision API application

Félicitations, vous avez créé une application de réalité mixte qui tire parti de la API Vision par ordinateur Azure pour reconnaître des objets réels, et afficher la confiance de ce qui a été observé.Congratulations, you built a mixed reality app that leverages the Azure Computer Vision API to recognize real world objects, and display confidence of what has been seen.

résultat de l’atelier

Exercices bonusBonus exercises

Exercice 1Exercise 1

Tout comme vous avez utilisé le paramètre Tags (tel qu’il est prouvé dans le point de terminaison utilisé dans VisionManager), étendez l’application pour détecter d’autres informations. Examinez les autres paramètres auxquels vous avez accès ici.Just as you have used the Tags parameter (as evidenced within the endpoint used within the VisionManager), extend the app to detect other information; have a look at what other parameters you have access to HERE.

Exercice 2Exercise 2

Affichez les données Azure retournées, d’une manière plus conversationnele et lisible, en masquant éventuellement les nombres.Display the returned Azure data, in a more conversational, and readable way, perhaps hiding the numbers. Comme si un bot était en contact avec l’utilisateur.As though a bot might be speaking to the user.