Share via


So wird’s gemacht: Definieren von benutzerdefinierten Erkennungseinschränkungen (HTML)

[ Dieser Artikel richtet sich an Windows 8.x- und Windows Phone 8.x-Entwickler, die Windows-Runtime-Apps schreiben. Wenn Sie für Windows 10 entwickeln, finden Sie weitere Informationen unter neueste Dokumentation]

Erfahren Sie hier, wie Sie benutzerdefinierte Einschränkungen für die Spracherkennung definieren und verwenden.

Hinweis  Sprachbefehle und Spracherkennung werden von Windows Store-Apps in Windows 8 und Windows 8.1 nicht unterstützt.

 

Die Spracherkennung benötigt mindestens eine Einschränkung, um das erkennbare Vokabular zu definieren. Wenn Sie keine Einschränkung angeben, wird die vordefinierte Diktiergrammatik von Universal Windows-Apps verwendet. Weitere Informationen finden Sie unter Schnellstart: Spracherkennung.

Wissenswertes

Technologien

Voraussetzungen

Dieses Thema baut auf dem Thema Schnellstart: Spracherkennung auf.

Lesen Sie zum Abschließen dieses Lernprogramms die Informationen in diesen Themen, um sich mit den hier erläuterten Technologien vertraut zu machen:

Anweisungen

Schritt 1: Hinzufügen von Einschränkungen

Verwenden Sie die SpeechRecognizer.Constraints-Eigenschaft, um Einschränkungen für die Spracherkennung hinzuzufügen.

Im Folgenden behandeln wir die drei Arten der Spracherkennungseinschränkungen, die in einer App verwendet werden. (Informationen zu Einschränkungen für Sprachbefehle finden Sie unter Schnellstart: Sprachbefehle.)

Jedes Spracherkennungsmodul kann über eine Einschränkungssammlung verfügen. Nur die folgenden Einschränkungskombinationen sind gültig:

  • Eine Einschränkung zu einem Thema oder vordefinierte Grammatik (Diktat oder Websuche). Es sind keine anderen Einschränkungen zulässig.
  • Eine Kombination aus Listeneinschränkungen und/oder Grammatikdatei-Einschränkungen.

Nicht vergessen: Rufen Sie die SpeechRecognizer.CompileConstraintsAsync-Methode auf, um die Einschränkungen zu kompilieren, bevor Sie den Erkennungsprozess starten.

Schritt 2: Angeben einer Grammatik für die Websuche (SpeechRecognitionTopicConstraint)

Themeneinschränkungen (Diktier- oder Websuchengrammatik) müssen der Einschränkungssammlung eines Spracherkennungsmoduls hinzugefügt werden.

Hier fügen wir der Einschränkungssammlung eine Grammatik für die Websuche hinzu.

function buttonSpeechRecognizerWebSearchClick() {
    // Create an instance of SpeechRecognizer.
    var speechRecognizer =
      new Windows.Media.SpeechRecognition.SpeechRecognizer();

    // Add a web search grammar to the recognizer.
    var webSearchGrammar =
        new Windows.Media.SpeechRecognition.SpeechRecognitionTopicConstraint(
        Windows.Media.SpeechRecognition.SpeechRecognitionScenario.WebSearch,
        "webSearch");

    speechRecognizer.uiOptions.audiblePrompt = "Say what you want to search for...";
    speechRecognizer.uiOptions.exampleText = "Ex. 'weather for London'";
    speechRecognizer.constraints.append(webSearchGrammar);

    // Compile the default dictation grammar.
    speechRecognizer.compileConstraintsAsync().done(
      // Success function.
      function (result) {
          // Start recognition.
          speechRecognizer.recognizeWithUIAsync().done(
            // Success function.
            function (speechRecognitionResult) {
                // Do something with the recognition result.
                var messageDialog =
                  new Windows.UI.Popups.MessageDialog(
                  speechRecognitionResult.text, "Text spoken");
                messageDialog.showAsync();
            },
            // Error function.
            function (err) {
                WinJS.log && WinJS.log("Speech recognition failed.");
            });
      },
      // Error function.
      function (err) {
          WinJS.log && WinJS.log("Constraint compilation failed.");
      });
    speechRecognizer.close();
}

Schritt 3: Angeben einer programmgesteuerten Listeneinschränkung (SpeechRecognitionListConstraint)

Listeneinschränkungen müssen der Einschränkungssammlung eines Spracherkennungsmoduls hinzugefügt werden.

Beachten Sie folgende Punkte:

  • Sie können der Einschränkungssammlung mehrere Listeneinschränkungen hinzufügen.
  • Sie können eine beliebige Sammlung verwenden, die IIterable<String> für die Zeichenfolgenwerte implementiert.

Hier geben wir programmgesteuert ein Array von Wörtern als Listeneinschränkung an und fügen es der Einschränkungssammlung eines Spracherkennungsmoduls hinzu.

