注意

Mixed Reality Academy チュートリアルでは、HoloLens として設計された (第 1 世代) と混在の現実イマーシブ ヘッドセットに注意してください。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.


MR と Azure 303:自然言語の理解 (LUIS)MR and Azure 303: Natural language understanding (LUIS)

このコースでは、Language Understanding API を使用した Azure Cognitive Services を使用して、複合現実のアプリケーションに言語理解機能を統合する方法を学びます。In this course, you will learn how to integrate Language Understanding into a mixed reality application using Azure Cognitive Services, with the Language Understanding API.

ラボの結果

Language Understanding (LUIS) にどのような人が必要で、ユーザーの声の抽出をユーザー入力からの意味を確保できるアプリケーションを提供する Microsoft Azure サービスです。Language Understanding (LUIS) is a Microsoft Azure service, which provides applications with the ability to make meaning out of user input, such as through extracting what a person might want, in their own words. これを実現するには、機械学習を理解および入力の情報では、学習し、関連する詳細な情報に応答できます。This is achieved through machine learning, which understands and learns the input information, and then can reply with detailed, relevant, information. 詳細については、次を参照してください。、 Azure Language Understanding (LUIS) ページします。For more information, visit the Azure Language Understanding (LUIS) page.

このコースを完了すると、以下を実行できる必要が複合現実イマーシブ ヘッドセット アプリケーションが完成します。Having completed this course, you will have a mixed reality immersive headset application which will be able to do the following:

  1. イマーシブ ヘッドセットにアタッチされているマイクを使用して、ユーザーの入力音声をキャプチャします。Capture user input speech, using the Microphone attached to the immersive headset.
  2. キャプチャされたディクテーションの送信、 Azure Language Understanding Intelligent Service (LUIS)。Send the captured dictation the Azure Language Understanding Intelligent Service (LUIS).
  3. LUIS の抽出、分析され、ユーザーの要求の目的が行われるかを判断しようとする情報送信から意味があります。Have LUIS extract meaning from the send information, which will be analyzed, and attempt to determine the intent of the user’s request will be made.

開発では、ユーザーを使用して、音声または視線、サイズと、シーン内のオブジェクトの色を変更することが、アプリの作成が含まれます。Development will include the creation of an app where the user will be able to use voice and/or gaze to change the size and the color of the objects in the scene. アニメーション コント ローラーの使用は扱いません。The use of motion controllers will not be covered.

アプリケーションでは、責任ですが、設計と、結果を統合する方法について。In your application, it is up to you as to how you will integrate the results with your design. このコースは、Unity プロジェクトで Azure サービスを統合する方法を説明する設計されています。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.

複数回が LUIS をトレーニングする準備が、これは、「第 12 章します。Be prepared to Train LUIS several times, which is covered in Chapter 12. LUIS がトレーニングされている詳細度より良い結果が得られます。You will get better results the more times LUIS has been trained.

デバイスのサポートDevice support

コースCourse HoloLensHoloLens イマーシブ ヘッドセットImmersive headsets
MR と Azure 303:自然言語の理解 (LUIS)MR and Azure 303: Natural language understanding (LUIS) ✔️✔️ ✔️✔️

注意

このコースが主に Windows Mixed Reality 没入型 (VR) ヘッドセットを重点的に Microsoft HoloLens には、このコースで学習する内容を適用することもできます。While this course primarily focuses on Windows Mixed Reality immersive (VR) headsets, you can also apply what you learn in this course to Microsoft HoloLens. コースを実行するとき、HoloLens をサポートするために必要な場合があります変更でノートが表示されます。As you follow along with the course, you will see notes on any changes you might need to employ to support HoloLens. HoloLens を使用する場合は、音声キャプチャ中にいくつかのエコーが気付きです。When using HoloLens, you may notice some echo during voice capture.

前提条件Prerequisites

注意

このチュートリアルは、Unity を使用した基本的な経験がある開発者向けに設計およびC#します。This tutorial is designed for developers who have basic experience with Unity and C#. また、前提条件やこのドキュメント内の書面の手順を表すテストおよび (2018 年 5 月) の書き込み時に検証されたがどのようなことに注意してください。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. ディクテーションを有効にするためにコンピューターを許可するにはWindows の設定 > プライバシーに関する > 読み上げ、手描き入力機能 (&) を入力する ボタンを押すと音声サービスをオンにして、入力候補します。To allow your machine to enable Dictation, go to Windows Settings > Privacy > Speech, Inking & Typing and press on the button Turn On speech services and typing suggestions.

  3. このチュートリアルでは、コードから記録することにより、マイク デバイスの既定のコンピューターに設定します。The code in this tutorial will allow you to record from the Default Microphone Device set on your machine. マイクの既定のデバイスが音声のキャプチャに使用する 1 つとして設定することを確認します。Make sure the Default Microphone Device is set as the one you wish to use to capture your voice.

  4. ヘッドセットに内蔵マイクがある場合は、必ずオプション 「マイ ヘッドセットを着用するときに切り替えるヘッドセット マイク」 でオンに、 Mixed Reality ポータル設定します。If your headset has a built-in microphone, make sure the option “When I wear my headset, switch to headset mic” is turned on in the Mixed Reality Portal settings.

    イマーシブ ヘッドセットの設定

第 1 章 – Azure Portal のセットアップChapter 1 – Setup Azure Portal

使用する、 Language Understandingサービス、Azure でアプリケーションに使用可能にするサービスのインスタンスを構成する必要があります。To use the Language Understanding service in Azure, you will need to configure an instance of the service to be made available to your application.

  1. Azure ポータル にログインします。Log in to the Azure Portal.

    注意

    Azure アカウントがいない場合は、1 つを作成する必要があります。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. ログインした後は、をクリックして新規左上隅にある検索してLanguage Understanding、 をクリックEnterします。Once you are logged in, click on New in the top left corner, and search for Language Understanding, and click Enter.

    LUIS のリソースを作成します。

    注意

    単語新規に置き換えられましたリソースの作成、新しいポータルでします。The word New may have been replaced with Create a resource, in newer portals.

  3. 右側に新しいページは、Language Understanding サービスの説明を提供します。The new page to the right will provide a description of the Language Understanding service. このページの左下にある at、作成ボタンは、このサービスのインスタンスを作成します。At the bottom left of this page, select the Create button, to create an instance of this service.

    LUIS サービスの作成 - 法的通知

  4. 作成した 1 回。Once you have clicked on Create:

    1. 必要な挿入名前このサービス インスタンス。Insert your desired Name for this service instance.

    2. 選択、サブスクリプションします。Select a Subscription.

    3. 選択、価格レベル場合、これは、最初に、適切な時間を作成する、 LUIS サービス、(F0 という名前)、free レベルを使用することがあります。Select the Pricing Tier appropriate for you, if this is the first time creating a LUIS Service, a free tier (named F0) should be available to you. 無料の割り当ては、このコースのための十分な複数の必要があります。The free allocation should be more than sufficient for this course.

    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. 勧めします (例: これらのコース) など一般的なリソース グループの下の 1 つのプロジェクトに関連付けられているすべての Azure サービスを保持する)。It is recommended to keep all the Azure services associated with a single project (e.g. such as these courses) 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. [作成] を選択します。Select Create.

      LUIS サービス - ユーザー入力を作成します。

  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.

    新しい Azure の通知の画像

  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. 新しい LUIS サービス インスタンスに表示されます。You will be taken to your new LUIS service instance.

    LUIS のキーにアクセスします。

  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. クイック スタート ページのLUIS APIサービスは、最初のステップに移動し、キーを取得する、 をクリックキー (することもできますこれは実現キー アイコンによって示される、サービスのナビゲーション メニューにある青いハイパーリンク キーをクリックして)。From the Quick start page, of your LUIS 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. このプロジェクトの後半で必要になるため、表示されているキーの 1 つのコピーを実行します。Take a copy of one of the displayed keys, as you will need this later in your project.

  12. サービス ページで、をクリックしてLanguage Understanding ポータルに LUIS アプリ内で、新しいサービスの作成に使用する web ページにリダイレクトされます。In the Service page, click on Language Understanding Portal to be redirected to the webpage which you will use to create your new Service, within the LUIS App.

