MR und Azure 304: GesichtserkennungMR and Azure 304: Face recognition


Hinweis

Die Tutorials der Mixed Reality Academy wurden im Hinblick auf HoloLens (1. Gen.) und immersive Mixed Reality-Headsets entworfen.The Mixed Reality Academy tutorials were designed with HoloLens (1st gen) and Mixed Reality Immersive Headsets in mind. Daher halten wir es für wichtig, diese Tutorials für Entwickler verfügbar zu halten, die noch nach Anleitung beim Entwickeln für diese Geräte suchen.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. Diese Tutorials werden nicht mit den neuesten Toolsets oder Interaktionen aktualisiert, die für HoloLens 2 verwendet werden.These tutorials will not be updated with the latest toolsets or interactions being used for HoloLens 2. Sie werden gewartet, um weiterhin auf den unterstützten Geräten zu funktionieren.They will be maintained to continue working on the supported devices. Es gibt eine neue Reihe von Tutorials, die in Zukunft veröffentlicht werden, um die Entwicklung für hololens 2 zu veranschaulichen.There will be a new series of tutorials that will be posted in the future that will demonstrate how to develop for HoloLens 2. Dieser Hinweis wird mit einem Link zu diesen Tutorials aktualisiert, wenn diese veröffentlicht werden.This notice will be updated with a link to those tutorials when they are posted.


Ergebnis der Fertigstellung dieses Kurses

In diesem Kurs erfahren Sie, wie Sie mithilfe von Azure Cognitive Services mit dem Microsoft-Gesichtserkennungs-API Funktionen zur Gesichtserkennung zu einer gemischten Reality-Anwendung hinzufügen.In this course you will learn how to add face recognition capabilities to a mixed reality application, using Azure Cognitive Services, with the Microsoft Face API.

Azure Gesichtserkennungs-API ist ein Microsoft-Dienst, der Entwicklern die fortschrittlichsten Gesichts Algorithmen in der Cloud bereitstellt.Azure Face API is a Microsoft service, which provides developers with the most advanced face algorithms, all in the cloud. Der Gesichtserkennungs-API verfügt über zwei Hauptfunktionen: Gesichtserkennung mit Attributen und Gesichtserkennung.The Face API has two main functions: face detection with attributes, and face recognition. Dies ermöglicht es Entwicklern, einfach einen Satz von Gruppen für Gesichter festzulegen und dann Abfrage Images später an den Dienst zu senden, um zu bestimmen, wem ein Gesicht angehört.This allows developers to simply set a set of groups for faces, and then, send query images to the service later, to determine to whom a face belongs. Weitere Informationen finden Sie auf der Seite mit der Gesichtserkennung in Azure.For more information, visit the Azure Face Recognition page.

Nachdem Sie diesen Kurs abgeschlossen haben, verfügen Sie über eine Mixed Reality hololens-Anwendung, die Folgendes ausführen kann:Having completed this course, you will have a mixed reality HoloLens application, which will be able to do the following:

  1. Verwenden Sie eine Tap-Geste , um die Erfassung eines Bilds mithilfe der on-Board hololens-Kamera zu initiieren.Use a Tap Gesture to initiate the capture of an image using the on-board HoloLens camera.
  2. Senden Sie das erfasste Abbild an den Azure Gesichtserkennungs-API -Dienst.Send the captured image to the Azure Face API service.
  3. Empfangen der Ergebnisse des Gesichtserkennungs-API Algorithmus.Receive the results of the Face API algorithm.
  4. Verwenden Sie eine einfache Benutzeroberfläche, um den Namen der übereinstimmenden Personen anzuzeigen.Use a simple User Interface, to display the name of matched people.

Auf diese Weise erfahren Sie, wie Sie die Ergebnisse aus dem Gesichtserkennungs-API-Dienst in ihrer Unity-basierten gemischten Reality-Anwendung erhalten.This will teach you how to get the results from the Face API Service into your Unity-based mixed reality application.

In Ihrer Anwendung liegt es an Ihnen, wie Sie die Ergebnisse in Ihren Entwurf integrieren.In your application, it is up to you as to how you will integrate the results with your design. In diesem Kurs erfahren Sie, wie Sie einen Azure-Dienst in Ihr Unity-Projekt integrieren.This course is designed to teach you how to integrate an Azure Service with your Unity Project. Es ist Ihre Aufgabe, das wissen, das Sie aus diesem Kursgewinnen, zu nutzen, um ihre gemischte Reality-Anwendung zu verbessern.It is your job to use the knowledge you gain from this course to enhance your mixed reality application.

GeräteunterstützungDevice support

KursCourse HoloLensHoloLens Immersive HeadsetsImmersive headsets
MR und Azure 304: GesichtserkennungMR and Azure 304: Face recognition ✔️✔️ ✔️✔️

Hinweis

Dieser Kurs konzentriert sich in erster Linie auf hololens, aber Sie können auch das Erlernen, was Sie in diesem Kurs lernen, auf Windows Mixed Reality-(VR)-Headsets.While this course primarily focuses on HoloLens, you can also apply what you learn in this course to Windows Mixed Reality immersive (VR) headsets. Da immersive Headsets (VR) nicht über barrierefreie Kameras verfügen, benötigen Sie eine externe Kamera, die mit Ihrem PC verbunden ist.Because immersive (VR) headsets do not have accessible cameras, you will need an external camera connected to your PC. Wenn Sie den Kurs befolgen, finden Sie Hinweise zu allen Änderungen, die Sie möglicherweise für die Unterstützung von immersiven (VR)-Headsets verwenden müssen.As you follow along with the course, you will see notes on any changes you might need to employ to support immersive (VR) headsets.

VoraussetzungenPrerequisites

Hinweis

Dieses Tutorial richtet sich an Entwickler, die über grundlegende Kenntnisse in Unity und c# verfügen.This tutorial is designed for developers who have basic experience with Unity and C#. Beachten Sie auch, dass die Voraussetzungen und Anweisungen in diesem Dokument darstellen, was zum Zeitpunkt des Schreibens getestet und überprüft wurde (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). Sie können die neueste Software verwenden, die im Artikel Installieren der Tools aufgeführt ist. es sollte jedoch nicht davon ausgegangen werden, dass die Informationen in diesem Kurs genau mit den Informationen in neueren Software vergleichen, als im folgenden aufgeführt sind.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.

Für diesen Kurs empfehlen wir die folgende Hardware und Software:We recommend the following hardware and software for this course:

VorbereitungBefore you start

  1. Um Probleme zu vermeiden, die beim Erstellen dieses Projekts auftreten, wird dringend empfohlen, dass Sie das in diesem Tutorial erwähnte Projekt in einem Stamm Ordner oder in einem Ordner mit einem Stamm Ordner erstellen (lange Ordner Pfade können zur Buildzeit Probleme verursachen).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. Richten Sie Ihre hololens ein, und testen Sie Sie.Set up and test your HoloLens. Wenn Sie Unterstützung für die Einrichtung ihrer hololens benötigen, besuchen Sie den Artikel zum Einrichten von hololens.If you need support setting up your HoloLens, make sure to visit the HoloLens setup article.
  3. Es empfiehlt sich, eine Kalibrierung und Sensor Optimierung durchzuführen, wenn Sie mit der Entwicklung einer neuen hololens-App beginnen (manchmal kann es hilfreich sein, diese Aufgaben für jeden Benutzer auszuführen).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).

Hilfe zur Kalibrierung finden Sie unter diesem Link zum Artikel zur hololens-Kalibrierung.For help on Calibration, please follow this link to the HoloLens Calibration article.

Hilfe zur Sensor Optimierung finden Sie unter diesem Link zum Artikel zur Überwachung von hololens-Sensoren.For help on Sensor Tuning, please follow this link to the HoloLens Sensor Tuning article.

Kapitel 1: Azure-PortalChapter 1 - The Azure Portal

