304. Смешанная реальность и Azure: распознавание лицMR and Azure 304: Face recognition


Примечание

Руководства Mixed Reality Academy были разработаны для иммерсивных гарнитур HoloLens (1-го поколения) и иммерсивных гарнитур Mixed Reality.The Mixed Reality Academy tutorials were designed with HoloLens (1st gen) and Mixed Reality Immersive Headsets in mind. Поэтому мы считаем, что важно оставить эти руководства для разработчиков, которые ищут рекомендации по разработке для этих устройств.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. Данные руководства не будут обновляться с учетом последних наборов инструментов или возможностей взаимодействия для HoloLens 2.These tutorials will not be updated with the latest toolsets or interactions being used for HoloLens 2. Они будут сохранены для работы на поддерживаемых устройствах.They will be maintained to continue working on the supported devices. Появится новая серия руководств, которые будут опубликованы в будущем, где будет показано, как разрабатывать данные для 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. Это уведомление будет обновлено ссылкой на эти учебники при их публикации.This notice will be updated with a link to those tutorials when they are posted.


результат выполнения этого курса

В этом курсе вы узнаете, как добавить возможности распознавания лиц в приложение смешанной реальности с помощью Cognitive Services Azure с API распознавания лиц Майкрософт.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 API распознавания лиц — это служба Майкрософт, которая предоставляет разработчикам самые современные алгоритмы, все в облаке.Azure Face API is a Microsoft service, which provides developers with the most advanced face algorithms, all in the cloud. API распознавания лиц имеет две основные функции: обнаружение лиц с помощью атрибутов и распознавание лиц.The Face API has two main functions: face detection with attributes, and face recognition. Это позволяет разработчикам просто задать набор групп для лиц, а затем отправить образы запросов в службу позже, чтобы определить, кому принадлежит лицо.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. Дополнительные сведения см. на странице распознавания лиц Azure.For more information, visit the Azure Face Recognition page.

Прополнив этот курс, вы получите приложение HoloLens для смешанной реальности, которое сможет сделать следующее:Having completed this course, you will have a mixed reality HoloLens application, which will be able to do the following:

  1. Используйте жест касания , чтобы начать запись изображения с помощью встроенной камеры HoloLens.Use a Tap Gesture to initiate the capture of an image using the on-board HoloLens camera.
  2. Отправьте захваченный образ в службу API распознавания лиц Azure .Send the captured image to the Azure Face API service.
  3. Получение результатов алгоритма API распознавания лиц .Receive the results of the Face API algorithm.
  4. Используйте простой пользовательский интерфейс для просмотра имени сопоставленных людей.Use a simple User Interface, to display the name of matched people.

Вы узнаете, как получить результаты из службы API распознавания лиц в приложении смешанной реальности на основе Unity.This will teach you how to get the results from the Face API Service into your Unity-based mixed reality application.

В приложении вы будете выполнять интеграцию результатов с вашей структурой.In your application, it is up to you as to how you will integrate the results with your design. Этот курс предназначен для изучения того, как интегрировать службу Azure с проектом Unity.This course is designed to teach you how to integrate an Azure Service with your Unity Project. Это ваша задача использовать знания, полученные из этого курса, для улучшения приложения смешанной реальности.It is your job to use the knowledge you gain from this course to enhance your mixed reality application.

Поддержка устройствDevice support

КурсCourse HoloLensHoloLens Иммерсивные гарнитурыImmersive headsets
304. Смешанная реальность и Azure: распознавание лицMR and Azure 304: Face recognition ✔️✔️ ✔️✔️

Примечание

Хотя этот курс в основном ориентирован на HoloLens, вы можете также применить сведения, которые вы узнаете в этом курсе, к головным телефонам 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. Так как у головных гарнитур нет доступных камер, вам потребуется внешняя камера, подключенная к компьютеру.Because immersive (VR) headsets do not have accessible cameras, you will need an external camera connected to your PC. При работе с курсом вы увидите заметки о любых изменениях, которые могут потребоваться для поддержки головных телефонов (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.

Предварительные требованияPrerequisites

Примечание

Этот учебник предназначен для разработчиков, имеющих базовый опыт работы с Unity и C#.This tutorial is designed for developers who have basic experience with Unity and C#. Также имейте в виду, что предварительные требования и письменные инструкции в этом документе отражают, что проверялось и проверено во время написания статьи (Май 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). Вы можете использовать новейшее программное обеспечение, как указано в статье Установка средств , но не следует предполагать, что информация в этом курсе будет полностью соответствовать тому, что вы найдете в более новом программном обеспечении, чем показано ниже.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.

Для этого курса рекомендуется следующее оборудование и программное обеспечение:We recommend the following hardware and software for this course:

Перед началом работыBefore you start

  1. Чтобы избежать проблем при создании этого проекта, настоятельно рекомендуется создать проект, упомянутый в этом руководстве, в корневой или ближайшем к корневой папке (длинные пути к папкам могут вызвать проблемы во время сборки).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. Настройка и тестирование HoloLens.Set up and test your HoloLens. Если вам нужна поддержка по настройке HoloLens, обязательно посетите статью Настройка hololens.If you need support setting up your HoloLens, make sure to visit the HoloLens setup article.
  3. Рекомендуется выполнять настройку калибровки и датчика при разработке нового приложения HoloLens (иногда это может помочь в выполнении этих задач для каждого пользователя).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).

