Definir restricciones de reconocimiento personalizadas

Aprenda a definir y usar restricciones personalizadas para el reconocimiento de voz en la aplicación de SDK de Aplicaciones para Windows.

Importante

El reconocimiento de voz requiere la identidad del paquete MSIX. Las API Windows.Media.SpeechRecognition solo están disponibles cuando la aplicación se ejecuta con identidad de paquete (empaquetada o empaquetada con una ubicación externa). Las aplicaciones sin empaquetar no pueden usar estas API.

APIs clave

Visión general

El reconocimiento de voz requiere al menos una restricción para definir un vocabulario reconocible. Si no especifica una restricción, se usa la gramática de dictado predefinida. Consulte Reconocimiento de voz.

Use la SpeechRecognizer.Constraints propiedad para agregar restricciones a un reconocedor de voz. Hay tres tipos de restricciones disponibles:

  • SpeechRecognitionTopicConstraint : restricción basada en una gramática predefinida (dictado o búsqueda web).
  • SpeechRecognitionListConstraint : restricción basada en una lista de palabras o frases.
  • SpeechRecognitionGrammarFileConstraint : restricción definida en un archivo de especificación de gramática de reconocimiento de voz (SRGS).

Cada reconocedor de voz puede tener una colección de restricciones. Las combinaciones siguientes son válidas:

  • Una única restricción de tema (dictado o búsqueda web)
  • Una restricción de tema única combinada con una restricción de lista
  • Una combinación de restricciones de lista y/o restricciones de archivo de gramática

Importante

Llame SpeechRecognizer.CompileConstraintsAsync a para compilar las restricciones antes de iniciar el proceso de reconocimiento.

Especifica una gramática de búsqueda web (SpeechRecognitionTopicConstraint)

private async void WeatherSearch_Click(object sender, RoutedEventArgs e)
{
    var speechRecognizer = new Windows.Media.SpeechRecognition.SpeechRecognizer();

    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.Add(webSearchGrammar);

    await speechRecognizer.CompileConstraintsAsync();

    Windows.Media.SpeechRecognition.SpeechRecognitionResult result =
        await speechRecognizer.RecognizeWithUIAsync();

    resultTextBlock.Text = result.Text;
}

Especificar una restricción de lista programática (SpeechRecognitionListConstraint)

Las restricciones de lista son una manera ligera de crear gramáticas simples a partir de una lista de palabras o frases. Una restricción de lista funciona bien para reconocer frases cortas y distintas:

private async void YesOrNo_Click(object sender, RoutedEventArgs e)
{
    var speechRecognizer = new Windows.Media.SpeechRecognition.SpeechRecognizer();

    string[] responses = { "Yes", "No" };

    var listConstraint = new Windows.Media.SpeechRecognition.SpeechRecognitionListConstraint(
        responses, "yesOrNo");

    speechRecognizer.UIOptions.ExampleText = @"Ex. 'yes', 'no'";
    speechRecognizer.Constraints.Add(listConstraint);

    await speechRecognizer.CompileConstraintsAsync();

    Windows.Media.SpeechRecognition.SpeechRecognitionResult result =
        await speechRecognizer.RecognizeWithUIAsync();

    resultTextBlock.Text = result.Text;
}

Especifica una restricción de gramática SRGS (SpeechRecognitionGrammarFileConstraint)

Las gramáticas SRGS proporcionan un conjunto completo de características para una interacción de voz compleja, incluida la especificación del orden en el que se deben hablar palabras, combinar palabras de varias listas, vincular a otras gramáticas y usar la interpretación semántica:

private async void Colors_Click(object sender, RoutedEventArgs e)
{
    var speechRecognizer = new Windows.Media.SpeechRecognition.SpeechRecognizer();

    var storageFile = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(
        new Uri("ms-appx:///Colors.grxml"));
    var grammarFileConstraint =
        new Windows.Media.SpeechRecognition.SpeechRecognitionGrammarFileConstraint(
            storageFile, "colors");

    speechRecognizer.UIOptions.ExampleText = @"Ex. 'blue background', 'green text'";
    speechRecognizer.Constraints.Add(grammarFileConstraint);

    await speechRecognizer.CompileConstraintsAsync();

    Windows.Media.SpeechRecognition.SpeechRecognitionResult result =
        await speechRecognizer.RecognizeWithUIAsync();

    resultTextBlock.Text = result.Text;
}

Use la extensión de .grxml archivo para documentos gramaticales basados en XML que cumplan las reglas SRGS. Establezca la Acción de compilación del archivo en Contenido y Copiar en el directorio de salida en Copiar siempre.

Para obtener más información sobre los atributos y elementos SRGS, vea la referencia XML de gramática srGS.

Administración de restricciones

Después de cargar una colección de restricciones, puede habilitar o deshabilitar restricciones individuales estableciendo la propiedad IsEnabled en true o false. El valor predeterminado es true.

Cargar restricciones una vez y, a continuación, habilitarlas o deshabilitarlas según sea necesario es más eficaz que cargar, descargar y compilar restricciones para cada operación de reconocimiento.

Restringir el número de restricciones activas mejora tanto el rendimiento como la precisión del reconocimiento de voz. Decida qué restricciones habilitar en función de las frases que la aplicación puede esperar en el contexto actual.