ブログ@kaorun55

HoloLensやKinectなどのDepthセンサーを中心に書いています。

HoloLens の音声コマンドを使う

HoloLensには単語の音声認識機能があり、登録した単語を「英語で」発音すると、それを認識します。認識をトリガーにして処理を行うことで音声コマンドを実装できます。

サンプルの実行風景です。英語がアレなので、ちゃんと認識してくれませんが、こんな感じになります。英語の発音の学習には最適かもしれません。。。


HoloLens Voice Command Demo

プロジェクト全体はこちらにあります。

github.com

例によってHoloToolkitを追加します。導入方法についてはこちら。

www.naturalsoftware.jp

音声認識の方法

音声認識はKeywordRecognizerクラスで行います。これはUnityEngine.Windows.Speech名前空間にあります。

KeywordRecognizerに認識させたい単語を登録すると、それを認識したタイミングでイベントが発生します。そのイベントで関連付けた処理を実行すると音声コマンドになります。

Holograms 101を参考に、音声認識した結果によってSendMessageまたはBroadcastするコマンドを実装してみます。

SendMessageは音声認識した際に注視しているGameObjectにSendMessageを発行します。AirTap相当です。

Broadcastは該当GameObjectの子オブジェクトに対してメッセージを発行します。

Holograms 101ではコードで登録していますが、今回はInspectorビューから設定でききるようにしています。コマンドとメソッド名を設定し、コマンドの単語を認識したらメソッド名をSendMessageまたはBroadcastします。

f:id:kaorun55:20160622175634p:plain

Broadcastは子オブジェクトに対して発行するので、空のGameObjectをVoiceCommandとして、Cubeをその下に配置します。VoiceCommandにVoiceCommandManagerスクリプトを貼り付け、認識させたいコマンドと発行するメソッド名を設定します。スクリプトは次のようになっています。

HoloToolkitには音声認識後にイベント(UnityEvent)を発行する仕組みでの実装があります。

gist618a0c184be6f105ab518902afa927cc

音声認識後の処理

次はコマンドを受けた側です。メソッド名に設定した名称のメソッドを作成します。そこにコマンド処理を実行します。

gistc08017e37ad186a415fa2841e93fc25b

 

これで音声で色を変え、ブロードキャストで色を戻す処理ができました。