Чтобы получить справку по калибровке, перейдите по этой ссылке в статью калибровка HoloLens.For help on Calibration, please follow this link to the HoloLens Calibration article.

Чтобы получить справку по настройке датчика, перейдите по ссылке в статью Настройка датчика HoloLens.For help on Sensor Tuning, please follow this link to the HoloLens Sensor Tuning article.

Глава 1. портал AzureChapter 1 - The Azure Portal

Чтобы использовать службу API распознавания лиц в Azure, необходимо настроить экземпляр службы, чтобы сделать ее доступной для приложения.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. Сначала войдите на портал Azure.First, log in to the Azure Portal.

    Примечание

    Если у вас еще нет учетной записи Azure, необходимо создать ее.If you do not already have an Azure account, you will need to create one. Если вы используете этот учебник в учебной или лабораторной ситуации, обратитесь к своему преподавателю или к одной из прокторс, чтобы получить помощь в настройке новой учетной записи.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. Войдя в систему, щелкните New ( создать ) в левом верхнем углу и выполните поиск по API распознавания лиц нажмите клавишу Ввод.Once you are logged in, click on New in the top left corner, and search for Face API, press Enter.

    Поиск API распознавания лиц

    Примечание

    Слово New может быть заменено на создать ресурс в новых порталах.The word New may have been replaced with Create a resource, in newer portals.

  3. На новой странице будет представлено описание службы API распознавания лиц .The new page will provide a description of the Face API service. В нижнем левом углу этого запроса нажмите кнопку создать , чтобы создать связь с этой службой.At the bottom left of this prompt, select the Create button, to create an association with this service.

    сведения об API распознавания лиц

  4. После нажатия кнопки создать:Once you have clicked on Create:

    1. Вставьте нужное имя для этого экземпляра службы.Insert your desired name for this service instance.

    2. Выберите подписку.Select a subscription.

    3. Выберите ценовую категорию, подходящую для вас. Если вы впервые создаете службу API распознавания лиц, вам будет доступен бесплатный уровень (с именем F0).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. Выберите группу ресурсов или создайте новую.Choose a Resource Group or create a new one. Группа ресурсов предоставляет способ мониторинга, контроля доступа, подготовки счетов и управления ими для коллекции ресурсов Azure.A resource group provides a way to monitor, control access, provision and manage billing for a collection of Azure assets. Рекомендуется, чтобы все службы Azure, связанные с одним проектом (например, в этих лабораториях), были в общей группе ресурсов.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).

      Если вы хотите ознакомиться с дополнительными сведениями о группах ресурсов Azure, обратитесь к статье о группе ресурсов.If you wish to read more about Azure Resource Groups, please visit the resource group article.

    5. Приложение UWP, которое вы используете позже, должно использовать "Западная часть США" для расположения.The UWP app, Person Maker, which you use later, requires the use of 'West US' for location.

    6. Также необходимо подтвердить, что вы поняли условия, примененные к этой службе.You will also need to confirm that you have understood the Terms and Conditions applied to this Service.

    7. Выберите **создать *.**Select Create*.

      Создание службы API распознавания лиц

  5. После нажатия кнопки **создать *** необходимо подождать, пока не будет создана служба, а это может занять некоторое время.Once you have clicked on Create*, you will have to wait for the service to be created, this might take a minute.

  6. После создания экземпляра службы на портале отобразится уведомление.A notification will appear in the portal once the Service instance is created.

    уведомление о создании службы

  7. Щелкните уведомления, чтобы изучить новый экземпляр службы.Click on the notifications to explore your new Service instance.

    Переход к уведомлению о ресурсе

  8. Когда будете готовы, нажмите кнопку Перейти к ресурсу в уведомлении, чтобы изучить новый экземпляр службы.When you are ready, click Go to resource button in the notification to explore your new Service instance.

    ключи API лиц для доступа

  9. В рамках этого руководства приложение должно будет вызывать службу, что выполняется с помощью ключа подписки вашей службы.Within this tutorial, your application will need to make calls to your service, which is done through using your service's subscription 'key'. На странице быстрого запуска службы API распознавания лица первая точка — номер 1, чтобы взять ключи.From the Quick start page, of your Face API service, the first point is number 1, to Grab your keys.

  10. На странице Служба выберите гиперссылку «синие ключи » (если на странице быстрого запуска) или ссылку « ключи » в меню навигации служб (слева, обозначенном значком «ключ»), чтобы отобразить ключи.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.

    Примечание

    Запишите либо один из ключей, и защитите его, так как он понадобится позже.Take note of either one of the keys and safeguard it, as you will need it later.