第 2 章 –、Language Understanding ポータルChapter 2 – The Language Understanding Portal

このセクションでは、LUIS ポータルに LUIS アプリを作成する方法を学習します。In this section you will learn how to make a LUIS App on the LUIS Portal.

重要

わけを設定する、エンティティインテント、および発話この章では、LUIS サービスの構築の最初の手順のみ: にも必要になりますサービスの再トレーニング、何回かためより正確にします。Please be aware, that setting up the Entities, Intents, and Utterances within this chapter is only the first step in building your LUIS service: you will also need to retrain the service, several times, so to make it more accurate. については、サービスの再トレーニング、最後の章のこのコースでは、これを完了するようにします。Retraining your service is covered in the last Chapter of this course, so ensure that you complete it.

  1. 達すると、 Language Understanding ポータル、ない場合に、既に、Azure portal と同じ資格情報でログインする必要があります。Upon reaching the Language Understanding Portal, you may need to login, if you are not already, with the same credentials as your Azure portal.

    LUIS のログイン ページ

  2. これは、LUIS を使用して、最初に、検索 をクリックして、ウェルカム ページの一番下までスクロールする必要があります、作成 LUIS アプリボタンをクリックします。If this is your first time using LUIS, you will need to scroll down to the bottom of the welcome page, to find and click on the Create LUIS app button.

    LUIS アプリのページを作成します。

  3. ログインすると、クリックしてのマイ アプリ(ない場合そのセクションでは現在)。Once logged in, click My apps (if you are not in that section currently). クリックし、新しいアプリの作成です。You can then click on Create new app.

    LUIS のマイ アプリのイメージ

  4. アプリを指定する名前します。Give your app a Name.

  5. 変更する必要がある場合は、アプリは、英語以外の言語を理解することになって、カルチャ適切な言語です。If your app is supposed to understand a language different from English, you should change the Culture to the appropriate language.

  6. ここで追加することも、説明新しい LUIS アプリの。Here you can also add a Description of your new LUIS app.

    LUIS - 新しいアプリを作成します。

  7. キーを押すと完了、入力する、ビルドの新しいページLUISアプリケーション。Once you press Done, you will enter the Build page of your new LUIS application.

  8. ここで理解するいくつかの重要な概念があります。There are a few important concepts to understand here:

    • インテント、次のクエリをユーザーから呼び出されるメソッドを表します。Intent, represents the method that will be called following a query from the user. インテント1 つまたは複数ありますエンティティします。An INTENT may have one or more ENTITIES.
    • エンティティ、関連する情報を示すクエリのコンポーネントである、インテントします。Entity, is a component of the query that describes information relevant to the INTENT.
    • 発話クエリの例については、開発者でその LUIS が自体のトレーニングに使用されます。Utterances, are examples of queries provided by the developer, that LUIS will use to train itself.

これらの概念が完全がない場合は、クリア、問題なく、このコースはこの章でさらにそれらを明確です。If these concepts are not perfectly clear, do not worry, as this course will clarify them further in this chapter.