Wenn Sie den Gesichtserkennungs-API -Dienst in Azure verwenden möchten, müssen Sie eine Instanz des-Dienstanbieter konfigurieren, die für die Anwendung verfügbar gemacht wird.To use the Face API service in Azure, you will need to configure an instance of the service to be made available to your application.

  1. Melden Sie sich zunächst beim Azure-Portalan.First, log in to the Azure Portal.

    Hinweis

    Wenn Sie noch nicht über ein Azure-Konto verfügen, müssen Sie eines erstellen.If you do not already have an Azure account, you will need to create one. Wenn Sie dieses Tutorial in einer Classroom-oder Lab-Situation befolgen, bitten Sie Ihren Dozenten oder einen der Proctors, Hilfe beim Einrichten Ihres neuen Kontos zu erhalten.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. Wenn Sie angemeldet sind, klicken Sie in der oberen linken Ecke auf " neu ", und suchen Sie nach Gesichtserkennungs-API. Drücken Sie dann die Eingabe Taste.Once you are logged in, click on New in the top left corner, and search for Face API, press Enter.

    Suchen nach der Face-API

    Hinweis

    Das Wort New wurde möglicherweise durch Create a Resource in neueren Portalen ersetzt.The word New may have been replaced with Create a resource, in newer portals.

  3. Auf der neuen Seite wird eine Beschreibung des Gesichtserkennungs-API Dienstanbieter bereitgestellt.The new page will provide a description of the Face API service. Wählen Sie unten links in dieser Eingabeaufforderung die Schaltfläche Erstellen aus, um eine Verknüpfung mit diesem Dienst zu erstellen.At the bottom left of this prompt, select the Create button, to create an association with this service.

    Gesichts-API-Informationen

  4. Nachdem Sie auf Erstellen geklickt haben, klicken Sie auf:Once you have clicked on Create:

    1. Fügen Sie den gewünschten Namen für diese Dienst Instanz ein.Insert your desired name for this service instance.

    2. Wählen Sie ein Abonnement aus.Select a subscription.

    3. Wählen Sie den für Sie geeigneten Tarif aus. Wenn Sie zum ersten Mal einen Gesichtserkennungs-API Dienst erstellen, sollte Ihnen ein Free-Tarif (mit dem Namen "F0") zur Verfügung stehen.Select the pricing tier appropriate for you, if this is the first time creating a Face API Service, a free tier (named F0) should be available to you.

    4. Wählen Sie eine Ressourcengruppe aus, oder erstellen Sie eine neue Ressourcengruppe .Choose a Resource Group or create a new one. Eine Ressourcengruppe bietet eine Möglichkeit zum überwachen, Steuern des Zugriffs, bereitstellen und Verwalten der Abrechnung für eine Sammlung von Azure-Ressourcen.A resource group provides a way to monitor, control access, provision and manage billing for a collection of Azure assets. Es wird empfohlen, alle Azure-Dienste, die einem einzelnen Projekt (z. b. diesen Labs) zugeordnet sind, in einer gemeinsamen Ressourcengruppe zu speichern.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).

      Weitere Informationen zu Azure-Ressourcengruppen finden Sie im Artikel Ressourcengruppe.If you wish to read more about Azure Resource Groups, please visit the resource group article.

    5. Die UWP-app " Person Maker", die Sie später verwenden, erfordert die Verwendung von "USA, Westen" für den Standort.The UWP app, Person Maker, which you use later, requires the use of 'West US' for location.

    6. Außerdem müssen Sie bestätigen, dass Sie die auf diesen Dienst angewendeten Geschäftsbedingungen verstanden haben.You will also need to confirm that you have understood the Terms and Conditions applied to this Service.

    7. Wählen Sie **erstellen *.**Select Create*.

      Face-API-Dienst erstellen

  5. Nachdem Sie auf " Erstellen " geklickt haben, müssen Sie warten, bis der Dienst erstellt wird. dieser Vorgang kann einige Minuten in Anspruch nehmen.Once you have clicked on Create*, you will have to wait for the service to be created, this might take a minute.

  6. Nachdem die Dienst Instanz erstellt wurde, wird im Portal eine Benachrichtigung angezeigt.A notification will appear in the portal once the Service instance is created.

    Benachrichtigung zur Dienst Erstellung

  7. Klicken Sie auf die Benachrichtigungen, um die neue Dienst Instanz zu untersuchen.Click on the notifications to explore your new Service instance.

    zur Ressourcen Benachrichtigung wechseln

  8. Wenn Sie bereit sind, klicken Sie auf die Schaltfläche zum Ressourcen Wechsel in der Benachrichtigung, um die neue Dienst Instanz zu untersuchen.When you are ready, click Go to resource button in the notification to explore your new Service instance.

    Zugriffs Gesichts-API-Schlüssel

  9. In diesem Tutorial muss Ihre Anwendung Aufrufe an den Dienst durchführen. Dies erfolgt über das Abonnement "Key" Ihres dienstanzdienstanz.Within this tutorial, your application will need to make calls to your service, which is done through using your service's subscription 'key'. Auf der Seite " Schnellstart " Ihres Gesichtserkennungs-API dienstanens ist der erste Punkt Nummer 1, um Ihre Schlüssel zu erfassen.From the Quick start page, of your Face API service, the first point is number 1, to Grab your keys.

  10. Wählen Sie auf der Seite Dienst entweder den Hyperlink Blue Keys (wenn auf der Seite Schnellstart) oder den Link Schlüssel im Navigationsmenü Dienste (auf der linken Seite, gekennzeichnet durch das Symbol "Schlüssel") aus, um Ihre Schlüssel anzuzeigen.On the Service page select either the blue Keys hyperlink (if on the Quick start page), or the Keys link in the services navigation menu (to the left, denoted by the 'key' icon), to reveal your keys.

    Hinweis

    Notieren Sie sich entweder einen der Schlüssel, und schützen Sie ihn, da Sie ihn später benötigen.Take note of either one of the keys and safeguard it, as you will need it later.

Kapitel 2: Verwenden der UWP-Anwendung "Person Maker"Chapter 2 - Using the 'Person Maker' UWP application

Stellen Sie sicher, dass Sie die vorgefertigte UWP-Anwendung namens Person Makerherunterladen.Make sure to download the prebuilt UWP Application called Person Maker. Diese APP ist nicht das Endprodukt für diesen Kurs, sondern nur ein Tool, das Sie beim Erstellen Ihrer Azure-Einträge unterstützt, auf die sich das spätere Projekt verlassen wird.This app is not the end product for this course, just a tool to help you create your Azure entries, which the later project will rely upon.

Person Maker ermöglicht Ihnen das Erstellen von Azure-Einträgen, die Personen und Personengruppen zugeordnet sind.Person Maker allows you to create Azure entries, which are associated with people, and groups of people. Die Anwendung platziert alle benötigten Informationen in einem Format, das später von der faceapi verwendet werden kann, um die Gesichter der von Ihnen hinzugefügten Personen zu erkennen.The application will place all the needed information in a format which can then later be used by the FaceAPI, in order to recognize the faces of people whom you have added.

Wichtig Person Maker verwendet einige grundlegende Einschränkungen, um sicherzustellen, dass Sie die Anzahl von Dienst aufrufen pro Minute für die Kostenlose Abonnement Ebene nicht überschreiten.[IMPORTANT] Person Maker uses some basic throttling, to help ensure that you do not exceed the number of service calls per minute for the free subscription tier. Der grüne Text oben ändert sich in rot und wird als "aktiv" aktualisiert, wenn eine Drosselung auftritt. Wenn dies der Fall ist, warten Sie einfach auf die Anwendung (es wird gewartet, bis der Zugriff auf den Gesichts Dienst fortgesetzt werden kann, und aktualisieren Sie ihn als "aktiv", wenn Sie ihn wieder verwenden können).The green text at the top will change to red and update as 'ACTIVE' when throttling is happening; if this is the case, simply wait for the application (it will wait until it can next continue accessing the face service, updating as 'IN-ACTIVE' when you can use it again).

