あつしの What's New

技術情報や大学の授業で使用した演習をメモしていきます。このブログは個人のメモで、所属企業や大学の公式情報ではありません。

【ビギナー向け】MRTK v2 チュートリアルの音声認識・翻訳アプリを開発しましょう

ブログをご覧いただきありがとうございます!!

今回は MRTK v2.2.0 と Azure Cognitive Service を使用して翻訳アプリを作成してみたいと思います
f:id:atsushisz:20200210025841j:plain:w200

開発環境の構築がまだの方は、先にこちらの構築手順を参考にして開発環境をセットアップしましょう
blog.atsushisz.jp

はじめて HoloLens 2 のアプリを開発する方は、まずこちらの手順で Hand Interaction Examples を開発して基本的な手順を確認することをお勧めします
blog.atsushisz.jp

それでは頑張って作っていきましょう!

アセットパックのダウンロード

まず、必要なアセットパックをダウンロードしましょう

GitHub にアクセスして以下のアセットパックをダウンロードしてください
Hand Interaction Examples を開発する際に既にダウンロード済みの場合はそのまま使用できます
github.com
Microsoft.MixedReality.Toolkit.Unity.Foundation.2.2.0.unitypackage
f:id:atsushisz:20200210030309j:plain:w400

Azure Speech SDK のアセットパックをダウンロードしてください
Microsoft.CognitiveServices.Speech.1.9.0.unitypackage
https://aka.ms/csspeech/unitypackage

Lunarcom Package という Speech SDK 用のアセットパックをダウンロードしてください
SpeechSDKAssets.unitypackage
https://github.com/microsoft/MixedRealityLearning/releases/tag/Speech_2
f:id:atsushisz:20200210030638j:plain:w400

新しい Unity プロジェクトを作成

Unity で新規のプロジェクトを作っていきましょう

Unity Hub を起動してください
プロジェクトタブで右上の[新規作成]ボタンをクリックしてください
f:id:atsushisz:20191221031610p:plain:w400

※Unityを複数バージョンインストールしている場合はドロップダウンリストから[2018.4.12f1]を選択してください

テンプレートで[3D]を選択、プロジェクト名に任意の名前を入力、保存先を指定したら[作成]をクリックしてください
僕はプロジェクト名を「MRSpeechTranslator」という名前にしました
ここで指定したプロジェクト名は後半の手順でも使うのでわかりやすい名前にしておきましょう
f:id:atsushisz:20200210030857j:plain:w400

少し待つと Unity エディターが起動します

プロジェクトを構成

HoloLens 2 用に Unity プロジェクトを設定していきます

[File]>[Build Settings...]をクリックしてください
f:id:atsushisz:20200210031154j:plain:w400

[Universal Windows Platform]を選択して[Switch Platform]をクリックしてください
f:id:atsushisz:20191221031626p:plain:w400

これで設定できました
Build Settings のウインドウは右上の[X](閉じる)ボタンで閉じておきましょう

Mixed Reality Took Kit アセットパックをインポート

GitHub からダウンロードしたアセットパックをインポートしていきます

[Assets]>[Import Package]>[Custom Package...]をクリックしてください
f:id:atsushisz:20200210031523j:plain:w400

GitHubからダウンロードした Microsoft.MixedReality.Toolkit.Unity.Foundation.2.2.0.unitypackage のアセットパックを選択して[開く(O)]をクリックしてください
f:id:atsushisz:20191221031643p:plain:w400

全ての項目のチェックがオンになっていることを確認して[Import]をクリックしてください
f:id:atsushisz:20191221031647p:plain:w400

インポート中に「MRTK Project Configurator」というウインドウが表示されます
f:id:atsushisz:20191221031650p:plain:w400
インポートが終わってプログレスバーが表示されなくなったら[Apply]をクリックしてください
f:id:atsushisz:20191221031654p:plain:w400

Azure Speech SDK アセットパックをインポート

ダウンロードした Azure Speech SDK のアセットパックをインポートしていきます

[Assets]>[Import Package]>[Custom Package...]をクリックしてください
f:id:atsushisz:20200210031523j:plain:w400

ダウンロードした Microsoft.CognitiveServices.Speech.1.9.0.unitypackage のアセットパックを選択して[開く(O)]をクリックしてください
f:id:atsushisz:20200210032241j:plain:w400

