Spracheingabe in Unity

Achtung

Bevor Sie beginnen, sollten Sie das Unity-Plug-In für das Cognitive Speech Services SDK verwenden. Das Plug-In bietet bessere Ergebnisse der Sprachgenauigkeit und einfachen Zugriff auf die Spracherkennungsdecodierung sowie erweiterte Sprachfunktionen wie Dialog, absichtsbasierte Interaktion, Übersetzung, Text-zu-Sprache-Synthese und Spracherkennung in natürlicher Sprache. Sehen Sie sich das Beispiel und die Dokumentation an, um zu beginnen.

Unity macht drei Möglichkeiten zum Hinzufügen von Spracheingaben zu Ihrer Unity-Anwendung verfügbar, von denen die ersten zwei Typen von PhraseRecognizer sind:

  • stellt KeywordRecognizer Ihrer App ein Array von Zeichenfolgenbefehlen zur Lauschen zur Auswahl.
  • Der GrammarRecognizer gibt Ihrer App eine SRGS-Datei, die eine bestimmte Grammatik definiert, auf die sie lauschen soll.
  • Mit dem kann Ihre App auf ein beliebiges Wort lauschen und dem Benutzer eine Notiz oder eine andere DictationRecognizer Anzeige seiner Sprache bereitstellen.

Hinweis

Diktat- und Ausdruckserkennung können nicht gleichzeitig behandelt werden. Wenn ein GrammarRecognizer oder KeywordRecognizer aktiv ist, kann ein DictationRecognizer nicht aktiv sein und umgekehrt.

Aktivieren der Funktion für Voice

Die Mikrofonfunktion muss deklariert werden, damit eine App spracheingaben kann.

  1. Navigieren Sie im Unity-Editor zu Bearbeiten Project Einstellungen > Player.
  2. Wählen Sie die Windows Store aus.
  3. Überprüfen Sie im Abschnitt Einstellungen Funktionen für Veröffentlichungsfunktionen die Funktion Mikrofon.
  4. Erteilen von Berechtigungen für die App für den Mikrofonzugriff auf HoloLens Gerät
    • Sie werden beim Starten des Geräts dazu aufgefordert, aber wenn Sie versehentlich auf "Nein" geklickt haben, können Sie die Berechtigungen in den Geräteeinstellungen ändern.

Ausdruckserkennung

Damit Ihre App auf bestimmte Ausdrücke lauschen kann, die vom Benutzer gesprochen werden, und dann eine Aktion ergreifen kann, müssen Sie:

  1. Geben Sie an, auf welche Ausdrücke mithilfe von oder lauschen KeywordRecognizer soll. GrammarRecognizer
  2. Behandeln des OnPhraseRecognized Ereignisses und Ergreifen von Aktionen entsprechend dem erkannten Ausdruck

KeywordRecognizer

Namespace:UnityEngine.Windows. Rede
Typen:KeywordRecognizer,PhraseRecognizedEventArgs,SpeechError,SpeechSystemStatus

Wir benötigen einige using-Anweisungen, um einige Tastatureingaben zu speichern:

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

Fügen Sie ihrer Klasse dann einige Felder hinzu, um das Wörterbuch für die Recognizer- und Schlüsselwortaktion > zu speichern:

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. Wir fügen das Schlüsselwort "activate" in diesem Beispiel hinzu:

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

Erstellen Sie die Schlüsselwortsuche, und teilen Sie ihr mit, was wir erkennen möchten:

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

Registrieren Sie sich jetzt für das OnPhraseRecognized Ereignis.

keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;

Ein Beispielhandler ist:

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!

keywordRecognizer.Start();

GrammarRecognizer

Namespace:UnityEngine.Windows. Rede
Typen:GrammarRecognizer,PhraseRecognizedEventArgs,SpeechError,SpeechSystemStatus

Der GrammarRecognizer wird verwendet, wenn Sie Ihre Erkennungsgrammatik mithilfe von SRGS angeben. Dies kann nützlich sein, wenn Ihre App über mehr als nur einige Schlüsselwörter verfügt, wenn Sie komplexere Ausdrücke erkennen möchten oder wenn Sie befehlssätze einfach aktivieren und deaktivieren möchten. Informationen zum Dateiformat finden Sie unter Erstellen von Grammatiken mit SRGS XML.

Sobald Sie über ihre SRGS-Grammatik verfügen, befindet sie sich in Ihrem Projekt in einem StreamingAssets-Ordner:

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

Erstellen Sie einen GrammarRecognizer , und übergeben Sie ihn als Pfad zu Ihrer SRGS-Datei:

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

Registrieren Sie sich jetzt für das OnPhraseRecognized Ereignis.

grammarRecognizer.OnPhraseRecognized += grammarRecognizer_OnPhraseRecognized;

Sie erhalten einen Rückruf mit Informationen, die in Ihrer SRGS-Grammatik angegeben sind, die Sie entsprechend verarbeiten können. Die meisten wichtigen Informationen werden im Array semanticMeanings bereitgestellt.

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

Beginnen Sie schließlich mit der Erkennung!

grammarRecognizer.Start();

Diktieren

Namespace:UnityEngine.Windows. Rede
Typen:DictationRecognizer,SpeechError,SpeechSystemStatus

Verwenden Sie DictationRecognizer , um die Sprache des Benutzers in Text zu konvertieren. Der DictationRecognizer macht Diktatfunktionen verfügbar und unterstützt das Registrieren und Lauschen auf Hypothesen- und Ausdrucksbeendigungsereignisse, sodass Sie Ihrem Benutzer sowohl während als auch danach Feedback geben können. Start() die Stop() -Methode und die -Methode aktivieren bzw. deaktivieren die Diktaterkennung. Sobald sie mit der -Erkannten fertig ist, sollte sie mit freigegeben werden, Dispose() um die von ihr verwendeten Ressourcen frei zu geben. Diese Ressourcen werden während der Garbage Collection automatisch mit zusätzlichen Leistungskosten freigegeben, wenn sie vorher nicht freigegeben werden.