Diese Anwendung verwendet die Microsoft. projectoxford. Face -Bibliotheken, die es Ihnen ermöglichen, den Gesichtserkennungs-API vollständig zu nutzen.This application uses the Microsoft.ProjectOxford.Face libraries, which will allow you to make full use of the Face API. Diese Bibliothek steht als nuget-Paket kostenlos zur Verfügung.This library is available for free as a NuGet Package. Weitere Informationen zu diesem und ähnlichen APIs finden Sie im Artikel zur API-Referenz.For more information about this, and similar, APIs make sure to visit the API reference article.

Hinweis

Dabei handelt es sich nur um die erforderlichen Schritte. Anweisungen zum Ausführen dieser Schritte finden Sie weiter unten in diesem Dokument.These are just the steps required, instructions for how to do these things is further down the document. Die Person Maker -App ermöglicht Ihnen Folgendes:The Person Maker app will allow you to:

  • Erstellen Sie eine Personengruppe, die aus mehreren Personen besteht, denen Sie zugeordnet werden sollen.Create a Person Group, which is a group composed of several people which you want to associate with it. Mit Ihrem Azure-Konto können Sie mehrere Personengruppen hosten.With your Azure account you can host multiple Person Groups.

  • Erstellen Sie eine Person, die Mitglied einer Person-Gruppe ist.Create a Person, which is a member of a Person Group. Jeder Person sind mehrere Gesichts Bilder zugeordnet.Each person has a number of Face images associated with it.

  • Weisen Sie einer Person Gesichtsbilder zu, damit Ihr Azure Gesichtserkennungs-API-Dienst eine Person durch das entsprechende Gesicht erkennen kann.Assign face images to a Person, to allow your Azure Face API Service to recognize a Person by the corresponding face.

  • Trainieren Sie Ihren Azure Gesichtserkennungs-API-Dienst.Train your Azure Face API Service.

Wenn Sie diese APP zum Erkennen von Benutzern Schulen möchten, benötigen Sie zehn (10) schließende Fotos für jede Person, die Sie der Person-Gruppe hinzufügen möchten.Be aware, so to train this app to recognize people, you will need ten (10) close-up photos of each person which you would like to add to your Person Group. Die Windows 10-CAM-App kann Sie dabei unterstützen.The Windows 10 Cam App can help you to take these. Sie müssen sicherstellen, dass jedes Foto klar ist (vermeiden Sie die verwierung, verdeckt oder zu weit vom Betreff), dass das Foto im JPG-oder PNG-Dateiformat vorliegt, wobei die Bilddatei nicht größer als 4 MB und nicht kleiner als 1 KB ist.You must ensure that each photo is clear (avoid blurring, obscuring, or being too far, from the subject), have the photo in jpg or png file format, with the image file size being no larger 4 MB, and no less than 1 KB.

Hinweis

Wenn Sie dieses Lernprogramm befolgen, sollten Sie sich nicht für das Training mit ihrer eigenen Oberfläche beschäftigen, denn wenn Sie die hololens auf dem Datenblatt platzieren, können Sie sich selbst nicht selbst ansehen.If you are following this tutorial, do not use your own face for training, as when you put the HoloLens on, you cannot look at yourself. Verwenden Sie die Oberfläche eines Kollegen oder Kollegen.Use the face of a colleague or fellow student.

Mitarbeiter Hersteller wird ausgeführt:Running Person Maker:

  1. Öffnen Sie den Ordner personmaker , und doppelklicken Sie auf die Projekt Mappe personmaker , um Sie in Visual Studio zu öffnen.Open the PersonMaker folder and double click on the PersonMaker solution to open it with Visual Studio.

  2. Nachdem die personmaker-Lösung geöffnet ist, stellen Sie Folgendes sicher:Once the PersonMaker solution is open, make sure that:

    1. Die Projektmappenkonfiguration ist auf Debug festgelegt.The Solution Configuration is set to Debug.

    2. Die Lösungsplattform ist auf x86 festgelegt.The Solution Platform is set to x86

    3. Die Zielplattform ist der lokale Computer.The Target Platform is Local Machine.

    4. Sie müssen auch nuget-Pakete wiederherstellen (Klicken Sie mit der rechten Maustaste auf die Projekt Mappe, und wählen Sie nuget-Pakete wiederherstellen).You also may need to Restore NuGet Packages (right-click the Solution and select Restore NuGet Packages).

  3. Klicken Sie auf lokaler Computer , und die Anwendung wird gestartet.Click Local Machine and the application will start. Beachten Sie, dass auf kleineren Bildschirmen der gesamte Inhalt möglicherweise nicht sichtbar ist, Sie können jedoch einen Bildlauf nach unten durchführen, um ihn anzuzeigen.Be aware, on smaller screens, all content may not be visible, though you can scroll further down to view it.

    Person Maker-Benutzeroberfläche

  4. Fügen Sie Ihren Azure-Authentifizierungsschlüssel, den Sie haben sollten, aus Ihrem Gesichtserkennungs-API Service in Azure ein.Insert your Azure Authentication Key, which you should have, from your Face API service within Azure.

  5. Insert (Einfügen):Insert:

    1. Die ID , die Sie der Person- Gruppe zuweisen möchten.The ID you want to assign to the Person Group. Die ID muss aus Kleinbuchstaben bestehen und darf keine Leerzeichen enthalten.The ID must be lowercase, with no spaces. Notieren Sie sich diese ID, da Sie später in Ihrem Unity-Projekt benötigt wird.Make note of this ID, as it will be required later in your Unity project.
    2. Der Name , den Sie der Person- Gruppe zuweisen möchten (kann Leerzeichen enthalten).The Name you want to assign to the Person Group (can have spaces).
  6. Klicken Sie auf die Schaltfläche Personengruppe erstellen .Press Create Person Group button. Unterhalb der Schaltfläche sollte eine Bestätigungsmeldung angezeigt werden.A confirmation message should appear underneath the button.

Hinweis

Wenn Sie den Fehler "Zugriff verweigert" haben, überprüfen Sie den Speicherort, den Sie für Ihren Azure-Dienst festgelegt haben.If you have an 'Access Denied' error, check the location you set for your Azure service. Wie bereits erwähnt, ist diese APP für "USA, Westen" konzipiert.As stated above, this app is designed for 'West US'.

Wichtig

Sie werden feststellen, dass Sie auch auf die Schaltfläche " eine bekannte Gruppe abrufen " klicken können: Dies ist für den Fall, dass Sie bereits eine Person-Gruppe erstellt haben und diese verwenden möchten, anstatt eine neue zu erstellen.You will notice that you can also click the Fetch a Known Group button: this is for if you have already created a person group, and wish to use that, rather than create a new one. Wenn Sie auf eine Personengruppe mit einer bekannten Gruppe erstellen klicken, wird auch eine Gruppe abgerufen.Be aware, if you click Create a Person Group with a known group, this will also fetch a group.

  1. Fügen Sie den Namen der Person ein, die Sie erstellen möchten.Insert the Name of the Person you want to create.

    1. Klicken Sie auf die Schaltfläche Person erstellen .Click the Create Person button.

    2. Unterhalb der Schaltfläche sollte eine Bestätigungsmeldung angezeigt werden.A confirmation message should appear underneath the button.

    3. Wenn Sie eine Person löschen möchten, die Sie zuvor erstellt haben, können Sie den Namen in das Textfeld schreiben und Person löschen drücken.If you wish to delete a person you have previously created, you can write the name into the textbox and press Delete Person

  2. Stellen Sie sicher, dass Sie den Speicherort von zehn (10) Fotos der Person kennen, die Sie der Gruppe hinzufügen möchten.Make sure you know the location of ten (10) photos of the person you would like to add to your group.

  3. Klicken Sie auf Ordner erstellen und öffnen , um Windows-Explorer in dem Ordner zu öffnen, der der Person zugeordnet ist.Press Create and Open Folder to open Windows Explorer to the folder associated to the person. Fügen Sie die zehn (10) Images im Ordner hinzu.Add the ten (10) images in the folder. Diese müssen ein JPG -oder PNG -Dateiformat aufweisen.These must be of JPG or PNG file format.

  4. Klicken Sie auf über Mitteln an Azure.Click on Submit To Azure. Ein Gegenstand zeigt den Status der Übermittlung an, gefolgt von einer Meldung, wenn Sie abgeschlossen wurde.A counter will show you the state of the submission, followed by a message when it has completed.

  5. Nachdem der Leistungs Dienst abgeschlossen und eine Bestätigungsmeldung angezeigt wurde, klicken Sie auf " trainieren ", um den Dienst zu trainieren.Once the counter has finished and a confirmation message has been displayed click on Train to train your Service.