全ての項目のチェックがオンになっていることを確認して[Import]をクリックしてください
f:id:atsushisz:20200210032428j:plain:w300

Lunarcom Package アセットパックをインポート

ダウンロードした Lunarcom Package のアセットパックをインポートしていきます

[Assets]>[Import Package]>[Custom Package...]をクリックしてください
f:id:atsushisz:20200210031523j:plain:w400

ダウンロードした SpeechSDKAssets.unitypackage のアセットパックを選択して[開く(O)]をクリックしてください
f:id:atsushisz:20200210032826j:plain:w400

全ての項目のチェックがオンになっていることを確認して[Import]をクリックしてください
f:id:atsushisz:20200210032956j:plain:w300

Mixed Reality Toolkit (MRTK) を構成

ツールバーから、[Mixed Reality Toolkit]>[Add to Scene and Configure...]をクリックしてください
f:id:atsushisz:20200210033914j:plain:w400

Select MixedRealityToolkitConfigurationProfile のポップアップが表示されたら[DefaultHoloLens2ConfigurationProfile]をダブルクリックしてください
ポップアップが表示されない場合は Hierarchy ウインドウから[MixedRealityToolkit]オブジェクトを選択して Inspector ウインドウの[Mixed Reality Toolkit (Script)]コンポーネントのドロップダウンリストで[DefaultHoloLens2ConfigurationProfile]を選択してください
f:id:atsushisz:20200210033918j:plain:w700

[File]>[Save As...]をクリックしてください
f:id:atsushisz:20200210033921j:plain:w400

「Scene」フォルダーを選択して任意の名前でシーンを保存してください
僕はSpeechSceneという名前にしました
f:id:atsushisz:20200210033925j:plain:w400

Hierarchy ウインドウから[MixedRealityToolkit]オブジェクトを選択して Inspector ウインドウの[Mixed Reality Toolkit (Script)]コンポーネントの[Copy&Customize]ボタンをクリックしてください
f:id:atsushisz:20200210042153j:plain:w400

Clone Profile ポップアップが表示されたら「Profile Name」に任意の名前を付けて[Clone]ボタンをクリックしてください
僕は「CustomHoloLens2ConfigurationProfile」という名前にしました
f:id:atsushisz:20200210042159j:plain:w400

Inspector ウインドウで[Diagnostics]を選択して[Enable Diagnostics System]のチェックをオフにしてください
f:id:atsushisz:20200210042203j:plain:w400

Inspector ウインドウで[Input]を選択して[Clone]ボタンをクリックしてください
f:id:atsushisz:20200210042908j:plain:w400

Clone Profile ポップアップが表示されたら「Profile Name」に任意の名前を付けて[Clone]ボタンをクリックしてください
僕は「CustomHoloLens2InputSystemProfile」という名前にしました
f:id:atsushisz:20200210042911j:plain:w400

Inspector ウインドウの[Input]>[Speech]セクションを展開して[Clone]ボタンをクリックしてください
f:id:atsushisz:20200210043758j:plain:w400

Clone Profile ポップアップが表示されたら「Profile Name」に任意の名前を付けて[Clone]ボタンをクリックしてください
僕は「CustomMixedRealitySpeechCommandsProfile」という名前にしました
f:id:atsushisz:20200210043802j:plain:w400

[Input]>[Speech]セクションの[General Setting]で Start Behavior を[Manual Start]に変更してください
f:id:atsushisz:20200210043940j:plain:w400

Lunarcom を構成

Project ウインドウで[Lunarcom]フォルダーを展開して[Lunarcom_Base]prefab を Hierarchy ウインドウにドラッグしてください
f:id:atsushisz:20200210044449j:plain:w400

Hierarchy ウインドウのLunarcom_Baseオブジェクトを選択して Inspector ウインドウの「Transform」を以下のように設定してください

項目 X Y Z
Position 0 0 0
Rotation 0 0 0
Scale 0.008 0.008 0.01

f:id:atsushisz:20200210044455j:plain:w400

[Add Component]をクリックして「Lunarcom Controller」を検索してクリックして追加してください
f:id:atsushisz:20200210044804j:plain:w400

ブラウザーでCognitive Services を試すを開いて[Speech API]タブで[API キーの取得]ボタンをクリックしてください
f:id:atsushisz:20200210045431j:plain:w400

「7 日間の使用期間」の[ご利用ください]ボタンをクリックしてください
f:id:atsushisz:20200210045434j:plain:w400

