Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Use el reconocimiento de voz para proporcionar entradas, especificar acciones o comandos y realizar tareas 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
- Windows.Media.SpeechRecognition
- SpeechRecognizer
- SpeechRecognitionResult
Visión general
El reconocimiento de voz consta de un entorno de ejecución de voz, api de reconocimiento para programar el tiempo de ejecución, gramáticas listas para usar para dictado y búsqueda web, y una interfaz de usuario del sistema predeterminada que ayuda a los usuarios a detectar y usar características de reconocimiento de voz.
Configuración del reconocimiento de voz
Para usar el reconocimiento de voz, el usuario debe conectar y habilitar un micrófono en su dispositivo y aceptar la Política de privacidad de Microsoft, otorgando permiso para que tu aplicación lo use.
Establezca la funcionalidad del dispositivo Micrófono en el manifiesto del paquete de la aplicación para solicitar al usuario el permiso de acceso al micrófono. Para obtener más información, consulte Declaraciones de funcionalidad de la aplicación.
Si el usuario concede acceso, tu aplicación aparece en la lista de aplicaciones aprobadas en Configuración > Privacidad > Micrófono. Dado que el usuario puede deshabilitar esta configuración en cualquier momento, confirme que la aplicación tiene acceso al micrófono antes de intentar usarla.
Si también desea admitir dictado u otros servicios de reconocimiento de voz (por ejemplo, una gramática predefinida definida en una restricción de tema), confirme que el reconocimiento de voz en línea (Configuración > de voz de privacidad>) está habilitado.
En el ejemplo siguiente se muestra cómo comprobar si hay un micrófono presente y si la aplicación tiene permiso para usarla.
public class AudioCapturePermissions
{
private static int NoCaptureDevicesHResult = -1072845856;
/// <summary>
/// Checks whether the microphone is available and the app has permission to use it.
/// Perform this check every time the app gets focus, because the user can change
/// the setting while the app is suspended or not in focus.
/// </summary>
/// <returns>True if the microphone is available.</returns>
public static async Task<bool> RequestMicrophonePermission()
{
try
{
var settings = new MediaCaptureInitializationSettings
{
StreamingCaptureMode = StreamingCaptureMode.Audio,
MediaCategory = MediaCategory.Speech
};
var capture = new MediaCapture();
await capture.InitializeAsync(settings);
}
catch (TypeLoadException)
{
// Media player components are not available.
return false;
}
catch (UnauthorizedAccessException)
{
// Permission to use the audio capture device is denied.
return false;
}
catch (Exception exception)
{
if (exception.HResult == NoCaptureDevicesHResult)
{
// No audio capture devices are present on this system.
return false;
}
throw;
}
return true;
}
}
Reconocimiento de la entrada de voz
Una restricción define las palabras y frases (vocabulario) que una aplicación reconoce en la entrada de voz. Las restricciones están en el núcleo del reconocimiento de voz y proporcionan a la aplicación un mayor control sobre la precisión del reconocimiento.
Puede usar los siguientes tipos de restricciones.
Gramáticas predefinidas
Las gramáticas predefinidas de dictado y búsqueda web proporcionan reconocimiento de voz sin necesidad de crear una gramática. Cuando se usan estas gramáticas, un servicio web remoto realiza el reconocimiento y devuelve los resultados al dispositivo.
La gramática de dictado de texto libre predeterminada reconoce la mayoría de las palabras y frases que un usuario puede decir en un idioma determinado y está optimizada para frases cortas. Si no especifica ninguna restricción para speechRecognizer, se usa la gramática de dictado predefinida.
La gramática de búsqueda web contiene un gran número de palabras y frases, optimizadas para términos que las personas suelen usar al buscar en la web.
Nota:
Los dictados predefinidos y las gramáticas de búsqueda web pueden ser grandes y, dado que están en línea (no en el dispositivo), es posible que el rendimiento no sea tan rápido como con una gramática personalizada instalada localmente.
Estas gramáticas predefinidas reconocen hasta 10 segundos de entrada de voz y no requieren ningún esfuerzo de creación. Sin embargo, requieren una conexión de red.
Consulte SpeechRecognitionTopicConstraint.
Restricciones de lista mediante programación
Las restricciones de lista mediante programación proporcionan un enfoque ligero para crear gramáticas simples mediante una lista de palabras o frases. Una restricción de lista funciona bien para reconocer frases cortas y distintas. Especificar todas las palabras de una gramática mejora la precisión del reconocimiento porque el motor de reconocimiento de voz solo necesita procesar la voz para confirmar una coincidencia. La lista también se puede actualizar mediante programación.
Consulte SpeechRecognitionListConstraint.
Gramáticas SRGS
Una gramática de la especificación de gramáticas de reconocimiento de voz (SRGS) es un documento estático que utiliza el formato XML definido en la versión 1.0 de SRGS. Una gramática SRGS le proporciona el mayor control sobre la experiencia de reconocimiento de voz al permitirle capturar varios significados semánticos en un solo reconocimiento.
Consulte SpeechRecognitionGrammarFileConstraint.
Restricciones de comandos de voz
Usa un archivo XML de definición de comandos de voz (VCD) para definir los comandos que el usuario puede decir para iniciar acciones al activar la aplicación. Consulte SpeechRecognitionVoiceCommandDefinitionConstraint.
Para empezar a trabajar con restricciones, consulte Definición de restricciones de reconocimiento personalizadas.
Ejemplo de reconocimiento básico
En el ejemplo siguiente se crea un reconocedor de voz, se compilan las restricciones de dictado predeterminadas y se inicia la escucha de la entrada de voz.
private async void StartRecognizing_Click(object sender, RoutedEventArgs e)
{
var speechRecognizer = new Windows.Media.SpeechRecognition.SpeechRecognizer();
// Compile the default dictation grammar.
await speechRecognizer.CompileConstraintsAsync();
// Start recognition.
Windows.Media.SpeechRecognition.SpeechRecognitionResult result =
await speechRecognizer.RecognizeAsync();
// Display the recognized text.
if (result.Status == Windows.Media.SpeechRecognition.SpeechRecognitionResultStatus.Success)
{
resultTextBlock.Text = result.Text;
}
}
Nota:
En este ejemplo se usa RecognizeAsync (sin interfaz de usuario). Si quiere usar la interfaz de usuario de reconocimiento integrada, llame a RecognizeWithUIAsync en su lugar. Consulte SpeechRecognizerUIOptions para ver las opciones de personalización.
Personalización de la interfaz de usuario de reconocimiento
Cuando la aplicación llama a SpeechRecognizer.RecognizeWithUIAsync, el sistema muestra varias pantallas en secuencia:
- Para gramáticas predefinidas (dictado o búsqueda en la web): Escuchando → Pensando → Te he oído decir (o error).
- Para las restricciones de lista o de SRGS: Escuchando → ¿Ha dicho...? (si es ambiguo) → He oído... (o error).
Utilice la clase SpeechRecognizerUIOptions (obtenida a través de SpeechRecognizer.UIOptions) para personalizar la pantalla de Escucha:
private async void WeatherSearch_Click(object sender, RoutedEventArgs e)
{
var speechRecognizer = new Windows.Media.SpeechRecognition.SpeechRecognizer();
speechRecognizer.RecognitionQualityDegrading += SpeechRecognizer_RecognitionQualityDegrading;
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;
}