Compartir a través de


Entrada de voz en Unity

Precaución

Antes de empezar, considere la posibilidad de usar el complemento unity para el SDK de Cognitive Speech Services. El complemento tiene mejores resultados de precisión de voz y fácil acceso a la descodificación de voz a texto, así como características avanzadas de voz, como diálogo, interacción basada en intenciones, traducción, síntesis de texto a voz y reconocimiento de voz en lenguaje natural. Para empezar, consulte el ejemplo y la documentación.

Unity expone tres maneras de agregar entrada de voz a la aplicación de Unity, las dos primeras de las cuales son tipos de PhraseRecognizer:

  • KeywordRecognizer Proporciona a la aplicación una matriz de comandos de cadena para escuchar
  • GrammarRecognizer proporciona a la aplicación un archivo SRGS que define una gramática específica para escuchar
  • DictationRecognizer permite que la aplicación escuche cualquier palabra y proporcione al usuario una nota u otra presentación de su voz.

Nota:

El dictado y el reconocimiento de frases no se pueden controlar al mismo tiempo. Si un GrammarRecognizer o KeywordRecognizer está activo, un DictationRecognizer no puede estar activo y viceversa.

Habilitación de la funcionalidad para Voz

La funcionalidad Micrófono debe declararse para que una aplicación use la entrada de voz.

  1. En el Editor de Unity, vaya a Editar > reproductor de configuración del > proyecto.
  2. Seleccione la pestaña Tienda Windows.
  3. En la sección Funcionalidades de configuración > de publicación, compruebe la funcionalidad Micrófono.
  4. Concesión de permisos a la aplicación para el acceso al micrófono en el dispositivo HoloLens
    • Se le pedirá que lo haga en el inicio del dispositivo, pero si ha hecho clic accidentalmente en "no", puede cambiar los permisos en la configuración del dispositivo.

Reconocimiento de frases

Para permitir que la aplicación escuche frases específicas habladas por el usuario, realice alguna acción, debe hacer lo siguiente:

  1. Especificar las frases que se van a escuchar mediante o KeywordRecognizerGrammarRecognizer
  2. Controlar el OnPhraseRecognized evento y tomar medidas correspondientes a la frase reconocida

KeywordRecognizer

Espacio de nombres: UnityEngine.Windows.Speech
Tipos: KeywordRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus

Necesitaremos algunas instrucciones using para guardar algunas pulsaciones de tecla:

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

A continuación, vamos a agregar algunos campos a la clase para almacenar el diccionario recognizer y keyword-action>:

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

Ahora agregue una palabra clave al diccionario, por ejemplo, en un Start() método . Vamos a agregar la palabra clave "activate" en este ejemplo:

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

Cree el reconocedor de palabras clave y dile lo que queremos reconocer:

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

Ahora regístrese para el OnPhraseRecognized evento

keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;

Un controlador de ejemplo es:

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

Por último, empiece a reconocer!

keywordRecognizer.Start();

GrammarRecognizer

Espacio de nombres: UnityEngine.Windows.Speech
Tipos: GrammarRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus

GrammarRecognizer se usa si se especifica la gramática de reconocimiento mediante SRGS. Esto puede ser útil si la aplicación tiene más de unas pocas palabras clave, si quieres reconocer frases más complejas, o si quieres activar y desactivar fácilmente conjuntos de comandos. Vea: Crear gramáticas mediante SRGS XML para obtener información sobre el formato de archivo.

Una vez que tenga la gramática de SRGS y se encuentra en el proyecto en una carpeta StreamingAssets:

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

Cree y GrammarRecognizer páselo la ruta de acceso al archivo SRGS:

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

Ahora regístrese para el OnPhraseRecognized evento

grammarRecognizer.OnPhraseRecognized += grammarRecognizer_OnPhraseRecognized;

Obtendrá una devolución de llamada que contiene información especificada en la gramática de SRGS, que puede controlar correctamente. La mayoría de la información importante se proporcionará en la semanticMeanings matriz.

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

Por último, empiece a reconocer!

grammarRecognizer.Start();

Dictado

Espacio de nombres: UnityEngine.Windows.Speech
Tipos: DictationRecognizer, SpeechError, SpeechSystemStatus

DictationRecognizer Use para convertir la voz del usuario en texto. DictationRecognizer expone la funcionalidad de dictado y admite el registro y la escucha de eventos completados de hipótesis y frases, por lo que puede enviar comentarios al usuario mientras habla y después. Start() y los métodos respectivamente habilitan y Stop() deshabilitan el reconocimiento de dictado. Una vez hecho con el reconocedor, se debe eliminar mediante Dispose() para liberar los recursos que usa. Liberará estos recursos automáticamente durante la recolección de elementos no utilizados con un costo de rendimiento adicional si no se liberan antes de eso.

