Sdílet prostřednictvím


Hlasový vstup v Unity

Upozornění

Než začnete, zvažte použití modulu plug-in Unity pro sadu Cognitive Speech Services SDK. Modul plug-in má lepší výsledky přesnosti řeči a snadný přístup k dekódování řeči na text a také pokročilé funkce řeči, jako je dialog, interakce na základě záměru, překlad, syntéza převodu textu na řeč a rozpoznávání řeči v přirozeném jazyce. Začněte tím, že si prohlédnete ukázku a dokumentaci.

Unity zveřejňuje tři způsoby přidání hlasového vstupu do aplikace Unity, z nichž první dva jsou typy frázíRecognizer:

  • Aplikace KeywordRecognizer poskytuje pole řetězcových příkazů, které se mají naslouchat
  • Aplikace GrammarRecognizer poskytne soubor SRGS definující konkrétní gramatiku, která se má naslouchat.
  • Umožní DictationRecognizer vaší aplikaci naslouchat libovolnému slovu a poskytnout uživateli poznámku nebo jiné zobrazení řeči.

Poznámka:

Rozpoznávání diktování a frází nejde zpracovat současně. Pokud je aktivní grammarRecognizer nebo KeywordRecognizer, DictationRecognizer nemůže být aktivní a naopak.

Povolení funkce hlasu

Funkce Mikrofon musí být deklarována, aby aplikace používala hlasový vstup.

  1. V Unity Editoru přejděte na Upravit > přehrávač nastavení > projektu.
  2. Výběr karty Windows Store
  3. V části Možnosti nastavení > publikování zkontrolujte možnost Mikrofon.
  4. Udělení oprávnění aplikaci pro přístup k mikrofonu na zařízení HoloLens
    • Zobrazí se výzva, abyste to udělali při spuštění zařízení, ale pokud jste omylem kliknuli na ne, můžete změnit oprávnění v nastavení zařízení.

Rozpoznávání frází

Pokud chcete aplikaci povolit naslouchání konkrétním frázím mluveným uživatelem, musíte udělat nějakou akci:

  1. Určení frází, které se mají naslouchat použití KeywordRecognizerGrammarRecognizer
  2. OnPhraseRecognized Zpracování události a provedení akce odpovídající rozpoznané frázi

Klíčové slovoRecognizer

Obor názvů: UnityEngine.Windows.Speech
Typy: KeywordRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus

K uložení některých klávesových úhorů budeme potřebovat několik příkazů:

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

Pak přidáme do třídy několik polí pro uložení slovníku pro rozpoznávání a akci klíčových slov>:

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

Teď do slovníku přidejte klíčové slovo, například v Start() metodě. V tomto příkladu přidáváme klíčové slovo "activate":

//Create keywords for keyword recognizer
keywords.Add("activate", () =>
{
    // action to be performed when this keyword is spoken
});

Vytvořte rozpoznávání klíčových slov a řekněte mu, co chceme rozpoznat:

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

Teď se zaregistrujte k OnPhraseRecognized události.

keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;

Příkladem obslužné rutiny je:

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();
    }
}

Nakonec začněte rozpoznávat!

keywordRecognizer.Start();

GrammarRecognizer

Obor názvů: UnityEngine.Windows.Speech
Typy: GrammarRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus

Pokud zadáváte gramatiku rozpoznávání pomocí SRGS, použije se příkaz GrammarRecognizer. To může být užitečné, pokud vaše aplikace obsahuje více než jen několik klíčových slov, pokud chcete rozpoznat složitější fráze nebo pokud chcete snadno zapnout a vypnout sady příkazů. Viz: Vytváření gramatik pomocí SRGS XML pro informace o formátu souboru.

Jakmile budete mít gramatiku SRGS a je ve vašem projektu ve složce StreamingAssets:

<PROJECT_ROOT>/Assets/StreamingAssets/SRGS/myGrammar.xml

GrammarRecognizer Vytvořte a předejte jí cestu k souboru SRGS:

private GrammarRecognizer grammarRecognizer;
grammarRecognizer = new GrammarRecognizer(Application.streamingDataPath + "/SRGS/myGrammar.xml");

Teď se zaregistrujte k OnPhraseRecognized události.

grammarRecognizer.OnPhraseRecognized += grammarRecognizer_OnPhraseRecognized;

Získáte zpětné volání obsahující informace zadané v gramatikě SRGS, které můžete správně zpracovat. Většina důležitých informací bude uvedena semanticMeanings v poli.

private void Grammar_OnPhraseRecognized(PhraseRecognizedEventArgs args)
{
    SemanticMeaning[] meanings = args.semanticMeanings;
    // do something
}

Nakonec začněte rozpoznávat!

grammarRecognizer.Start();

Diktování

Obor názvů: UnityEngine.Windows.Speech
Typy: DiktováníRecognizer, SpeechError, SpeechSystemStatus

Pomocí funkce DictationRecognizer převeďte řeč uživatele na text. DiktováníRecognizátor zveřejňuje funkce diktování a podporuje registraci a naslouchání událostem dokončených hypotéz a frází, takže můžete uživateli poskytnout zpětnou vazbu při mluvení i potom. Start() a Stop() metody povolte a zakažte rozpoznávání diktování. Po dokončení s rozpoznáváním by měl být uvolněn pomocí Dispose() uvolnění prostředků, které používá. Tyto prostředky uvolní automaticky během uvolňování paměti za dodatečné náklady na výkon, pokud se před tím nevyvolají.

