MR 및 Azure 302: Computer VisionMR and Azure 302: Computer vision


참고

Mixed Reality 아카데미 자습서는 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.


이 과정에서는 혼합 현실 응용 프로그램에서 Azure Computer Vision 기능을 사용 하 여 제공 된 이미지 내의 시각적 콘텐츠를 인식 하는 방법을 알아봅니다.In this course, you will learn how to recognize visual content within a provided image, using Azure Computer Vision capabilities in a mixed reality application.

인식 결과는 설명 태그로 표시 됩니다.Recognition results will be displayed as descriptive tags. Machine learning 모델을 학습 하지 않고도이 서비스를 사용할 수 있습니다.You can use this service without needing to train a machine learning model. 구현에서 기계 학습 모델을 학습 해야 하는 경우 MR 및 Azure 302b를 참조 하세요.If your implementation requires training a machine learning model, see MR and Azure 302b.

랩 결과

Microsoft Computer Vision는 개발자에 게 모든 클라우드에서 고급 알고리즘을 사용 하 여 이미지 처리 및 분석 (반환 정보 포함)을 제공 하도록 설계 된 Api 집합입니다.The Microsoft Computer Vision is a set of APIs designed to provide developers with image processing and analysis (with return information), using advanced algorithms, all from the cloud. 개발자는 이미지 또는 이미지 URL을 업로드 하 고 Microsoft Computer Vision API 알고리즘은 사용자가 선택한 입력을 기준으로 시각적 콘텐츠를 분석 하 여 이미지의 유형 및 품질 식별, 사용자 얼굴 감지 (좌표 반환), 이미지 태그 지정, 이미지 분류 등의 정보를 반환할 수 있습니다.Developers upload an image or image URL, and the Microsoft Computer Vision API algorithms analyze the visual content, based upon inputs chosen the user, which then can return information, including, identifying the type and quality of an image, detect human faces (returning their coordinates), and tagging, or categorizing images. 자세한 내용은 Azure Computer Vision API 페이지를 참조 하세요.For more information, visit the Azure Computer Vision API page.

이 과정을 완료 하면 다음과 같은 작업을 수행할 수 있는 혼합 현실 HoloLens 응용 프로그램이 만들어집니다.Having completed this course, you will have a mixed reality HoloLens application, which will be able to do the following:

  1. 탭 제스처를 사용 하 여 HoloLens 카메라는 이미지를 캡처합니다.Using the Tap gesture, the camera of the HoloLens will capture an image.
  2. 이미지가 Azure Computer Vision API 서비스로 전송 됩니다.The image will be sent to the Azure Computer Vision API Service.
  3. 인식 된 개체는 Unity 장면에 배치 된 간단한 UI 그룹에 나열 됩니다.The objects recognized will be listed in a simple UI group positioned in the Unity Scene.

응용 프로그램에서 결과를 디자인과 통합 하는 방법을 사용자가 결정 합니다.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
MR 및 Azure 302: Computer VisionMR and Azure 302: Computer vision ✔️✔️ ✔️✔️

참고

이 과정에서 주로 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. 모던 (VR) 헤드셋은 액세스할 수 있는 카메라를 포함 하지 않으므로 PC에 연결 된 외부 카메라가 필요 합니다.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 장-Azure PortalChapter 1 – The Azure Portal

