Hiromuブログ

最近はこちら(https://zenn.dev/hiromu)が本体

音声認識のKeywordManagerがDeprecatedになっていた

音声認識するためのHoloToolkitのKeywordManagerがDeprecatedになっていたので新しい方法を調べてみました。

keyword_manager


まず結果として、上記画像にあるSpeechInputSourceを使って実装したら現状動作しませんでした。

実装としては以下のような感じになると思いますが(SpeechActionだけ自前で実装)、

SpeechInputSource

using UnityEngine;

public class SpeechAction : MonoBehaviour {
    public void CommandMove()
    {
        Debug.Log("Move Command");
    }

    public void CommandStop()
    {
        Debug.Log("Stop Command");
    }
}


実行すると、音声コマンド認識後以下のようなエラーが出ます。

InputModule_error

これはSpeechInputSourceがInputManagerを利用していることが原因です。現在MRDesignLabsのサンプルをベースとした場合、HoloLensプレハブを使うのが一般的だと考えられるためシーンにInputManagerがありません。HoloLensプレハブとInputManagerプレハブは機能として重複しているものだと思うので今後どうなっていくのか様子を見る必要があります。


ただMRDesignLabs関連のファイルを見ていくとSpeechと名前の付いたスクリプトがいくつか見当たります。

HUX.Speech名前空間の中にもDeprecatedになっているものとは別のKeywordManagerがあり、おそらくこれが本命なのかなという気がします。このHUX.Speech.KeywordManagerとSpeechReceiverというコンポーネントを利用することで、音声認識をすることができました。


HUX.Speech.KeywordManagerはHoloLensプレハブのAudioManagerにあらかじめ付いているので、あとは任意のGameObjectにSpeechReceiverコンポーネントを付け、以下のような設定をします。SpeechActionは前述のものと同じスクリプトです。

speechreceiver

これだけで、音声認識を行うことができました。

音声認識後のアクション以外は全く実装の必要がないのでかなり楽だと思います。

(肝心の音声が出ていませんが)参考動画です。


ただ、今後MRDesignLabsの実装が変わる可能性もあるので、確実に行くのであれば昔ながらのUnityEngine.Windows.SpeechのKeywordRecognizerクラスを利用して自前で実装するのがよいかもしれません。