Spracheingabe in UnityVoice input in Unity

Hinweis

Verwenden Sie anstelle der nachfolgenden Informationen das Unity-Plug-in für das Cognitive Speech Services SDK, das deutlich bessere Ergebnisse bei der sprach Genauigkeit aufweist und einen einfachen Zugriff auf die Spracherkennung und Erweiterte Spracherkennung ermöglicht, wie z. b. Dialog, Intent-basierte Interaktion, Übersetzung, Text-zu-Sprache-Synthese und Spracherkennung in natürlicher Sprache.Instead of the below information, consider using the Unity plug-in for the Cognitive Speech Services SDK which has much better Speech Accuracy results and provides easy access to speech-to-text decode and advanced speech features like dialog, intent based interaction, translation, text-to-speech synthesis and natural language speech recognition. Hier finden Sie das Beispiel und Dokumentation: https://docs.microsoft.com//azure/cognitive-services/speech-service/quickstart-csharp-unityFind the sample and documentaion here: https://docs.microsoft.com//azure/cognitive-services/speech-service/quickstart-csharp-unity

Unity bietet drei Möglichkeiten zum Hinzufügen von Spracheingaben zu ihrer Unity-Anwendung.Unity exposes three ways to add Voice input to your Unity application.

Mit keywordrecognizer (einem von zwei Typen von phraserecognizers) kann Ihrer APP ein Array von Zeichen folgen Befehlen zugewiesen werden, die überwacht werden sollen.With the KeywordRecognizer (one of two types of PhraseRecognizers), your app can be given an array of string commands to listen for. Mit dem Grammatiken von Grammatiken (dem anderen Typ von phraserecognizer) kann Ihrer APP eine SRGS-Datei zugewiesen werden, die eine bestimmte Grammatik zum lauschen definiert.With the GrammarRecognizer (the other type of PhraseRecognizer), your app can be given an SRGS file defining a specific grammar to listen for. Mit dem "diktationerkenzer" kann Ihre APP auf ein beliebiges Wort lauschen und dem Benutzer einen Hinweis oder eine andere Anzeige seiner Sprache bereitstellen.With the DictationRecognizer, your app can listen for any word and provide the user with a note or other display of their speech.

Hinweis

Nur die Diktat-oder Ausdrucks Erkennung kann gleichzeitig behandelt werden.Only dictation or phrase recognition can be handled at once. Dies bedeutet, dass ein "yntationerkenzer" nicht aktiv sein kann und umgekehrt ist, wenn ein "grammmarerkenzer" oder "keywordrecognizer" aktiv ist.That means if a GrammarRecognizer or KeywordRecognizer is active, a DictationRecognizer can not be active and vice versa.

Aktivieren der SprachfunktionEnabling the capability for Voice

Die Mikrofon Funktion muss für eine APP deklariert werden, um eine Spracheingabe zu verwenden.The Microphone capability must be declared for an app to use Voice input.

  1. Navigieren Sie im Unity-Editor zu den Player Einstellungen, indem Sie zu "> Projekteinstellungen bearbeiten > Player" navigieren.In the Unity Editor, go to the player settings by navigating to "Edit > Project Settings > Player"
  2. Wählen Sie auf der Registerkarte "Windows Store" aus.Select on the "Windows Store" tab
  3. Aktivieren Sie im Abschnitt "Veröffentlichungs Einstellungen > Funktionen" die Mikrofon Funktion.In the "Publishing Settings > Capabilities" section, check the Microphone capability

Ausdrucks ErkennungPhrase Recognition

Damit Ihre APP auf bestimmte vom Benutzer gesprochene Ausdrücke lauschen kann, müssen Sie Folgendes tun:To enable your app to listen for specific phrases spoken by the user then take some action, you need to:

  1. Angeben der zu überwachenden Ausdrücke mithilfe eines keywordrecognizer-oder grammarerkenzer-ElementsSpecify which phrases to listen for using a KeywordRecognizer or GrammarRecognizer
  2. Behandeln Sie das onphraserecognized-Ereignis, und ergreifen Sie entsprechende Aktionen für den erkannten Ausdruck.Handle the OnPhraseRecognized event and take action corresponding to the phrase recognized

KeywordrecognizerKeywordRecognizer

Namespace: unityengine. Windows. SpeechNamespace: UnityEngine.Windows.Speech
Typen: keywordrecognizer, phraserecognizedeventargs, delegatfehler, Sprech SystemstatusTypes: KeywordRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus

Zum Speichern einiger Tastatureingaben benötigen wir einige using-Anweisungen:We'll need a few using statements to save some keystrokes:

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

