Wprowadzanie głosu w a środowisku Unity
Przestroga
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 mowy na tekst, a także zaawansowane funkcje mowy, takie jak okno dialogowe, 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 funkcji Voice do aplikacji Aparatu Unity, z których pierwsze dwa są typami PhraseRecognizer:
- Aplikacja
KeywordRecognizer
dostarcza tablicę poleceń ciągu 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 dostarczanie użytkownikowi notatki lub innego wyświetlania mowy
Uwaga
Nie można jednocześnie obsługiwać dyktowania i rozpoznawania fraz. Jeśli element GrammarRecognizer lub KeywordRecognizer jest aktywny, element DictationRecognizer nie może być aktywny i odwrotnie.
Włączanie możliwości funkcji voice
Aby aplikacja korzystała z danych wejściowych głosowych, należy zadeklarować możliwość mikrofonu .
- W edytorze aparatu Unity przejdź do pozycji Edytuj > odtwarzacz ustawień > projektu
- Wybierz kartę Sklep Windows
- W sekcji Możliwości ustawień > publikowania sprawdź możliwości mikrofonu
- 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 przycisk "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 działania:
- Określanie fraz do nasłuchiwania przy użyciu elementu
KeywordRecognizer
lubGrammarRecognizer
- Obsługa zdarzenia
OnPhraseRecognized
i podejmowanie akcji odpowiadającej rozpoznaniu frazy
Słowo kluczoweRecognizer
Przestrzeń nazw:UnityEngine.Windows.Speech
Typy:KeywordRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus
Aby zapisać kilka naciśnięć klawiszy, będziemy potrzebować 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 recognizer i keyword-action>:
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 aparat rozpoznawania 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: Create Grammars Using SRGS XML (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 Zasoby przesyłania strumieniowego:
<PROJECT_ROOT>/Assets/StreamingAssets/SRGS/myGrammar.xml
Utwórz element GrammarRecognizer
i przekaż ścieżkę 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órą 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();
Dyktowania
Przestrzeń nazw:UnityEngine.Windows.Speech
Typy: DictationRecognizer, SpeechError, SpeechSystemStatus
Użyj elementu , DictationRecognizer
aby przekonwertować mowę użytkownika na tekst. Element DictationRecognizer uwidacznia funkcję dyktowania i obsługuje rejestrowanie i nasłuchiwanie zdarzeń dotyczących hipotez i fraz zakończonych, dzięki czemu możesz przekazać opinię użytkownikowi zarówno podczas wypowiadania, jak i później. Start()
metody i Stop()
odpowiednio 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 dodatkowych kosztach wydajności, jeśli nie zostaną one wydane wcześniej.
Aby rozpocząć dyktowanie, należy wykonać tylko kilka kroków:
- Tworzenie nowego
DictationRecognizer
- Obsługa zdarzeń dyktowania
- 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 :
- W edytorze aparatu Unity przejdź do pozycji Edytuj > odtwarzacz ustawień > projektu
- Wybierz na karcie Sklep Windows
- W sekcji Możliwości ustawień > publikowania sprawdź możliwości InternetClient
- Opcjonalnie, jeśli mikrofon nie został jeszcze włączony, sprawdź możliwości mikrofonu
- 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 przycisk "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.
DictationResult
DictationComplete
DictationHypothesis
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
}
DyktowanieHypoteza
To zdarzenie jest uruchamiane w sposób ciągły, gdy użytkownik rozmawia. 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
}
Błąd Dyktowania
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ą, uruchom program rozpoznawania dyktowania, aby rozpocząć odbieranie zdarzeń.
dictationRecognizer.Start();
Jeśli nie chcesz już przechowywać elementu 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()
metody iStop()
odpowiednio włączają i wyłączają rozpoznawanie dyktowania.- Po wykonaniu operacji rozpoznawania należy go usunąć przy użyciu polecenia
Dispose()
, aby zwolnić używane przez niego zasoby. Spowoduje to automatyczne zwolnienie tych zasobów podczas odzyskiwania pamięci przy dodatkowych kosztach wydajności, jeśli nie zostaną one wydane wcześniej. - Przekroczenia limitu czasu występują po określonym przedziale czasu. Możesz sprawdzić te limity czasu w
DictationComplete
zdarzeniu. Istnieją dwa przekroczenia limitu czasu, o których należy pamiętać:- Jeśli rozpoznawanie zostanie uruchomione i nie usłyszy żadnego dźwięku przez pierwsze pięć sekund, upłynął limit czasu.
- Jeśli rozpoznawanie dało wynik, ale następnie usłyszy ciszę przez 20 sekund, upłynął limit czasu.
Korzystanie zarówno z rozpoznawania fraz, jak i dyktowania
Jeśli chcesz użyć funkcji rozpoznawania i dyktowania fraz w aplikacji, musisz w pełni zamknąć jedną, zanim będzie można uruchomić drugą. Jeśli masz uruchomionych wiele słów kluczowychRecognizers, możesz zamknąć je wszystkie naraz za pomocą polecenia :
PhraseRecognitionSystem.Shutdown();
Możesz wywołać metodę Restart()
, aby przywrócić wszystkie funkcje rozpoznawania do poprzedniego stanu po zatrzymaniu elementu DictationRecognizer:
PhraseRecognitionSystem.Restart();
Możesz również uruchomić element KeywordRecognizer, który również uruchomi ponownie element PhraseRecognitionSystem.
Wprowadzanie głosu w zestawie narzędzi Mixed Reality Toolkit
Przykłady zestawu narzędzi MRTK dla danych głosowych można znaleźć w następujących scenach demonstracyjnych:
Następny punkt kontrolny programowania
Jeśli obserwujesz zaplanowaną przez nas podróż do punktu kontrolnego tworzenia aparatu Unity, następnym zadaniem jest zbadanie możliwości i interfejsów API platformy Mixed Reality:
Zawsze możesz wrócić do punktów kontrolnych tworzenia aparatu Unity w dowolnym momencie.