アフィリエイト広告を利用しています。
時より不適切な広告が表示される場合があります。
運営者側でブロックするなど、できる限りの対処を心がけております。
あらかじめご了承ください。
-PR-

【Unity入門】2023年 簡単に音声認識(音声入力)を実装する方法!1分からの簡単Unity入門!

 

※ 2023/11/03 更新

  ソースコードへOnDestroy()の追加

 

2023年時点で簡易的に音声認識(音声入力)を行う方法を自身なりにまとめました。

 

ここで言う、音声認識とは

音声を認識して、それをテキストへ文字起こしする機能のことです。

 

Unityで音声認識を実装する方法は多数あります。

Web Speech API , Google Cloud Speech API , Intel RealSenseなどなど。

 

その中でも、今回は、

「UnityEngine.Windows.Speech」を使用した

音声認識(音声入力)をご紹介いたします。

 

 

 

UnityEngine.Windows.Speechはキーワード認識だけではない

UnityEngine.Windows.Speechはキーワードを登録して、そのキーワードが発せられたらtrue(発せられましたという信号)を返す機能が注目されがちです。

 

ですが、UnityEngine.Windows.Speechには、これ以外に、発せられた音声をそのままテキストで返す。音声認識(音声入力)も存在します。

 

今回は、その音声認識について紹介します。

 

learn.microsoft.com

 

注意

先に注意点をお話しします。

自身の実装しているUnityEngine.Windows.Speechの音声認識機能では、

以下の注意が必要です。

 

・WebGL形式での出力不可

・「あーーーーーーーーー」という音声を発した時、

 「あー」というテキストに省略される。(伸ばし棒は省略される)

・音声認識速度は遅い

 認識して文字が出力されるまで時間がかかる

 

上記に関して、現段階では実装はできていません。

あらかじめご了承ください。

 

実装方法

手順は3つで完了します。

① スクリプトの作成

② スクリプトのアタッチ

③ Windows側の設定

 

① スクリプトの作成

以下のスクリプトを作成します。

作成方法は通常通りで大丈夫です。

 

using System.Collections;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Windows.Speech;


/*
 * 注意
 * ・WebGL形式での出力不可
 * ・「あーーーーーーーーー」という音声を発音しても、「あー」に省略される。
 *  (伸ばし棒は省略される)
 * 
 * 設定(windows11)
 * ・機能を使用するには
 *   設定→プライバシーとセキュリティ→音声認識→オンライン音声認識 をオンにする
 * 
 */

public class VoiceText : MonoBehaviour
{
    public Text text_;
    public DictationRecognizer m_DictationRecognizer;

    // オブジェクトが破棄されるとき
    private void OnDestroy()
    {
        // 破棄
        // 下記を記載しないと処理中断時にエラーになる
        m_DictationRecognizer.Stop();
        m_DictationRecognizer.Dispose();
    }

    void Start()
    {
        text_.text = "";

        m_DictationRecognizer = new DictationRecognizer();

        // 発音終了時
        //DictationResultのイベントを登録
        m_DictationRecognizer.DictationResult += (text, confidence) =>
        {
            //音声認識した文章はtextで受け取れます。
            text_.text = text;
        };


        /*
        // 発音中
        m_DictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;
        */

        // 音声入力停止時に再起動
        m_DictationRecognizer.DictationComplete += (completionCause) =>
        {
            if (completionCause == DictationCompletionCause.TimeoutExceeded)
            {
                //音声認識を起動。
                m_DictationRecognizer.Start();
            }
            else
            {
                //その他止まった原因に応じてハンドリング
            }
        };

        //Dictationを開始
        m_DictationRecognizer.Start();
    }

    /*
    private void DictationRecognizer_DictationHypothesis(string text)
    {
        text_.text = text;
    }
    */

}

 

② スクリプトのアタッチ

・Scene側で空オブジェクトを作成(名前は適当で大丈夫)

・その空オブジェクトに、①のスクリプトをアタッチ。(貼り付け)

・仮のテキスト作成。

・①のスクリプトのpublic text_に仮のテキストをアタッチ。

 (Unity側でスクリプトに、text_ (None)にテキストをドラッグ&ドロップ)

 

③ Windows側の設定

この状態で実行したとき、エラーが発生する場合は、

以下の設定を行ってみましょう。

 

・Windows11の場合

Windowsの方の設定を開く(UnityではなくPCの設定の方です)

プライバシーとセキュリティ

(Windowsのアクセス許可)音声認識

オンライン音声認識

をオンにする

 

・Windows10の場合

Windowsの方の設定を開く(UnityではなくPCの設定の方です)

プライバシー

音声認識

オンライン音声認識

をオンにする

 

この設定は、

Webを介したマイクを使用する許可になります。

この許可がない場合、利用できません。

 

実行

上記の対応完了後、実行すると、以下のように音声認識が完了していると思います。

音声認識



発音中に処理を取りたい場合

発音中にテキストを受け取りたい場合は、

以下のスクリプトで実行してください。

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Windows.Speech;


/*
 * 注意
 * ・WebGL形式での出力不可
 * ・「あーーーーーーーーー」という音声を発音しても、「あー」に省略される。
 *  (伸ばし棒は省略される)
 * 
 * 設定(windows11)
 * ・機能を使用するには
 *   設定→プライバシーとセキュリティ→音声認識→オンライン音声認識 をオンにする
 * 
 */

public class VoiceText : MonoBehaviour
{
    public Text text_;
    public DictationRecognizer m_DictationRecognizer;

    // オブジェクトが破棄されるとき
    private void OnDestroy()
    {
        // 破棄
        // 下記を記載しないと処理中断時にエラーになる
        m_DictationRecognizer.Stop();
        m_DictationRecognizer.Dispose();
    }

    void Start()
    {
        text_.text = "";

        m_DictationRecognizer = new DictationRecognizer();

        /*
        // 発音終了時
        //DictationResultのイベントを登録
        m_DictationRecognizer.DictationResult += (text, confidence) =>
        {
            //音声認識した文章はtextで受け取れます。
            text_.text = text;
        };
        */


        // 発音中
        m_DictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;

        // 音声入力停止時に再起動
        m_DictationRecognizer.DictationComplete += (completionCause) =>
        {
            if (completionCause == DictationCompletionCause.TimeoutExceeded)
            {
                //音声認識を起動。
                m_DictationRecognizer.Start();
            }
            else
            {
                //その他止まった原因に応じてハンドリング
            }
        };

        //Dictationを開始
        m_DictationRecognizer.Start();
    }

    private void DictationRecognizer_DictationHypothesis(string text)
    {
        text_.text = text;
    }

}

// 発音終了時

にコメントを付け。

// 発音中

のコメントを外しました。

 

おわりに

今回は音声認識を実装する方法を説明しました。

この記事が何かのお役に立てれば幸いです。

 

 

Web(frog blend)

 

・公式HP「ふろっぐぶれんどのゲームセンター」

frog-blend-game-center.com

 

・外部リンクまとめ

frog-blend.hatenablog.com

 

PR