Fügen Sie der Klasse nun einige Felder hinzu, um das Erkennungs-und Schlüsselwort >Aktions Wörterbuch zu speichern:Then let's add a few fields to your class to store the recognizer and keyword->action dictionary:

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

Fügen Sie nun dem Wörterbuch ein Schlüsselwort hinzu, z. b. in einer Start ()-Methode.Now add a keyword to the dictionary, for example in of a Start() method. Das Schlüsselwort "aktivieren" wird in diesem Beispiel hinzugefügt:We're adding the "activate" keyword in this example:

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

Erstellen Sie die Schlüsselwort Erkennung, und teilen Sie Ihnen mit, was wir erkennen möchten:Create the keyword recognizer and tell it what we want to recognize:

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

Registrieren Sie sich jetzt für das onphraserecognized-Ereignis.Now register for the OnPhraseRecognized event

keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;

Ein Beispiel Handler ist:An example handler is:

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

Beginnen Sie schließlich mit der Erkennung!Finally, start recognizing!

keywordRecognizer.Start();

GrammarerkenzerGrammarRecognizer

Namespace: unityengine. Windows. SpeechNamespace: UnityEngine.Windows.Speech
Typen: grammarerkenzer, phraserecognizedeventargs, delegatfehler, Sprech SystemstatusTypes: GrammarRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus

Die Grammatiken werden verwendet, wenn Sie Ihre Erkennungs Grammatik mithilfe von SRGS angeben.The GrammarRecognizer is used if you're specifying your recognition grammar using SRGS. Dies kann hilfreich sein, wenn Ihre APP mehr als nur einige wenige Schlüsselwörter aufweist, wenn Sie komplexere Ausdrücke erkennen möchten, oder wenn Sie Sätze von Befehlen problemlos aktivieren und deaktivieren möchten.This can be useful if your app has more than just a few keywords, if you want to recognize more complex phrases, or if you want to easily turn on and off sets of commands. Informationen zum Dateiformat finden Sie unter Erstellen von Grammatiken mithilfe von SRGS XML .See: Create Grammars Using SRGS XML for file format information.

Sobald Sie die SRGS-Grammatik haben und sich in Ihrem Projekt in einem Ordner "streamingassets" befinden:Once you have your SRGS grammar, and it is in your project in a StreamingAssets folder:

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

Erstellen Sie eine grammatisierungsklasse, und übergeben Sie Ihr den Pfad zu ihrer SRGS-Datei:Create a GrammarRecognizer and pass it the path to your SRGS file:

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

Registrieren Sie sich jetzt für das onphraserecognized-Ereignis.Now register for the OnPhraseRecognized event

grammarRecognizer.OnPhraseRecognized += grammarRecognizer_OnPhraseRecognized;

Sie erhalten einen Rückruf mit Informationen, die in der SRGS-Grammatik angegeben sind, die Sie entsprechend behandeln können.You'll get a callback containing information specified in your SRGS grammar, which you can handle appropriately. Die meisten wichtigen Informationen werden im semanticbedeutungen-Array bereitgestellt.Most of the important information will be provided in the semanticMeanings array.

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

Beginnen Sie schließlich mit der Erkennung!Finally, start recognizing!

grammarRecognizer.Start();

DiktierenDictation

Namespace: unityengine. Windows. SpeechNamespace: UnityEngine.Windows.Speech
Typen: " diktationerkenzer", "sprecherfehler", " Redner Systemstatus Types: DictationRecognizer, SpeechError, SpeechSystemStatus

Verwenden Sie das diktationerkenzer-Element, um die Sprache des Benutzers in Text zu konvertieren.Use the DictationRecognizer to convert the user's speech to text. Der Diktat-Erkennungs Modul macht Diktat Funktionen verfügbar und unterstützt das registrieren und lauschen auf Hypothese und Ausdrucks fertige Ereignisse, sodass Sie Ihrem Benutzer Feedback geben können, während Sie sprechen und danach.The DictationRecognizer exposes dictation functionality and supports registering and listening for hypothesis and phrase completed events, so you can give feedback to your user both while they speak and afterwards. Die Methoden "Start ()" und "stoppt ()" aktivieren und deaktivieren die Diktat Erkennung.Start() and Stop() methods respectively enable and disable dictation recognition. Sobald die Erkennung erfolgt ist, sollte Sie mithilfe der verwerfen ()-Methode freigegeben werden, um die verwendeten Ressourcen freizugeben.Once done with the recognizer, it should be disposed using Dispose() method to release the resources it uses. Diese Ressourcen werden während Garbage Collection automatisch freigegeben, wenn Sie noch nicht freigegeben werden.It will release these resources automatically during garbage collection at an additional performance cost if they aren't released before that.