function buttonSpeechRecognizerListConstraintClick() {
    // Create an instance of SpeechRecognizer.
    var speechRecognizer =
      new Windows.Media.SpeechRecognition.SpeechRecognizer();

    // You could create this array dynamically.
    var responses = ["Yes", "No"];

    // Add a web search grammar to the recognizer.
    var listConstraint =
        new Windows.Media.SpeechRecognition.SpeechRecognitionListConstraint(
        responses,
        "YesOrNo");

    speechRecognizer.uiOptions.audiblePrompt = "Say what you want to search for...";
    speechRecognizer.uiOptions.exampleText = "Ex. 'Yes', 'No'";
    speechRecognizer.constraints.append(listConstraint);

    // Compile the default dictation grammar.
    speechRecognizer.compileConstraintsAsync().done(
      // Success function.
      function (result) {
          // Start recognition.
          speechRecognizer.recognizeWithUIAsync().done(
            // Success function.
            function (speechRecognitionResult) {
                // Do something with the recognition result.
                var messageDialog =
                  new Windows.UI.Popups.MessageDialog(
                  speechRecognitionResult.text, "Text spoken");
                messageDialog.showAsync();
            },
            // Error function.
            function (err) {
                WinJS.log && WinJS.log("Speech recognition failed.");
            });
      },
      // Error function.
      function (err) {
          WinJS.log && WinJS.log("Constraint compilation failed.");
      });
    speechRecognizer.close();
}

Schritt 4: Angeben einer SRGS-(SpeechRecognitionGrammarFileConstraint-)Grammatikeinschränkung

SRGS-Grammatikdateien müssen der Einschränkungssammlung eines Spracherkennungsmoduls hinzugefügt werden.

SRGS, Version 1.0, ist die branchenübliche Markupsprache zum Erstellen von Grammatik für die Spracherkennung im XML-Format. Universelle Windows-Apps bieten über SRGS hinaus auch Alternativen zur Erstellung von Grammatik für die Spracherkennung. Sie stellen aber möglicherweise fest, dass Sie beim Erstellen von Grammatik mit SRGS die besten Ergebnisse erzielen. Dies gilt besonders für komplexere Spracherkennungsszenarien.

SRGS-Grammatik bietet einen umfassenden Featuresatz, den Sie zum Erstellen komplexer Sprachinteraktionen für Ihre Apps nutzen können. Mit SRGS haben Sie beispielsweise folgende Möglichkeiten:

  • Geben Sie die Reihenfolge an, in der Wörter und Wortgruppen gesprochen werden müssen, um erkannt zu werden.
  • Kombinieren Sie Wörter mehrerer Listen und Wortgruppen für die Erkennung.
  • Verlinken Sie zu anderen Grammatiken.
  • Weisen Sie einem alternativen Wort oder einer Wortgruppe eine Gewichtung zu, um die Wahrscheinlichkeit der Verwendung zu erhöhen oder zu verringern und für die Spracheingabe so bessere Übereinstimmungen zu erzielen.
  • Binden Sie optionale Wörter oder Wortgruppen ein.
  • Verwenden Sie spezielle Regeln zum Herausfiltern nicht angegebener oder unerwarteter Eingaben, z. B. ungewollte Spracheingaben, die keine Übereinstimmung mit der Grammatik ergeben, oder Hintergrundgeräusche.
  • Verwenden Sie Semantik, um zu definieren, was Spracherkennung für Ihre App bedeutet.
  • Geben Sie verschiedene Aussprachen an, entweder direkt in einer Grammatik oder über einen Link zu einem Lexikon.

Weitere Informationen zu SRGS-Elementen und -Attributen finden Sie unter SRGS-Grammatik – XML-Referenz. Informationen zu den ersten Schritten zur Erstellung einer SRGS-Grammatik finden Sie unter So wird's gemacht: Erstellen einer einfachen XML-Grammatik.

Beachten Sie folgende Punkte:

  • Sie können der Einschränkungssammlung mehrere Grammatikdatei-Einschränkungen hinzufügen.
  • Sie können die GRXML-Dateierweiterung für XML-basierte Grammatikdokumente verwenden, die den SRGS-Regeln entsprechen.

In diesem Beispiel wird eine SRGS-Grammatik verwendet, die in einer Datei namens „srgs.grxml“ (später beschrieben) definiert ist. In den Dateieigenschaften ist die Paketaktion auf Inhalt und In Ausgabeverzeichnis kopieren auf Immer kopieren gesetzt:

