Udostępnij za pośrednictwem


Wprowadzanie głosu w aucie Unity

Uwaga

Przed rozpoczęciem rozważ użycie wtyczki aparatu Unity dla zestawu SDK usług Cognitive Speech Services. Wtyczka ma lepsze wyniki dokładności mowy i łatwy dostęp do dekodowania zamiany mowy na tekst, a także zaawansowane funkcje mowy, takie jak dialog, interakcja oparta na intencji, tłumaczenie, synteza tekstu na mowę i rozpoznawanie mowy w języku naturalnym. Aby rozpocząć pracę, zapoznaj się z przykładową dokumentacją i dokumentacją.

Aparat Unity uwidacznia trzy sposoby dodawania danych wejściowych voice do aplikacji aparatu Unity, z których pierwsze dwa są typami PhraseRecognizer:

  • Aplikacja KeywordRecognizer dostarcza tablicę poleceń ciągów do nasłuchiwania
  • Element GrammarRecognizer zapewnia aplikacji plik SRGS definiujący konkretną gramatykę do nasłuchiwania
  • Aplikacja DictationRecognizer umożliwia aplikacji nasłuchiwanie dowolnego słowa i udostępnianie użytkownikowi notatki lub innego wyświetlania mowy

Uwaga

Nie można jednocześnie obsłużyć funkcji Dyktowania i rozpoznawania fraz. Jeśli element GrammarRecognizer lub KeywordRecognizer jest aktywny, DictationRecognizer nie może być aktywny i na odwrót.

Włączanie możliwości funkcji voice

Aby aplikacja korzystała z danych wejściowych głosowych, należy zadeklarować możliwość mikrofonu .

  1. W edytorze aparatu Unity przejdź do pozycji Edytuj > odtwarzacz ustawień > projektu
  2. Wybierz kartę Sklep Windows
  3. W sekcji Możliwości ustawień > publikowania sprawdź możliwości mikrofonu
  4. Udzielanie aplikacji uprawnień dostępu do mikrofonu na urządzeniu HoloLens
    • Zostanie wyświetlony monit o wykonanie tej czynności podczas uruchamiania urządzenia, ale jeśli przypadkowo klikniesz pozycję "Nie", możesz zmienić uprawnienia w ustawieniach urządzenia

Rozpoznawanie fraz

Aby umożliwić aplikacji nasłuchiwanie określonych fraz wypowiadanych przez użytkownika, należy wykonać pewne czynności:

  1. Określ, które frazy mają nasłuchiwać przy użyciu elementu KeywordRecognizer lub GrammarRecognizer
  2. Obsługa zdarzenia OnPhraseRecognized i podejmowanie akcji odpowiadającej rozpoznaniu frazy

Słowo kluczoweRecognizer

Przestrzeń nazw: UnityEngine.Windows.Speech
Typy: KeywordRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus

Do zapisania naciśnięć potrzebujemy kilku instrukcji using:

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

Następnie dodajmy kilka pól do klasy, aby przechowywać słownik rozpoznawania i akcji słowa kluczowego>:

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

Teraz dodaj słowo kluczowe do słownika, na przykład w metodzie Start() . W tym przykładzie dodajemy słowo kluczowe "activate":

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

Utwórz rozpoznawanie słów kluczowych i poinformuj go o tym, co chcemy rozpoznać:

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

Teraz zarejestruj się na potrzeby OnPhraseRecognized zdarzenia

keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;

Przykładowa procedura obsługi to:

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

Na koniec zacznij rozpoznawać!

keywordRecognizer.Start();

GrammarRecognizer

Przestrzeń nazw: UnityEngine.Windows.Speech
Typy: GrammarRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus

Funkcja GrammarRecognizer jest używana, jeśli określasz gramatykę rozpoznawania przy użyciu biblioteki SRGS. Może to być przydatne, jeśli aplikacja ma więcej niż kilka słów kluczowych, jeśli chcesz rozpoznać bardziej złożone frazy lub jeśli chcesz łatwo włączyć i wyłączyć zestawy poleceń. Zobacz: Tworzenie gramatyki przy użyciu formatu SRGS XML , aby uzyskać informacje o formacie pliku.

Gdy masz gramatykę SRGS i znajduje się ona w projekcie w folderze StreamingAssets:

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

Utwórz element GrammarRecognizer i przekaż ją do pliku SRGS:

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

Teraz zarejestruj się na potrzeby OnPhraseRecognized zdarzenia

grammarRecognizer.OnPhraseRecognized += grammarRecognizer_OnPhraseRecognized;

Otrzymasz wywołanie zwrotne zawierające informacje określone w gramatyce SRGS, które można odpowiednio obsłużyć. Większość ważnych informacji zostanie podana w tablicy semanticMeanings .

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

Na koniec zacznij rozpoznawać!

grammarRecognizer.Start();

Dyktowanie

Przestrzeń nazw: UnityEngine.Windows.Speech
Typy: DictationRecognizer, SpeechError, SpeechSystemStatus

Użyj elementu , DictationRecognizer aby przekonwertować mowę użytkownika na tekst. DictationRecognizer ujawnia funkcje dyktowania i obsługuje rejestrowanie i słuchanie hipotezy i fraz ukończonych zdarzeń, dzięki czemu możesz przekazać opinię użytkownikowi zarówno podczas rozmowy, jak i później. Start() i Stop() metody włączają i wyłączają rozpoznawanie dyktowania. Po wykonaniu operacji rozpoznawania należy go usunąć przy użyciu polecenia Dispose() w celu zwolnienia używanych zasobów. Spowoduje to automatyczne zwolnienie tych zasobów podczas odzyskiwania pamięci przy dodatkowym koszcie wydajności, jeśli nie zostaną one wydane wcześniej.