Es sind nur einige Schritte erforderlich, um mit dem Diktat zu beginnen:

  1. Erstellen einer neuen DictationRecognizer
  2. Behandeln von Diktatereignissen
  3. Starten des DictationRecognizer

Aktivieren der Funktion zum Diktat

Die Internetclient- und Mikrofonfunktionen müssen deklariert werden, damit eine App Diktat verwenden kann:

  1. Wechseln Sie im Unity-Editor zu Bearbeiten Project Einstellungen > Player.
  2. Wählen Sie auf der Registerkarte Windows Store aus.
  3. Überprüfen Sie im Abschnitt Einstellungen Funktionen des Veröffentlichungsportals die Funktion InternetClient.
    • Wenn Sie das Mikrofon noch nicht aktiviert haben, aktivieren Sie optional die Funktion Mikrofon.
  4. Erteilen Sie der App Berechtigungen für den Mikrofonzugriff auf Ihrem HoloLens Gerät, sofern noch nicht vorhanden.
    • Sie werden beim Starten des Geräts dazu aufgefordert, aber wenn Sie versehentlich auf "Nein" geklickt haben, können Sie die Berechtigungen in den Geräteeinstellungen ändern.

DictationRecognizer

Erstellen Sie einen DictationRecognizer wie hier:

dictationRecognizer = new DictationRecognizer();

Es gibt vier Diktatereignisse, die abonniert und verarbeitet werden können, um das Diktatverhalten zu implementieren.

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

DictationResult

Dieses Ereignis wird ausgelöst, nachdem der Benutzer angehalten wurde, in der Regel am Ende eines Satzes. Die vollständige erkannte Zeichenfolge wird hier zurückgegeben.

Abonnieren Sie zunächst das DictationResult Ereignis:

dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;

Behandeln Sie dann den DictationResult-Rückruf:

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

DictationHypothesis

Dieses Ereignis wird kontinuierlich ausgelöst, während der Benutzer spricht. Während die Erkennende lausiert, stellt sie Text für das, was sie bisher gehört hat, zurEntspricht.

Abonnieren Sie zunächst das DictationHypothesis Ereignis:

dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;

Behandeln Sie dann den DictationHypothesis-Rückruf:

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

DictationComplete

Dieses Ereignis wird ausgelöst, wenn die Erkennende beendet wird, unabhängig davon, ob von Stop() aufgerufen wird, ein Timeout auftritt oder ein anderer Fehler auftritt.

Abonnieren Sie zunächst das DictationComplete Ereignis:

dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;

Behandeln Sie dann den DictationComplete-Rückruf:

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

DictationError

Dieses Ereignis wird ausgelöst, wenn ein Fehler auftritt.

Abonnieren Sie zunächst das DictationError Ereignis:

dictationRecognizer.DictationError += DictationRecognizer_DictationError;

Behandeln Sie dann den DictationError-Rückruf:

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

Nachdem Sie die Diktatereignisse abonniert und behandelt haben, für die Sie sich sorgen, starten Sie die Diktat-Erkennen, um mit dem Empfang von Ereignissen zu beginnen.

dictationRecognizer.Start();

Wenn Sie den DictationRecognizer nicht mehr verwenden möchten, müssen Sie das Abonnement der Ereignisse kündigen und den DictationRecognizer verwerten.

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

Tipps

  • Start() die Stop() -Methode und die -Methode aktivieren bzw. deaktivieren die Diktaterkennung.
  • Sobald sie mit der -Erkannten fertig ist, muss sie mit freigegeben werden, Dispose() um die von ihr verwendeten Ressourcen frei zu geben. Diese Ressourcen werden während der Garbage Collection automatisch mit zusätzlichen Leistungskosten freigegeben, wenn sie vorher nicht freigegeben werden.
  • Timeouts treten nach einem festgelegten Zeitraum auf. Sie können diese Timeouts im Ereignis DictationComplete überprüfen. Es gibt zwei Timeouts, die Sie beachten sollten:
    1. Wenn die Erkannten gestartet werden und in den ersten fünf Sekunden keine Audiodaten hören, kommt es zu einem Time out.
    2. Wenn die Erkennung ein Ergebnis erhalten hat, aber dann 20 Sekunden still wird, tritt ein Time out auf.

Verwenden von Ausdruckserkennung und Diktat

Wenn Sie in Ihrer App sowohl Ausdruckserkennung als auch Diktat verwenden möchten, müssen Sie eines vollständig herunterfahren, bevor Sie den anderen starten können. Wenn mehrere KeywordRecognizer ausgeführt werden, können Sie sie alle gleichzeitig mit herunterfahren:

PhraseRecognitionSystem.Shutdown();

Sie können Restart() aufrufen, um alle Erkennungen in ihrem vorherigen Zustand wiederherzustellen, nachdem DictationRecognizer beendet wurde:

PhraseRecognitionSystem.Restart();

Sie können auch einfach einen KeywordRecognizer starten, der auch das PhraseRecognitionSystem neu startet.

Spracheingabe im Mixed Reality Toolkit

MRTK-Beispiele für die Spracheingabe finden Sie in den folgenden Demoszenen:

Nächster Entwicklungsprüfpunkt

Wenn Sie die von uns festgelegte Unity-Entwicklungsprüfpunkt-Journey verfolgen, untersuchen Sie als Nächstes die Mixed Reality Plattformfunktionen und APIs:

Sie können jederzeit zu den Prüfpunkten für die Unity-Entwicklung zurückkehren.