作成は、まず、エンティティこのコースを構築するために必要です。You will begin by creating the Entities needed to build this course.

  1. ページの左側にある、] をクリックしてエンティティの [新しいエンティティを作成です。On the left side of the page, click on Entities, then click on Create new entity.

    新しいエンティティを作成します。

  2. 新しいエンティティを呼び出す、その型に設定単純、キーを押します完了します。Call the new Entity color, set its type to Simple, then press Done.

    色の単純なエンティティを作成します。

  3. 3 個以上単純なエンティティという名前を作成するには、このプロセスを繰り返します。Repeat this process to create three (3) more Simple Entities named:

    • upsizeupsize
    • downsizedownsize
    • ターゲットtarget

結果は、次の図のようになります。The result should look like the image below:

エンティティの作成の結果

作成を開始する時点でこのインテントします。At this point you can begin creating Intents.

警告

削除しないでください、 Noneインテントです。Do not delete the None intent.

  1. ページの左側にある、 をクリックしてインテント、をクリックして新しいインテント作成です。On the left side of the page, click on Intents, then click on Create new intent.

    新しいインテントを作成します。

  2. 新しいインテント ChangeObjectColorします。Call the new Intent ChangeObjectColor.

    重要

    これは、インテント名が使用されるこのコースの後半で、コード内でそのため最良の結果を使用して、この名前指定されたとおりです。This Intent name is used within the code later in this course, so for best results, use this name exactly as provided.

インテント ページに表示される名前のことを確認します。Once you confirm the name you will be directed to the Intents Page.

LUIS のインテント ページ

5 個以上の異なる型に求めるテキスト ボックスがあることがわかります発話します。You will notice that there is a textbox asking you to type 5 or more different Utterances.

注意

LUIS では、すべての発話を小文字に変換します。LUIS converts all Utterances to lower case.

  1. 次を挿入します発話上部のテキスト ボックスに (テキストと現在 ... 約 5 の例の型Insert the following Utterance in the top textbox (currently with the text Type about 5 examples… )、キーを押しますEnter:), and press Enter:
The color of the cylinder must be red

その新しい発話の下に一覧に表示されます。You will notice that the new Utterance will appear in a list underneath.

次の同じプロセスでは、次の 6 発話を挿入します。Following the same process, insert the following six (6) Utterances:

make the cube black

make the cylinder color white

change the sphere to red

change it to green

make this yellow

change the color of this object to blue

作成したそれぞれの発話エンティティとして LUIS がどの単語を使用する必要がありますを指定する必要があります。For each Utterance you have created, you must identify which words should be used by LUIS as Entities. この例では、としてすべての色のラベルを付ける必要があります、エンティティ、および可能なすべての参照をターゲットとして、ターゲットエンティティ。In this example you need to label all the colors as a color Entity, and all the possible reference to a target as a target Entity.

  1. これを行うには、という語をクリックを再試行してください円柱でクリックし、最初の発話ターゲットします。To do so, try clicking on the word cylinder in the first Utterance and select target.

    発話のターゲットを特定します。

  2. ここで単語をクリックして赤いでクリックし、最初の発話Now click on the word red in the first Utterance and select color.

    発話のエンティティを識別します。

  3. また、次の行のラベルを付ける場所キューブする必要があります、ターゲット黒いする必要があります、します。Label the next line also, where cube should be a target, and black should be a color. 単語の使用も注意してください。 'this''it'、と 'オブジェクト'、提供しています、これも使用できる非固有のターゲット型にします。Notice also the use of the words ‘this’, ‘it’, and ‘this object’, which we are providing, so to have non-specific target types available also.

  4. 上記のプロセスを繰り返して、すべての発話にというラベルが付いたエンティティが存在します。Repeat the process above until all the Utterances have the Entities labelled. 参照してください、次の画像が必要な場合。See the below image if you need help.

    ヒント

    ときに、それらのエンティティとしてラベル付けに単語を選択します。When selecting words to label them as entities:

    • 1 つの単語だけをクリックします。For single words just click them.
    • 一連の 2 つ以上の単語の先頭にしてから、セットの末尾でをクリックします。For a set of two or more words, click at the beginning and then at the end of the set.

    注意

    使用することができます、トークン ビューを切り替えるトグル ボタンエンティティ/トークン ビュー!You can use the Tokens View toggle button to switch between Entities / Tokens View!

  5. 結果は、次の画像に示すように、表示する必要があります、エンティティ/トークン ビュー:The results should be as seen in the images below, showing the Entities / Tokens View:

    エンティティのビュー (&)、トークン

  6. この時点でキーを押して、トレーニングページの右上にあるボタンをクリックし、緑を有効にする上で小さな丸いインジケーターを待機します。At this point press the Train button at the top-right of the page and wait for the small round indicator on it to turn green. これは、この目的を認識する LUIS が正常にトレーニングされていることを示します。This indicates that LUIS has been successfully trained to recognize this Intent.

    LUIS をトレーニング

  7. 演習として作成すると呼ばれる新しい目的ChangeObjectSize、エンティティを使用してターゲットアップサイズ、およびダウンサイズします。As an exercise for you, create a new Intent called ChangeObjectSize, using the Entities target, upsize, and downsize.

  8. 次の以前のインテントと同じプロセスの次の 8 (8) 発話を挿入サイズを変更します。Following the same process as the previous Intent, insert the following eight (8) Utterances for Size change:

    increase the dimensions of that
    
    reduce the size of this
    
    i want the sphere smaller
    
    make the cylinder bigger
    
    size down the sphere
    
    size up the cube
    
    decrease the size of that object
    
    increase the size of this object
    
  9. 結果は、次の図に示すようにする必要があります。The result should be like the one in the image below:

    ChangeObjectSize トークンのセットアップ/エンティティ

  10. 両方のインテント、1 回ChangeObjectColorChangeObjectSize作成されているし、トレーニングをクリックして、発行ページ上部にあるボタンをクリックします。Once both Intents, ChangeObjectColor and ChangeObjectSize, have been created and trained, click on the PUBLISH button on top of the page.

    LUIS サービスを発行します。

  11. 発行ページの最終処理して、コードでアクセスできるように、LUIS アプリを発行します。On the Publish page you will finalize and publish your LUIS App so that it can be accessed by your code.

    1. セットをスケール ダウン、ドロップPublish Toとして運用します。Set the drop down Publish To as Production.

    2. 設定、タイムゾーンタイム ゾーンにします。Set the Timezone to your time zone.

    3. チェック ボックスをオンすべて含む予測スコアのインテントします。Check the box Include all predicted intent scores.

    4. をクリックして運用スロットに発行します。Click on Publish to Production Slot.

      発行の設定

  12. セクションでリソースとキー:In the section Resources and Keys:

    1. Azure Portal でのサービス インスタンスに設定するリージョンを選択します。Select the region you set for service instance in the Azure Portal.
    2. 表示されます、 Starter_Key 、下の要素を無視します。You will notice a Starter_Key element below, ignore it.
    3. をクリックしてキーの追加を挿入し、キーサービス インスタンスを作成したときに、Azure Portal で取得しました。Click on Add Key and insert the Key that you obtained in the Azure Portal when you created your Service instance. ドロップダウン メニューを指定した場合は、Azure と LUIS ポータルは、同じユーザーにログインしている、テナント名サブスクリプション名、およびキー (を使用します。Azure Portal で以前に指定したように、同じ名前になります。If your Azure and the LUIS portal are logged into the same user, you will be provided drop-down menus for Tenant name, Subscription Name, and the Key you wish to use (will have the same name as you provided previously in the Azure Portal.

    重要

    下にエンドポイントキーに対応するエンドポイントのコピーを挿入した、コードですぐに使用されます。Underneath Endpoint, take a copy of the endpoint corresponding to the Key you have inserted, you will soon use it in your code.

第 3 章 – Unity プロジェクトの設定Chapter 3 – Set up the Unity project

次のコード例が複合現実での開発の一般的な設定して、そのため、他のプロジェクトの適切なテンプレートには。The following is a typical set up for developing with the mixed reality, and as such, is a good template for other projects.

  1. 開いているUnityクリック新規します。Open Unity and click New.

    新しい Unity プロジェクトを開始します。

  2. Unity プロジェクト名を指定する必要がありますこれで挿入MR_LUISします。You will now need to provide a Unity Project name, insert MR_LUIS. 必ず、プロジェクトの種類に設定されて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. 変更External Script EditorVisual Studio 2017します。Change External Script Editor to Visual Studio 2017. 閉じる、設定ウィンドウ。Close the Preferences window.

    スクリプト エディターの基本設定を更新します。

  4. 次に移動ファイル > Build Settingsにプラットフォームを切り替えるとユニバーサル Windows プラットフォーム、 をクリックして、プラットフォームの切り替えボタンをクリックします。Next, go to File > Build Settings and switch the platform to Universal Windows Platform, by clicking on the Switch Platform button.

    [設定] ウィンドウ切り替え UWP プラットフォームをビルドします。

  5. 移動してファイル > Build Settingsことを確認してください。Go to File > Build Settings and make sure that:

    1. デバイスを対象にに設定されている任意のデバイスTarget Device is set to Any Device

      Microsoft HoloLens、設定ターゲット デバイスHoloLensします。For the Microsoft HoloLens, set Target Device to HoloLens.

    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. 新しいフォルダーを作成と、任意の将来、シーン、し、選択、新しいフォルダーボタンは、新しいフォルダーを作成する名前を付けますシーンします。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_LuisScene、キーを押します保存しますOpen your newly created Scenes folder, and then in the File name: text field, type MR_LuisScene, then press Save.

        シーンの新しい名前を付けます。

    7. 設定に残っているBuild Settings、ここでは既定値として残しておく必要があります。The remaining settings, in Build Settings, should be left as default for now.

  6. Build Settingsウィンドウのプレーヤー設定ボタン、領域に関連するパネルが開き、インスペクターが配置されています。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 3.5 相当)。Scripting Runtime Version should be Stable (.NET 3.5 Equivalent).

      2. バックエンドの scriptingべき .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:

      1. InternetClientInternetClient

      2. マイクMicrophone

        発行の設定を更新しています。

    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. 戻りBuild Settings 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).

第 4 章 – シーンを作成します。Chapter 4 – Create the scene

重要

スキップする場合、 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. 空の領域で右クリックし、階層パネル 3D オブジェクト、追加、平面します。Right-click in an empty area of the Hierarchy Panel, under 3D Object, add a Plane.

    平面を作成します。

  2. 注意を内で右クリックすると、階層もう一度選択されている最後のオブジェクトがある場合は、複数のオブジェクトを作成、選択したオブジェクトをする、新しいオブジェクトの親。Be aware that when you right-click within the Hierarchy again to create more objects, if you still have the last object selected, the selected object will be the parent of your new object. 階層内の空白領域をクリックし、右クリックし、この問題を回避します。Avoid this left-clicking in an empty space within the Hierarchy, and then right-clicking.

  3. 次のオブジェクトを追加する上記の手順を繰り返します。Repeat the above procedure to add the following objects:

    1. Sphere
    2. 円柱Cylinder
    3. CubeCube
    4. 3D テキスト3D Text
  4. 結果として得られるシーン階層次の図のようになります。The resulting scene Hierarchy should be like the one in the image below:

    シーン階層の設定。

  5. 左クリックしてで、 Main Cameraことを選択するために見て、インスペクター パネルすべて Camera オブジェクトが表示されます、そのコンポーネント。Left click on the Main Camera to select it, look at the Inspector Panel you will see the Camera object with all the its components.

  6. をクリックして、コンポーネントの追加の一番下にあるボタン、インスペクター パネルします。Click on the Add Component button located at the very bottom of the Inspector Panel.

    オーディオ ソースを追加します。

  7. 呼ばれるコンポーネントの検索オーディオ ソースの上に示すようにします。Search for the component called Audio Source, as shown above.

  8. 確認、変換Main Camera のコンポーネント (0,0,0) に設定されて、これを行うキーを押して、歯車カメラの横にあるアイコン変換コンポーネント選択とリセットします。Also make sure that the Transform component of the Main Camera is set to (0,0,0), this can be done by pressing the Gear icon next to the Camera’s Transform component and selecting Reset. 変換し、コンポーネントのようになります。The Transform component should then look like:

    1. 位置に設定されている0, 0, 0します。Position is set to 0, 0, 0.
    2. 回転に設定されている0, 0, 0します。Rotation is set to 0, 0, 0.

    注意

    Microsoft HoloLens のも、次を変更する必要がありますに含まれています、カメラこのコンポーネントでは、 Main Camera:For the Microsoft HoloLens, you will need to also change the following, which are part of the Camera component, which is on your Main Camera:

    • フラグをオフにします。 純色です。Clear Flags: Solid Color.
    • バック グラウンド' 黒、アルファ 0' – 16 進カラー: #00000000 します。Background ‘Black, Alpha 0’ – Hex color: #00000000.
  9. 左クリックしてで、平面をオンにします。Left click on the Plane to select it. インスペクター パネル設定、変換コンポーネントを次の値。In the Inspector Panel set the Transform component with the following values:

    変換 -位置Transform - Position
    XX YY ZZ
    00 -1-1 00
  10. 左クリックしてで、をオンにします。Left click on the Sphere to select it. インスペクター パネル設定、変換コンポーネントを次の値。In the Inspector Panel set the Transform component with the following values:

    変換 -位置Transform - Position
    XX YY ZZ
    22 11 22
  11. 左クリックしてで、円柱をオンにします。Left click on the Cylinder to select it. インスペクター パネル設定、変換コンポーネントを次の値。In the Inspector Panel set the Transform component with the following values:

    変換 -位置Transform - Position
    XX YY ZZ
    -2-2 11 22
  12. 左クリックしてで、キューブをオンにします。Left click on the Cube to select it. インスペクター パネル設定、変換コンポーネントを次の値。In the Inspector Panel set the Transform component with the following values:

    変換 -位置Transform - Position | 変換 -回転Transform - Rotation
    XX YY ZZ | XX YY ZZ
    00 11 44 | 4545 4545 00
  13. 左クリックしてで、新しいテキストオブジェクトを選択します。Left click on the New Text object to select it. インスペクター パネル設定、変換コンポーネントを次の値。In the Inspector Panel set the Transform component with the following values:

    変換 -位置Transform - Position | 変換 -スケールTransform - Scale
    XX YY ZZ | XX YY ZZ
    -2-2 66 99 | 0.10.1 0.10.1 0.10.1
  14. 変更フォント サイズで、テキスト メッシュコンポーネントを50します。Change Font Size in the Text Mesh component to 50.

  15. 変更、名前テキスト メッシュオブジェクトをテキストのディクテーションします。Change the name of the Text Mesh object to Dictation Text.

    3D テキスト オブジェクトを作成します。

  16. パネルの階層構造は、次のようになります。Your Hierarchy Panel structure should now look like this:

    テキストは、シーン ビューでメッシュします。

  17. 最終的なシーンは、次の図のようになります。The final scene should look like the image below:

    シーンのビュー。

第 5 章 – MicrophoneManager クラスを作成します。Chapter 5 – Create the MicrophoneManager class

最初のスクリプトを作成するには、 MicrophoneManagerクラス。The first Script you are going to create is the MicrophoneManager class. 次に、作成、 LuisManagerビヘイビアークラス、最後に、視線クラス (自由と説明がここでは、これらすべてを作成するには各章に到達) します。Following this, you will create the LuisManager, the Behaviours class, and lastly the Gaze class (feel free to create all these now, though it will be covered as you reach each Chapter).

MicrophoneManagerクラスは責任を負います。The MicrophoneManager class is responsible for:

  • ヘッドセットまたは (方は、既定のものです) のマシンにアタッチされた録音デバイスを検出します。Detecting the recording device attached to the headset or machine (whichever is the default one).
  • 音声 (音声) を使用すると、キャプチャし、ディクテーションを使用して、文字列として保存します。Capture the audio (voice) and use dictation to store it as a string.
  • 音声が一時停止すると後でディクテーションを送信、 LuisManagerクラス。Once the voice has paused, submit the dictation to the LuisManager class.

このクラスを作成します。To create this class:

  1. 右クリックし、プロジェクト パネル作成 > フォルダーします。Right-click in the Project Panel, Create > Folder. フォルダーを呼び出すスクリプトします。Call the folder Scripts.

    [スクリプト] フォルダーを作成します。

  2. スクリプトフォルダーが作成されるをダブルクリックして開きます。With the Scripts folder created, double click it, to open. その後、そのフォルダー内で右クリックし、作成 >C#スクリプトします。Then, within that folder, right-click, Create > C# Script. スクリプトの名前MicrophoneManagerします。Name the script MicrophoneManager.

  3. ダブルクリックします。 MicrophoneManagerファイルを開くVisual Studioします。Double click on MicrophoneManager to open it with Visual Studio.

  4. ファイルの先頭には、次の名前空間を追加します。Add the following namespaces to the top of the file:

        using UnityEngine;
        using UnityEngine.Windows.Speech;
    
  5. 内で、次の変数を追加し、 MicrophoneManagerクラス。Then add the following variables inside the MicrophoneManager class:

        public static MicrophoneManager instance; //help to access instance of this object
        private DictationRecognizer dictationRecognizer;  //Component converting speech to text
        public TextMesh dictationText; //a UI object used to debug dictation result
    
  6. コードをAwake()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 class instance to behave like a singleton
            instance = this;
        }
    
        void Start()
        {
            if (Microphone.devices.Length > 0)
            {
                StartCapturingAudio();
                Debug.Log("Mic Detected");
            }
        }
    
  7. メソッドに渡すの開始し、音声のキャプチャを停止する、アプリが使用する必要があります、 LuisManagerクラスと、すぐにビルドします。Now you need the method that the App uses to start and stop the voice capture, and pass it to the LuisManager class, that you will build soon.

        /// <summary>
        /// Start microphone capture, by providing the microphone as a continual audio source (looping),
        /// then initialise the DictationRecognizer, which will capture spoken words
        /// </summary>
        public void StartCapturingAudio()
        {
            if (dictationRecognizer == null)
            {
                dictationRecognizer = new DictationRecognizer
                {
                    InitialSilenceTimeoutSeconds = 60,
                    AutoSilenceTimeoutSeconds = 5
                };
    
                dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;
                dictationRecognizer.DictationError += DictationRecognizer_DictationError;
            }
            dictationRecognizer.Start();
            Debug.Log("Capturing Audio...");
        }
    
        /// <summary>
        /// Stop microphone capture
        /// </summary>
        public void StopCapturingAudio()
        {
            dictationRecognizer.Stop();
            Debug.Log("Stop Capturing Audio...");
        }
    
  8. 追加、ディクテーション ハンドラーですが、音声を置いたときに呼び出されます。Add a Dictation Handler that will be invoked when the voice pauses. このメソッドは合格するテキストをディクテーション、 LuisManagerクラス。This method will pass the dictation text to the LuisManager class.

        /// <summary>
        /// This handler is called every time the Dictation detects a pause in the speech. 
        /// This method will stop listening for audio, send a request to the LUIS service 
        /// and then start listening again.
        /// </summary>
        private void DictationRecognizer_DictationResult(string dictationCaptured, ConfidenceLevel confidence)
        {
            StopCapturingAudio();
            StartCoroutine(LuisManager.instance.SubmitRequestToLuis(dictationCaptured, StartCapturingAudio));
            Debug.Log("Dictation: " + dictationCaptured);
            dictationText.text = dictationCaptured;
        }
    
        private void DictationRecognizer_DictationError(string error, int hresult)
        {
            Debug.Log("Dictation exception: " + error);
        }
    

    重要

    削除、 Update() メソッドのため、このクラスは使用されません。Delete the Update() method since this class will not use it.

  9. 変更を保存することを確認するVisual Studioに戻る前にUnityします。Be sure to save your changes in Visual Studio before returning to Unity.

    注意

    この時点で表示されるエラーが表示されます、 Unity エディターのコンソール パネルします。At this point you will notice an error appearing in the Unity Editor Console Panel. これは、コードを参照しているため、 LuisManagerクラスは次の章で作成されます。This is because the code references the LuisManager class which you will create in the next Chapter.