使用条件を確認後、「国/地域」で[日本]を選択して[次へ]をクリックしてください f:id:atsushisz:20200210045438j:plain:w400

サインインして API キーを取得してください
f:id:atsushisz:20200210045442j:plain:w400

Unity に戻って Hierarchy ウインドウの[Lunarcom_Base]オブジェクトを選択してInspectorウインドウの[LunarcomController]>[SpeechSDKCredentials]セクションに先ほど取得した「Speech Service API Key」と「Speech Service Region」を入力してください
f:id:atsushisz:20200210050925j:plain:w400

Hierarchy ウインドウで下記のように[Lunarcom_Base]>[Terminal]と展開してください
f:id:atsushisz:20200210051117j:plain:w400

[Lunarcom_Base]が選択された状態で、下記のように[Lunarcom Text][Terminal][Connection Light]の三つのオブジェクトをInspectorウインドウの[LunarcomController]>[ObjectReference]セクションにドラッグしてください
f:id:atsushisz:20200210051744j:plain:w700

Inspector ウインドウの[LunarcomButton]セクションを展開して「Size」を[3]に変更して「Enter」キーをタイプしてください
f:id:atsushisz:20200210052612j:plain:w400

Hierarchy ウインドウの[LunarcomButton]オブジェクトを展開して下記のように[Mic][Satellite][Rocket]の三つのオブジェクトをInspector ウインドウの[LunarcomController]>[LunarcomButton]セクションにドラッグしてください
f:id:atsushisz:20200210052615j:plain:w700

Hierarchy ウインドウの[Lunarcom_Base]オブジェクトが選択された状態で、Inspector ウインドウの[Add Component]をクリックして「Lunarcom Speech Recognizer」を検索してクリックして追加してください
f:id:atsushisz:20200210053125j:plain:w400

同じく「Lunarcom Wake Word Recognizer」を検索してクリックして追加してください
f:id:atsushisz:20200210053129j:plain:w400

Wake Wordスロットに「Activate Terminal」、Dismiss Wordスロットに「Dismiss Terminal」と入力してください
f:id:atsushisz:20200210053309j:plain:w400

Hierarchy ウインドウの[Lunarcom_Base]オブジェクトが選択された状態で、Inspector ウインドウの[Add Component]をクリックして「Lunarcom Translation Recognizer」を検索してクリックして追加してください
f:id:atsushisz:20200210053640j:plain:w400

デフォルトでは、入力言語は英語、出力言語はロシア語、ドイツ語、中国語から選択できるようになっています
この言語で進める場合は、Inspectorウインドウの[Lunarcom Translation Recognizer]>[Target Language]で出力言語を選択した後で、次の「言語の変更」のステップはスキップして「アプリケーションのビルド」に進んでください
f:id:atsushisz:20200210053946j:plain:w400

言語を変更する場合は、次のステップの「言語の変更」に進んでください

言語の変更

Inspector ウインドウで[Lunarcom Speech Recognizer]のScriptをダブルクリックして Visual Studio で開いてください
f:id:atsushisz:20200210054404j:plain:w400
ここでは音声認識の入力言語が変更できます

「LunarcomSpeechRecognizer.cs」の14行目
private string fromLanguage = "en-US";
を認識させたい言語に変更してください
たとえば日本語にする場合はこのようになります
private string fromLanguage = "ja-JP";
f:id:atsushisz:20200210062724j:plain:w700

使用可能な言語は、音声サービスの言語とリージョンのサポートのページを参照してください

Inspectorウインドウの[Lunarcom Translation Recognizer]のScriptをダブルクリックして Visual Studio で開いてください
f:id:atsushisz:20200210054850j:plain:w400
ここでは音声翻訳の入力・出力言語が変更できます

入力言語を変更する場合は「LunarcomTranslationRecognizer.cs」の18行目
private string fromLanguage = "en-US";
を認識させたい言語に変更してください
変更方法は音声認識の場合と同じです
f:id:atsushisz:20200210062728j:plain:w700

出力言語を変更する場合は「LunarcomTranslationRecognizer.cs」の38行目のswitch(TargetLanguage)のcaseを追加してください
たとえば、英語を追加する場合は
case TranslateToLanguage.English:
toLanguage = "en-US";
break;
となります
f:id:atsushisz:20200210055958j:plain:w400

