MRが楽しい

MRやVRについて学習したことを書き残す

MRTKのDictationHandlerを使って音声認識を行うディクテーション機能をプロジェクトに追加する

本日は MRTK の技術調査枠です。
MRTKのDictationHandlerを使って音声認識を行うディクテーション機能をプロジェクトに追加する手順を記事にします。
f:id:bluebirdofoz:20210824075320j:plain

サンプルシーンの作成

MRTKのDictationHandler を使ったサンプルシーンを作成します。

MRTKのインポートと基本設定

MRTK のインポートと HoloLens 向けプロジェクトの基本設定を行います。
手順の詳細は以下の記事を参照してください。
bluebirdofoz.hatenablog.com

プロファイルの設定

ディクテーション機能を有効化するにはプロファイルに InputDataProvider を追加する必要があります。
プロファイルを編集可能にするため、カスタムプロファイルを作成します。
[MixedRealityToolkit]オブジェクトの Inspector ビューを開き、[Copy&Customize]でプロファイルをコピーします。
f:id:bluebirdofoz:20210824075342j:plain

[Input]タブを開き、[InputSystemProfile]も同様に[Clone]でコピーします。
f:id:bluebirdofoz:20210824075354j:plain

[InputDataProviders]の項目が編集可能になります。
[Add Data Provider]をクリックして新しい DataProvider を追加します。
f:id:bluebirdofoz:20210824075404j:plain

[Type]項目から[Microsoft.MixedReality.Toolkit.Windows.Input -> WindowsDictationInputProvider]を選択します。
f:id:bluebirdofoz:20210824075415j:plain

これでディクテーション機能のプロファイル設定が追加できました。
f:id:bluebirdofoz:20210824075425j:plain

因みに本 WindowsDictationInputProvider は[Windows]関連のプラットフォームで有効です。
[Supported Platform]で確認できます。
f:id:bluebirdofoz:20210824075436j:plain

コンポーネントの設定

シーン内の適当なオブジェクトに[DictationHandler]コンポーネントを追加します。
f:id:bluebirdofoz:20210824075447j:plain

DictationHandler

ディクテーションセッションの録画を開始および停止を行います。
書き起こされたテキストは UnityEvents を介して通知します。
docs.microsoft.com
f:id:bluebirdofoz:20210824075505j:plain

プロパティ

Inspector ビューで設定できるプロパティの設定項目と参照可能な変数は以下の通りです。

プロパティ名 説明
IsFocusRequired 入力イベントを受信するためにオブジェクトへのフォーカスを必要とするかを設定します。
False 時は常に入力イベントが発生するようになります。
InitialSilenceTimeout セッション開始時に音声が聞こえなかった場合、聞き取りセッションが終了するまでの時間を Inspector ビューから設定します。
単位:秒。
AutoSilenceTimeout 途中の音声入力がないために聞き取りセッションが終了するまでの時間を Inspector ビューから設定します。
単位:秒。
RecordingTime ディクテーションサービスが聞きセッションを行う時間を Inspector ビューから設定します。
単位:秒。
StartRecordingOnStart 起動時に自動的にセッションを開始するかどうかを Inspector ビューから設定します。
True時は起動と同時に聞き取りセッションが自動的に開始します。
IsListening 現在、聞き取りセッションが実行中か否かを取得します。
聞き取りセッション中は True が返ります。
AudioClip 聞き取りセッションで取得された AudioClip を取得します。

Unityイベント

Inspector ビューで設定できる Unity イベントの実行タイミングは以下の通りです。

イベント名 説明
OnDictationHypothesis ユーザが会話を行ったときに発生します。
現在、聞き取り中の音声の大まかな書き起こしテキストを通知します。
OnDictationResult ユーザの会話が一時的に停止したときに発生します。
そこまでに聞き取った音声の結果テキストを通知します。
OnDictationComplete 聞き取りセッションが完了したときに発生します。
音声の完全かつ最終的な聞き取りテキストを生成して通知します。
OnDictatinoError ディクテーションサービスでエラーが起きたときに発生します。
テキストにはエラーの説明文が含まれています。

呼び出しメソッド

聞き取りセッションを開始/停止するための呼び出しメソッドは以下の通りです。

メソッド名 説明
StartRecording() 聞き取りセッションを開始します。
StopRecording() 聞き取りセッションを停止します。

シーンの構築

聞き取り結果を表示する Text オブジェクトと聞き取りを開始するトグルボタンをシーンに追加しました。
f:id:bluebirdofoz:20210824075521j:plain

トグルボタンには DictationHandler の StartRecording と StopRecording を割り当てます。
f:id:bluebirdofoz:20210824075531j:plain

DictationHandler の各イベントに Text オブジェクトへの参照を設定してシーンの構築は完了です。
また、今回はどこを見ていても聞き取りが行われるよう[IsFocusRequired]のチェックを外しました。
f:id:bluebirdofoz:20210824075543j:plain

動作確認

アプリケーションを HoloLens2 にデプロイして動作を確認します。
ボタンをタップして聞き取りセッションを開始します。
f:id:bluebirdofoz:20210824075552j:plain

設定した聞き取りセッションの時間内に話した言葉が Text に表示されれば成功です。
f:id:bluebirdofoz:20210824075601j:plain

注意事項

以下の記事で試した通り、音声認識にはインターネット接続が必要です。
bluebirdofoz.hatenablog.com