Azure에서 Computer Vision API 서비스를 사용 하려면 응용 프로그램에서 사용할 수 있도록 서비스 인스턴스를 구성 해야 합니다.To use the Computer Vision API service in Azure, you will need to configure an instance of the service to be made available to your application.

  1. 먼저 Azure Portal에 로그인 합니다.First, log in to the Azure Portal.

    참고

    아직 Azure 계정이 없는 경우 새로 만들어야 합니다.If you do not already have an Azure account, you will need to create one. 교실 또는 랩 상황에서이 자습서를 수행 하는 경우 강사 또는 proctors 중 하나에 문의 하 여 새 계정을 설정 하는 데 도움이 될 수 있습니다.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. 로그인 되 면 왼쪽 위 모서리에서 새로 만들기 를 클릭 하 고 Computer Vision API 를 검색 한 다음 Enter 키 를 누릅니다.Once you are logged in, click on New in the top left corner, and search for Computer Vision API, and click Enter.

    Azure에서 새 리소스 만들기

    참고

    새 단어는 포털에서 리소스 만들기 로 대체 되었을 수 있습니다.The word New may have been replaced with Create a resource, in newer portals.

  3. 새 페이지에 Computer Vision API 서비스에 대 한 설명이 제공 됩니다.The new page will provide a description of the Computer Vision API service. 이 페이지의 왼쪽 아래에서 만들기 단추를 선택 하 여이 서비스와의 연결을 만듭니다.At the bottom left of this page, 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. 적절 한 가격 책정 계층 을 선택 합니다. Computer Vision API 서비스를 처음 만드는 경우 무료 계층 (명명 된 F0)을 사용할 수 있어야 합니다.Select the Pricing Tier appropriate for you, if this is the first time creating a Computer Vision API Service, a free tier (named F0) should be available to you.

    4. 리소스 그룹을 선택 하거나 새 리소스 그룹 을 만듭니다.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. 새 리소스 그룹을 만드는 경우 리소스 그룹의 위치를 확인 합니다.Determine the Location for your resource group (if you are creating a new Resource Group). 위치는 응용 프로그램이 실행 되는 영역에 있는 것이 가장 좋습니다.The location would ideally be in the region where the application would run. 일부 Azure 자산은 특정 지역 에서만 사용할 수 있습니다.Some Azure assets are only available in certain regions.

    6. 또한이 서비스에 적용 된 사용 약관을 이해 했는지 확인 해야 합니다.You will also need to confirm that you have understood the Terms and Conditions applied to this Service.

    7. 만들기를 클릭합니다.Click Create.

      서비스 생성 정보

  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 notification to explore your new Service instance.

    리소스로 이동 단추를 선택 합니다.

  8. 알림에서 리소스로 이동 단추를 클릭 하 여 새 서비스 인스턴스를 탐색 합니다.Click the Go to resource button in the notification to explore your new Service instance. 새 Computer Vision API 서비스 인스턴스로 이동 됩니다.You will be taken to your new Computer Vision API service instance.

    새 Computer Vision 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.

  10. Computer Vision API 서비스의 빠른 시작 페이지에서 첫 번째 단계로 이동 하 고 키를 클릭 한 다음 키를 클릭 합니다. 서비스 탐색 메뉴에서 키 아이콘으로 표시 되는 파란색 하이퍼링크 키 를 클릭 하 여이를 수행할 수도 있습니다.From the Quick start page, of your Computer Vision API service, navigate to the first step, Grab your keys, and click Keys (you can also achieve this by clicking the blue hyperlink Keys, located in the services navigation menu, denoted by the key icon). 이렇게 하면 서비스 가 표시 됩니다.This will reveal your service Keys.

  11. 프로젝트에서 나중에 필요 하므로 표시 된 키 중 하나를 복사 합니다.Take a copy of one of the displayed keys, as you will need this later in your project.

  12. 빠른 시작 페이지로 돌아가 여기에서 끝점을 인출 합니다.Go back to the Quick start page, and from there, fetch your endpoint. 사용자는 지역에 따라 다를 수 있습니다 (이 경우 나중에 코드를 변경 해야 하는 경우).Be aware yours may be different, depending on your region (which if it is, you will need to make a change to your code later). 나중에 사용 하기 위해이 끝점의 복사본을 가져옵니다.Take a copy of this endpoint for use later:

    새 Computer Vision API 서비스

    다양 한 끝점이 여기에 있는지 확인할 수 있습니다.You can check what the various endpoints are HERE.