第 6 章 – LUISManager クラスを作成します。Chapter 6 – Create the LUISManager class

作成するための時間は、 LuisManagerクラスは、Azure LUIS サービスへの呼び出しになります。It is time for you to create the LuisManager class, which will make the call to the Azure LUIS service.

このクラスの目的からテキストをディクテーションを受信する、 MicrophoneManagerクラスし、送信、 Azure Language Understanding API分析します。The purpose of this class is to receive the dictation text from the MicrophoneManager class and send it to the Azure Language Understanding API to be analyzed.

このクラスが逆シリアル化、 JSON応答の適切なメソッドを呼び出すと、ビヘイビアークラス アクションをトリガーします。This class will deserialize the JSON response and call the appropriate methods of the Behaviours class to trigger an action.

このクラスを作成します。To create this class:

  1. ダブルクリック、スクリプトフォルダーを開きます。Double click on the Scripts folder, to open it.

  2. 内側を右クリックし、スクリプトフォルダー、をクリックして作成 >C#スクリプトRight-click inside the Scripts folder, click Create > C# Script. スクリプトの名前LuisManagerします。Name the script LuisManager.

  3. Visual Studio で開くことをスクリプトをダブルクリックします。Double click on the script to open it with Visual Studio.

  4. ファイルの先頭には、次の名前空間を追加します。Add the following namespaces to the top of the file:

        using System;
        using System.Collections;
        using System.Collections.Generic;
        using System.IO;
        using UnityEngine;
        using UnityEngine.Networking;
    
  5. 3 つのクラスを作成して開始するLuisManagerクラス (に同じスクリプト ファイル内の上、 Start() メソッド) を表す、逆シリアル化されました。Azure からの JSON 応答です。You will begin by creating three classes inside the LuisManager class (within the same script file, above the Start() method) that will represent the deserialized JSON response from Azure.

        [Serializable] //this class represents the LUIS response
        public class AnalysedQuery
        {
            public TopScoringIntentData topScoringIntent;
            public EntityData[] entities;
            public string query;
        }
    
        // This class contains the Intent LUIS determines 
        // to be the most likely
        [Serializable]
        public class TopScoringIntentData
        {
            public string intent;
            public float score;
        }
    
        // This class contains data for an Entity
        [Serializable]
        public class EntityData
        {
            public string entity;
            public string type;
            public int startIndex;
            public int endIndex;
            public float score;
        }
    
  6. 次に、内部では、次の変数を追加、 LuisManagerクラス。Next, add the following variables inside the LuisManager class:

        public static LuisManager instance;
    
        //Substitute the value of luis Endpoint with your own End Point
        string luisEndpoint = "https://westus.api.cognitive... add your endpoint from the Luis Portal";
    
  7. で LUIS エンドポイントを今すぐ配置してください (これは、LUIS ポータルから必要があります)。Make sure to place your LUIS endpoint in now (which you will have from your LUIS portal).

  8. コードをAwake() メソッドは今すぐ追加する必要があります。Code for the Awake() method now needs to be added. このメソッドが、クラスの初期化時に呼び出されます。This method will be called when the class initializes:

        private void Awake()
        {
            // allows this class instance to behave like a singleton
            instance = this;
        }
    
  9. このアプリケーションは、送信から受信したディクテーションに使用する方法を作成する必要があるので、 MicrophoneManagerクラスをLUIS、受信して、応答を逆シリアル化します。Now you need the methods this application uses to send the dictation received from the MicrophoneManager class to LUIS, and then receive and deserialize the response.

  10. インスタンスに渡される目的、および関連付けられているエンティティは、の値が決まると、ビヘイビアー目的のアクションをトリガーするクラス。Once the value of the Intent, and associated Entities, have been determined, they are passed to the instance of the Behaviours class to trigger the intended action.

        /// <summary>
        /// Call LUIS to submit a dictation result.
        /// The done Action is called at the completion of the method.
        /// </summary>
        public IEnumerator SubmitRequestToLuis(string dictationResult, Action done)
        {
            string queryString = string.Concat(Uri.EscapeDataString(dictationResult));
    
            using (UnityWebRequest unityWebRequest = UnityWebRequest.Get(luisEndpoint + queryString))
            {
                yield return unityWebRequest.SendWebRequest();
    
                if (unityWebRequest.isNetworkError || unityWebRequest.isHttpError)
                {
                    Debug.Log(unityWebRequest.error);
                }
                else
                {
                    try
                    {
                        AnalysedQuery analysedQuery = JsonUtility.FromJson<AnalysedQuery>(unityWebRequest.downloadHandler.text);
    
                        //analyse the elements of the response 
                        AnalyseResponseElements(analysedQuery);
                    }
                    catch (Exception exception)
                    {
                        Debug.Log("Luis Request Exception Message: " + exception.Message);
                    }
                }
    
                done();
                yield return null;
            }
        }
    
  11. という新しいメソッドを作成するAnalyseResponseElements() 、その結果を読み取ることがAnalysedQueryし、エンティティを決定します。Create a new method called AnalyseResponseElements() that will read the resulting AnalysedQuery and determine the Entities. これらのエンティティが決まったらのインスタンスに渡されます、ビヘイビアーアクションで使用するクラス。Once those Entities are determined, they will be passed to the instance of the Behaviours class to use in the actions.

        private void AnalyseResponseElements(AnalysedQuery aQuery)
        {
            string topIntent = aQuery.topScoringIntent.intent;
    
            // Create a dictionary of entities associated with their type
            Dictionary<string, string> entityDic = new Dictionary<string, string>();
    
            foreach (EntityData ed in aQuery.entities)
            {
                entityDic.Add(ed.type, ed.entity);
            }
    
            // Depending on the topmost recognised intent, read the entities name
            switch (aQuery.topScoringIntent.intent)
            {
                case "ChangeObjectColor":
                    string targetForColor = null;
                    string color = null;
    
                    foreach (var pair in entityDic)
                    {
                        if (pair.Key == "target")
                        {
                            targetForColor = pair.Value;
                        }
                        else if (pair.Key == "color")
                        {
                            color = pair.Value;
                        }
                    }
    
                    Behaviours.instance.ChangeTargetColor(targetForColor, color);
                    break;
    
                case "ChangeObjectSize":
                    string targetForSize = null;
                    foreach (var pair in entityDic)
                    {
                        if (pair.Key == "target")
                        {
                            targetForSize = pair.Value;
                        }
                    }
    
                    if (entityDic.ContainsKey("upsize") == true)
                    {
                        Behaviours.instance.UpSizeTarget(targetForSize);
                    }
                    else if (entityDic.ContainsKey("downsize") == true)
                    {
                        Behaviours.instance.DownSizeTarget(targetForSize);
                    }
                    break;
            }
        }
    

    重要

    削除、 Start()Update() メソッドをこのクラスはそれらを使用しないためです。Delete the Start() and Update() methods since this class will not use them.

  12. 変更を保存することを確認するVisual Studioに戻る前にUnityします。Be sure to save your changes in Visual Studio before returning to Unity.

