Compartir a través de


Entrada de voz en Unity

Precaución

Antes de empezar, considere la posibilidad de usar el complemento de 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 intención, traducción, síntesis de texto a voz y reconocimiento de voz de 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 son tipos de PhraseRecognizer:

  • KeywordRecognizer proporciona a la aplicación una matriz de comandos de cadena para escuchar
  • proporciona GrammarRecognizer 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 > el 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 haga esto en el inicio del dispositivo, pero si accidentalmente hace clic 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 pronunciadas por el usuario y, a continuación, realice alguna acción, debe hacer lo siguiente:

  1. Especificar qué frases se van a escuchar mediante o KeywordRecognizerGrammarRecognizer
  2. Controlar el OnPhraseRecognized evento y realizar acciones correspondientes a la frase reconocida

KeywordRecognizer

Espacio de nombres:UnityEngine.Windows.Speech
Types: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 reconocedor y el diccionario 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 dígale lo que queremos reconocer:

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

Ahora regístrese para el evento.OnPhraseRecognized

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, ¡empieza a reconocer!

keywordRecognizer.Start();

GrammarRecognizer

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

GrammarRecognizer se usa si 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: Creación de gramáticas mediante XML de SRGS para obtener información sobre el formato de archivo.

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

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

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

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

Ahora regístrese para el evento.OnPhraseRecognized

grammarRecognizer.OnPhraseRecognized += grammarRecognizer_OnPhraseRecognized;

Obtendrá una devolución de llamada que contiene la información especificada en la gramática de SRGS, que puede controlar correctamente. La mayor parte 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, ¡empieza a reconocer!

grammarRecognizer.Start();

Dictado

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

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

Solo se necesitan algunos pasos para empezar a usar el dictado:

  1. Creación de un nuevo DictationRecognizer
  2. Controlar eventos de dictado
  3. Iniciar DictationRecognizer

Habilitación de la funcionalidad para el dictado

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

  1. En la Editor de Unity, vaya a Editar > el 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 ha habilitado el micrófono, compruebe la funcionalidad Micrófono .
  4. Conceder 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 haga esto en el inicio del dispositivo, pero si accidentalmente hace clic en "no", puede cambiar los permisos en la configuración del dispositivo.

DictationRecognizer

Cree un DictationRecognizer de la siguiente manera:

dictationRecognizer = new DictationRecognizer();

Hay cuatro eventos de dictado que se pueden suscribir y controlar para implementar el comportamiento de dictado.

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

DictationResult

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

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 está hablando. A medida que el reconocedor escucha, proporciona texto de lo que se ha escuchado 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 se detiene el reconocedor, ya sea desde Stop() al que se llama, si 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 quiere mantener el DictadorRecognizer, debe cancelar la suscripción a los eventos y eliminar dictationRecognizer.

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

Sugerencias

  • Start() y Stop() los métodos habilitan y deshabilitan respectivamente el reconocimiento de dictado.
  • Una vez hecho con el reconocedor, debe eliminarse mediante Dispose() para liberar los recursos que usa. Liberará estos recursos automáticamente durante la recolección de elementos no utilizados a 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 estos tiempos de espera en el DictationComplete evento. Hay dos tiempos de espera que debe tener 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 escucha silencio durante 20 segundos, se agotará el tiempo de espera.

Usar el reconocimiento de frases y el dictado

Si quieres usar tanto el reconocimiento de frases como el dictado en la aplicación, tendrás que apagar completamente una para poder iniciar la otra. 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 se haya detenido DictationRecognizer:

PhraseRecognitionSystem.Restart();

También podría iniciar keywordRecognizer, que reiniciará phraseRecognitionSystem también.

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 comprobación de desarrollo

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

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