HoloLensの音声認識をコードで記載する

MRTKのキーワード音声認識は、用意されているコンポーネントを使うとノーコーディングで使うことができます。

MRTK での音声入力の構成

独自のInputSystemProfileを作成して、キーワードを登録

Speech Input Handlerをアタッチして、聞き取りたいキーワードを指定

の流れです。

これはこれで便利なのですが、キーワードの数が多かったり、登録するキーワードを動的に変更したかったりする場合は、コードでキーワードの登録と聞き取りがしたくなります。

その方法も公式ドキュメントに記載されています。

Unity が、音声入力、音声認識、およびディクテーションを Windows Mixed Reality アプリケーションに追加するための3つの方法について説明します。

上記からコピペして少し整理したコードが下記になります。
これを使用する場合は、プロファイルは特に変更する必要はありません。

プロファイルはGUIでの操作が必要になりGitでの履歴が追いにくかったりするので、コードでの書き方も知っておくと何かと役に立ちそうです。

using System;
using UnityEngine;
using UnityEngine.Windows.Speech;
using System.Collections.Generic;
using System.Linq;
 
public class KeywordManager : MonoBehaviour
{
    private KeywordRecognizer _keywordRecognizer = null;
    private readonly Dictionary<string, Action> _keywords = new Dictionary<string, Action>();
 
    private void Start()
    {
        //Create keywords for keyword recognizer
        _keywords.Add("こんにちは", () =>
        {
            // action to be performed when this keyword is spoken
            Debug.Log("こんにちは!");
        });
        _keywords.Add("こんばんは", () =>
        {
            // action to be performed when this keyword is spoken
            Debug.Log("こんばんは!");
        });
 
        // Tell the KeywordRecognizer about our keywords.
        _keywordRecognizer = new KeywordRecognizer(_keywords.Keys.ToArray());
 
        // Register a callback for the KeywordRecognizer and start recognizing!
        _keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;
        _keywordRecognizer.Start();
    }
 
    private void KeywordRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args)
    {
        // if the keyword recognized is in our dictionary, call that Action.
        if (_keywords.TryGetValue(args.text, out var keywordAction))
        {
            keywordAction.Invoke();
        }
    }
}
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク