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 .
- 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 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:
- Określ, które frazy mają nasłuchiwać 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
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:
- 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 nie włączono jeszcze mikrofonu, 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 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.
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
}
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()
iStop()
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ć:- 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 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.