Глава 2. Использование приложения UWP "Person Maker"Chapter 2 - Using the 'Person Maker' UWP application

Обязательно загрузите предварительно созданное приложение UWP с именем Person Maker.Make sure to download the prebuilt UWP Application called Person Maker. Это приложение не является конечным продуктом для этого курса. это просто средство, которое поможет вам создать свои записи Azure, на которые последует последующий проект.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 позволяет создавать записи Azure, связанные с людьми и группами людей.Person Maker allows you to create Azure entries, which are associated with people, and groups of people. Приложение поместит всю необходимую информацию в формате, который впоследствии может использоваться Фацеапи, чтобы распознать лиц, которые были добавлены.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.

СУЩЕСТВЕННО Person Maker использует некоторое базовое регулирование, чтобы не превысить количество вызовов службы за минуту для бесплатного уровня подписки.[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. Зеленый текст в верхней части изменится на красный и будет обновляться как активный при регулировании. Если это так, просто дождитесь приложения (будет ожидать, пока он сможет продолжить доступ к службе распознавания лиц, обновив его как "IN-ACTIVE", когда его можно будет использовать).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).

В этом приложении используются библиотеки Microsoft. прожектоксфорд. Face , которые позволяют полностью использовать API распознавания лиц.This application uses the Microsoft.ProjectOxford.Face libraries, which will allow you to make full use of the Face API. Эта библиотека доступна бесплатно в качестве пакета NuGet.This library is available for free as a NuGet Package. Дополнительные сведения об этих и похожих API-интерфейсах см. в справочной статье по API.For more information about this, and similar, APIs make sure to visit the API reference article.

Примечание

Это лишь необходимые шаги. инструкции по выполнению этих действий приведены ниже в документе.These are just the steps required, instructions for how to do these things is further down the document. Приложение Person Maker позволит вам:The Person Maker app will allow you to:

  • Создайте группу Person, которая состоит из нескольких людей, которые вы хотите связать с ней.Create a Person Group, which is a group composed of several people which you want to associate with it. С помощью учетной записи Azure можно разместить несколько групп людей.With your Azure account you can host multiple Person Groups.

  • Создайте пользователя, который является членом группы людей.Create a Person, which is a member of a Person Group. С каждым лицом связано несколько изображений, связанных с лицом .Each person has a number of Face images associated with it.

  • Назначьте пользователю изображения лиц, чтобы служба Azure API распознавания лиц могла распознать человека с помощью соответствующего лица.Assign face images to a Person, to allow your Azure Face API Service to recognize a Person by the corresponding face.

  • Обучить службу API распознавания лиц Azure.Train your Azure Face API Service.

Имейте в виду, что чтобы обучить это приложение для распознавания людей, вам потребуется десять (10) закрываемых фотографий каждого человека, которого вы хотите добавить в вашу группу лиц.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. Приложение для фотосистемы Windows 10 поможет вам сделать это.The Windows 10 Cam App can help you to take these. Необходимо убедиться в том, что каждая фотография является ясной (Избегайте размытия, скрытия или слишком далекого края, от субъекта), постарайтесь иметь фотографию в формате JPG или PNG, размер файла изображения не должен превышать 4 МБ и не должен быть меньше 1 КБ.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.

Примечание

Если вы используете этот учебник, не используйте собственные лица для обучения, как при помещении HoloLens на, вы не сможете взглянуть на себя.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. Воспользуйтесь лицом коллеги или учащегося.Use the face of a colleague or fellow student.

