夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

HoloLens で音声認識を使う。 アプリケーション内で音声コマンドを使用する

今回はHoloLensのアプリ内で音声認識を行います。

〇HoloLensの音声認識とは?

HoloLensではvoiceコマンドによる音声認識で操作を行うことができます。

初代HoloLensから使用できましたがHoloLens 2はMicrosoftクラウドベースのサービスを使用して音声認識を処理しています。この機能はオフにすることもでき、その場合、もしくはネットワークなしの状態ではローカルで音声データを処理してコマンド認識するだけになります。またCortanaは利用できなくなります。

前回はMixedRealityHomeで音声認識で使用できることをまとめました。

redhologerbera.hatenablog.com

今回はUnityのアプリケーション内で音声コマンドを使用します。

〇準備

今回はUnity2019.3.9f1でMixedRealityToolkit 2.4使用します。

MixedRealityToolkitを導入したシーンでHoloLensようにプロジェクトを設定します。

redhologerbera.hatenablog.com

redhologerbera.hatenablog.com

redhologerbera.hatenablog.com

redhologerbera.hatenablog.com

〇コマンドを設定する

 MRTKを導入したシーンができたら[Hierarchy]ウィンドウから[MixedRealityToolkit]オブジェクトを選択し、[Inspector]ウィンドウからサイドタブの[Input]を開き[InputSettings]から[Speech]のproviderを開きます。

f:id:Holomoto-Sumire:20200726174046j:plain

[Speech Command]を開きます。 ここで新しいコマンドを設定できます。

f:id:Holomoto-Sumire:20200726174330j:plain

[+ Add a New Speech Command]をクリックすることで新しいコマンドが追加されます。

f:id:Holomoto-Sumire:20200726174515j:plain

[Keyword]のテキストボックスに使用したい言葉を入力します。

f:id:Holomoto-Sumire:20200726203859j:plain

[LocalizationKey]はローカライズされたキーワードを上書きするためのキーです。

[KeyCode]はUnityのエディタ内でデバッグするときなどに使用します。

f:id:Holomoto-Sumire:20200726201457j:plain

Unityで実行中にここで指定したキーを押すことで実機で音声コマンドを使用した状態を再現できます。

〇Speech Input Handler

MRTKでは音声コマンドを使用するコンポーネントとして[Speech Input Handler]が提供されています。

音声コマンドを使用するためにはオブジェクトに[Speech Input Handler]コンポーネントをアタッチします。

f:id:Holomoto-Sumire:20200726202106j:plain    [Is Focus Required]このチェックボックスをオンにするとアタッチしたオブジェクトにFocusが当たっているときのみ音声コマンドが使用できます。

 これは誤操作を防ぎ、必要な時に音声コマンドが使用できるようにできます。 逆にオブジェクトに視点を当てなくてもいつでも使用できるようにしたいときはチェックを外し無効化します。

 f:id:Holomoto-Sumire:20200726202420j:plain

[Persistent Keyword]にチェックを入れ有効化するとシーン遷移を行った際でもコマンドが持続して使用可能になります。

〇音声コマンドの使い方

[Speech Input Handler]の[+]マークを押すとキーワードの枠が作成されます。

f:id:Holomoto-Sumire:20200726202853j:plain

キーワードを設定していない場合エラーが表示されます。この[Keyword]のテキストボックスに先ほど設定した[Color]を入力するとエラーが消え使用可能であることが示されます。

f:id:Holomoto-Sumire:20200726203610j:plain

[Responce()]のイベントでは音声コマンドを認識した時の反応を指定できます。

今回は次のようなスクリプトを作成、アタッチしました。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ColorChanger : MonoBehaviour
{
    [SerializeField] Material _Material;
 
    public void ChengeColor()
    {
         
       this.gameObject.GetComponent<Renderer>().material = _Material;
        
    } 
}

f:id:Holomoto-Sumire:20200726204939j:plain

[color]と発音すると球体の色が赤く変わるようにしました。

〇実機で確認

実機で音声認識を行うためには[Capabilirt]で音声認識を有効化してある必要があります。

youtu.be

〇ドキュメント

microsoft.github.io