Nachdem der Prozess abgeschlossen wurde, können Sie in Unity wechseln.Once the process has completed, you are ready to move into Unity.

Kapitel 3: Einrichten des Unity-ProjektsChapter 3 - Set up the Unity project

Folgendes ist eine typische Einrichtung für die Entwicklung mit gemischter Realität und ist daher eine gute Vorlage für andere Projekte.The following is a typical set up for developing with mixed reality, and as such, is a good template for other projects.

  1. Öffnen Sie Unity , und klicken Sie auf neu.Open Unity and click New.

    Starten Sie ein neues Unity-Projekt.

  2. Sie müssen nun einen Unity-Projektnamen angeben.You will now need to provide a Unity Project name. Fügen Sie MR_FaceRecognition ein.Insert MR_FaceRecognition. Stellen Sie sicher, dass Projekttyp auf 3D festgelegt ist.Make sure the project type is set to 3D. Legen Sie den Speicherort auf einen geeigneten Speicherort fest (denken Sie daran, dass die Stamm Verzeichnisse besser sind).Set the Location to somewhere appropriate for you (remember, closer to root directories is better). Klicken Sie dann auf Projekt erstellen.Then, click Create project.

    Geben Sie Details für ein neues Unity-Projekt an.

  3. Wenn Unity geöffnet ist, sollten Sie überprüfen, dass der Standard Skript-Editor auf Visual Studio festgelegt ist.With Unity open, it is worth checking the default Script Editor is set to Visual Studio. Wechseln Sie zu Edit > Preferences (Einstellungen bearbeiten ), und navigieren Sie dann im neuen Fenster zu externe Tools.Go to Edit > Preferences and then from the new window, navigate to External Tools. Ändern Sie den Editor für externe Skripts in Visual Studio 2017.Change External Script Editor to Visual Studio 2017. Schließen Sie das Fenster " Einstellungen ".Close the Preferences window.

    Skript-Editor-Einstellung aktualisieren.

  4. Navigieren Sie als nächstes zu Datei > Buildeinstellungen , und schalten Sie die Plattform auf universelle Windows-Plattform, indem Sie auf die Schaltfläche Plattform wechseln klicken.Next, go to File > Build Settings and switch the platform to Universal Windows Platform, by clicking on the Switch Platform button.

    Fenster "Buildeinstellungen", Plattform zu UWP wechseln.

  5. Wechseln Sie zu Datei > Build-Einstellungen , und stellen Sie Folgendes sicher:Go to File > Build Settings and make sure that:

    1. Zielgerät ist auf hololens festgelegtTarget Device is set to HoloLens

      Legen Sie für die immersiven Headsets das Zielgerät auf ein beliebiges Gerät fest.For the immersive headsets, set Target Device to Any Device.

    2. Der Buildtyp ist auf D3D festgelegt.Build Type is set to D3D

    3. SDK ist auf neueste installierte Version festgelegt.SDK is set to Latest installed

    4. Visual Studio-Version ist auf neueste installierte Version festgelegt.Visual Studio Version is set to Latest installed

    5. Build und Run sind auf lokaler Computer festgelegt.Build and Run is set to Local Machine

    6. Speichern Sie die Szene, und fügen Sie Sie dem Build hinzu.Save the scene and add it to the build.

      1. Wählen Sie hierzu die Option geöffnete Szenen hinzufügen aus.Do this by selecting Add Open Scenes. Ein Fenster zum Speichern wird angezeigt.A save window will appear.

        Klicken Sie auf Schaltfläche "Open Szenen

      2. Wählen Sie die Schaltfläche neuer Ordner aus, um einen neuen Ordner zu erstellen, und nennen Sie ihn Szenen.Select the New folder button, to create a new folder, name it Scenes.

        Neuen Ordner "Skripts" erstellen

      3. Öffnen Sie den neu erstellten Ordner Szenen , und geben Sie dann im Feld Dateiname: Text die Zeichen Fläche fakerecscene ein, und klicken Sie dann auf Speichern.Open your newly created Scenes folder, and then in the File name: text field, type FaceRecScene, then press Save.

        Benennen Sie neue Szene.

    7. Die restlichen Einstellungen in den Buildeinstellungen sollten vorerst als Standard belassen werden.The remaining settings, in Build Settings, should be left as default for now.

  6. Klicken Sie im Fenster Buildeinstellungen auf die Schaltfläche Player Einstellungen . Dadurch wird der entsprechende Bereich in dem Bereich geöffnet, in dem sich der Inspektor befindet.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.

    Öffnen Sie die Player-Einstellungen.

  7. In diesem Bereich müssen einige Einstellungen überprüft werden:In this panel, a few settings need to be verified:

    1. Auf der Registerkarte andere Einstellungen :In the Other Settings tab:

      1. Die Skript Lauf Zeit Version sollte experimentell sein (.NET 4,6-Entsprechung).Scripting Runtime Version should be Experimental (.NET 4.6 Equivalent). Wenn Sie diese Änderung ändern, muss der Editor neu gestartet werden.Changing this will trigger a need to restart the Editor.

      2. Skript -Back-End sollte .net seinScripting Backend should be .NET

      3. API-Kompatibilitäts Grad sollte .NET 4,6 lautenAPI Compatibility Level should be .NET 4.6

        Aktualisieren Sie andere Einstellungen.

    2. Überprüfen Sie auf der Registerkarte Veröffentlichungs Einstellungen unter Funktionen Folgendes:Within the Publishing Settings tab, under Capabilities, check:

      • InternetClientInternetClient

      • WebcamWebcam

        Veröffentlichungs Einstellungen werden aktualisiert.

    3. Weiter unten im Bereich in den XR-Einstellungen (siehe Veröffentlichungs Einstellungen), unterstützt Tick Virtual Reality, stellen Sie sicher, dass das Windows Mixed Reality SDK hinzugefügt wurde.Further down the panel, in XR Settings (found below Publish Settings), tick Virtual Reality Supported, make sure the Windows Mixed Reality SDK is added.

      Aktualisieren Sie die X R-Einstellungen.

  8. Wieder in den Buildeinstellungen ist Unity c#-Projekte nicht mehr abgeblendet. Aktivieren Sie das Kontrollkästchen neben this.Back in Build Settings, Unity C# Projects is no longer greyed out; tick the checkbox next to this.

  9. Schließen Sie das Fenster „Build Settings“ (Buildeinstellungen).Close the Build Settings window.

  10. Speichern Sie Ihre Szene und Ihr Projekt (Datei > speichern Sie Szenen/Dateien > speichern Sie das Projekt).Save your Scene and Project (FILE > SAVE SCENE / FILE > SAVE PROJECT).

Kapitel 4: Einrichtung der HauptkameraChapter 4 - Main Camera setup

Wichtig

