MR and Azure 303 : Luis

こんにちは、ナレコム菅井です。

今回はMR and Azure303のアプリを作っていきたいと思います。

今回使用したツールは以下の通りです。
・Windows
・Unity 2017.4.11f1
・visual studio2017
・HoloLens

目標はMicrosoft AzureのLanguage Understandingを使って、ユーザーの言葉から意図する通り物体の色を変えるアプリを作ることです。それではさっそく始めて行きましょう!

1.準備(1)


ステップ1. Azure Portalでインスタンスを追加する。
ステップ2. Language Portalでアプリを作る。

ステップ1
1. Azure Portalにログインします。

2. [リソースの作成]からLanguage Understandingと検索します。下のようなアイコンが出てきたら開きます。

3. Language Understandingの説明が出てきますので、[作成]をクリックします。出てこない場合は右に画面をスライドしてみてください。

4. Language Understandingに関する情報を入力する画面になりますので、入力していきます(※記入例です)。入力し終わったら、[作成]をクリックします。

5. お知らせタブを開きます。デプロイが終了したら、[リソースへ移動]します。


これでLanguage Understandingサービスのインスタンスが作られました。

6. [Quick start]->[1 キーを取得する]の[キー]をクリックするとキーを確認できま。このキーは後ほど使います。

ステップ2
1. [Quick start]->[2 API呼び出しを行う]の[Language Understanding Portal]をクリックするとLanguage Understanding Portalに移動します。

2. [Login/Sign up]をクリックします。

3. 使うのがはじめての場合このような画面が出るかもしれません。国を選択し、チェックボックスにチェックを入れた後、[Continue]をクリックします。

4. 下にスクロールしていき、[Create LUIS app]をクリックします。

5. ログインしたら[My apps]から[Create new app]をクリックします。

6. アプリの情報を入力する画面になります。ここに入力を済ませて[Done]をクリックすればアプリが作られます。しかし、このままでは何の役にも立ちません。

2.準備(2)


この章では、どのような言葉を識別させるかを入力していきたいと思います。
1. 言葉を分類するときに使うタグを作っていきます。
a. まず、[App Assets]->[Entities]に入り、[Create new entity]をクリックします。

b. Entity nameをcolorとし、Entity typeをSimpleとします。[Done]を押して完了です。

c. 同様にしてtargetも作ります。

2. 続いて、タグ付けするための言葉を作っていきます。
a. [Intents]->[Create new intent]をクリックし新しいインテントを作ります。

b. 名前をChangeObjectColorとし[Done]とします。

c. ボックスに言葉を入力してエンターを押します。

d. cを繰り返し様々な言葉を作ります。物体[cube,sphere,cylinder,代名詞]を[色]に変えるという文を作るようにします。

3. 作った文にタグ付けをしていきます。物体にはobject、色にはcolorタグをつけていきます。タグをつけたい単語をクリックし、適切なタグをつけていきます。


4. 全てにタグをつけ終わったらここで[Train]を押してタグを学習させます。

5. [PUBLISH]を押して学習させたものを公開します。これによってスクリプトで呼び出すことができるようになります。

6. 公開が完了したら緑のバーが現れるので[Refer to list of endpoints]をクリックします。

7. このままでは学習させたもののURLが取得できません。[Assign resource]をクリックします。

8. 新しい画面がポップします。先ほどAzure Portalで作ったアプリケーションと同じものを選択し[Assign resource]をクリックします。

9. 追加した名前でリストに追加されているのがわかると思います。このEndpointは後ほど使いますのでメモしておきましょう。

3.Unityの設定


続いてUnityの設定を行っていきたいと思います。以下の手順で進めていきましょう。

1.Unityを開き、[New]から新しいプロジェクトをつくる。
名前をMR_LUISとして、[Create project]をクリックします。

2. [Build Settings..]からさまざまな項目を編集していく。
[File]->[Build Settings..]を開きます。

a.プラットフォームの変更
[PC, Mac & Linux Standalone]を[Universal Windows Platform]に変更し、[Switch Platform]をクリックします

b.[Player Settings..]を編集する
[Player Settings..]をクリックします。

そのあと[Other Settings]、[Publishing Settings]->[Capabilities]、[XR Settings]を以下のように設定してきます。