2 장-Unity 프로젝트 설정Chapter 2 – 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_ComputerVision 를 삽입 합니다.Insert MR_ComputerVision. 프로젝트 형식이 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 select Universal Windows Platform, then click on the Switch Platform button to apply your selection.

    빌드 설정 창에서 플랫폼을 UWP로 전환 합니다.

  5. 아직 파일 > 빌드 설정을 사용 하 고 있는지 확인 합니다.While still in File > Build Settings and make sure that:

    1. 대상 장치가 HoloLens 로 설정 됨Target Device is set to HoloLens

      모던 헤드셋의 경우 대상 장치모든 장치로 설정 합니다.For the immersive headsets, set Target Device to Any Device.

    2. 빌드 형식이 D3D 로 설정 됩니다.Build 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. 이에 대 한 새 폴더를 만들고 나중에 장면을 만든 다음 새 폴더 단추를 선택 하 여 새 폴더를 만들고 이름을 장면을 로 지정한 다음Create a new folder for this, and any future, scene, then select the New folder button, to create a new folder, name it Scenes.

        새 스크립트 폴더 만들기

      3. 새로 만든 장면 폴더를 연 다음 파일 이름: 텍스트 필드에 MR_ComputerVisionScene 를 입력 하 고 저장 을 클릭 합니다.Open your newly created Scenes folder, and then in the File name: text field, type MR_ComputerVisionScene, then click Save.

        새 장면에 이름을 지정 합니다.

        Unity 프로젝트와 연결 되어 있어야 하므로 자산 폴더 내에 unity 장면을 저장 해야 합니다.Be aware, you must save your Unity scenes within the Assets folder, as they must be associated with the Unity Project. 배경 폴더 (및 기타 유사한 폴더)를 만드는 것은 Unity 프로젝트를 구조화 하는 일반적인 방법입니다.Creating the scenes folder (and other similar folders) is a typical way of structuring a Unity project.

    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. Scripting Runtime 버전안정적 이어야 합니다 (.net 3.5 해당).Scripting Runtime Version should be Stable (.NET 3.5 Equivalent).

      2. Scripting 백엔드.net 이어야 합니다.Scripting Backend should be .NET

      3. API 호환성 수준은 .net 4.6 이어야 합니다.API Compatibility Level should be .NET 4.6

        다른 설정을 업데이트 합니다.

    2. 게시 설정 탭의 기능 아래에서 다음을 확인 합니다.Within the Publishing Settings tab, under Capabilities, check:

      1. InternetClientInternetClient

      2. 웹캠Webcam

        게시 설정을 업데이트 하는 중입니다.

    3. 패널의 아래쪽에서 XR 설정 ( 게시 설정 아래에 있음), 지원 되는 틱 가상 현실, Windows Mixed reality SDK 가 추가 되어 있는지 확인 합니다.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. 빌드 설정 으로 돌아가기 Unity c # 프로젝트는 더 이상 회색으로 표시 되지 않습니다. 이 옆의 확인란을 선택 합니다.Back in Build Settings Unity C# Projects is no longer greyed out; tick the checkbox next to this.

  9. 빌드 설정 창을 닫습니다.Close the Build Settings window.

  10. 장면 및 프로젝트를 저장 합니다 (파일 > 장면/파일 저장 > 프로젝트 저장).Save your Scene and Project (FILE > SAVE SCENE / FILE > SAVE PROJECT).

3 장-기본 카메라 설정Chapter 3 – Main Camera setup

중요