K zahájení diktování je potřeba udělat jenom několik kroků:

  1. Vytvoření nové DictationRecognizer
  2. Zpracování událostí diktování
  3. Spuštění diktováníRecognizer

Povolení možnosti diktování

Funkce Internetového klienta a mikrofonu musí být deklarovány pro aplikaci, aby používala diktování:

  1. V Unity Editoru přejděte na Upravit > přehrávač nastavení > projektu.
  2. Výběr na kartě Windows Store
  3. V části Možnosti nastavení > publikování zkontrolujte možnost InternetClient.
    • Pokud jste mikrofon ještě nepovolili, zkontrolujte možnost Mikrofon .
  4. Pokud jste to ještě neudělali, udělte aplikaci oprávnění pro přístup k mikrofonu na zařízení HoloLens.
    • Zobrazí se výzva, abyste to udělali při spuštění zařízení, ale pokud jste omylem kliknuli na ne, můžete změnit oprávnění v nastavení zařízení.

DiktováníRecognizer

Vytvořte diktováníRecognizer takto:

dictationRecognizer = new DictationRecognizer();

Existují čtyři události diktování, které je možné přihlásit k odběru a zpracovat za účelem implementace chování diktování.

  1. DictationResult
  2. DictationComplete
  3. DictationHypothesis
  4. DictationError

DiktováníResult

Tato událost se aktivuje po pozastavení uživatele, obvykle na konci věty. Tady se vrátí úplný rozpoznaný řetězec.

Nejprve se přihlaste k odběru DictationResult události:

dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;

Pak zpracujte zpětné volání DictationResult:

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

DiktováníHypotheze

Tato událost se aktivuje nepřetržitě, když uživatel mluví. Když rozpoznávání naslouchá, poskytuje text toho, co je dosud slyšet.

Nejprve se přihlaste k odběru DictationHypothesis události:

dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;

Pak zpracujte zpětné volání DiktováníHypothesis:

private void DictationRecognizer_DictationHypothesis(string text)
{
    // do something
}

DiktováníComplete

Tato událost se aktivuje, když se rozpoznávání zastaví, ať už se volá funkce Stop(), dojde k vypršení časového limitu nebo dojde k jiné chybě.

Nejprve se přihlaste k odběru DictationComplete události:

dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;

Pak zpracujte zpětné volání DiktationComplete:

private void DictationRecognizer_DictationComplete(DictationCompletionCause cause)
{
   // do something
}

Chyba diktování

Tato událost se aktivuje, když dojde k chybě.

Nejprve se přihlaste k odběru DictationError události:

dictationRecognizer.DictationError += DictationRecognizer_DictationError;

Pak zpracujte zpětné volání DiktationError:

private void DictationRecognizer_DictationError(string error, int hresult)
{
    // do something
}

Jakmile se přihlásíte k odběru a zpracujete události diktování, o které vám záleží, začněte rozpoznávat diktování a začněte přijímat události.

dictationRecognizer.Start();

Pokud už nechcete zachovat DiktováníRecognizer, musíte se odhlásit od událostí a DiktovatRecognizer.

dictationRecognizer.DictationResult -= DictationRecognizer_DictationResult;
dictationRecognizer.DictationComplete -= DictationRecognizer_DictationComplete ;
dictationRecognizer.DictationHypothesis -= DictationRecognizer_DictationHypothesis ;
dictationRecognizer.DictationError -= DictationRecognizer_DictationError ;
dictationRecognizer.Dispose();

Tipy

  • Start() a Stop() metody povolte a zakažte rozpoznávání diktování.
  • Po dokončení s rozpoznáváním musí být uvolněn pomocí Dispose() uvolnění prostředků, které používá. Tyto prostředky uvolní automaticky během uvolňování paměti za dodatečné náklady na výkon, pokud se před tím nevyvolají.
  • K vypršení časových limitů dochází po nastaveném časovém období. Tyto časové limity můžete zkontrolovat v DictationComplete události. Je potřeba vědět o dvou časových limitech:
    1. Pokud se rozpoznávání spustí a na prvních pět sekund neuslyší žádný zvuk, časový limit vyprší.
    2. Pokud rozpoznávání poskytlo výsledek, ale uslyší ticho po dobu 20 sekund, časový limit vyprší.

Použití rozpoznávání frází i diktování

Pokud chcete ve své aplikaci používat rozpoznávání frází i diktování, budete ho muset před spuštěním druhé úplně vypnout. Pokud máte spuštěných více klíčových slovRecognizerů, můžete je všechny najednou vypnout pomocí:

PhraseRecognitionSystem.Shutdown();

Po zastavení diktováníRecognizer můžete volat Restart() obnovení všech rozpoznávacích objektů do předchozího stavu:

PhraseRecognitionSystem.Restart();

Mohli byste také spustit klíčové slovoRecognizer, který restartuje fráziRecognitionSystem.

Hlasový vstup v sadě nástrojů Mixed Reality

Příklady MRTK pro hlasový vstup najdete v následujících ukázkových scénách:

Kontrolní bod dalšího vývoje

Pokud sledujete cestu kontrolního bodu vývoje Unity, kterou jsme probrali, jste dalším úkolem je prozkoumat možnosti a rozhraní API platformy hybridní reality:

Kdykoli se můžete vrátit k kontrolním bodům vývoje Unity.