Работающая программа Person Maker:Running Person Maker:

  1. Откройте папку персонмакер и дважды щелкните решение персонмакер , чтобы открыть его в Visual Studio.Open the PersonMaker folder and double click on the PersonMaker solution to open it with Visual Studio.

  2. После открытия решения персонмакер убедитесь в том, что:Once the PersonMaker solution is open, make sure that:

    1. Для конфигурации решения задано значение Отладка.The Solution Configuration is set to Debug.

    2. Платформа решения установлена в значение " x86 "The Solution Platform is set to x86

    3. Целевая платформалокальный компьютер.The Target Platform is Local Machine.

    4. Также может потребоваться восстановить пакеты NuGet (щелкните решение правой кнопкой мыши и выберите пункт восстановить пакеты NuGet).You also may need to Restore NuGet Packages (right-click the Solution and select Restore NuGet Packages).

  3. Щелкните локальный компьютер , и приложение запустится.Click Local Machine and the application will start. Имейте в виду, что на небольших экранах все содержимое может не отображаться, хотя можно прокручивать его вниз для просмотра.Be aware, on smaller screens, all content may not be visible, though you can scroll further down to view it.

    Пользовательский интерфейс Person Maker

  4. Вставьте ключ проверки подлинности Azure, который вам необходим, из службы API распознавания лиц в Azure.Insert your Azure Authentication Key, which you should have, from your Face API service within Azure.

  5. ВставляетInsert:

    1. Идентификатор , который необходимо назначить группе лиц.The ID you want to assign to the Person Group. Идентификатор должен быть строчным, без пробелов.The ID must be lowercase, with no spaces. Запишите этот идентификатор, так как он потребуется позже в проекте Unity.Make note of this ID, as it will be required later in your Unity project.
    2. Имя , которое нужно назначить группе Person (может содержать пробелы).The Name you want to assign to the Person Group (can have spaces).
  6. Нажмите кнопку создать группу Person .Press Create Person Group button. Под кнопкой появится сообщение с подтверждением.A confirmation message should appear underneath the button.

Примечание

При наличии ошибки "доступ запрещен" проверьте расположение, заданное для службы Azure.If you have an 'Access Denied' error, check the location you set for your Azure service. Как упоминалось выше, это приложение предназначено для "Западная часть США".As stated above, this app is designed for 'West US'.

Важно!

Вы заметите, что можно также нажать кнопку извлечь известную группу : Если вы уже создали группу лиц и хотите использовать ее, а не создать новую.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. Имейте в виду, что если щелкнуть создать группу лиц с известной группой, будет также получена группа.Be aware, if you click Create a Person Group with a known group, this will also fetch a group.

  1. Введите имя пользователя , которого вы хотите создать.Insert the Name of the Person you want to create.

    1. Нажмите кнопку создать пользователя .Click the Create Person button.

    2. Под кнопкой появится сообщение с подтверждением.A confirmation message should appear underneath the button.

    3. Если вы хотите удалить ранее созданного пользователя, вы можете записать его в текстовое поле и нажать клавишу Delete Person .If you wish to delete a person you have previously created, you can write the name into the textbox and press Delete Person

  2. Убедитесь, что вы знаете расположение десяти (10) фотографий человека, которого вы хотите добавить в группу.Make sure you know the location of ten (10) photos of the person you would like to add to your group.

  3. Нажмите кнопку создать и откройте папку , чтобы открыть проводник Windows в папке, связанной с пользователем.Press Create and Open Folder to open Windows Explorer to the folder associated to the person. Добавьте в папку десять изображений (10).Add the ten (10) images in the folder. Эти файлы должны иметь формат JPG или PNG .These must be of JPG or PNG file format.

  4. Щелкните отправить в Azure.Click on Submit To Azure. Счетчик показывает состояние отправки, за которым следует сообщение после его завершения.A counter will show you the state of the submission, followed by a message when it has completed.

  5. Когда счетчик будет завершен и появится сообщение с подтверждением, щелкните " обучение ", чтобы обучить службу.Once the counter has finished and a confirmation message has been displayed click on Train to train your Service.

После завершения процесса вы можете перейти в Unity.Once the process has completed, you are ready to move into Unity.

Глава 3. Настройка проекта UnityChapter 3 - Set up the Unity project