Für den Einstieg in das Diktat müssen nur wenige Schritte ausgeführt werden:There are only a few steps needed to get started with dictation:

  1. Erstellen eines neuen "diktationerkenzer"Create a new DictationRecognizer
  2. Behandeln von Diktat EreignissenHandle Dictation events
  3. "Diktationerkenzer" startenStart the DictationRecognizer

Aktivieren der Funktion für das DiktatEnabling the capability for dictation

Die Funktion "Internet Client" muss zusammen mit der oben erwähnten Funktion "Mikrofon" deklariert werden, damit eine Anwendung die Diktat Funktion nutzt.The "Internet Client" capability, along with the "Microphone" capability mentioned above, must be declared for an app to leverage dictation.

  1. Navigieren Sie im Unity-Editor zu den Player Einstellungen, indem Sie zur Seite "> Projekteinstellungen bearbeiten > Player" navigieren.In the Unity Editor, go to the player settings by navigating to "Edit > Project Settings > Player" page
  2. Wählen Sie auf der Registerkarte "Windows Store" aus.Select on the "Windows Store" tab
  3. Überprüfen Sie im Abschnitt "Veröffentlichungs Einstellungen > Funktionen" die Funktion " Internetclient ".In the "Publishing Settings > Capabilities" section, check the InternetClient capability

DiktationerkenzerDictationRecognizer

Erstellen Sie einen "diktationerkenzer" wie folgt:Create a DictationRecognizer like so:

dictationRecognizer = new DictationRecognizer();

Es gibt vier Diktat Ereignisse, die abonniert und behandelt werden können, um das Diktat Verhalten zu implementieren.There are four dictation events that can be subscribed to and handled to implement dictation behavior.

  1. "Ditationresult"DictationResult
  2. "Ditationcomplete"DictationComplete
  3. "Ditationhypothese"DictationHypothesis
  4. "Ditationerror"DictationError

"Ditationresult"DictationResult

Dieses Ereignis wird ausgelöst, nachdem der Benutzer angehalten wurde, in der Regel am Ende eines Satzes.This event is fired after the user pauses, typically at the end of a sentence. Hier wird die vollständig erkannte Zeichenfolge zurückgegeben.The full recognized string is returned here.

Abonnieren Sie zunächst das Ereignis "" für das ""-Ereignis:First, subscribe to the DictationResult event:

dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;

Behandeln Sie dann den "-Rückruf":Then handle the DictationResult callback:

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

"Ditationhypothese"DictationHypothesis

Dieses Ereignis wird fortlaufend ausgelöst, während der Benutzer spricht.This event is fired continuously while the user is talking. Wie die Erkennung hört, bietet Sie Text zu den bisher gehörenden.As the recognizer listens, it provides text of what it's heard so far.

Abonnieren Sie zunächst das Ereignis "ditationhypothese":First, subscribe to the DictationHypothesis event:

dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;

Behandeln Sie dann den-Rückruf von "ditationhypothese":Then handle the DictationHypothesis callback:

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

"Ditationcomplete"DictationComplete

Dieses Ereignis wird ausgelöst, wenn die Erkennung angehalten wird, und zwar unabhängig davon, ob von "Stopp ()" aufgerufen wird, ein Timeout auftritt oder ein anderer Fehler vorliegt.This event is fired when the recognizer stops, whether from Stop() being called, a timeout occurring, or some other error.

Abonnieren Sie zunächst das Ereignis "" für das Ereignis "".First, subscribe to the DictationComplete event:

dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;

Behandeln Sie dann den-Rückruf von "ditationcomplete":Then handle the DictationComplete callback:

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

"Ditationerror"DictationError

Dieses Ereignis wird ausgelöst, wenn ein Fehler auftritt.This event is fired when an error occurs.

Abonnieren Sie zunächst das Ereignis "" für "" "".First, subscribe to the DictationError event:

dictationRecognizer.DictationError += DictationRecognizer_DictationError;

Behandeln Sie dann den "-Rückruf"-Rückruf:Then handle the DictationError callback:

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

Nachdem Sie die Diktat Ereignisse abonniert und behandelt haben, die Ihnen wichtig sind, starten Sie die Diktat Erkennung, um mit dem empfangen von Ereignissen zu beginnen.Once you've subscribed and handled the dictation events that you care about, start the dictation recognizer to begin receiving events.

dictationRecognizer.Start();

Wenn Sie die "diktationerkenzer" nicht mehr benötigen, müssen Sie die Ereignisse kündigen und den "diktationerkenzer" verwerfen.If you no longer want to keep the DictationRecognizer around, you need to unsubscribe from the events and Dispose the DictationRecognizer.

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