注意

表示されているいくつかのエラーが表示されますこの時点で、 Unity エディターのコンソール パネルします。At this point you will notice several errors appearing in the Unity Editor Console Panel. これは、コードを参照しているため、ビヘイビアークラスは次の章で作成されます。This is because the code references the Behaviours class which you will create in the next Chapter.

第 7 章 – 動作クラスを作成します。Chapter 7 – Create the Behaviours class

ビヘイビアークラスによって提供されるエンティティを使用してアクションをトリガーする、 LuisManagerクラス。The Behaviours class will trigger the actions using the Entities provided by the LuisManager class.

このクラスを作成します。To create this class:

  1. ダブルクリック、スクリプトフォルダーを開きます。Double click on the Scripts folder, to open it.

  2. 内側を右クリックし、スクリプトフォルダー、をクリックして作成 >C#スクリプトRight-click inside the Scripts folder, click Create > C# Script. スクリプトの名前ビヘイビアーします。Name the script Behaviours.

  3. ファイルを開くスクリプトをダブルクリックします。 Visual Studioします。Double click on the script to open it with Visual Studio.

  4. 内で、次の変数を追加し、ビヘイビアークラス。Then add the following variables inside the Behaviours class:

        public static Behaviours instance;
    
        // the following variables are references to possible targets
        public GameObject sphere;
        public GameObject cylinder;
        public GameObject cube;
        internal GameObject gazedTarget;
    
  5. 追加、 Awake() メソッドのコード。Add the Awake() method code. このメソッドが、クラスの初期化時に呼び出されます。This method will be called when the class initializes:

        void Awake()
        {
            // allows this class instance to behave like a singleton
            instance = this;
        }
    
  6. によって、次のメソッドが呼び出される、 LuisManagerオブジェクトが、クエリの対象であることを確認し、適切なアクションをトリガーして (これは、先ほど作成した) クラス。The following methods are called by the LuisManager class (which you have created previously) to determine which object is the target of the query and then trigger the appropriate action.

        /// <summary>
        /// Changes the color of the target GameObject by providing the name of the object
        /// and the name of the color
        /// </summary>
        public void ChangeTargetColor(string targetName, string colorName)
        {
            GameObject foundTarget = FindTarget(targetName);
            if (foundTarget != null)
            {
                Debug.Log("Changing color " + colorName + " to target: " + foundTarget.name);
    
                switch (colorName)
                {
                    case "blue":
                        foundTarget.GetComponent<Renderer>().material.color = Color.blue;
                        break;
    
                    case "red":
                        foundTarget.GetComponent<Renderer>().material.color = Color.red;
                        break;
    
                    case "yellow":
                        foundTarget.GetComponent<Renderer>().material.color = Color.yellow;
                        break;
    
                    case "green":
                        foundTarget.GetComponent<Renderer>().material.color = Color.green;
                        break;
    
                    case "white":
                        foundTarget.GetComponent<Renderer>().material.color = Color.white;
                        break;
    
                    case "black":
                        foundTarget.GetComponent<Renderer>().material.color = Color.black;
                        break;
                }          
            }
        }
    
        /// <summary>
        /// Reduces the size of the target GameObject by providing its name
        /// </summary>
        public void DownSizeTarget(string targetName)
        {
            GameObject foundTarget = FindTarget(targetName);
            foundTarget.transform.localScale -= new Vector3(0.5F, 0.5F, 0.5F);
        }
    
        /// <summary>
        /// Increases the size of the target GameObject by providing its name
        /// </summary>
        public void UpSizeTarget(string targetName)
        {
            GameObject foundTarget = FindTarget(targetName);
            foundTarget.transform.localScale += new Vector3(0.5F, 0.5F, 0.5F);
        }
    
  7. 追加、 FindTarget() メソッドの判断するために、 GameObjects目的は、現在のターゲットであります。Add the FindTarget() method to determine which of the GameObjects is the target of the current Intent. このメソッドの既定値をターゲット、 GameObjectされる"gazed"エンティティの明示的なターゲットが定義されていない場合。This method defaults the target to the GameObject being “gazed” if no explicit target is defined in the Entities.

        /// <summary>
        /// Determines which obejct reference is the target GameObject by providing its name
        /// </summary>
        private GameObject FindTarget(string name)
        {
            GameObject targetAsGO = null;
    
            switch (name)
            {
                case "sphere":
                    targetAsGO = sphere;
                    break;
    
                case "cylinder":
                    targetAsGO = cylinder;
                    break;
    
                case "cube":
                    targetAsGO = cube;
                    break;
    
                case "this": // as an example of target words that the user may use when looking at an object
                case "it":  // as this is the default, these are not actually needed in this example
                case "that":
                default: // if the target name is none of those above, check if the user is looking at something
                    if (gazedTarget != null) 
                    {
                        targetAsGO = gazedTarget;
                    }
                    break;
            }
            return targetAsGO;
        }
    

    重要

    削除、 Start()Update() メソッドをこのクラスはそれらを使用しないためです。Delete the Start() and Update() methods since this class will not use them.

  8. 変更を保存することを確認するVisual Studioに戻る前にUnityします。Be sure to save your changes in Visual Studio before returning to Unity.