Aby rozpocząć dyktowanie, należy wykonać tylko kilka kroków:

  1. Tworzenie nowego DictationRecognizer
  2. Obsługa zdarzeń dyktowania
  3. Uruchamianie elementu DictationRecognizer

Włączanie możliwości dyktowania

Aby aplikacja korzystała z dyktowania, należy zadeklarować możliwości klienta internetowego i mikrofonu :

  1. W edytorze aparatu Unity przejdź do pozycji Edytuj > odtwarzacz ustawień > projektu
  2. Wybierz na karcie Sklep Windows
  3. W sekcji Możliwości ustawień > publikowania sprawdź możliwości InternetClient
    • Opcjonalnie, jeśli nie włączono jeszcze mikrofonu, sprawdź możliwości mikrofonu
  4. Udzielanie aplikacji uprawnień dostępu do mikrofonu na urządzeniu HoloLens, jeśli jeszcze tego nie zrobiono
    • Zostanie wyświetlony monit o wykonanie tej czynności podczas uruchamiania urządzenia, ale jeśli przypadkowo klikniesz pozycję "Nie", możesz zmienić uprawnienia w ustawieniach urządzenia

DictationRecognizer

Utwórz element DictationRecognizer w następujący sposób:

dictationRecognizer = new DictationRecognizer();

Istnieją cztery zdarzenia dyktowania, które można subskrybować i obsługiwać w celu zaimplementowania zachowania dyktowania.

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

DictationResult

To zdarzenie jest wyzwalane po wstrzymaniu użytkownika, zazwyczaj na końcu zdania. Pełny rozpoznany ciąg jest zwracany tutaj.

Najpierw zasubskrybuj DictationResult zdarzenie:

dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;

Następnie obsłuż wywołanie zwrotne DictationResult:

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

DictationHypothesis

To zdarzenie jest uruchamiane w sposób ciągły podczas rozmowy użytkownika. Gdy rozpoznawanie nasłuchuje, dostarcza tekst tego, co jest do tej pory słyszane.

Najpierw zasubskrybuj DictationHypothesis zdarzenie:

dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;

Następnie obsłuż wywołanie zwrotne DictationHypothesis:

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

DictationComplete

To zdarzenie jest wyzwalane, gdy rozpoznawanie zatrzymuje się, czy z stop() jest wywoływany, występuje przekroczenie limitu czasu lub inny błąd.

Najpierw zasubskrybuj DictationComplete zdarzenie:

dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;

Następnie obsłuż wywołanie zwrotne DictationComplete:

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

DictationError

To zdarzenie jest wyzwalane, gdy wystąpi błąd.

Najpierw zasubskrybuj DictationError zdarzenie:

dictationRecognizer.DictationError += DictationRecognizer_DictationError;

Następnie obsłuż wywołanie zwrotne DictationError:

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

Po zasubskrybowaniu i obsłudze zdarzeń dyktowania, które cię interesują, rozpocznij rozpoznawanie dyktowania, aby rozpocząć odbieranie zdarzeń.

dictationRecognizer.Start();

Jeśli nie chcesz już przechowywać DictationRecognizer wokół, musisz anulować subskrypcję zdarzeń i Usunąć DictationRecognizer.

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

Porady

  • Start() i Stop() metody włączają i wyłączają rozpoznawanie dyktowania.
  • Po wykonaniu operacji rozpoznawania należy go usunąć przy użyciu polecenia Dispose() , aby zwolnić używane zasoby. Spowoduje to automatyczne zwolnienie tych zasobów podczas odzyskiwania pamięci przy dodatkowym koszcie wydajności, jeśli nie zostaną one wydane wcześniej.
  • Przekroczenia limitu czasu występują po upływie określonego czasu. Możesz sprawdzić te przekroczenia limitu czasu w DictationComplete zdarzeniu. Istnieją dwa przekroczenia limitu czasu, o których należy pamiętać:
    1. Jeśli rozpoznawanie zostanie uruchomione i nie usłyszy żadnego dźwięku przez pierwsze pięć sekund, upłynął limit czasu.
    2. Jeśli rozpoznawanie dało wynik, ale usłyszy ciszę przez 20 sekund, upłynął limit czasu.

Korzystanie zarówno z rozpoznawania fraz, jak i dyktowania

Jeśli chcesz użyć zarówno rozpoznawania fraz, jak i dyktowania w aplikacji, musisz w pełni zamknąć jedną, zanim będzie można uruchomić drugą. Jeśli masz uruchomione wiele obiektów KluczowychRecognizers, możesz zamknąć je wszystkie jednocześnie za pomocą polecenia:

PhraseRecognitionSystem.Shutdown();

Możesz wywołać metodę Restart() przywracania wszystkich elementów rozpoznawania do poprzedniego stanu po zatrzymaniu elementu DictationRecognizer:

PhraseRecognitionSystem.Restart();

Możesz również uruchomić element KeywordRecognizer, co spowoduje ponowne uruchomienie elementu PhraseRecognitionSystem.

Wprowadzanie głosu w zestawie narzędzi Mixed Reality Toolkit

Przykłady zestawu narzędzi MRTK dla danych wejściowych głosowych można znaleźć w następujących scenach demonstracyjnych:

Następny punkt kontrolny programowania

Jeśli obserwujesz zaplanowaną podróż do punktu kontrolnego tworzenia aparatu Unity, następnym zadaniem jest eksplorowanie możliwości i interfejsów API platformy rzeczywistości mieszanej:

Zawsze możesz wrócić do punktów kontrolnych programowania aparatu Unity w dowolnym momencie.