MRが楽しい

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

公式チュートリアル「MR and Azure 302b 8章」を試してみる

本日はチュートリアルの実施枠です。
Academyの「MR and Azure 302b: Custom vision」の実施内容をまとめます。
docs.microsoft.com
前回記事の続きです。
bluebirdofoz.hatenablog.com
今回は「Chapter 8」です。

Chapter 8:Create the VoiceRecognizer class

3つ目に作成するスクリプトは VoiceRecognizer クラスです。
このクラスはユーザーからの音声入力を認識します。

1.Script フォルダを開きます。
フォルダ内で右クリックして、Creapte -> C# Script を選択します。
Script の名称は VoiceRecognizer に設定します。
f:id:bluebirdofoz:20180825003103j:plain

2.新しいスクリプトをダブルクリックしてVisual Studioで開きます。
3-7.以下の通り、スクリプトを編集します。
・VoiceRecognizer.cs

// 名前空間の追加
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.Windows.Speech;

public class VoiceRecognizer : MonoBehaviour {
    // メンバ変数の追加
    /// <summary>
    /// Allows this class to behave like a singleton
    /// クラスがシングルトンのように動作できるようにします 
    /// </summary>
    public static VoiceRecognizer Instance;

    /// <summary>
    /// Recognizer class for voice recognition
    /// 音声認識のための認識器クラス
    /// </summary>
    internal KeywordRecognizer keywordRecognizer;

    /// <summary>
    /// List of Keywords registered
    /// 登録されたキーワードのリスト
    /// </summary>
    private Dictionary<string, Action> _keywords = new Dictionary<string, Action>();

    /// <summary>
    /// Called on initialization
    /// 初期化処理
    /// </summary>
    private void Awake()
    {
        Instance = this;
    }

    /// <summary>
    /// Runs at initialization right after Awake method
    /// StartメソッドはAwakeメソッドの直後の初期化時に実行されます
    /// </summary>
    void Start()
    {

        Array tagsArray = Enum.GetValues(typeof(CustomVisionTrainer.Tags));

        foreach (object tagWord in tagsArray)
        {
            _keywords.Add(tagWord.ToString(), () =>
            {
                // When a word is recognized, the following line will be called
                // 単語が認識されると、次の行が呼び出されます
                CustomVisionTrainer.Instance.VerifyTag(tagWord.ToString());
            });
        }

        _keywords.Add("Discard", () =>
        {
            // When a word is recognized, the following line will be called
            // The user does not want to submit the image
            // therefore ignore and discard the process
            // ’Discard’単語が認識されると、次の行が呼び出されます
            // ユーザーは画像を送信したくない場合に利用します
            // したがって、プロセスを無視して破棄します
            ImageCapture.Instance.ResetImageCapture();
            keywordRecognizer.Stop();
        });

        //Create the keyword recognizer 
        // KeywordRecognizer(キーワード認識)を作成する
        keywordRecognizer = new KeywordRecognizer(_keywords.Keys.ToArray());

        // Register for the OnPhraseRecognized event 
        // OnPhraseRecognizedイベントの登録
        keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;
    }

    /// <summary>
    /// Handler called when a word is recognized
    /// 単語が認識されたときに呼び出されるハンドラ
    /// </summary>
    private void KeywordRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args)
    {
        Action keywordAction;
        // if the keyword recognized is in our dictionary, call that Action.
        // 認識されたキーワードが辞書に含まれている場合は、そのアクションを呼び出します。
        if (_keywords.TryGetValue(args.text, out keywordAction))
        {
            keywordAction.Invoke();
        }
    }
}

※ この時点でエラーが表示されます(「The name‘CustomVisionTrainer’does not exist...」)。
これは、コードが CustomVisionTrainer クラスを参照するためです。CustomVisionTrainer クラスは、次の章で作成します
f:id:bluebirdofoz:20180825003114j:plain

8.Visual Studio で変更を保存して Unity に戻ります。
f:id:bluebirdofoz:20180825003125j:plain

Chapter 8 はここまでです。
次回は Chapter 9 を実施します。
bluebirdofoz.hatenablog.com