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 textu na řeč a rozpoznávání řeči v přirozeném jazyce. Pokud chcete začít, podívejte se na ukázku a dokumentaci.

Unity zveřejňuje tři způsoby přidání hlasového vstupu do aplikace Unity. První dva z těchto typů jsou typy PhraseRecognizer:

  • Předá KeywordRecognizer aplikaci pole řetězcových příkazů, kterým můžete naslouchat.
  • Poskytuje GrammarRecognizer aplikaci soubor SRGS definující konkrétní gramatiku pro naslouchání.
  • Umožňuje aplikaci naslouchat libovolnému slovu a poskytnout uživateli poznámku nebo jiné zobrazení DictationRecognizer řeči.

Poznámka

Diktování a rozpoznávání frází nelze zpracovat současně. Pokud je aktivní GrammarRecognizer nebo KeywordRecognizer, nemůže být diktátor DictationRecognizer aktivní a naopak.

Povolení funkce pro hlas

Aby aplikace používat hlasový vstup, musí být deklarována funkce Mikrofon.

  1. V editoru Unity přejděte do části Upravit Project Nastavení > Player.
  2. Vyberte kartu Windows Úložiště.
  3. V části Publishing Nastavení Capabilities (Možnosti publikování) zaškrtněte možnost Microphone (Mikrofon).
  4. Udělení oprávnění k aplikaci pro přístup k mikrofonu na HoloLens zařízení
    • Zobrazí se vám dotaz, jestli to chcete provést při spuštění zařízení, ale pokud omylem kliknete na ne, můžete oprávnění změnit v nastavení zařízení.

Rozpoznávání frází

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

  1. Určení frází k naslouchání pomocí KeywordRecognizer nebo GrammarRecognizer
  2. Zpracování události OnPhraseRecognized a akce odpovídající rozpoznané frázi

KeywordRecognizer

Obor názvů:UnityEngine.Windows. Řeči
Typy:KeywordRecognizer,PhraseRecognizedEventArgs,SpeechError,SpeechSystemStatus

K uložení úhozů kláves 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í slovníku rozpoznávání a klíčového slova > a akce:

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říklad obslužné rutiny:

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ání!

keywordRecognizer.Start();

GrammarRecognizer

Obor názvů:UnityEngine.Windows. Řeči
Typy:GrammarRecognizer,PhraseRecognizedEventArgs,SpeechError,SpeechSystemStatus

Gramatická zpráva GrammarRecognizer se používá, pokud zadáte gramatiku rozpoznávání pomocí SRGS. To může být užitečné, pokud má vaše aplikace více než jen pár klíčových slov, pokud chcete rozpoznávat 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í SRGS XML.

Jakmile máte gramatiku SRGS a je ve vašem projektu ve složce StreamingAssets:

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

Vytvořte a GrammarRecognizer předejte ji 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 odpovídajícím způsobem zpracovat. Většina důležitých informací bude poskytnuta v semanticMeanings poli .

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

Nakonec začněte rozpoznání!

grammarRecognizer.Start();

Diktování

Obor názvů:UnityEngine.Windows. Řeči
Typy:DictationRecognizer,SpeechError,SpeechSystemStatus

K převodu řeči uživatele na text použijte . DictationRecognizer DictationRecognizer vystavuje funkce diktování a podporuje registraci a naslouchání hypotézám a frázím dokončených událostí, takže můžete dát zpětnou vazbu svému uživateli, když mluví a potom. Start() Metody Stop() a v uvedeném pořadí umožňují rozpoznávání diktování povolit a zakázat. Jakmile budete s rozpoznáváním hotovi, měli byste ho uvolnit pomocí , aby se uvolní Dispose() prostředky, které používá. Tyto prostředky se automaticky uvolní během uvolňování paměti s dodatečnými náklady na výkon, pokud ještě nejsou vydané.

K zahájení diktování je potřeba provést jenom pár kroků:

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

Povolení funkce pro diktování

Aby aplikace používá diktování, musí být deklarovány možnosti Internet Client (Internetový klient) a Microphone (Mikrofon):

  1. V editoru Unity přejděte do části Upravit Project Nastavení > Player.
  2. Vyberte na kartě Windows Store(Obchod).
  3. V části Publishing Nastavení Capabilities (Možnosti publikování) zaškrtněte možnost InternetClient.
    • Pokud jste ještě nepotáhověly mikrofon, můžete volitelně zkontrolovat možnost Mikrofon.
  4. Pokud jste to ještě neudělali, udělte aplikaci HoloLens přístup k mikrofonu na vašem zařízení.
    • Zobrazí se vám dotaz, jestli to chcete provést při spuštění zařízení, ale pokud omylem kliknete na ne, můžete oprávnění změnit v nastavení zařízení.

DictationRecognizer

Vytvořte diktátor DictationRecognizer, jako je tento:

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íVýsledek

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 DictationResult odběru události:

dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;

Potom zvládněte zpětné volání DictationResult:

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

DiktováníHypotéza

Tato událost se v době, kdy uživatel mluví, průběžně aktivována. Když rozpoznávání naslouchá, poskytuje text toho, co doposud slyšeli.

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

dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;

Potom zvládněte zpětné volání diktováníHypotesis:

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

DictationComplete

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

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

dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;

Potom zvládněte zpětné volání DictationComplete:

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

DictationError

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

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

dictationRecognizer.DictationError += DictationRecognizer_DictationError;

Potom zvládněte zpětné volání DictationError:

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

Po přihlášení k odběru a zpracování událostí diktování, které vás zajímá, spusťte rozpoznávání diktátoru, aby začal přijímat události.

dictationRecognizer.Start();

Pokud už nechcete diktování udržovat, musíte se odhlásit z odběru událostí a vyřazení diktátoru DictationRecognizer.

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

Tipy

  • Start() Metody Stop() a v uvedeném pořadí umožňují rozpoznávání diktování povolit a zakázat.
  • Jakmile rozpoznávání skončí, musí být uvolněno pomocí , aby se uvolní Dispose() prostředky, které používá. Tyto prostředky se automaticky uvolní během uvolňování paměti s dodatečnými náklady na výkon, pokud ještě nejsou vydané.
  • K časovým limitům dochází po nastaveném časovém období. Tyto časové limity můžete zkontrolovat v DictationComplete události . Je tř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, dojde k jeho časovému limitu.
    2. Pokud rozpoznávání získalo výsledek, ale potom 20 sekund uslyší ticho, časový limit tohoto výsledku se vyruší.

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

Pokud chcete v aplikaci používat rozpoznávání i diktování frází, musíte ho před zahájením druhého plně vypnout. Pokud máte spuštěných více keywordRecognizers, můžete je všechny vypnout najednou pomocí:

PhraseRecognitionSystem.Shutdown();

Voláním metody můžete obnovit všechny rozpoznávání do předchozího stavu po zastavení Restart() diktátoru DictationRecognizer:

PhraseRecognitionSystem.Restart();

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

Hlasový vstup v Mixed Reality Toolkit

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

Další vývojový kontrolní bod

Pokud postupujete podle cesty k vývojovému kontrolnímu bodu Unity, kterou jsme si nachysnuli, vaším dalším úkolem je prozkoumat možnosti a rozhraní API Mixed Reality platformy:

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