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, stejně jako pokročilé funkce řeči, jako je dialog, interakce na základě záměru, překlad, syntéza textu na řeč a rozpoznávání řeči v přirozeném jazyce. Začněte tím, že si projděte 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 PhraseRecognizer:

  • Aplikace KeywordRecognizer doručí pole řetězcových příkazů, které bude naslouchat.
  • Nástroj GrammarRecognizer aplikaci poskytne soubor SRGS definující konkrétní gramatiku pro naslouchání.
  • Umožňuje DictationRecognizer aplikaci poslouchat jakékoli slovo a poskytovat uživateli poznámku nebo jiné zobrazení jeho řeči.

Poznámka

Diktování a rozpoznávání frází nejde zpracovat současně. Pokud je grammarRecognizer nebo KeywordRecognizer aktivní, 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. Vyberte kartu 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 klikli na ne, můžete změnit oprávnění v nastavení zařízení.

Rozpoznávání frází

Pokud chcete aplikaci umožnit, aby naslouchala konkrétním frázím, které uživatel vysloví, a pak provést nějakou akci, musíte:

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

KeywordRecognizer

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

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

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

Pak do třídy přidáme několik polí pro uložení rozpoznávání a slovníku keyword-action>:

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

Teď přidejte klíčové slovo do slovníku, 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 na událost.OnPhraseRecognized

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

GrammarRecognizer se používá, pokud zadáváte gramatiku rozpoznávání pomocí SRGS. 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ů. Informace o formátu souboru najdete v tématu Vytváření gramatik pomocí jazyka XML SRGS .

Jakmile máte 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 mu cestu k souboru SRGS:

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

Teď se zaregistrujte na událost.OnPhraseRecognized

grammarRecognizer.OnPhraseRecognized += grammarRecognizer_OnPhraseRecognized;

Získáte zpětné volání obsahující informace zadané v gramatice SRGS, které můžete odpovídajícím způsobem 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: DictationRecognizer, SpeechError, SpeechSystemStatus

DictationRecognizer K převodu řeči uživatele na text použijte . DictationRecognizer zpřístupň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živatelům poskytnout zpětnou vazbu jak při mluvení, tak i potom. Start() a Stop() metody umožňují a zakazujte rozpoznávání diktování. Jakmile nástroj pro rozpoznávání dokončíte, měli byste ho zlikvidovat pomocí Dispose() , aby se uvolnily prostředky, které používá. Tyto prostředky se automaticky uvolní během uvolňování paměti s dodatečným výkonem, pokud se nevydají dříve.

K tomu, abyste mohli začít s diktováním, je potřeba udělat jenom pár kroků:

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

Povolení funkce pro diktování

Aby aplikace používala diktování, musí být deklarovány funkce internetový klient a mikrofon :

  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 ještě nepovolili mikrofon, 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 klikli na ne, můžete změnit oprávnění v nastavení zařízení.

DiktováníRecognizer

Vytvořte příkaz DictationRecognizer takto:

dictationRecognizer = new DictationRecognizer();

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

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

DictationResult

Tato událost se aktivuje po pozastavení uživatele, obvykle na konci věty. Vrátí se ú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íHypoteza

Tato událost se aktivuje nepřetržitě, zatímco uživatel mluví. Když rozpoznávání naslouchá, poskytuje text s tím, co zatím slyšel.

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

dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;

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

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

Dokončení diktování

Tato událost se aktivuje, když se rozpoznávání zastaví, ať už z volané 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í DictationComplete:

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í DictationError:

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í, které vás zajímají, spusťte rozpoznávání diktování a začněte přijímat události.

dictationRecognizer.Start();

Pokud už nechcete používat DictationRecognizer, musíte se odhlásit od odběru událostí a odstranit DictationRecognizer.

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

Tipy

  • Start() a Stop() metody umožňují a zakazujte rozpoznávání diktování.
  • Jakmile nástroj pro rozpoznávání dokončíte, je nutné ho odstranit pomocí Dispose() , aby se uvolnily prostředky, které používá. Tyto prostředky se automaticky uvolní během uvolňování paměti s dodatečným výkonem, pokud se nevydají dříve.
  • 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 mít na paměti dva časové limity:
    1. Pokud se rozpoznávání spustí a prvních pět sekund neuslyší žádný zvuk, vyprší jeho časový limit.
    2. Pokud rozpoznávání zadalo výsledek, ale pak uslyší ticho po dobu 20 sekund, časový limit vyprší.

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

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

PhraseRecognitionSystem.Shutdown();

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

PhraseRecognitionSystem.Restart();

Můžete také jednoduše spustit keywordRecognizer, který také restartuje PhraseRecognitionSystem.

Hlasový vstup v Mixed Reality Toolkit

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

Další kontrolní bod vývoje

Pokud sledujete cestu k kontrolnímu bodu vývoje Unity, který jsme si vytyčili, dalším úkolem je prozkoumat možnosti a rozhraní API platformy Mixed Reality:

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