Hololens輸入——Unity語音輸入_Hololens

來源:互聯網
上載者:User
說明: 本篇文章翻譯來自Hololens官方文檔—— Unity語音輸入( https://developer.microsoft.com/en-us/windows/mixed-reality/voice_input_in_unity) 翻譯如下: 前沿:

Unity公開了將Voice輸入添加到Unity應用程式的三種方法。

使用KeywordRecognizer(兩種類型的PhraseRecognizers之一),您的應用程式可以被賦予一系列要監聽的字串命令。使用GrammarRecognizer(另一種類型的PhraseRecognizer),您的應用程式可以被賦予一個定義特定文法的SRGS檔案進行監聽。使用DictationRecognizer,您的應用程式可以聽任何單詞,並向使用者提供其語音的音符或其他顯示。

注意:只有聽寫或片語識別才能立即處理。這意味著如果文法辨識器或關鍵字辨識器處於活動狀態,則DictationRecognizer不能處於活動狀態,反之亦然。


步驟如下所示: 啟動語音功能

Unity必須啟用Microphone 功能,才能使用語音功能,啟用步驟如下所示:

Unity——Edit——Project Settings——Capabilitees——勾選Microphone選項


片語識別——KeywordRecognizer

要使您的應用程式聽取使用者使用的特定短語,然後採取一些措施,您需要: 指定使用KeywordRecognizer或GrammarRecognizer偵聽哪些短語 處理OnPhraseRecognized事件,並採取與識別的短語相對應的操作 所需命名空間:UnityEngine.Windows.Speech

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


然後用一個Dictionary儲存需要進行語音辨識的關鍵字:

KeywordRecognizer keywordRecognizer;Dictionary<string, System.Action> keywords = new Dictionary<string, System.Action>();

添加任一字元串作為關鍵詞,並添加進字典(比如下面所示以activete作為關鍵詞):
//Create keywords for keyword recognizerkeywords.Add("activate", () =>{    // action to be performed when this keyword is spoken});

然後建立一個keywordRecogizer讓它作為識別:

keywordRecognizer = new KeywordRecognizer(keywords.Keys.ToArray());

最後添加一個識別事件:
keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;

舉一個例子:
private void KeywordRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args){    System.Action keywordAction;    // if the keyword recognized is in our dictionary, call that Action.    if (keywords.TryGetValue(args.text, out keywordAction))    {        keywordAction.Invoke();    }}

啟動語音辨識:
keywordRecognizer.Start();

整體簡單案例如下所示:
using UnityEngine.Windows.Speech;using System.Collections.Generic;using System.Linq;using UnityEngine;/// <summary>/// Made By Bruce/// </summary>public class AudioCommond : MonoBehaviour{    KeywordRecognizer keywordRecognizer;    Dictionary<string, System.Action> keywords = new Dictionary<string, System.Action>();    public GameObject cube;    void Start()    {        var t = CoroutineWrapper.Inst;        keywords.Add("MoveUp", () =>        {            cube.transform.localPosition += new Vector3(0, 1, 0);        });        keywords.Add("MoveDown", () =>        {            cube.transform.localPosition += new Vector3(0, -1, 0);        });        keywordRecognizer = new KeywordRecognizer(keywords.Keys.ToArray());        keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;        //開始識別        keywordRecognizer.Start();    }    private void KeywordRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args)    {        System.Action keywordAction;        if (keywords.TryGetValue(args.text, out keywordAction))        {            keywordAction.Invoke();        }    }}

語言輸入——Dictation 所需命名空間——UnityEngine.Windows.Speech

使用DictationRecognizer將使用者的語音轉換為文本。DictationRecognizer公開了聽寫功能,並支援註冊和聆聽假設和短語完成的事件,因此您可以在發言和以後給您的使用者反饋。Start()和Stop()方法分別啟用和禁用聽寫識別。使用辨識器完成後,應使用Dispose()方法來釋放其使用的資源。如果垃圾收集之前沒有釋放,它將以額外的效能成本自動釋放這些資源。 開始使用錄音只需要幾個步驟: 建立一個新的DictationRecognizer 處理聽寫事件 啟動DictationRecognizer 啟用支援語言聽寫功能:

Unity——Edit——Project Settings——Capabilitees——勾選InternetClient選項


語音輸入——DictationRecognizer

建立一個DictationRecognizer,如下所示:

dictationRecognizer = new DictationRecognizer();

有四個聽寫事件可以被訂閱和處理以實施聽寫行為。 DictationResult DictationComplete DictationHypothesis DictationError DictationResult

使用者暫停之後,通常在句子結尾處觸發此事件。完整識別的字串在這裡返回。

註冊DictationResult事件:

dictationRecognizer.DictationResult + = DictationRecognizer_DictationResult;
然後處理其回調:

private void DictationRecognizer_DictationResult(string text,ConfidenceLevel confidence){     //do something}
DictationHypothesis

這個事件在使用者正在說話時被持續觸發。當辨識器偵聽時,它提供了迄今為止所聽到的內容。 DictationComplete

無論從Stop()被調用,是否發生逾時或其他錯誤,辨識器將停止此事件。 DictationError

發生錯誤時觸發此事件。


提示

Start()和Stop()方法分別啟用和禁用聽寫識別。 使用辨識器完成後,必須使用Dispose()方法進行處理,以釋放其使用的資源。如果垃圾收集之前沒有釋放,它將以額外的效能成本自動釋放這些資源。 逾時發生在一段時間後。您可以在DictationComplete事件中檢查這些逾時。有兩個逾時要注意: 如果辨識器開始並且在前5秒鐘內沒有聽到任何音頻,它將逾時。 如果辨識器給出了一個結果,然後聽到靜音二十秒鐘,它將逾時。 使用短語識別和聽寫

如果你想在你的應用程式中同時使用短語識別和口授,你需要完全關閉一個,然後才能開始另一個。如果您有多個KeywordRecognizer運行,您可以一次關閉它們:

PhraseRecognitionSystem.Shutdown();

為了將所有辨識器恢複到之前的狀態,在DictationRecognizer停止之後,您可以調用:

PhraseRecognitionSystem.Restart();

您也可以啟動一個KeywordRecognizer,這將重新啟動PhraseRecognitionSystem。


簡單案例如下所示:

using UnityEngine;using UnityEngine.Windows.Speech;using UnityEngine.UI;public class AudioDiction : MonoBehaviour{    private DictationRecognizer dictationRecognizer;    public Text showResultText;    void Start()    {        dictationRecognizer = new DictationRecognizer();        //This event is fired after the user pauses, typically at the end of a sentence. The full recognized string is returned here.        dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;        //This event is fired while the user is talking. As the recognizer listens, it provides text of what it‘s heard so far.        dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;        //This event is fired when the recognizer stops, whether from Stop() being called, a timeout occurring, or some other error.        dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;                //This event is fired when an error occurs.        dictationRecognizer.DictationError += DictationRecognizer_DictationError;        //開始聽寫識別        dictationRecognizer.Start();    }    private void DictationRecognizer_DictationResult(string text, ConfidenceLevel confidence)    {        // 自訂行為        showResultText.text = text;    }    private void DictationRecognizer_DictationHypothesis(string text)    {        // 自訂行為        showResultText.text = text;    }    private void DictationRecognizer_DictationComplete(DictationCompletionCause cause)    {        // 自訂行為        showResultText.text = "Complete!";    }    private void DictationRecognizer_DictationError(string error, int hresult)    {        // 自訂行為    }    void OnDestroy()    {        //釋放資源        dictationRecognizer.DictationResult -= DictationRecognizer_DictationResult;        dictationRecognizer.DictationComplete -= DictationRecognizer_DictationComplete;        dictationRecognizer.DictationHypothesis -= DictationRecognizer_DictationHypothesis;        dictationRecognizer.DictationError -= DictationRecognizer_DictationError;        dictationRecognizer.Dispose();    }}








聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.