章 – 8 視線の先クラスを作成します。Chapter 8 – Create the Gaze Class

このアプリを完了する必要がある最後のクラスは、視線クラス。The last class that you will need to complete this app is the Gaze class. このクラスへの参照を更新する、 GameObject現在のユーザーのビジュアル フォーカスします。This class updates the reference to the GameObject currently in the user’s visual focus.

このクラスを作成します。To create this Class:

  1. ダブルクリック、スクリプトフォルダーを開きます。Double click on the Scripts folder, to open it.

  2. 内側を右クリックし、スクリプトフォルダー、をクリックして作成 >C#スクリプトRight-click inside the Scripts folder, click Create > C# Script. スクリプトの名前視線します。Name the script Gaze.

  3. ファイルを開くスクリプトをダブルクリックします。 Visual Studioします。Double click on the script to open it with Visual Studio.

  4. このクラスに次のコードを挿入します。Insert the following code for this class:

        using UnityEngine;
    
        public class Gaze : MonoBehaviour
        {        
            internal GameObject gazedObject;
            public float gazeMaxDistance = 300;
    
            void Update()
            {
                // Uses a raycast from the Main Camera to determine which object is gazed upon.
                Vector3 fwd = gameObject.transform.TransformDirection(Vector3.forward);
                Ray ray = new Ray(Camera.main.transform.position, fwd);
                RaycastHit hit;
                Debug.DrawRay(Camera.main.transform.position, fwd);
    
                if (Physics.Raycast(ray, out hit, gazeMaxDistance) && hit.collider != null)
                {
                    if (gazedObject == null)
                    {
                        gazedObject = hit.transform.gameObject;
    
                        // Set the gazedTarget in the Behaviours class
                        Behaviours.instance.gazedTarget = gazedObject;
                    }
                }
                else
                {
                    ResetGaze();
                }         
            }
    
            // Turn the gaze off, reset the gazeObject in the Behaviours class.
            public void ResetGaze()
            {
                if (gazedObject != null)
                {
                    Behaviours.instance.gazedTarget = null;
                    gazedObject = null;
                }
            }
        }
    
  5. 変更を保存することを確認するVisual Studioに戻る前にUnityします。Be sure to save your changes in Visual Studio before returning to Unity.