追加したらLunarcomController.csの7行目
public enum TranslateToLanguage { Russian, German, Chinese };
に追加した言語の定義を追記してください
たとえば、英語を追加する場合は
public enum TranslateToLanguage { Russian, German, Chinese, English };
となります
f:id:atsushisz:20200210060002j:plain:w400

Unityに戻って Inspector ウインドウの[Lunarcom Translation Recognizer]>[Target Language]で出力言語を選択してください
f:id:atsushisz:20200210060735j:plain:w400

アプリケーションのビルド

[File]>[Save]でシーンを保存してください
f:id:atsushisz:20200210061006j:plain:w300

[File]>[Build Settings...]をクリックしてください
f:id:atsushisz:20200210061010j:plain:w300

[Add Open Scenes]ボタンをクリックしてシーンを追加してください
f:id:atsushisz:20200210061746j:plain:w400

[Player Settings]をクリックしてください
f:id:atsushisz:20200210061750j:plain:w400

[Publishing Settings]を展開して[Capabilities]セクションの以下の項目のチェックをオンにしてください
・InternetClient
・InternetClientServer
・PrivateNetworkClientServer
・Microphone
・SpatialParception
f:id:atsushisz:20200210061734j:plain:w400

[Build]ボタンをクリックしてください
f:id:atsushisz:20200210061739j:plain:w400

フォルダーの選択画面が表示されるので、「App」という名前の新しいフォルダーを作成して[フォルダーの選択]ボタンをクリックしてください
※フォルダー名は任意です
f:id:atsushisz:20200210061742j:plain:w400

マシンのスペックにもよりますが、ビルドに時間がかかるので一息ついて待ちましょう

ビルドが終わるとエクスプローラーが表示されます
ビルドの際に作成した[App]フォルダーを開いて、Unity プロジェクト作成時に指定したファイル名のソリューションファイル(.sln)をダブロクリックして Visual Studio 2019 で開いてください
僕は Unity のプロジェクト名を「MRSpeechTranslator」にしたので、「MRSpeechTranslator.sln」というファイルを開きます
f:id:atsushisz:20200210061957j:plain:w400

ファイルを開くと少しの間バックグラウンドタスクが実行されます
左下のアイコンのアニメーションが止まるまで少し待ちましょう
アイコンをクリックすると進捗がプログレスバーでわかります
f:id:atsushisz:20191221031739p:plain:w400

ソリューションエクスプローラーでソリューションを右クリックして、[プロパティ(R)]をクリックしてください
f:id:atsushisz:20200210062650j:plain:w400

[シングルスタートアップ プロジェクト(S)]が選択されていて、プロジェクト名が Unity プロジェクト作成時に指定したプロジェクト名になっていることを確認してください
もし違う場合は上記の通り修正して[OK]をクリックしてください
f:id:atsushisz:20200210062655j:plain:w400

構成を[Release]ターゲットプラットフォームを[ARM]緑色の矢印のターゲットを[Device]に指定してください
f:id:atsushisz:20191221031754p:plain:w400

デバイスへの配置

アプリをビルドして HoloLens 2 に配置します
HoloLens 2 の電源を入れて USB-C ケーブルで PC に接続してください

[デバッグ]>[デバッグなしで開始(H)]をクリックしてください
f:id:atsushisz:20200210062659j:plain:w400

初めて HoloLens 2 にアプリを配置する際にはペアリングが必要です
ビルドが終わって PIN の入力画面が表示されたら HoloLens 2 で PIN を確認しましょう
f:id:atsushisz:20191221031803p:plain:w300

HoloLens 2 で[設定]アプリを起動してください
[更新とセキュリティ]>[開発者向け]を開いて[ペアリング]をタップしてください
f:id:atsushisz:20191221031807p:plain:w400

PIN が表示されたら Visual Studio のウインドウに入力して[OK]をクリックしてください
f:id:atsushisz:20191221031811p:plain:w300

これで HoloLens 2 に配置されてアプリが起動します
アプリが起動したらマイクの使用を許可してください
Wake Wordに指定した「Activate Terminal」と言うとウインドウが表示されます
左のマイクボタンで音声入力、右の衛星ボタンで翻訳ができます

これでアプリは完成です
いろいろな言語で翻訳を試してみてください

今回は音声認識と翻訳のサンプルをビルドして HoloLens 2 で実行しました

それでは、今回もお読みいただきありがとうございました