続いて、[Unity C#]にチェックを入れます。

[Build Settings..]の変更は以上です。

3. 続いてシーンを保存します。[Add Open Scenes]をクリックして、[新しいフォルダー]を選択しScenesと名前をつけた後、そのフォルダー内に名前をMR_LuisSceneとして[保存]します。

4.シーン作成


シーン内にオブジェクトを配置していきたいと思います。

1. 土台の配置
[Hierarchy]->[Create]->[3D Object]->[Plane]で土台を作り、[Inspector]->[Transform]を編集していきます。
—————————————–
Position | X : 0 | Y : -1 | Z : 0
—————————————–

2. 球の配置
[Hierarchy]->[Create]->[3D Object]->[Sphere]で球を作り、[Inspector]->[Transform]を編集していきます。
—————————————–
Position | X : 2 | Y : 1 | Z : 2
—————————————–

3. シリンダーの配置
[Hierarchy]->[Create]->[3D Object]->[Cylinder]でシリンダーを作り、[Inspector]->[Transform]を編集していきます。
—————————————–
Position | X : -2 | Y : 1 | Z : 2
—————————————–

4. 正方形の配置
[Hierarchy]->[Create]->[3D Object]->[Cube]で正方形を作り、[Inspector]->[Transform]を編集していきます。
———————————————-
Position |  X : 0  |  Y : 1  |  Z : 4
———————————————-
Rotation | X : 45 | Y : 45 | Z : 45
———————————————-

5. テキストの配置
a. [Hierarchy]->[Create]->[3D Object]->[Text]でテキストを作り、名前をDictationTextとします。[Inspector]->[Transform]を編集していきます。
———————————————
Position |  X : -2  |  Y : 6  |  Z : 9
———————————————
Scale     | X : 0.1 | Y : 0.1 | Z : 0.1
———————————————

b. [Inspector]内のその他の編集を行っていきます。

6. カメラまわりの編集
デフォルトで備わっているMain Cameraの代わりにHoloToolkitを使います。使うものを以下のリンクからダウンロードしてください。
HoloToolkit-Unity-2017.4.2.0.unitypackage
HoloToolkit-Unity-Example-2017.4.2.0.unitypackage

a. [Assets]->[Import Package]->[Custom Package..]からダウンロードしたpackageを二つともインポートします。

b. [Hierarchy]->[Main camera]をdeleteします。

c. [Project]から以下の三つを検索し、[Hierarchy]パネルへD&Dします。
・MixedRealityCameraParent
・DefaultCursor
・InputManger

d. [Hierarchy]->[MixedRealityCameraParent]->[MixedRealityCamera]の[Inspector]を編集していきます。
[Camera]
————————————
Clear Flags | Solid Color
————————————

[Mixed Reality Camera Manager]
——————————
Clear Flags | color
——————————
Near clip     | 0.2
——————————
Clear Flags | color
——————————

e. [Hierarchy]->[Input Manager]の[Inspector]を編集していきます。[Simple Single Pointer Selector]のCursorへ[Hierarchy]->[Default Cursor]をアタッチします。

f. [Hierarchy]->[MixedRealityCameraParent]->[MixedRealityCamera]の[Inspector]->[Add Component]からAudioSourceを検索しこれを追加します。

この章で設定した[Inspector]->[Transform]は目安ですので、より見やすいように編集してください。

5.スクリプトの作成

ここでは以下の4つのスクリプトを作っていきたいと思います。
・MicrophoneManagerLuis
・LuisManager
・Behaviours
・Gaze

スクリプトの作り方はまず、すべてのスクリプトをまとめておくフォルダーを作成します。[Project]->[Create]をクリックし、[Folder]を選択して新しいフォルダーを作ります。名前をScriptsとします。続いて[Project]->[Create]->[C# Script]をクリックし、クラス名をつけていきます。

・MicrophoneManagerLuis
このクラスはMicrophoneで音声をキャプチャし、そのキャプチャした音声をテキストにするクラスです。聞いた音声を順に文字におこしていきます。今回は簡単のため「change」と聞き取ったらテキストを「The color of the cylinder must be red」として使用することにします。また、しゃべった言葉を直接使う方法については後述します。喋り始めてから一度止まるまでの音声がテキストになります。コードは以下の通りです。

喋った言葉を直接使いたい場合は上のコードの以下の部分を変更します。

の部分を

とします。

・LuisManager
このクラスのやることはMicrophoneManagerLuisクラスからテキストを受け取り、Azure Language Understanding APIにテキストを送ることです。ここで2.準備(2)で取得したEndpointを使用します。–Insert your Endpoint–にEndpointを挿入してください。コードは以下の通りです。

・Behaviours
このクラスは適切なアクションを起こすためのクラスです。変更するオブジェクト、色を指定します。コードは以下の通りです。

・Gaze
このクラスはユーザーの視点を更新するクラスです。コードは以下の通りです。

全てのスクリプトが完成したら、動作するようにアタッチしていきたいと思います。記述した全てのスクリプトを[Hierarchy]パネル内の[MixedRealityCamera]にD&Dします。

[MixedRealityCamera]の[Inspector]内に先ほどD&Dしたスクリプトが追加されていると思います。[Behaviours(script)]->[Sphere]、[Cylinder]、[Cube]に[Hierarchy]パネル内の[Sphere]、[Cylinder]、[Cube]を、[Microphone Manager Luis(script)]->[Dictation Text]へ[Hierarchy]パネル内の[Dictation Text]をそれぞれアタッチします。

6.ビルド

[File]->[Build Settings..]->[Build]の順に選択します。新しいフォルダー(BUILDS)を作成し、その中にさらにフォルダー(Luis_V0.1)を作ります。このフォルダーを選択し、保存します。

この後の手順についてはこちらを参照してください。

Unity上で実行した様子です。

HoloLensで実行した時の様子です。

以上となります。 お疲れ様でした。

この記事を書いた人

azure-recipe-user