TippsTips

  • Die Methoden "Start ()" und "stoppt ()" aktivieren und deaktivieren die Diktat Erkennung.Start() and Stop() methods respectively enable and disable dictation recognition.
  • Sobald die Erkennung erfolgt ist, muss Sie mithilfe der Methode "verwerfen ()" freigegeben werden, um die verwendeten Ressourcen freizugeben.Once done with the recognizer, it must be disposed using Dispose() method to release the resources it uses. Diese Ressourcen werden während Garbage Collection automatisch freigegeben, wenn Sie noch nicht freigegeben werden.It will release these resources automatically during garbage collection at an additional performance cost if they aren't released before that.
  • Timeouts treten nach einer festgelegten Zeitspanne auf.Timeouts occur after a set period of time. Sie können diese Timeouts im Ereignis "ditationcomplete" überprüfen.You can check for these timeouts in the DictationComplete event. Es gibt zwei Timeouts, die Sie beachten sollten:There are two timeouts to be aware of:
    1. Wenn die Erkennung gestartet wird und in den ersten fünf Sekunden keine Audiodaten mehr angezeigt werden, tritt ein Timeout auf.If the recognizer starts and doesn't hear any audio for the first five seconds, it will time out.
    2. Wenn die Erkennung ein Ergebnis erhalten hat, aber dann 20 Sekunden lang Stillen wird, tritt ein Timeout auf.If the recognizer has given a result, but then hears silence for 20 seconds, it will time out.

Verwenden der Ausdrucks Erkennung und-diktierungUsing both Phrase Recognition and Dictation

Wenn Sie in Ihrer APP sowohl die Erkennung als auch das Diktat von Ausdrücken verwenden möchten, müssen Sie eine vollständige Herunterfahren, bevor Sie die andere starten können.If you want to use both phrase recognition and dictation in your app, you'll need to fully shut one down before you can start the other. Wenn mehrere keywordrecognizers ausgeführt werden, können Sie Sie mit folgenden Aktionen gleichzeitig Herunterfahren:If you have multiple KeywordRecognizers running, you can shut them all down at once with:

PhraseRecognitionSystem.Shutdown();

Wenn Sie alle erkenners in Ihrem vorherigen Zustand wiederherstellen möchten, können Sie nach dem Beenden von "diktationerkenzer" Folgendes aufzurufen:In order to restore all recognizers to their previous state, after the DictationRecognizer has stopped, you can call:

PhraseRecognitionSystem.Restart();

Sie können auch einfach einen keywordrecognizer starten, mit dem auch das phraserecognitionsystem neu gestartet wird.You could also just start a KeywordRecognizer, which will restart the PhraseRecognitionSystem as well.

Verwenden des Mikrofon-HilfsprogrammsUsing the microphone helper

Das Mixed Reality Toolkit auf GitHub enthält eine Mikrofon-Hilfsklasse, mit der Entwickler darauf hinweisen können, ob im System ein brauchbares Mikrofon vorhanden ist.The Mixed Reality Toolkit on GitHub contains a microphone helper class to hint at developers if there's a usable microphone on the system. Eine Verwendung hierfür ist, wo Sie überprüfen möchten, ob ein Mikrofon auf dem System vorhanden ist, bevor Sie die sprach Interaktions Hinweise in der Anwendung darstellen.One use for it's where one would want to check if there's microphone on system before showing any speech interaction hints in the application.

Das Mikrofon-Hilfsobjekt befindet sich im Ordner Input/Scripts/Utilities.The microphone helper script can be found in the Input/Scripts/Utilities folder. Das GitHub-Repository enthält auch ein kleines Beispiel , das zeigt, wie das Hilfsprogramm verwendet werden kann.The GitHub repo also contains a small sample demonstrating how to use the helper.

Spracheingabe im Mixed Reality ToolkitVoice input in Mixed Reality Toolkit

Die Beispiele für die Spracheingabe finden Sie in dieser Szene.You can find the examples of the voice input in this scene.

Nächster EntwicklungsprüfpunktNext Development Checkpoint

Wenn Sie der Unity-Entwicklungs Prüf Punkt Journey folgen, haben wir die nächste Aufgabe darin, die Funktionen und APIs der Mixed Reality-Plattform zu untersuchen:If you're following the Unity development checkpoint journey we've laid out, you're next task is exploring the Mixed Reality platform capabilities and APIs:

Sie können jederzeit zu den Prüfpunkten für die Unity-Entwicklung zurückkehren.You can always go back to the Unity development checkpoints at any time.