function buttonSpeechRecognizerSRGSConstraintClick() {
    // Create an instance of SpeechRecognizer.
    var speechRecognizer =
      new Windows.Media.SpeechRecognition.SpeechRecognizer();

    speechRecognizer.uiOptions.audiblePrompt = "Say what you want to search for...";
    speechRecognizer.uiOptions.exampleText = "Ex. 'yes', 'no'";

    // Add a grammar file constraint to the recognizer.
    var uri = new Windows.Foundation.Uri("ms-appx:///data/srgs.grxml");
    var storageFile =
        Windows.Storage.StorageFile.getFileFromApplicationUriAsync(uri).then(
        // Success function.
        function (srgs) {
            var grammarfileConstraint =
                new Windows.Media.SpeechRecognition.SpeechRecognitionGrammarFileConstraint(srgs, "yesorno");
            speechRecognizer.constraints.append(grammarfileConstraint);
            // Compile the default dictation grammar.
            speechRecognizer.compileConstraintsAsync().then(
              // Success function.
              function (result) {
                  // Start recognition.
                  speechRecognizer.recognizeWithUIAsync().done(
                    // Success function.
                    function (speechRecognitionResult) {
                        // Do something with the recognition result.
                        var messageDialog =
                          new Windows.UI.Popups.MessageDialog(
                          speechRecognitionResult.text, "Text spoken");
                        messageDialog.showAsync();
                    },
                    // Error function.
                    function (err) {
                        WinJS.log && WinJS.log("Speech recognition failed.");
                    });
              },
              // Error function.
              function (err) {
                  WinJS.log && WinJS.log("Constraint compilation failed.");
              });
        },
        // Error function.
        function (err) {
            WinJS.log && WinJS.log("File retrieval failed.");
        });
    speechRecognizer.close();
}

Diese SRGS-Datei (srgs.grxml) enthält Tags für die semantische Interpretation. Diese Tags liefern einen Mechanismus, mit dem übereinstimmende Grammatikdaten an Ihre App zurückgegeben werden. Die Grammatik muss der  Semantic Interpretation for Speech Recognition (SISR) 1.0-Spezifikation des World Wide Web Consortium (W3C) entsprechen.

Hier lauschen wir auf Varianten von "Ja" und "Nein".

<grammar xml:lang="en-US" 
         root="yesOrNo"
         version="1.0" 
         tag-format="semantics/1.0"
         xmlns="http://www.w3.org/2001/06/grammar">

    <!-- The following rules recognize variants of yes and no. -->
      <rule id="yesOrNo">
         <one-of>
            <item>
              <one-of>
                 <item>yes</item>
                 <item>yeah</item>
                 <item>yep</item>
                 <item>yup</item>
                 <item>un huh</item>
                 <item>yay yus</item>
              </one-of>
              <tag>out="yes";</tag>
            </item>
            <item>
              <one-of>
                 <item>no</item>
                 <item>nope</item>
                 <item>nah</item>
                 <item>uh uh</item>
               </one-of>
               <tag>out="no";</tag>
            </item>
         </one-of>
      </rule>
</grammar>

Schritt 5: Verwalten von Einschränkungen

Nachdem eine Einschränkungsauflistung für die Erkennung geladen wurde, kann Ihre App verwalten, welche Einschränkungen für Erkennungsvorgänge aktiviert sind. Dazu wird die IsEnabled-Eigenschaft einer Einschränkung auf true oder false festgelegt. Die Standardeinstellung lautet true.

Meist ist es effizienter, Einschränkungen einmal zu laden und dann bei Bedarf zu aktivieren bzw. zu deaktivieren, als Einschränkungen für jeden Erkennungsvorgang zu laden, zu entladen und zu kompilieren. Verwenden Sie nach Bedarf die IsEnabled-Eigenschaft.

Durch Begrenzung der Anzahl der Einschränkungen wird die Datenmenge verringert, die für die Spracherkennung zum Suchen nach einer Übereinstimmung für die Spracheingabe erforderlich ist. So können die Leistung und die Genauigkeit der Spracherkennung verbessert werden.

Entscheiden Sie, welche Einschränkungen aktiviert sind. Dies richtet sich nach den Wörtern, die für die App im Kontext des jeweiligen Erkennungsvorgangs zu erwarten sind. Wenn es in der App beispielsweise gerade darum geht, eine Farbe anzuzeigen, müssen Sie wahrscheinlich keine Einschränkung aktivieren, bei der die Bezeichnungen von Tieren erkannt werden.

Mit den Eigenschaften SpeechRecognizerUIOptions.AudiblePrompt und SpeechRecognizerUIOptions.ExampleText können Sie Benutzern mitteilen, was gesagt werden kann. Diese Eigenschaften werden mithilfe der SpeechRecognizer.UIOptions-Eigenschaft festgelegt. Wenn Sie Benutzer im Voraus darüber informieren, was sie bei einem Erkennungsvorgang sagen können, wird die Wahrscheinlichkeit erhöht, dass Benutzer Wörter sagen, für die sich mit einer aktiven Einschränkung eine Übereinstimmung ergibt.

Verwandte Themen

Reaktion auf Sprachinteraktionen

Designer

Richtlinien für den Sprachentwurf