이 과정의 Unity 설정 구성 요소를 건너뛰고 계속 해 서 코드를 계속 사용 하려면 unitypackage를 다운로드 하 여 프로젝트에 사용자 지정 패키지로가져온 후 5 장에서 계속 합니다.If you wish to skip the Unity Set up component of this course, and continue straight into code, feel free to download this .unitypackage, import it into your project as a Custom Package, and then continue from Chapter 5.

  1. 계층 패널 에서 기본 카메라 를 선택 합니다.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. 카메라 개체 의 이름을 주 카메라로 지정 해야 합니다 (철자 확인).The Camera object must be named Main Camera (note the spelling!)

    2. 기본 카메라 태그maincamera 로 설정 되어야 합니다 (철자 확인).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. Clear 플래그단색 으로 설정 합니다. 몰입 형 헤드셋의 경우이를 무시 합니다.Set Clear Flags to Solid Color (ignore this for immersive headset).

    5. 카메라 구성 요소의 배경색검은색, 알파 0 (16 진수 코드: #00000000) 으로 설정 합니다 (몰입 형 헤드셋의 경우 무시).Set the Background Color of the Camera Component to Black, Alpha 0 (Hex Code: #00000000) (ignore this for immersive headset).

      카메라 구성 요소를 업데이트 합니다.

  3. 다음으로, 주 카메라 에 연결 된 간단한 "커서" 개체를 만들어야 합니다. 그러면 응용 프로그램을 실행할 때 이미지 분석 출력을 배치 하는 데 도움이 됩니다.Next, you will have to create a simple “Cursor” object attached to the Main Camera, which will help you position the image analysis output when the application is running. 이 커서는 카메라 포커스의 중심점을 결정 합니다.This Cursor will determine the center point of the camera focus.

커서를 만들려면 다음을 수행 합니다.To create the Cursor:

  1. 계층 패널 에서 기본 카메라 를 마우스 오른쪽 단추로 클릭 합니다.In the Hierarchy Panel, right-click on the Main Camera. 3D 개체 에서 를 클릭 합니다.Under 3D Object, click on Sphere.

    커서 개체를 선택 합니다.

  2. 구의 이름을 커서로 변경 합니다 (커서 개체를 두 번 클릭 하거나 선택한 개체가 있는 ' F2 ' 키보드 단추를 누름). 기본 카메라 의 자식으로 배치 되어 있는지 확인 합니다.Rename the Sphere to Cursor (double click the Cursor object or press the ‘F2’ keyboard button with the object selected), and make sure it is located as child of the Main Camera.

  3. 계층 패널 에서 커서 를 마우스 왼쪽 단추를 클릭 합니다.In the Hierarchy Panel, left click on the Cursor. 커서를 선택 하 고 검사기 패널 에서 다음 변수를 조정 합니다.With the Cursor selected, adjust the following variables in the Inspector Panel:

    1. 변환 위치0, 0, 5 로 설정 합니다.Set the Transform Position to 0, 0, 5

    2. 소수 자릿수0.02, 0.02, 0.02 로 설정 합니다.Set the Scale to 0.02, 0.02, 0.02

      변환 위치 및 소수 자릿수를 업데이트 합니다.

4 장-레이블 시스템 설정Chapter 4 – Setup the Label system

HoloLens 카메라를 사용 하 여 이미지를 캡처한 후 해당 이미지는 분석을 위해 Azure Computer Vision API 서비스 인스턴스로 전송 됩니다.Once you have captured an image with the HoloLens’ camera, that image will be sent to your Azure Computer Vision API Service instance for analysis.

이 분석의 결과는 태그 라고 하는 인식 된 개체의 목록이 됩니다.The results of that analysis will be a list of recognized objects called Tags.

레이블 (세계 공간에서 3D 텍스트로)을 사용 하 여 사진이 만들어진 위치에 이러한 태그를 표시 합니다.You will use Labels (as a 3D text in world space) to display these Tags at the location the photo was taken.

다음 단계에서는 Label 개체를 설정 하는 방법을 보여 줍니다.The following steps will show how to setup the Label object.

  1. 계층 패널에서 아무 곳 이나 마우스 오른쪽 단추로 클릭 하 고 (위치는이 시점에서 중요 하지 않음) 3D 개체 에서 3d 텍스트 를 추가 합니다.Right-click anywhere in the Hierarchy Panel (the location does not matter at this point), under 3D Object, add a 3D Text. 레이블 텍스트 를 이름으로 합니다.Name it LabelText.

    3D 텍스트 개체를 만듭니다.

  2. 계층 패널 에서 레이블 텍스트 를 마우스 왼쪽 단추를 클릭 합니다.In the Hierarchy Panel, left click on the LabelText. Labeltext 를 선택한 상태에서 검사기 패널 의 다음 변수를 조정 합니다.With the LabelText selected, adjust the following variables in the Inspector Panel:

    1. 위치0, 0, 0 으로 설정 합니다.Set the Position to 0,0,0
    2. 소수 자릿수0.01, 0.01, 0.01 로 설정 합니다.Set the Scale to 0.01, 0.01, 0.01
    3. 구성 요소 텍스트 메시 에서 다음을 수행 합니다.In the component Text Mesh:
    4. 텍스트 에 있는 모든 텍스트를 "..."로 바꿉니다.Replace all the text within Text, with "..."
    5. 앵커중간 가운데로 설정Set the Anchor to Middle Center
    6. 맞춤을 가운데 맞춤 으로 설정Set the Alignment to Center
    7. 탭 크기4 로 설정 합니다.Set the Tab Size to 4
    8. 글꼴 크기50 으로 설정 합니다.Set the Font Size to 50
    9. #FFFFFFFF 설정 합니다.Set the Color to #FFFFFFFF

    텍스트 구성 요소

  3. 계층 패널Labeltext프로젝트 패널 내의 Asset 폴더로 끌어 옵니다.Drag the LabelText from the Hierarchy Panel, into the Asset Folder, within in the Project Panel. 이렇게 하면 레이블 텍스트가 Prefab로 설정 되어 코드에서 인스턴스화될 수 있습니다.This will make the LabelText a Prefab, so that it can be instantiated in code.

    LabelText 개체의 prefab을 만듭니다.

  4. 열이 표시 되는 장면에 표시 되지 않도록 계층 패널 에서 labeltext 를 삭제 해야 합니다.You should delete the LabelText from the Hierarchy Panel, so that it will not be displayed in the opening scene. 이제 자산 폴더의 개별 인스턴스에 대해를 호출 하는 prefab 장면 내에서 보관할 필요가 없습니다.As it is now a prefab, which you will call on for individual instances from your Assets folder, there is no need to keep it within the scene.

  5. 계층 패널 의 최종 개체 구조는 아래 이미지에 표시 된 것과 같아야 합니다.The final object structure in the Hierarchy Panel should be like the one shown in the image below:

    계층 패널의 최종 구조입니다.

5 장-ResultsLabel 클래스 만들기Chapter 5 – Create the ResultsLabel class

만들어야 하는 첫 번째 스크립트는 다음을 담당 하는 ResultsLabel 클래스입니다.The first script you need to create is the ResultsLabel class, which is responsible for the following:

  • 카메라의 위치를 기준으로 적절 한 세계 공간에 레이블 만들기Creating the Labels in the appropriate world space, relative to the position of the Camera.
  • 이미지 분석에서 태그를 표시 합니다.Displaying the Tags from the Image Anaysis.

이 클래스를 만들려면:To create this class:

  1. 프로젝트 패널 을 마우스 오른쪽 단추로 클릭 하 고 > 폴더를 만듭니다.Right-click in the Project Panel, then Create > Folder. 폴더 이름을 스크립트 로 합니다.Name the folder Scripts.

    스크립트 폴더를 만듭니다.

  2. Scripts 폴더 만들기를 사용 하 여 두 번 클릭 하 여 엽니다.With the Scripts folder create, double click it to open. 그런 다음 해당 폴더 내에서를 마우스 오른쪽 단추로 클릭 하 고 >만들기 를 선택 하 고 c # 스크립트 를 선택 합니다.Then within that folder, right-click, and select Create > then C# Script. 스크립트 이름을 ResultsLabel 로 합니다.Name the script ResultsLabel.

  3. ResultsLabel 스크립트를 두 번 클릭 하 여 Visual Studio 에서 엽니다.Double click on the new ResultsLabel script to open it with Visual Studio.

  4. 클래스 내에서 ResultsLabel 클래스에 다음 코드를 삽입 합니다.Inside the Class insert the following code in the ResultsLabel class:

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

  6. Unity 편집기 로 돌아가서 Scripts 폴더의 ResultsLabel 클래스를 클릭 하 여 계층 패널기본 카메라 개체로 끕니다.Back in the Unity Editor, click and drag the ResultsLabel class from the Scripts folder to the Main Camera object in the Hierarchy Panel.

  7. 주 카메라 를 클릭 하 고 검사기 패널 을 확인 합니다.Click on the Main Camera and look at the Inspector Panel.

방금 카메라 안으로 끌어온 스크립트에서 커서레이블 Prefab 의 두 필드가 있습니다.You will notice that from the script you just dragged into the Camera, there are two fields: Cursor and Label Prefab.

  1. 아래 이미지에 표시 된 것 처럼 계층 패널 에서 커서 라는 개체를 커서 라는 슬롯 으로 끕니다.Drag the object called Cursor from the Hierarchy Panel to the slot named Cursor, as shown in the image below.

  2. 아래 이미지에 표시 된 것 처럼 프로젝트 패널자산 폴더 에서 레이블 Prefab 이라는 개체 를 끌어 레이블 이름이 지정 된 슬롯으로 끕니다.Drag the object called LabelText from the Assets Folder in the Project Panel to the slot named Label Prefab, as shown in the image below.

    Unity 내에서 참조 대상을 설정 합니다.

6 장 – ImageCapture 클래스 만들기Chapter 6 – Create the ImageCapture class

만들려는 다음 클래스는 ImageCapture 클래스입니다.The next class you are going to create is the ImageCapture class. 이 클래스는 다음을 담당 합니다.This class is responsible for:

  • HoloLens 카메라를 사용 하 여 이미지를 캡처하고 앱 폴더에 저장 합니다.Capturing an Image using the HoloLens Camera and storing it in the App Folder.
  • 사용자 로부터 탭 제스처를 캡처하는 경우Capturing Tap gestures from the user.

이 클래스를 만들려면:To create this class:

  1. 이전에 만든 스크립트 폴더로 이동 합니다.Go to the Scripts folder you created previously.

  2. 폴더 내부를 마우스 오른쪽 단추로 클릭 하 > c # 스크립트를 만듭니다.Right-click inside the folder, Create > C# Script. ImageCapture 스크립트를 호출 합니다.Call the script ImageCapture.

  3. ImageCapture 스크립트를 두 번 클릭 하 여 Visual Studio 에서 엽니다.Double click on the new ImageCapture script to open it with Visual Studio.

  4. 파일의 맨 위에 다음 네임 스페이스를 추가 합니다.Add the following namespaces to the top of the file:

        using System.IO;
        using System.Linq;
        using UnityEngine;
        using UnityEngine.XR.WSA.Input;
        using UnityEngine.XR.WSA.WebCam;
    
  5. 그런 다음 ImageCapture 클래스 내에서 Start () 메서드 위의 다음 변수를 추가 합니다.Then add the following variables inside the ImageCapture class, above the Start() method:

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

TapsCount 변수는 사용자에 게 캡처된 탭 제스처 수를 저장 합니다.The tapsCount variable will store the number of tap gestures captured from the user. 이 숫자는 캡처된 이미지의 이름을 지정 하는 데 사용 됩니다.This number is used in the naming of the images captured.

  1. 이제 활성 ()Start () 메서드에 대 한 코드를 추가 해야 합니다.Code for Awake() and Start() methods now needs to be added. 이러한 작업은 클래스가 초기화 될 때 호출 됩니다.These will be called when the class initializes:

        private void Awake()
        {
            // Allows this instance to behave like a singleton
            instance = this;
        }
    
        void Start()
        {
            // subscribing to the HoloLens API gesture recognizer to track user gestures
            recognizer = new GestureRecognizer();
            recognizer.SetRecognizableGestures(GestureSettings.Tap);
            recognizer.Tapped += TapHandler;
            recognizer.StartCapturingGestures();
        }
    
  2. 탭 제스처가 발생할 때 호출 되는 처리기를 구현 합니다.Implement a handler that will be called when a Tap gesture occurs.

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

TapHandler () 메서드는 사용자 로부터 캡처된 탭의 수를 늘리고 현재 커서 위치를 사용 하 여 새 레이블을 배치할 위치를 결정 합니다.The TapHandler() method increments the number of taps captured from the user and uses the current Cursor position to determine where to position a new Label.

그런 다음이 메서드는 ExecuteImageCaptureAndAnalysis () 메서드를 호출 하 여이 응용 프로그램의 핵심 기능을 시작 합니다.This method then calls the ExecuteImageCaptureAndAnalysis() method to begin the core functionality of this application.

  1. 이미지를 캡처 및 저장 한 후에는 다음 처리기가 호출 됩니다.Once an Image has been captured and stored, the following handlers will be called. 프로세스가 성공적으로 실행 되 면 분석을 위해 결과가 아직 생성 중이 VisionManager 에 전달 됩니다.If the process is successful, the result is passed to the VisionManager (which you are yet to create) for analysis.

        /// <summary>
        /// Register the full execution of the Photo Capture. If successful, it will begin 
        /// the Image Analysis process.
        /// </summary>
        void OnCapturedPhotoToDisk(PhotoCapture.PhotoCaptureResult result)
        {
            // Call StopPhotoMode once the image has successfully captured
            photoCaptureObject.StopPhotoModeAsync(OnStoppedPhotoMode);
        }
    
        void OnStoppedPhotoMode(PhotoCapture.PhotoCaptureResult result)
        {
            // Dispose from the object in memory and request the image analysis 
            // to the VisionManager class
            photoCaptureObject.Dispose();
            photoCaptureObject = null;
            StartCoroutine(VisionManager.instance.AnalyseLastImageCaptured()); 
        }
    
  2. 그런 다음 응용 프로그램이 이미지 캡처 프로세스를 시작 하 고 이미지를 저장 하는 데 사용 하는 메서드를 추가 합니다.Then add the method that the application uses to start the Image capture process and store the image.

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

경고

이 시점에서 Unity 편집기 콘솔 패널 에 오류가 나타납니다.At this point you will notice an error appearing in the Unity Editor Console Panel. 코드는 다음 챕터에서 만들 VisionManager 클래스를 참조 하기 때문입니다.This is because the code references the VisionManager class which you will create in the next Chapter.

7 장 – Azure 및 이미지 분석 호출Chapter 7 – Call to Azure and Image Analysis

생성 해야 하는 마지막 스크립트는 VisionManager 클래스입니다.The last script you need to create is the VisionManager class.

이 클래스는 다음을 담당 합니다.This class is responsible for:

  • 캡처된 최신 이미지를 바이트 배열로 로드 하 고 있습니다.Loading the latest image captured as an array of bytes.
  • 분석을 위해 바이트 배열을 Azure Computer Vision API 서비스 인스턴스로 보냅니다.Sending the byte array to your Azure Computer Vision API Service instance for analysis.
  • JSON 문자열로 응답을 수신 합니다.Receiving the response as a JSON string.
  • 응답을 deserialize 하 고 결과 태그를 ResultsLabel 클래스에 전달 합니다.Deserializing the response and passing the resulting Tags to the ResultsLabel class.

이 클래스를 만들려면:To create this class:

  1. 스크립트 폴더를 두 번 클릭 하 여 엽니다.Double click on the Scripts folder, to open it.

  2. Scripts 폴더 내부를 마우스 오른쪽 단추로 클릭 하 고 > c # 스크립트 만들기 를 클릭 합니다.Right-click inside the Scripts folder, click Create > C# Script. 스크립트 이름을 VisionManager 로 합니다.Name the script VisionManager.

  3. 새 스크립트를 두 번 클릭 하 여 Visual Studio에서 엽니다.Double click on the new script to open it with Visual Studio.

  4. VisionManager 클래스의 맨 위에서 다음과 같이 네임 스페이스를 업데이트 합니다.Update the namespaces to be the same as the following, at the top of the VisionManager class:

        using System;
        using System.Collections;
        using System.Collections.Generic;
        using System.IO;
        using UnityEngine;
        using UnityEngine.Networking;
    
  5. 스크립트의 맨 위에 있는 VisionManager 클래스 ( Start () 메서드 위의)에서, 이제 AZURE에서 deserialize 된 JSON 응답을 나타내는 두 개의 클래스만들어야 합니다.At the top of your script, inside the VisionManager class (above the Start() method), you now need to create two Classes that will represent the deserialized JSON response from Azure:

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

    참고

    TagDataAnalysedObject 클래스에는 Unity 라이브러리를 사용 하 여 deserialize 할 수 있도록 선언 앞에 [] 특성이 추가 되어야 합니다.The TagData and AnalysedObject classes need to have the [System.Serializable] attribute added before the declaration to be able to be deserialized with the Unity libraries.

  6. VisionManager 클래스에서 다음 변수를 추가 해야 합니다.In the VisionManager class, you should add the following variables:

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

    경고

    Authorizationkey 변수에 인증 키 를 삽입 해야 합니다.Make sure you insert your Auth Key into the authorizationKey variable. 이 과정의 시작 부분에 1 장에서 인증 키 를 기록 했습니다.You will have noted your Auth Key at the beginning of this course, Chapter 1.

    경고

    VisionAnalysisEndpoint 변수는이 예제에서 지정한 것과 다를 수 있습니다.The visionAnalysisEndpoint variable might differ from the one specified in this example. 미국 서 부 는 미국 서 부 지역에 대해 만든 서비스 인스턴스를 엄격히 의미 합니다.The west-us strictly refers to Service instances created for the West US region. 이를 끝점 URL로 업데이트 합니다. 다음과 같은 몇 가지 예가 있습니다.Update this with your endpoint URL; here are some examples of what that might look like:

    • 유럽 서부: https://westeurope.api.cognitive.microsoft.com/vision/v1.0/analyze?visualFeatures=TagsWest Europe: https://westeurope.api.cognitive.microsoft.com/vision/v1.0/analyze?visualFeatures=Tags
    • 동남 아시아: https://southeastasia.api.cognitive.microsoft.com/vision/v1.0/analyze?visualFeatures=TagsSoutheast Asia: https://southeastasia.api.cognitive.microsoft.com/vision/v1.0/analyze?visualFeatures=Tags
    • 오스트레일리아 동부: https://australiaeast.api.cognitive.microsoft.com/vision/v1.0/analyze?visualFeatures=TagsAustralia East: https://australiaeast.api.cognitive.microsoft.com/vision/v1.0/analyze?visualFeatures=Tags
  7. 이제 절전 모드에 대 한 코드를 추가 해야 합니다.Code for Awake now needs to be added.

        private void Awake()
        {
            // allows this instance to behave like a singleton
            instance = this;
        }
    
  8. 그런 다음 ImageCapture 클래스에 의해 캡처된 이미지의 분석 결과를 얻을 수 있는 코 루틴 (아래 정적 스트림 메서드 포함)를 추가 합니다.Next, add the coroutine (with the static stream method below it), which will obtain the results of the analysis of the image captured by the ImageCapture Class.

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

  10. Unity 편집기로 돌아가서 Scripts 폴더에서 VisionManagerImageCapture 클래스를 클릭 하 여 계층 패널기본 카메라 개체로 끕니다.Back in the Unity Editor, click and drag the VisionManager and ImageCapture classes from the Scripts folder to the Main Camera object in the Hierarchy Panel.

8 장 – 빌드하기 전Chapter 8 – Before building

응용 프로그램에 대 한 철저 한 테스트를 수행 하려면 HoloLens에 테스트용으로 로드 해야 합니다.To perform a thorough test of your application you will need to sideload it onto your HoloLens. 이렇게 하려면 먼저 다음을 확인 해야 합니다.Before you do, ensure that:

  • 2 장 에서 설명한 모든 설정이 올바르게 설정 됩니다.All the settings mentioned in Chapter 2 are set correctly.
  • 모든 스크립트는 주 카메라 개체에 연결 됩니다.All the scripts are attached to the Main Camera object.
  • 기본 카메라 검사기 패널 의 모든 필드가 제대로 할당 됩니다.All the fields in the Main Camera Inspector Panel are assigned properly.
  • Authorizationkey 변수에 인증 키 를 삽입 해야 합니다.Make sure you insert your Auth Key into the authorizationKey variable.
  • VisionManager 스크립트에서 끝점을 확인 하 고 사용자 의 지역에 부합 하는지 확인 합니다 .이 문서에서는 기본적으로 미국 서 부 를 사용 합니다.Ensure that you have also checked your endpoint in your VisionManager script, and that it aligns to your region (this document uses west-us by default).

9 장-UWP 솔루션 빌드 및 응용 프로그램 테스트용으로 로드Chapter 9 – Build the UWP Solution and sideload the application

이제이 프로젝트의 Unity 섹션에 필요한 모든 항목이 완료 되었으므로 Unity에서 빌드할 수 있습니다.Everything needed for the Unity section of this project has now been completed, so it is time to build it from Unity.

  1. 빌드 설정 - 파일 > 빌드 설정 으로 이동 합니다.Navigate to Build Settings - File > Build Settings…

  2. 빌드 설정 창에서 빌드 를 클릭 합니다.From the Build Settings window, click Build.

    Unity에서 앱 빌드

  3. 아직 없는 경우 tick Unity c # 프로젝트 입니다.If not already, tick Unity C# Projects.

  4. 빌드 를 클릭한 다음Click Build. Unity는 응용 프로그램을 빌드할 폴더를 만들고 선택 해야 하는 파일 탐색기 창을 시작 합니다.Unity will launch a File Explorer window, where you need to create and then select a folder to build the app into. 이제 해당 폴더를 만들고 이름을 App 으로 만듭니다.Create that folder now, and name it App. 그런 다음 폴더를 선택 하 고 폴더 선택 을 누릅니다.Then with the App folder selected, press Select Folder.

  5. Unity는 응용 프로그램 폴더에 대 한 프로젝트 빌드를 시작 합니다.Unity will begin building your project 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 (check your task bar, as it may not always appear above your windows, but will notify you of the addition of a new window).

10 장 – HoloLens에 배포Chapter 10 – Deploy to HoloLens

HoloLens에 배포 하려면:To deploy on HoloLens:

  1. HoloLens의 IP 주소 (원격 배포의 경우)가 필요 하 고 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.

    Visual Studio에서 솔루션을 배포 합니다.

  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!

참고

모던 헤드셋에 배포 하려면 솔루션 플랫폼로컬 컴퓨터 로 설정 하 고 구성을 디버그 로 설정 하 고 x 86플랫폼 으로 설정 합니다.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.

완성 된 Computer Vision API 응용 프로그램Your finished Computer Vision API application

축 하 합니다. Azure Computer Vision API를 활용 하 여 실제 개체를 인식 하 고 표시 되는 내용에 대 한 확신을 표시 하는 혼합 현실 앱을 빌드 했습니다.Congratulations, you built a mixed reality app that leverages the Azure Computer Vision API to recognize real world objects, and display confidence of what has been seen.

랩 결과

보너스 연습Bonus exercises

연습 1Exercise 1

Tags 매개 변수 ( VisionManager 내에서 사용 되는 끝점 내에서 복합적로)를 사용 하는 것 처럼 앱을 확장 하 여 다른 정보를 검색 합니다. 여기에 액세스할 수 있는 다른 매개 변수를 살펴보세요.Just as you have used the Tags parameter (as evidenced within the endpoint used within the VisionManager), extend the app to detect other information; have a look at what other parameters you have access to HERE.

연습 2Exercise 2

반환 된 Azure 데이터를 보다 잘 이해 하 고 읽을 수 있는 방법으로 표시 합니다.Display the returned Azure data, in a more conversational, and readable way, perhaps hiding the numbers. 사용자에 게 사용자에 게 문의 하 고 있을 수 있습니다.As though a bot might be speaking to the user.