Wenn Sie die Unity-Setup Komponente dieses Kurses überspringen und direkt mit dem Code fortfahren möchten, können Sie dieses. unitypackage herunterladenund als benutzerdefiniertes Paketin das Projekt importieren.If you wish to skip the Unity Set up component of this course, and continue straight into code, feel free to download this .unitypackage, and import it into your project as a Custom Package. Beachten Sie, dass dieses Paket auch den Import der newtonsoft-dll enthält, die in Kapitel 5beschrieben wird.Be aware that this package also includes the import of the Newtonsoft DLL, covered in Chapter 5. Mit diesem importierten Vorgang können Sie in Kapitel 6fortfahren.With this imported, you can continue from Chapter 6.

  1. Wählen Sie im Bereich Hierarchie die Hauptkamera aus.In the Hierarchy Panel, select the Main Camera.

  2. Nachdem Sie diese Option ausgewählt haben, können Sie alle Komponenten der Hauptkamera im Inspektor-Panel sehen.Once selected, you will be able to see all the components of the Main Camera in the Inspector Panel.

    1. Das Kamera Objekt muss als Hauptkamera benannt werden (Beachten Sie die Schreibweise).The Camera object must be named Main Camera (note the spelling!)

    2. Das Hauptkamera Kennzeichen muss auf maincamera festgelegt sein (Beachten Sie die Schreibweise).The Main Camera Tag must be set to MainCamera (note the spelling!)

    3. Stellen Sie sicher, dass die Transformations Position auf 0, 0, 0 festgelegt ist.Make sure the Transform Position is set to 0, 0, 0

    4. Klartext auf voll Tonfarbe festlegenSet Clear Flags to Solid Color

    5. Legen Sie die Hintergrund Farbe der Kamera Komponente auf schwarz, Alpha 0 (Hexadezimal Code: #00000000) fest.Set the Background Color of the Camera Component to Black, Alpha 0 (Hex Code: #00000000)

      Einrichten von Kamerakomponenten

Kapitel 5 – Importieren der Newtonsoft.Jsfür die BibliothekChapter 5 – Import the Newtonsoft.Json library

Wichtig

Wenn Sie das ". unitypackage" im letzten Kapitelimportiert haben, können Sie dieses Kapitel überspringen.If you imported the '.unitypackage' in the last Chapter, you can skip this Chapter.

Zum Deserialisieren und Serialisieren von Objekten, die empfangen und an den bot-Dienst gesendet werden, müssen Sie die Newtonsoft.Jsin der Bibliothek herunterladen.To help you deserialize and serialize objects received and sent to the Bot Service you need to download the Newtonsoft.Json library. Sie werden feststellen, dass eine kompatible Version bereits mit der richtigen Unity-Ordnerstruktur in dieser Unity-Paketdateiorganisiert ist.You will find a compatible version already organized with the correct Unity folder structure in this Unity package file.

So importieren Sie die Bibliothek:To import the library:

  1. Laden Sie das Unity-Paket herunter.Download the Unity Package.

  2. Klicken Sie auf Assets, Import Package, Custom Package.Click on Assets, Import Package, Custom Package.

    Importieren von Newtonsoft.Js

  3. Suchen Sie nach dem Paket Unity, das Sie heruntergeladen haben, und klicken Sie auf Öffnen.Look for the Unity Package you have downloaded, and click Open.

  4. Stellen Sie sicher, dass alle Komponenten des Pakets getickt sind, und klicken Sie auf importieren.Make sure all the components of the package are ticked and click Import.

    Importieren der Newtonsoft.Jsauf Assets

Kapitel 6: Erstellen der faceanalysis-KlasseChapter 6 - Create the FaceAnalysis class

Der Zweck der faceanalysis-Klasse besteht darin, die Methoden zu hosten, die für die Kommunikation mit Ihrem Azure-Gesichts Erkennungsdienst erforderlich sind.The purpose of the FaceAnalysis class is to host the methods necessary to communicate with your Azure Face Recognition Service.

  • Nachdem der Dienst ein Erfassungs Abbild gesendet hat, wird es analysiert und die Gesichter innerhalb von identifiziert, und es wird bestimmt, ob eine beliebige zu einer bekannten Person gehört.After sending the service a capture image, it will analyse it and identify the faces within, and determine if any belong to a known person.
  • Wenn eine bekannte Person gefunden wird, wird der Name dieser Klasse in der Szene als Benutzeroberflächen Text angezeigt.If a known person is found, this class will display its name as UI text in the scene.

So erstellen Sie die faceanalysis -Klasse:To create the FaceAnalysis class:

  1. Klicken Sie im Projekt Panel mit der rechten Maustaste in den Ordner Objekte , und klicken Sie dann auf > Ordner erstellen.Right-click in the Assets Folder located in the Project Panel, then click on Create > Folder. Nennen Sie die Ordner Skripts.Call the folder Scripts.

    Erstellen Sie die faceanalysis-Klasse.

  2. Doppelklicken Sie auf den soeben erstellten Ordner, um ihn zu öffnen.Double click on the folder just created, to open it.

  3. Klicken Sie mit der rechten Maustaste in den Ordner, und klicken Sie dann auf > c#-Skript erstellen.Right-click inside the folder, then click on Create > C# Script. Nennen Sie das Skript faceanalysis.Call the script FaceAnalysis.

  4. Doppelklicken Sie auf das neue faceanalysis -Skript, um es mit Visual Studio 2017 zu öffnen.Double click on the new FaceAnalysis script to open it with Visual Studio 2017.

  5. Geben Sie die folgenden Namespaces oberhalb der faceanalysis -Klasse ein:Enter the following namespaces above the FaceAnalysis class:

        using Newtonsoft.Json;
        using System.Collections;
        using System.Collections.Generic;
        using System.IO;
        using System.Text;
        using UnityEngine;
        using UnityEngine.Networking;
    
  6. Nun müssen Sie alle-Objekte hinzufügen, die für die Deserialisierung verwendet werden.You now need to add all of the objects which are used for deserialising. Diese Objekte müssen außerhalb des faceanalysis -Skripts hinzugefügt werden (unterhalb der unteren geschweiften Klammer).These objects need to be added outside of the FaceAnalysis script (beneath the bottom curly bracket).

        /// <summary>
        /// The Person Group object
        /// </summary>
        public class Group_RootObject
        {
            public string personGroupId { get; set; }
            public string name { get; set; }
            public object userData { get; set; }
        }
    
        /// <summary>
        /// The Person Face object
        /// </summary>
        public class Face_RootObject
        {
            public string faceId { get; set; }
        }
    
        /// <summary>
        /// Collection of faces that needs to be identified
        /// </summary>
        public class FacesToIdentify_RootObject
        {
            public string personGroupId { get; set; }
            public List<string> faceIds { get; set; }
            public int maxNumOfCandidatesReturned { get; set; }
            public double confidenceThreshold { get; set; }
        }
    
        /// <summary>
        /// Collection of Candidates for the face
        /// </summary>
        public class Candidate_RootObject
        {
            public string faceId { get; set; }
            public List<Candidate> candidates { get; set; }
        }
    
        public class Candidate
        {
            public string personId { get; set; }
            public double confidence { get; set; }
        }
    
        /// <summary>
        /// Name and Id of the identified Person
        /// </summary>
        public class IdentifiedPerson_RootObject
        {
            public string personId { get; set; }
            public string name { get; set; }
        }
    
  7. Die Methoden " Start () " und " Update () " werden nicht verwendet. löschen Sie Sie jetzt.The Start() and Update() methods will not be used, so delete them now.

  8. Fügen Sie in der faceanalysis -Klasse die folgenden Variablen hinzu:Inside the FaceAnalysis class, add the following variables:

        /// <summary>
        /// Allows this class to behave like a singleton
        /// </summary>
        public static FaceAnalysis Instance;
    
        /// <summary>
        /// The analysis result text
        /// </summary>
        private TextMesh labelText;
    
        /// <summary>
        /// Bytes of the image captured with camera
        /// </summary>
        internal byte[] imageBytes;
    
        /// <summary>
        /// Path of the image captured with camera
        /// </summary>
        internal string imagePath;
    
        /// <summary>
        /// Base endpoint of Face Recognition Service
        /// </summary>
        const string baseEndpoint = "https://westus.api.cognitive.microsoft.com/face/v1.0/";
    
        /// <summary>
        /// Auth key of Face Recognition Service
        /// </summary>
        private const string key = "- Insert your key here -";
    
        /// <summary>
        /// Id (name) of the created person group 
        /// </summary>
        private const string personGroupId = "- Insert your group Id here -";
    

    Hinweis

    Ersetzen Sie den Schlüssel und die persongroupid durch ihren Dienst Schlüssel und die ID der Gruppe, die Sie zuvor erstellt haben.Replace the key and the personGroupId with your Service Key and the Id of the group that you created previously.

  9. Fügen Sie die Awa() -Methode hinzu, die die-Klasse initialisiert, indem Sie der Hauptkamera die imagecapture -Klasse hinzufügen und die Erstellungs Methode der Bezeichnung aufrufen:Add the Awake() method, which initialises the class, adding the ImageCapture class to the Main Camera and calls the Label creation method:

        /// <summary>
        /// Initialises this class
        /// </summary>
        private void Awake()
        {
            // Allows this instance to behave like a singleton
            Instance = this;
    
            // Add the ImageCapture Class to this Game Object
            gameObject.AddComponent<ImageCapture>();
    
            // Create the text label in the scene
            CreateLabel();
        }
    
  10. Fügen Sie die Methode " kreatelabel () " hinzu, die das Label -Objekt erstellt, um das Analyseergebnis anzuzeigen:Add the CreateLabel() method, which creates the Label object to display the analysis result:

        /// <summary>
        /// Spawns cursor for the Main Camera
        /// </summary>
        private void CreateLabel()
        {
            // Create a sphere as new cursor
            GameObject newLabel = new GameObject();
    
            // Attach the label to the Main Camera
            newLabel.transform.parent = gameObject.transform;
    
            // Resize and position the new cursor
            newLabel.transform.localScale = new Vector3(0.4f, 0.4f, 0.4f);
            newLabel.transform.position = new Vector3(0f, 3f, 60f);
    
            // Creating the text of the Label
            labelText = newLabel.AddComponent<TextMesh>();
            labelText.anchor = TextAnchor.MiddleCenter;
            labelText.alignment = TextAlignment.Center;
            labelText.tabSize = 4;
            labelText.fontSize = 50;
            labelText.text = ".";       
        }
    
  11. Fügen Sie die erkenctfacesfromimage () -und die getimageasbytearray () -Methode hinzu.Add the DetectFacesFromImage() and GetImageAsByteArray() method. Der erste fordert den Gesichts Erkennungsdienst auf, um alle möglichen Gesichter im übermittelten Abbild zu erkennen, während Letzteres erforderlich ist, um das erfasste Bild in ein Bytearray zu konvertieren:The former will request the Face Recognition Service to detect any possible face in the submitted image, while the latter is necessary to convert the captured image into a bytes array:

        /// <summary>
        /// Detect faces from a submitted image
        /// </summary>
        internal IEnumerator DetectFacesFromImage()
        {
            WWWForm webForm = new WWWForm();
            string detectFacesEndpoint = $"{baseEndpoint}detect";
    
            // Change the image into a bytes array
            imageBytes = GetImageAsByteArray(imagePath);
    
            using (UnityWebRequest www = 
                UnityWebRequest.Post(detectFacesEndpoint, webForm))
            {
                www.SetRequestHeader("Ocp-Apim-Subscription-Key", key);
                www.SetRequestHeader("Content-Type", "application/octet-stream");
                www.uploadHandler.contentType = "application/octet-stream";
                www.uploadHandler = new UploadHandlerRaw(imageBytes);
                www.downloadHandler = new DownloadHandlerBuffer();
    
                yield return www.SendWebRequest();
                string jsonResponse = www.downloadHandler.text;
                Face_RootObject[] face_RootObject = 
                    JsonConvert.DeserializeObject<Face_RootObject[]>(jsonResponse);
    
                List<string> facesIdList = new List<string>();
                // Create a list with the face Ids of faces detected in image
                foreach (Face_RootObject faceRO in face_RootObject)
                {
                    facesIdList.Add(faceRO.faceId);
                    Debug.Log($"Detected face - Id: {faceRO.faceId}");
                }
    
                StartCoroutine(IdentifyFaces(facesIdList));
            }
        }
    
        /// <summary>
        /// Returns the contents of the specified file as a byte array.
        /// </summary>
        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);
        }
    
  12. Fügen Sie die identifyfaces () -Methode hinzu, die den Gesichts Erkennungsdienst anfordert, alle bekannten Gesichter zu identifizieren, die zuvor im übermittelten Bild erkannt wurden.Add the IdentifyFaces() method, which requests the Face Recognition Service to identify any known face previously detected in the submitted image. Von der Anforderung wird eine ID der identifizierten Person, jedoch nicht der Name zurückgegeben:The request will return an id of the identified person but not the name:

        /// <summary>
        /// Identify the faces found in the image within the person group
        /// </summary>
        internal IEnumerator IdentifyFaces(List<string> listOfFacesIdToIdentify)
        {
            // Create the object hosting the faces to identify
            FacesToIdentify_RootObject facesToIdentify = new FacesToIdentify_RootObject();
            facesToIdentify.faceIds = new List<string>();
            facesToIdentify.personGroupId = personGroupId;
            foreach (string facesId in listOfFacesIdToIdentify)
            {
                facesToIdentify.faceIds.Add(facesId);
            }
            facesToIdentify.maxNumOfCandidatesReturned = 1;
            facesToIdentify.confidenceThreshold = 0.5;
    
            // Serialize to Json format
            string facesToIdentifyJson = JsonConvert.SerializeObject(facesToIdentify);
            // Change the object into a bytes array
            byte[] facesData = Encoding.UTF8.GetBytes(facesToIdentifyJson);
    
            WWWForm webForm = new WWWForm();
            string detectFacesEndpoint = $"{baseEndpoint}identify";
    
            using (UnityWebRequest www = UnityWebRequest.Post(detectFacesEndpoint, webForm))
            {
                www.SetRequestHeader("Ocp-Apim-Subscription-Key", key);
                www.SetRequestHeader("Content-Type", "application/json");
                www.uploadHandler.contentType = "application/json";
                www.uploadHandler = new UploadHandlerRaw(facesData);
                www.downloadHandler = new DownloadHandlerBuffer();
    
                yield return www.SendWebRequest();
                string jsonResponse = www.downloadHandler.text;
                Debug.Log($"Get Person - jsonResponse: {jsonResponse}");
                Candidate_RootObject [] candidate_RootObject = JsonConvert.DeserializeObject<Candidate_RootObject[]>(jsonResponse);
    
                // For each face to identify that ahs been submitted, display its candidate
                foreach (Candidate_RootObject candidateRO in candidate_RootObject)
                {
                    StartCoroutine(GetPerson(candidateRO.candidates[0].personId));
    
                    // Delay the next "GetPerson" call, so all faces candidate are displayed properly
                    yield return new WaitForSeconds(3);
                }           
            }
        }
    
  13. Fügen Sie die GetPerson () -Methode hinzu.Add the GetPerson() method. Durch die Angabe der Person-ID fordert diese Methode dann an, dass der Gesichts Erkennungsdienst den Namen der identifizierten Person zurückgibt:By providing the person id, this method then requests for the Face Recognition Service to return the name of the identified person:

        /// <summary>
        /// Provided a personId, retrieve the person name associated with it
        /// </summary>
        internal IEnumerator GetPerson(string personId)
        {
            string getGroupEndpoint = $"{baseEndpoint}persongroups/{personGroupId}/persons/{personId}?";
            WWWForm webForm = new WWWForm();
    
            using (UnityWebRequest www = UnityWebRequest.Get(getGroupEndpoint))
            {
                www.SetRequestHeader("Ocp-Apim-Subscription-Key", key);
                www.downloadHandler = new DownloadHandlerBuffer();
                yield return www.SendWebRequest();
                string jsonResponse = www.downloadHandler.text;
    
                Debug.Log($"Get Person - jsonResponse: {jsonResponse}");
                IdentifiedPerson_RootObject identifiedPerson_RootObject = JsonConvert.DeserializeObject<IdentifiedPerson_RootObject>(jsonResponse);
    
                // Display the name of the person in the UI
                labelText.text = identifiedPerson_RootObject.name;
            }
        }
    
  14. Vergessen Sie nicht, die Änderungen zu Speichern , bevor Sie zum Unity-Editor zurückkehren.Remember to Save the changes before going back to the Unity Editor.

  15. Ziehen Sie im Unity-Editor das faceanalysis-Skript aus dem Ordner Scripts im Projekt Panel auf das Hauptkamera Objekt im Hierarchie Panel.In the Unity Editor, drag the FaceAnalysis script from the Scripts folder in Project panel to the Main Camera object in the Hierarchy panel. Die neue Skript Komponente wird der Hauptkamera so hinzugefügt.The new script component will be so added to the Main Camera.