第 9 章 – シーンのセットアップの完了Chapter 9 – Completing the scene setup

  1. シーンのセットアップを完了するには、Scripts フォルダーから作成した各スクリプトをドラッグして、 Main Cameraオブジェクト、階層パネルします。To complete the setup of the scene, drag each script that you have created from the Scripts Folder to the Main Camera object in the Hierarchy Panel.

  2. 選択、 Main Cameraを見て、インスペクター パネル、アタッチした各スクリプトに表示できるし、まだ設定している各スクリプトにパラメーターがあることがわかります。Select the Main Camera and look at the Inspector Panel, you should be able to see each script that you have attached, and you will notice that there are parameters on each script that are yet to be set.

    カメラの参照のターゲットを設定します。

  3. これらのパラメーターを正しく設定するには、次の手順を実行します。To set these parameters correctly, follow these instructions:

    1. MicrophoneManager:MicrophoneManager:

      • 階層パネル、ドラッグ、テキストのディクテーションオブジェクトをディクテーション テキストパラメーター値のボックスです。From the Hierarchy Panel, drag the Dictation Text object into the Dictation Text parameter value box.
    2. ビヘイビアーから、階層パネル:Behaviours, from the Hierarchy Panel:

      • ドラッグ、オブジェクトを参照ターゲット ボックス。Drag the Sphere object into the Sphere reference target box.
      • ドラッグ、円柱に、円柱参照ターゲット ボックス。Drag the Cylinder into the Cylinder reference target box.
      • ドラッグ、キューブに、キューブ参照ターゲット ボックス。Drag the Cube into the Cube reference target box.
    3. 視線:Gaze:

      • 設定、最大距離の視線300 (されていない) 場合。Set the Gaze Max Distance to 300 (if it is not already).
  4. 結果は、次の図のようになります。The result should look like the image below:

    設定、カメラの参照のターゲットを表示するようになりました。

第 10 章 – Unity エディターでのテストChapter 10 – Test in the Unity Editor

シーンのセットアップを正しく実装することをテストします。Test that the Scene setup is properly implemented.

次のことを確認してください。Ensure that:

  • 関連付けられているすべてのスクリプト、 Main Cameraオブジェクト。All the scripts are attached to the Main Camera object.
  • 内のすべてのフィールド、カメラ インスペクター [メイン] パネルが適切に割り当てられます。All the fields in the Main Camera Inspector Panel are assigned properly.
  1. キーを押して、再生ボタン、 Unity エディターします。Press the Play button in the Unity Editor. アプリは、添付のイマーシブ ヘッドセット内で実行する必要があります。The App should be running within the attached immersive headset.

  2. など、いくつかの発話を試してください。Try a few utterances, such as:

    make the cylinder red
    
    change the cube to yellow
    
    I want the sphere blue
    
    make this to green
    
    change it to white
    

    注意

    変更する既定のオーディオ デバイスについて、Unity コンソールで、エラーが発生した場合期待どおりにシーンが機能しない可能性があります。If you see an error in the Unity console about the default audio device changing, the scene may not function as expected. これは、複合現実ポータルが設定されているヘッドセットの組み込みのマイクを扱う方法に起因します。This is due to the way the mixed reality portal deals with built-in microphones for headsets that have them. このエラーを参照してください、単にシーンを停止、再開し、として動作する必要がありますが必要です。If you see this error, simply stop the scene and start it again and things should work as expected.

第 11 章 – ビルドおよびサイドロード UWP ソリューションChapter 11 – Build and sideload the UWP Solution

アプリケーションが Unity エディターでの作業でことを確認して後、は、構築およびデプロイする準備が完了したら。Once you have ensured that the application is working in the Unity Editor, you are ready to Build and Deploy.

作成する方法。To Build:

  1. 現在のシーンを保存 をクリックしてファイル > 保存します。Save the current scene by clicking on File > Save.

  2. 移動してファイル > のビルド設定します。Go to File > Build Settings.

  3. というボックスをオンにUnityC#プロジェクト(が表示されると、UWP プロジェクトが作成されると、コードのデバッグに便利です。Tick the box called Unity C# Projects (useful for seeing and debugging your code once the UWP project is created.

  4. をクリックして開くシーンを追加、 をクリックし、ビルドClick on Add Open Scenes, then click Build.

    ビルド設定ウィンドウ

  5. ソリューションをビルドするフォルダーを選択するように促されます。You will be prompted to select the folder where you want to build the Solution.

  6. 作成、ビルドフォルダーとそのフォルダー内には、任意の適切な名前を別のフォルダーを作成します。Create a BUILDS folder and within that folder create another folder with an appropriate name of your choice.

  7. クリックしてフォルダーの選択をその場所にビルドを開始します。Click Select Folder to begin the build at that location.

    ビルド フォルダーを作成する 選択フォルダーを作成します。Create Builds Folder Select Builds Folder

  8. 1 回 Unity には、(少し時間がかかる場合があります) ビルドが完了した、開く必要がありますが、ファイル エクスプ ローラービルドの位置にあるウィンドウ。Once Unity has finished building (it might take some time), it should open a File Explorer window at the location of your build.