Ниже приведена типичная Настройка для разработки с использованием смешанной реальности, которая является хорошим шаблоном для других проектов.The following is a typical set up for developing with mixed reality, and as such, is a good template for other projects.

  1. Откройте Unity и нажмите кнопку создать.Open Unity and click New.

    Запуск нового проекта Unity.

  2. Теперь необходимо указать имя проекта Unity.You will now need to provide a Unity Project name. Вставка MR_FaceRecognition.Insert MR_FaceRecognition. Убедитесь, что для типа проекта задано значение 3D.Make sure the project type is set to 3D. Задайте для расположения нужное расположение (Помните, что ближе к корневым каталогам лучше).Set the Location to somewhere appropriate for you (remember, closer to root directories is better). Затем нажмите кнопку создать проект.Then, click Create project.

    Укажите сведения о новом проекте Unity.

  3. При открытом Unity стоит проверить, что для редактора скриптов по умолчанию задано значение Visual Studio.With Unity open, it is worth checking the default Script Editor is set to Visual Studio. Перейдите к разделу изменение параметров > , а затем в новом окне перейдите к разделу Внешние инструменты.Go to Edit > Preferences and then from the new window, navigate to External Tools. Измените Редактор внешних скриптов на Visual Studio 2017.Change External Script Editor to Visual Studio 2017. Закройте окно настройки .Close the Preferences window.

    Обновить настройки редактора скриптов.

  4. Затем перейдите в раздел файл > параметры сборки и переключите платформу на универсальная платформа Windows, нажав кнопку коммутатора платформы .Next, go to File > Build Settings and switch the platform to Universal Windows Platform, by clicking on the Switch Platform button.

    Окно "параметры сборки". Переключите платформу в UWP.

  5. Перейдите в раздел файл > параметры сборки и убедитесь в том, что:Go to File > Build Settings and make sure that:

    1. Целевое устройство имеет значение HoloLensTarget Device is set to HoloLens

      Для впечатляющих головных телефонов задайте для параметра целевое устройство любое устройство.For the immersive headsets, set Target Device to Any Device.

    2. Для типа сборки задано значение D3DBuild Type is set to D3D

    3. Пакет SDK установлен в значение " Последняя установка "SDK is set to Latest installed

    4. Для версии Visual Studio установлено значение " Последняя установка "Visual Studio Version is set to Latest installed

    5. Сборка и запуск настроены на локальный компьютерBuild and Run is set to Local Machine

    6. Сохраните сцену и добавьте ее в сборку.Save the scene and add it to the build.

      1. Для этого выберите Добавить открытые сцены.Do this by selecting Add Open Scenes. Появится окно сохранения.A save window will appear.

        Нажмите кнопку Добавить кнопку "открыть сцены"

      2. Нажмите кнопку создать папку , чтобы создать новую папку, назовите ее « сцены».Select the New folder button, to create a new folder, name it Scenes.

        Создать новую папку скриптов

      3. Откройте созданную папку сцены , а затем в текстовом поле имя файла введите фацерексцене, а затем нажмите кнопку сохранить.Open your newly created Scenes folder, and then in the File name: text field, type FaceRecScene, then press Save.

        Присвойте имя новой сцене.

    7. Оставшиеся параметры, в параметрах сборки, должны быть оставлены по умолчанию.The remaining settings, in Build Settings, should be left as default for now.

  6. В окне параметры сборки нажмите кнопку Параметры проигрывателя , чтобы открыть связанную панель в пространстве, где находится инспектор .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.

    Откройте параметры проигрывателя.

  7. На этой панели необходимо проверить несколько параметров:In this panel, a few settings need to be verified:

    1. На вкладке другие параметры выполните следующие действия.In the Other Settings tab:

      1. Версия среды выполнения сценариев должна быть экспериментальной (эквивалент .NET 4,6).Scripting Runtime Version should be Experimental (.NET 4.6 Equivalent). Изменение этого триггера приведет к необходимости перезапуска редактора.Changing this will trigger a need to restart the Editor.

      2. Серверная часть сценариев должна быть .NETScripting Backend should be .NET

      3. Уровень совместимости API должен быть .NET 4,6API Compatibility Level should be .NET 4.6

        Обновите другие параметры.

    2. На вкладке Параметры публикации в разделе возможности установите флажок:Within the Publishing Settings tab, under Capabilities, check:

      • InternetClient;InternetClient

      • Веб-камераWebcam

        Обновляются параметры публикации.

    3. На более низких панели в параметрах XR (см. ниже Параметры публикации), поддерживаемая виртуальная реальность Tick, убедитесь, что добавлен пакет SDK для Windows Mixed Reality .Further down the panel, in XR Settings (found below Publish Settings), tick Virtual Reality Supported, make sure the Windows Mixed Reality SDK is added.

      Обновите параметры X R.

  8. Вернемся к параметрам сборки. проекты C# для Unity больше не заключаются; Установите флажок рядом с этим.Back in Build Settings, Unity C# Projects is no longer greyed out; tick the checkbox next to this.

  9. Закройте окно Build Settings (Параметры сборки).Close the Build Settings window.

  10. Сохраните сцену и проект (файл > сохранить сцену или файл > сохранить проект).Save your Scene and Project (FILE > SAVE SCENE / FILE > SAVE PROJECT).

Глава 4 — Настройка основной камерыChapter 4 - Main Camera setup

Важно!