Legen Sie faceanalysis auf der Hauptkamera ab.

Kapitel 7: Erstellen der imagecapture-KlasseChapter 7 - Create the ImageCapture class

Der Zweck der imagecapture -Klasse besteht darin, die Methoden zu hosten, die für die Kommunikation mit Ihrem Azure-Gesichts Erkennungsdienst erforderlich sind, um das Abbild zu analysieren, das Sie erfassen möchten, und zu ermitteln, ob es zu einer bekannten Person gehört.The purpose of the ImageCapture class is to host the methods necessary to communicate with your Azure Face Recognition Service to analyse the image you will capture, identifying faces in it and determining if it belongs to a known person. Wenn eine bekannte Person gefunden wird, wird der Name dieser Klasse in der Szene als Benutzeroberflächen Text angezeigt.If a known person is found, this class will display its name as UI text in the scene.

So erstellen Sie die imagecapture -Klasse:To create the ImageCapture class:

  1. Klicken Sie mit der rechten Maustaste in den Skript Ordner, den Sie zuvor erstellt haben, und klicken Sie dann auf Erstellen, c#-Skript.Right-click inside the Scripts folder you have created previously, then click on Create, C# Script. Nennen Sie das Skript imagecapture.Call the script ImageCapture.

  2. Doppelklicken Sie auf das neue imagecapture -Skript, um es mit Visual Studio 2017 zu öffnen.Double click on the new ImageCapture script to open it with Visual Studio 2017.

  3. Geben Sie die folgenden Namespaces oberhalb der imagecapture-Klasse ein:Enter the following namespaces above the ImageCapture class:

        using System.IO;
        using System.Linq;
        using UnityEngine;
        using UnityEngine.XR.WSA.Input;
        using UnityEngine.XR.WSA.WebCam;
    
  4. Fügen Sie in der imagecapture -Klasse die folgenden Variablen hinzu:Inside the ImageCapture class, add the following variables:

        /// <summary>
        /// Allows this class to behave like a singleton
        /// </summary>
        public static ImageCapture instance;
    
        /// <summary>
        /// Keeps track of tapCounts to name the captured images 
        /// </summary>
        private int tapsCount;
    
        /// <summary>
        /// PhotoCapture object used to capture images on HoloLens 
        /// </summary>
        private PhotoCapture photoCaptureObject = null;
    
        /// <summary>
        /// HoloLens class to capture user gestures
        /// </summary>
        private GestureRecognizer recognizer;
    
  5. Fügen Sie die " Awake () "-und " Start () "-Methoden hinzu, die erforderlich sind, um die Klasse zu initialisieren, und die hololens die Gesten des BenutzersAdd the Awake() and Start() methods necessary to initialise the class and allow the HoloLens to capture the user's gestures:

        /// <summary>
        /// Initialises this class
        /// </summary>
        private void Awake()
        {
            instance = this;
        }
    
        /// <summary>
        /// Called right after Awake
        /// </summary>
        void Start()
        {
            // Initialises user gestures capture 
            recognizer = new GestureRecognizer();
            recognizer.SetRecognizableGestures(GestureSettings.Tap);
            recognizer.Tapped += TapHandler;
            recognizer.StartCapturingGestures();
        }
    
  6. Fügen Sie den " taphandler () " hinzu, der aufgerufen wird, wenn der Benutzer eine Tap -Geste ausführt:Add the TapHandler() which is called when the user performs a Tap gesture:

        /// <summary>
        /// Respond to Tap Input.
        /// </summary>
        private void TapHandler(TappedEventArgs obj)
        {
            tapsCount++;
            ExecuteImageCaptureAndAnalysis();
        }
    
  7. Fügen Sie die executeimagecaptureandanalysis () -Methode hinzu, die den Prozess der Bild Erfassung startet:Add the ExecuteImageCaptureAndAnalysis() method, which will begin the process of Image Capturing:

        /// <summary>
        /// Begin process of Image Capturing and send To Azure Computer Vision service.
        /// </summary>
        private void ExecuteImageCaptureAndAnalysis()
        {
            Resolution cameraResolution = PhotoCapture.SupportedResolutions.OrderByDescending
                ((res) => res.width * res.height).First();
            Texture2D targetTexture = new Texture2D(cameraResolution.width, cameraResolution.height);
    
            PhotoCapture.CreateAsync(false, delegate (PhotoCapture captureObject)
            {
                photoCaptureObject = captureObject;
    
                CameraParameters c = new CameraParameters();
                c.hologramOpacity = 0.0f;
                c.cameraResolutionWidth = targetTexture.width;
                c.cameraResolutionHeight = targetTexture.height;
                c.pixelFormat = CapturePixelFormat.BGRA32;
    
                captureObject.StartPhotoModeAsync(c, delegate (PhotoCapture.PhotoCaptureResult result)
                {
                    string filename = string.Format(@"CapturedImage{0}.jpg", tapsCount);
                    string filePath = Path.Combine(Application.persistentDataPath, filename);
    
                    // Set the image path on the FaceAnalysis class
                    FaceAnalysis.Instance.imagePath = filePath;
    
                    photoCaptureObject.TakePhotoAsync
                    (filePath, PhotoCaptureFileOutputFormat.JPG, OnCapturedPhotoToDisk);
                });
            });
        }
    
  8. Fügen Sie die Handler hinzu, die aufgerufen werden, wenn der Foto Erfassungsprozess abgeschlossen wurde:Add the handlers that are called when the photo capture process has been completed:

        /// <summary>
        /// Called right after the photo capture process has concluded
        /// </summary>
        void OnCapturedPhotoToDisk(PhotoCapture.PhotoCaptureResult result)
        {
            photoCaptureObject.StopPhotoModeAsync(OnStoppedPhotoMode);
        }
    
        /// <summary>
        /// Register the full execution of the Photo Capture. If successful, it will begin the Image Analysis process.
        /// </summary>
        void OnStoppedPhotoMode(PhotoCapture.PhotoCaptureResult result)
        {
            photoCaptureObject.Dispose();
            photoCaptureObject = null;
    
            // Request image caputer analysis
            StartCoroutine(FaceAnalysis.Instance.DetectFacesFromImage());
        }
    
  9. Vergessen Sie nicht, die Änderungen zu Speichern , bevor Sie zum Unity-Editor zurückkehren.Remember to Save the changes before going back to the Unity Editor.