ローカル コンピューターの展開。To Deploy on Local Machine:

  1. Visual Studioで作成されたソリューション ファイルを開き、前のチャプターします。In Visual Studio, open the solution file that has been created in the previous Chapter.

  2. ソリューション プラットフォームx86ローカル マシンします。In the Solution Platform, select x86, Local Machine.

  3. ソリューション構成選択デバッグします。In the Solution Configuration select Debug.

    Microsoft HoloLens にすることがあります方が簡単なこれを設定するリモート マシン、するは、コンピューターにテザリングされたしないようにします。For the Microsoft HoloLens, you may find it easier to set this to Remote Machine, so that you are not tethered to your computer. ただし、次の操作も必要があります。Though, you will need to also do the following:

    • 把握、 IP アドレス内では、HoloLens の設定 > ネットワークとインターネット > Wi-fi > 詳細オプション;、IPv4 では、アドレスを使用する必要があります。Know the IP Address of your HoloLens, which can be found within the Settings > Network & Internet > Wi-Fi > Advanced Options; the IPv4 is the address you should use.
    • 確認開発者モード; で見つかった設定 > 更新とセキュリティ > 開発者向けします。Ensure Developer Mode is On; found in Settings > Update & Security > For developers.

    アプリをデプロイします。

  4. 移動して、ビルド メニューの をクリックソリューションの配置をコンピューターにアプリケーションをサイドローディングします。Go to the Build menu and click on Deploy Solution to sideload the application to your machine.

  5. アプリが起動する準備ができて、インストールされているアプリの一覧に表示されます。Your App should now appear in the list of installed apps, ready to be launched!

  6. アプリがアクセスを承認することを求められます、起動されると、_マイク_します。Once launched, the App will prompt you to authorize access to the Microphone. 使用して、モーションのコント ローラー、または音声入力、またはキーボードキーを押す、はいボタン。Use the Motion Controllers, or Voice Input, or the Keyboard to press the YES button.

第 12 章 –、LUIS サービスの向上Chapter 12 – Improving your LUIS service

重要

この章では非常に重要ですし、LUIS サービスの精度を向上させるため、バッキングストアファイルに繰り返しを複数回に付けする必要があります。 これを完了することを確認します。This chapter is incredibly important, and may need to be interated upon several times, as it will help improve the accuracy of your LUIS service: ensure you complete this.

LUIS によって提供される知識のレベルを向上させるためには、新しい発話をキャプチャして LUIS アプリを再トレーニングに使用する必要があります。To improve the level of understanding provided by LUIS you need to capture new utterances and use them to re-train your LUIS App.

たとえば、LUIS"Increase"を理解して「アップサイズ」のトレーニングが可能性がありますが、アプリ「拡大」などの単語についても理解を使用することはありませんか。For example, you might have trained LUIS to understand “Increase” and “Upsize”, but wouldn’t you want your app to also understand words like “Enlarge”?

アプリケーションは、何回か使用している、LUIS によって収集されると、LUIS のポータルで使用可能なすべての説明になります。Once you have used your application a few times, everything you have said will be collected by LUIS and available in the LUIS PORTAL.

  1. その後、ポータル アプリケーションに移動リンク、およびログイン。Go to your portal application following this LINK, and Log In.

  2. MS の資格情報でログインした後は、をクリックしてアプリ名します。Once you are logged in with your MS Credentials, click on your App name.

  3. をクリックして、エンドポイント発話を確認ページの左側にボタンをクリックします。Click the Review endpoint utterances button on the left of the page.

    発話を確認してください。

  4. 複合現実のアプリケーションが送信に LUIS 発話の一覧が表示されます。You will be shown a list of the Utterances that have been sent to LUIS by your mixed reality Application.

    発話の一覧

強調表示されたいくつかがわかりますエンティティします。You will notice some highlighted Entities.

強調表示されている各単語、ポインターを合わせるとすると、それぞれの発話を確認でき、エンティティが認識されている正しく、エンティティが正しくないが、エンティティが欠落を判断することができます。By hovering over each highlighted word, you can review each Utterance and determine which Entity has been recognized correctly, which Entities are wrong and which Entities are missed.

上記の例では、それが見つかったこと「スピア型」という単語が強調表示されて、ターゲットとしてそのため、ポインターを合わせると、マウスを使用して単語をクリックして実行されると、誤りを修正するために必要なラベルの削除します。In the example above, it was found that the word “spear” had been highlighted as a target, so it necessary to correct the mistake, which is done by hovering over the word with the mouse and clicking Remove Label.

発話の確認 ラベル イメージの削除Check utterances Remove Label Image

  1. 言葉を完全に間違っている場合は、削除するを使用して、削除画面の右側にあるボタンをクリックします。If you find Utterances that are completely wrong, you can delete them using the Delete button on the right side of the screen.

    間違った発話を削除します。

  2. 使用して内容を理解を検証するには、LUIS が発話を正しく解釈がある場合、または、配置目的に追加ボタンをクリックします。Or if you feel that LUIS has interpreted the Utterance correctly, you can validate its understanding by using the Add To Aligned Intent button.

    配置済みのインテントに追加します。

  3. 表示されているすべての発話を並べ替えた後以上が使用可能なかどうかに表示するページを再読み込みをしてください。Once you have sorted all the displayed Utterances, try and reload the page to see if more are available.

  4. アプリケーションについての理解を向上させるために可能な回数だけこのプロセスを繰り返す非常に重要ですが。It is very important to repeat this process as many times as possible to improve your application understanding.

楽しんでください!Have fun!

完成した LUIS 統合アプリケーションYour finished LUIS Integrated application

これで、Azure Language Understanding Intelligence Service、ユーザーの質問を理解して、その情報を活用する mixed reality アプリを構築します。Congratulations, you built a mixed reality app that leverages the Azure Language Understanding Intelligence Service, to understand what a user says, and act on that information.

ラボの結果

ボーナスの演習Bonus exercises

手順 1Exercise 1

このアプリケーションの使用中にいる場合、Floor オブジェクトを見つめます、色を変更するように要求して、その処理を行いますがわかります。While using this application you might notice that if you gaze at the Floor object and ask to change its color, it will do so. 床面の色を変更することから、アプリケーションを停止する方法を操作することができますか。Can you work out how to stop your application from changing the Floor color?

手順 2Exercise 2

シーン内のオブジェクトの機能の追加の LUIS とアプリの機能の拡張をお試しください。たとえば、ヒット ポイントは、どのようなユーザーによって言うし、現在のシーン オブジェクトと共にそれらのオブジェクトを使用して、既存のコマンドを使用できる視線の先に新しいオブジェクトを作成します。Try extending the LUIS and App capabilities, adding additional functionality for objects in scene; as an example, create new objects at the Gaze hit point, depending on what the user says, and then be able to use those objects alongside current scene objects, with the existing commands.