Если вы хотите пропустить компонент установки Unity, установленный в этом курсе, и продолжить работу с кодом, Скачайте этот файл. пакет unitypackageи импортируйте его в проект как пользовательский пакет.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. Имейте в виду, что этот пакет также включает в себя импорт библиотеки DLL Newtonsoft, описанной в главе 5.Be aware that this package also includes the import of the Newtonsoft DLL, covered in Chapter 5. После импорта можно продолжить с раздела 6.With this imported, you can continue from Chapter 6.

  1. На панели Иерархия выберите основную камеру.In the Hierarchy Panel, select the Main Camera.

  2. После выбора вы сможете увидеть все компоненты основной камеры на панели инспектора.Once selected, you will be able to see all the components of the Main Camera in the Inspector Panel.

    1. Объект Camera должен называться основной камерой (Обратите внимание на орфографию!)The Camera object must be named Main Camera (note the spelling!)

    2. Для тега основной камеры необходимо задать значение маинкамера (Обратите внимание на правописание).The Main Camera Tag must be set to MainCamera (note the spelling!)

    3. Убедитесь, что для параметра Расположение преобразования задано значение 0, 0, 0 .Make sure the Transform Position is set to 0, 0, 0

    4. Установить для чистых флагов сплошной цветSet Clear Flags to Solid Color

    5. Установить черный цвет фона для компонента камеры , альфа 0 (шестнадцатеричный код: #00000000)Set the Background Color of the Camera Component to Black, Alpha 0 (Hex Code: #00000000)

      Настройка компонентов камеры

Глава 5 — импорт Newtonsoft.Jsв библиотекеChapter 5 – Import the Newtonsoft.Json library

Важно!

Если вы импортировали ". пакет unitypackage" в последней главе, эту главу можно пропустить.If you imported the '.unitypackage' in the last Chapter, you can skip this Chapter.

Чтобы упростить десериализацию и сериализацию объектов, полученных и отправленных службе Bot, необходимо скачать Newtonsoft.Jsв библиотеке.To help you deserialize and serialize objects received and sent to the Bot Service you need to download the Newtonsoft.Json library. Совместимая версия уже организована с правильной структурой папок Unity в этом файле пакета Unity.You will find a compatible version already organized with the correct Unity folder structure in this Unity package file.

Чтобы импортировать библиотеку, сделайте следующее:To import the library:

  1. Скачайте пакет Unity.Download the Unity Package.

  2. Щелкните ресурсы, импортировать пакет, пользовательский пакет.Click on Assets, Import Package, Custom Package.

    Импорт Newtonsoft.Jsв

  3. Найдите скачанный пакет Unity и нажмите кнопку Открыть.Look for the Unity Package you have downloaded, and click Open.

  4. Убедитесь, что все компоненты пакета являются тактовыми, и нажмите кнопку Импорт.Make sure all the components of the package are ticked and click Import.

    Импорт Newtonsoft.Jsресурсов

Глава 6. Создание класса ФацеаналисисChapter 6 - Create the FaceAnalysis class

Класс Фацеаналисис предназначен для размещения методов, необходимых для взаимодействия со службой распознавания лиц Azure.The purpose of the FaceAnalysis class is to host the methods necessary to communicate with your Azure Face Recognition Service.

  • После отправки службой образа записи он будет анализировать и определять лица в и определять, принадлежат ли какие-либо лица известному человеку.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.
  • Если обнаружено известное лицо, этот класс будет отображать его имя в виде текста пользовательского интерфейса в сцене.If a known person is found, this class will display its name as UI text in the scene.

Чтобы создать класс фацеаналисис , сделайте следующее:To create the FaceAnalysis class:

  1. Щелкните правой кнопкой мыши папку активы , расположенную на панели проект, и выберите команду создать > папку.Right-click in the Assets Folder located in the Project Panel, then click on Create > Folder. Вызовите скрипты папки.Call the folder Scripts.

    Создайте класс Фацеаналисис.

  2. Дважды щелкните только что созданную папку, чтобы открыть ее.Double click on the folder just created, to open it.

  3. Щелкните правой кнопкой мыши внутри папки, а затем выберите пункт создать > скрипт C#.Right-click inside the folder, then click on Create > C# Script. Вызовите скрипт фацеаналисис.Call the script FaceAnalysis.

  4. Дважды щелкните новый скрипт фацеаналисис , чтобы открыть его в Visual Studio 2017.Double click on the new FaceAnalysis script to open it with Visual Studio 2017.

  5. Введите следующие пространства имен над классом фацеаналисис :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. Теперь необходимо добавить все объекты, используемые для десериалисинг.You now need to add all of the objects which are used for deserialising. Эти объекты должны быть добавлены за пределами сценария фацеаналисис (под нижней фигурной скобкой).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. Методы Start () и Update () не будут использоваться, поэтому удалите их сейчас.The Start() and Update() methods will not be used, so delete them now.

  8. В классе фацеаналисис добавьте следующие переменные: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 -";
    

    Примечание

    Замените ключ и персонграупид ключом службы и идентификатором созданной ранее группы.Replace the key and the personGroupId with your Service Key and the Id of the group that you created previously.

  9. Добавьте метод " спящий () ", который инитиалисес класс, добавив класс Имажекаптуре в основную камеру и вызовет метод создания метки: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. Добавьте метод CreateLabel () , который создает объект Label для вывода результатов анализа: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. Добавьте метод детектфацесфромимаже () и жетимажеасбитеаррай () .Add the DetectFacesFromImage() and GetImageAsByteArray() method. Первый из них запросит службу распознавания лиц обнаружить любое возможное лицо в отправленном изображении, а Последнее необходимо преобразовать записанный образ в массив байтов: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. Добавьте метод идентифифацес () , который запрашивает службу распознавания лиц для определения известных лиц, обнаруженных ранее в отправленном изображении.Add the IdentifyFaces() method, which requests the Face Recognition Service to identify any known face previously detected in the submitted image. Запрос возвратит идентификатор идентифицированного человека, но не имя: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. Добавьте метод -Person () .Add the GetPerson() method. Указав идентификатор пользователя, этот метод затем запрашивает службу распознавания лиц , чтобы вернуть имя идентифицированного человека: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. Не забудьте сохранить изменения перед возвратом в редактор Unity.Remember to Save the changes before going back to the Unity Editor.

  15. В редакторе Unity перетащите сценарий Фацеаналисис из папки скрипты на панели проект в главный объект Camera на панели Иерархия.In the Unity Editor, drag the FaceAnalysis script from the Scripts folder in Project panel to the Main Camera object in the Hierarchy panel. Новый компонент скрипта будет добавлен в основную камеру.The new script component will be so added to the Main Camera.

Размещение Фацеаналисис на основной камере

Глава 7. Создание класса ИмажекаптуреChapter 7 - Create the ImageCapture class

Класс имажекаптуре предназначен для размещения методов, необходимых для взаимодействия со службой распознавания лиц Azure , для анализа образа, который будет записан, определения лиц в нем и определения принадлежности к известному человеку.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. Если обнаружено известное лицо, этот класс будет отображать его имя в виде текста пользовательского интерфейса в сцене.If a known person is found, this class will display its name as UI text in the scene.

Чтобы создать класс имажекаптуре , сделайте следующее:To create the ImageCapture class:

  1. Щелкните правой кнопкой мыши в созданной ранее папке Scripts , а затем выберите создать, скрипт C#.Right-click inside the Scripts folder you have created previously, then click on Create, C# Script. Вызовите скрипт имажекаптуре.Call the script ImageCapture.

  2. Дважды щелкните новый скрипт имажекаптуре , чтобы открыть его в Visual Studio 2017.Double click on the new ImageCapture script to open it with Visual Studio 2017.

  3. Введите следующие пространства имен над классом Имажекаптуре: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. В классе имажекаптуре добавьте следующие переменные: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. Добавьте методы спящего режима () и Start () , необходимые для инициализироватьи класса, и разрешите HoloLens захватывать жесты пользователя:Add 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. Добавьте тафандлер () , который вызывается, когда пользователь выполняет жест касания :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. Добавьте метод ексекутеимажекаптуреанданалисис () , который начнет процесс записи образа: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. Добавьте обработчики, вызываемые при завершении процесса записи фотографий: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. Не забудьте сохранить изменения перед возвратом в редактор Unity.Remember to Save the changes before going back to the Unity Editor.

Глава 8. Создание решенияChapter 8 - Building the solution

Чтобы выполнить тщательный тест приложения, необходимо загружать неопубликованные его на HoloLens.To perform a thorough test of your application you will need to sideload it onto your HoloLens.

Перед этим убедитесь в том, что:Before you do, ensure that:

  • Все параметры, упомянутые в главе 3, заданы правильно.All the settings mentioned in the Chapter 3 are set correctly.
  • Фацеаналисис скрипта прикреплен к главному объекту Camera.The script FaceAnalysis is attached to the Main Camera object.
  • Ключ проверки подлинности и идентификатор группы заданы в сценарии фацеаналисис .Both the Auth Key and Group Id have been set within the FaceAnalysis script.

Этот момент готов к созданию решения.A this point you are ready to build the Solution. После сборки решения вы будете готовы к развертыванию приложения.Once the Solution has been built, you will be ready to deploy your application.

Чтобы начать процесс сборки:To begin the Build process:

  1. Сохраните текущую сцену, щелкнув файл, сохранить.Save the current scene by clicking on File, Save.

  2. Последовательно выберите пункты файл, параметры сборки и добавить открытые сцены.Go to File, Build Settings, click on Add Open Scenes.

  3. Убедитесь, что вы тикают проекты C# для Unity.Make sure to tick Unity C# Projects.

    Развертывание решения Visual Studio

  4. Нажмите кнопку сборка.Press Build. После этого Unity запустит окно проводника, в котором необходимо создать, а затем выбрать папку для построения приложения.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. Создайте эту папку прямо сейчас, в проекте Unity и назовите ее приложение.Create that folder now, within the Unity project, and call it App. Затем выберите папку приложения и нажмите кнопку Выбрать папку.Then with the App folder selected, press Select Folder.

  5. Unity начнет сборку проекта в папку приложения.Unity will begin building your project, out to the App folder.

  6. После завершения сборки Unity (может занять некоторое время) он откроет окно проводника в расположении сборки.Once Unity has finished building (it might take some time), it will open a File Explorer window at the location of your build.

    Развертывание решения из Visual Studio

  7. Откройте папку приложения, а затем откройте решение нового проекта (как показано выше, MR_FaceRecognition. sln).Open your App folder, and then open the new Project Solution (as seen above, MR_FaceRecognition.sln).

Глава 9. Развертывание приложенияChapter 9 - Deploying your application

Для развертывания на HoloLens выполните следующие действия.To deploy on HoloLens:

  1. Вам потребуется IP-адрес HoloLens (для удаленного развертывания) и убедитесь, что HoloLens находится в режиме разработчика.You will need the IP Address of your HoloLens (for Remote Deploy), and to ensure your HoloLens is in Developer Mode. Выполните указанные ниже действия.To do this:

    1. Людьми HoloLens, откройте Параметры.Whilst wearing your HoloLens, open the Settings.
    2. Последовательно выберите сетевые & интернет > Wi-Fi > дополнительные параметры .Go to Network & Internet > Wi-Fi > Advanced Options
    3. Запишите IPv4 -адрес.Note the IPv4 address.
    4. Затем вернитесь к параметрам и обновите & > безопасности для разработчиков .Next, navigate back to Settings, and then to Update & Security > For Developers
    5. Задайте режим разработчика на.Set Developer Mode On.
  2. Перейдите к новой сборке Unity (папка приложения ) и откройте файл решения в Visual Studio.Navigate to your new Unity build (the App folder) and open the solution file with Visual Studio.

  3. В конфигурации решения выберите Отладка.In the Solution Configuration select Debug.

  4. На платформе решения выберите x86, Удаленный компьютер.In the Solution Platform, select x86, Remote Machine.

    Изменение конфигурации решения

  5. Перейдите в меню "сборка " и щелкните " Развернуть решение", чтобы загружать неопубликованные приложение в HoloLens.Go to the Build menu and click on Deploy Solution, to sideload the application to your HoloLens.

  6. Теперь приложение должно отобразиться в списке установленных приложений в HoloLens, готовом к запуску.Your App should now appear in the list of installed apps on your HoloLens, ready to be launched!

Примечание

Чтобы выполнить развертывание в иммерсивное виртуальную гарнитуру, задайте для платформы решения значение локальный компьютер и задайте для параметра Конфигурация значение Отладка( x86 в качестве платформы).To deploy to immersive headset, set the Solution Platform to Local Machine, and set the Configuration to Debug, with x86 as the Platform. Затем выполните развертывание на локальном компьютере с помощью меню "сборка" и выберите пункт " Развернуть решение".Then deploy to the local machine, using the Build menu, selecting Deploy Solution.

Глава 10. Использование приложенияChapter 10 - Using the application

  1. Людьми HoloLens, запустите приложение.Wearing the HoloLens, launch the app.

  2. Взгляните на пользователя, зарегистрированного в API распознавания лиц.Look at the person that you have registered with the Face API. Убедитесь, что:Make sure that:

    • Лицо человека не является слишком отдаленным и ясно видимымThe person's face is not too distant and clearly visible
    • Освещение среды не слишком темнееThe environment lighting is not too dark
  3. Используйте жест касания, чтобы захватить изображение человека.Use the tap gesture to capture the person's picture.

  4. Подождите, пока приложение отправит запрос на анализ и получите ответ.Wait for the App to send the analysis request and receive a response.

  5. Если пользователь успешно распознал, его имя будет отображаться как текст пользовательского интерфейса.If the person has been successfully recognized, the person's name will appear as UI text.

  6. Процесс записи можно повторить с помощью жеста касания каждые несколько секунд.You can repeat the capture process using the tap gesture every few seconds.

Готовое приложение Azure API распознавания лицYour finished Azure Face API Application

Поздравляем! вы создали приложение смешанной реальности, которое использует службу распознавания лиц Azure для обнаружения лиц в образе и определения известных лиц.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.

результат выполнения этого курса

Дополнительные упражненияBonus exercises

Упражнение 1Exercise 1

API распознавания лиц Azure достаточно мощный, чтобы обнаружить до 64 лиц в одном образе.The Azure Face API is powerful enough to detect up to 64 faces in a single image. Расширьте приложение, чтобы оно могло распознать два или три лица, среди многих других людей.Extend the application, so that it could recognize two or three faces, amongst many other people.

Упражнение 2Exercise 2

API распознавания лиц Azure также может предоставлять все виды информации об атрибутах.The Azure Face API is also able to provide back all kinds of attribute information. Интегрируйте его в приложение.Integrate this into the application. Это может быть еще более интересно при объединении с API распознавания эмоций.This could be even more interesting, when combined with the Emotion API.