Kapitel 8: aufbauen der LösungChapter 8 - Building the solution

Um eine gründliche Test Ihrer Anwendung durchzuführen, müssen Sie Sie auf Ihre hololens querladen.To perform a thorough test of your application you will need to sideload it onto your HoloLens.

Bevor Sie vorgehen, stellen Sie Folgendes sicher:Before you do, ensure that:

  • Alle im Kapitel 3 erwähnten Einstellungen sind richtig festgelegt.All the settings mentioned in the Chapter 3 are set correctly.
  • Die Skript- faceanalysis ist an das Hauptkamera Objekt angefügt.The script FaceAnalysis is attached to the Main Camera object.
  • Der Authentifizierungs Schlüssel und die Gruppen-ID wurden innerhalb des faceanalysis -Skripts festgelegt.Both the Auth Key and Group Id have been set within the FaceAnalysis script.

A: an dieser Stelle können Sie die Projekt Mappe erstellen.A this point you are ready to build the Solution. Nachdem die Lösung erstellt wurde, können Sie Ihre Anwendung bereitstellen.Once the Solution has been built, you will be ready to deploy your application.

So beginnen Sie den Buildprozess:To begin the Build process:

  1. Speichern Sie die aktuelle Szene, indem Sie auf Datei und dann auf Speichern klicken.Save the current scene by clicking on File, Save.

  2. Wechseln Sie zu Datei, Buildeinstellungen, und klicken Sie auf offene Szenen hinzufügen.Go to File, Build Settings, click on Add Open Scenes.

  3. Stellen Sie sicher, dass Sie Unity c#-Projekte teilnehmen.Make sure to tick Unity C# Projects.

    Bereitstellen der Visual Studio-Projekt Mappe

  4. Klicken Sie auf erstellen.Press Build. Auf diese Weise startet Unity ein Datei-Explorer-Fenster, in dem Sie einen Ordner erstellen und auswählen müssen, in dem die App erstellt wird.Upon doing so, Unity will launch a File Explorer window, where you need to create and then select a folder to build the app into. Erstellen Sie diesen Ordner jetzt innerhalb des Unity-Projekts, und rufen Sie ihn App auf.Create that folder now, within the Unity project, and call it App. Klicken Sie dann mit ausgewähltem app-Ordner auf Ordner auswählen.Then with the App folder selected, press Select Folder.

  5. Unity erstellt das Projekt in den app-Ordner.Unity will begin building your project, out to the App folder.

  6. Nachdem die Erstellung von Unity abgeschlossen ist (Dies kann einige Zeit in Anspruch nehmen), wird ein Datei-Explorer-Fenster am Speicherort des Builds geöffnet.Once Unity has finished building (it might take some time), it will open a File Explorer window at the location of your build.

    Bereitstellen der Lösung aus Visual Studio

  7. Öffnen Sie den app-Ordner, und öffnen Sie dann die neue Projekt Mappe (wie oben gezeigt, MR_FaceRecognition. sln).Open your App folder, and then open the new Project Solution (as seen above, MR_FaceRecognition.sln).