Solo hay algunos pasos necesarios para empezar a trabajar con el dictado:

  1. Crear un nuevo DictationRecognizer
  2. Controlar eventos de dictado
  3. Iniciar el dictadoRecognizer

Habilitación de la funcionalidad para dictado

Las funcionalidades cliente y micrófono de Internet deben declararse para que una aplicación use dictado:

  1. En el Editor de Unity, vaya a Editar > reproductor de configuración del > proyecto.
  2. Seleccione en la pestaña Tienda Windows.
  3. En la sección Funcionalidades de configuración > de publicación, compruebe la funcionalidad InternetClient.
    • Opcionalmente, si aún no habilitó el micrófono, compruebe la funcionalidad Micrófono .
  4. Concesión de permisos a la aplicación para el acceso al micrófono en el dispositivo HoloLens si aún no lo ha hecho
    • Se le pedirá que lo haga en el inicio del dispositivo, pero si ha hecho clic accidentalmente en "no", puede cambiar los permisos en la configuración del dispositivo.

DictadoRecognizer

Cree un dictationRecognizer de la siguiente manera:

dictationRecognizer = new DictationRecognizer();

Hay cuatro eventos de dictado a los que se puede suscribir y controlar para implementar el comportamiento de dictado.

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

DictadoResult

Este evento se desencadena después de que el usuario se detenga, normalmente al final de una oración. Aquí se devuelve la cadena reconocida completa.

En primer lugar, suscríbase al DictationResult evento:

dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;

A continuación, controle la devolución de llamada DictationResult:

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

DictationHypothesis

Este evento se desencadena continuamente mientras el usuario habla. A medida que escucha el reconocedor, proporciona texto de lo que se escucha hasta ahora.

En primer lugar, suscríbase al DictationHypothesis evento:

dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;

A continuación, controle la devolución de llamada dictationHypothesis:

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

DictationComplete

Este evento se desencadena cuando el reconocedor se detiene, tanto si se llama a Stop(), se produce un tiempo de espera o algún otro error.

En primer lugar, suscríbase al DictationComplete evento:

dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;

A continuación, controle la devolución de llamada dictationComplete:

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

DictationError

Este evento se desencadena cuando se produce un error.

En primer lugar, suscríbase al DictationError evento:

dictationRecognizer.DictationError += DictationRecognizer_DictationError;

A continuación, controle la devolución de llamada DictationError:

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

Una vez que se haya suscrito y controlado los eventos de dictado que le interesan, inicie el reconocedor de dictado para empezar a recibir eventos.

dictationRecognizer.Start();

Si ya no desea mantener el DictadoRecognizer alrededor, debe cancelar la suscripción de los eventos y Eliminar el DictadoRecognizer.

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

Sugerencias

  • Start() y los métodos respectivamente habilitan y Stop() deshabilitan el reconocimiento de dictado.
  • Una vez hecho con el reconocedor, se debe eliminar mediante Dispose() para liberar los recursos que usa. Liberará estos recursos automáticamente durante la recolección de elementos no utilizados con un costo de rendimiento adicional si no se liberan antes de eso.
  • Los tiempos de espera se producen después de un período de tiempo establecido. Puede comprobar si hay estos tiempos de espera en el DictationComplete evento. Hay dos tiempos de espera que tenga en cuenta:
    1. Si el reconocedor se inicia y no escucha ningún audio durante los primeros cinco segundos, se agotará el tiempo de espera.
    2. Si el reconocedor ha dado un resultado, pero luego escucha silencio durante 20 segundos, se agotará el tiempo de espera.

Usar el reconocimiento de frases y el dictado

Si quieres usar el reconocimiento de frases y el dictado en la aplicación, tendrás que apagarlo completamente antes de poder iniciar el otro. Si tiene varios keywordRecognizers en ejecución, puede apagarlos todos a la vez con:

PhraseRecognitionSystem.Shutdown();

Puede llamar Restart() a para restaurar todos los reconocedores a su estado anterior después de que el DictationRecognizer se haya detenido:

PhraseRecognitionSystem.Restart();

También puede iniciar un KeywordRecognizer, que también reiniciará PhraseRecognitionSystem.

Entrada de voz en Mixed Reality Toolkit

Puede encontrar ejemplos de MRTK para la entrada de voz en las siguientes escenas de demostración:

Siguiente punto de control de desarrollo

Si sigue el recorrido del punto de control de desarrollo de Unity que hemos diseñado, la siguiente tarea es explorar las funcionalidades y las API de la plataforma de Mixed Reality:

Puede volver a los puntos de control de desarrollo de Unity en cualquier momento.