Kapitel 9: Bereitstellen der AnwendungChapter 9 - Deploying your application

So stellen Sie auf hololens bereit:To deploy on HoloLens:

  1. Sie benötigen die IP-Adresse Ihrer hololens (für die Remote Bereitstellung) und, um sicherzustellen, dass sich Ihre hololens im Entwicklermodus befinden.You will need the IP Address of your HoloLens (for Remote Deploy), and to ensure your HoloLens is in Developer Mode. Gehen Sie dazu wie folgt vor:To do this:

    1. Öffnen Sie die Einstellungen, während Sie die hololens- Einstellungen durch tragen.Whilst wearing your HoloLens, open the Settings.
    2. Wechseln Sie zu Netzwerk & Internet > Wi-Fi > Erweiterte Optionen .Go to Network & Internet > Wi-Fi > Advanced Options
    3. Notieren Sie sich die IPv4 -Adresse.Note the IPv4 address.
    4. Navigieren Sie als nächstes wieder zu Einstellungen, und aktualisieren Sie dann & Sicherheits > für Entwickler .Next, navigate back to Settings, and then to Update & Security > For Developers
    5. Legen Sie den Entwicklermodus auf fest.Set Developer Mode On.
  2. Navigieren Sie zu Ihrem neuen Unity-Build ( App -Ordner), und öffnen Sie die Projektmappendatei mit Visual Studio.Navigate to your new Unity build (the App folder) and open the solution file with Visual Studio.

  3. Wählen Sie in der Projektmappenkonfiguration Debuggen.In the Solution Configuration select Debug.

  4. Wählen Sie auf der Projektmappenplattform die Option x86, Remote Computer aus.In the Solution Platform, select x86, Remote Machine.

    Ändern der Projektmappenkonfiguration

  5. Wechseln Sie zum Menü Erstellen , und klicken Sie auf Lösung bereitstellen, um die Anwendung auf die hololens quer zuladen.Go to the Build menu and click on Deploy Solution, to sideload the application to your HoloLens.

  6. Ihre APP sollte nun in der Liste der installierten apps auf Ihren hololens angezeigt werden, die bereit sind, gestartet zu werden.Your App should now appear in the list of installed apps on your HoloLens, ready to be launched!

Hinweis

Legen Sie für die Bereitstellung auf dem immersiven Headset die Projektmappenplattform auf lokaler Computer fest, und legen Sie die Konfiguration auf Debuggen und x86 als Plattform fest.To deploy to immersive headset, set the Solution Platform to Local Machine, and set the Configuration to Debug, with x86 as the Platform. Stellen Sie dann auf dem lokalen Computer bereit, indem Sie im Menü Erstellen die Option Lösung bereitstellen auswählen.Then deploy to the local machine, using the Build menu, selecting Deploy Solution.

Kapitel 10: Verwenden der AnwendungChapter 10 - Using the application

  1. Wenn Sie die hololens ausführen, starten Sie die app.Wearing the HoloLens, launch the app.

  2. Sehen Sie sich die Person an, die Sie beim Gesichtserkennungs-API registriert haben.Look at the person that you have registered with the Face API. Stellen Sie Folgendes sicher:Make sure that:

    • Das Gesicht der Person ist nicht zu weit und klar sichtbar.The person's face is not too distant and clearly visible
    • Die Umgebungsbeleuchtung ist nicht zu dunkel.The environment lighting is not too dark
  3. Verwenden Sie die Tap-Geste, um das Bild der Person zu erfassen.Use the tap gesture to capture the person's picture.

  4. Warten Sie, bis die APP die Analyse Anforderung sendet und eine Antwort erhält.Wait for the App to send the analysis request and receive a response.

  5. Wenn die Person erfolgreich erkannt wurde, wird der Name der Person als Benutzeroberflächen Text angezeigt.If the person has been successfully recognized, the person's name will appear as UI text.

  6. Sie können den Aufzeichnungsprozess mit der TAP-Geste alle paar Sekunden wiederholen.You can repeat the capture process using the tap gesture every few seconds.

Ihre fertiggestellte Azure Gesichtserkennungs-API-AnwendungYour finished Azure Face API Application

Herzlichen Glückwunsch, Sie haben eine Mixed Reality-App erstellt, die den Azure-Gesichts Erkennungsdienst nutzt, um Gesichter innerhalb eines Bilds zu erkennen und bekannte Gesichter zu identifizieren.Congratulations, you built a mixed reality app that leverages the Azure Face Recognition service to detect faces within an image, and identify any known faces.

Ergebnis der Fertigstellung dieses Kurses

ZusatzübungenBonus exercises

Übung 1Exercise 1

Der Azure-Gesichtserkennungs-API ist leistungsfähig genug, um bis zu 64 Gesichter in einem einzelnen Image zu erkennen.The Azure Face API is powerful enough to detect up to 64 faces in a single image. Erweitern Sie die Anwendung so, dass Sie unter vielen anderen Personen zwei oder drei Gesichter erkennen kann.Extend the application, so that it could recognize two or three faces, amongst many other people.

Übung 2Exercise 2

Der Azure-Gesichtserkennungs-API kann auch alle Arten von Attributinformationen zurückgeben.The Azure Face API is also able to provide back all kinds of attribute information. Integrieren Sie diese in die Anwendung.Integrate this into the application. Dies könnte noch interessanter sein, wenn Sie mit dem Emotionen-APIkombiniert werden.This could be even more interesting, when combined with the Emotion API.