Entrada de HoloLens (1ª generación) 212: Voz

Importante

Los tutoriales de Mixed Reality Academy se diseñaron con HoloLens (1.ª generación), Unity 2017 y Mixed Reality cascos envolventes en mente. Por lo tanto, creemos que es importante conservar estos tutoriales para los desarrolladores que sigan buscando instrucciones sobre el desarrollo para esos dispositivos. Estos tutoriales no se actualizarán con los conjuntos de herramientas o interacciones más recientes que se usan para HoloLens 2 y es posible que no sean compatibles con las versiones más recientes de Unity. Se mantendrán para que sigan funcionando en los dispositivos compatibles. Se ha publicado una nueva serie de tutoriales para HoloLens 2.

La entrada de voz nos proporciona otra manera de interactuar con nuestros hologramas. Los comandos de voz funcionan de una manera muy natural y fácil. Diseñe los comandos de voz para que sean:

  • Natural
  • Fácil de recordar
  • Contexto adecuado
  • Lo suficientemente distinto de otras opciones en el mismo contexto

En Mr Basics 101, usamos KeywordRecognizer para crear dos comandos de voz simples. En MR Input 212, profundizaremos y aprenderemos a:

  • Diseñe comandos de voz optimizados para el motor de voz de HoloLens.
  • Haga que el usuario sepa qué comandos de voz están disponibles.
  • Confirme que hemos oído el comando de voz del usuario.
  • Comprenda lo que dice el usuario mediante un reconocedor de dictado.
  • Use grammar Recognizer para escuchar comandos basados en una especificación de gramática de reconocimiento de voz o SRGS.

En este curso, volveremos a visitar el Explorador de modelos, que creamos en MR Input 210 y MR Input 211.

Importante

Los vídeos insertados en cada uno de los capítulos siguientes se grabaron con una versión anterior de Unity y el kit de herramientas de Mixed Reality. Aunque las instrucciones paso a paso son precisas y actuales, es posible que vea scripts y objetos visuales en los vídeos correspondientes obsoletos. Los vídeos permanecen incluidos para la posteridad y porque los conceptos tratados se siguen aplicando.

Compatibilidad con dispositivos

Curso HoloLens Cascos envolventes
Entrada de realidad mixta (212): Voz ✔️ ✔️

Antes de empezar

Requisitos previos

Archivos de proyecto

  • Descargue los archivos requeridos por el proyecto. Requiere Unity 2017.2 o posterior.
  • Desenarchive los archivos en su escritorio u otra ubicación fácil de llegar.

Nota

Si desea consultar el código fuente antes de descargarlo, está disponible en GitHub.

Errata y Notes

  • "Habilitar solo mi código" debe deshabilitarse (desactivada) en Visual Studio en Herramientas-Opciones-Depuración>> para alcanzar puntos de interrupción en el código.

Configuración de Unity

Instrucciones

  1. Inicie Unity.
  2. Seleccione Open (Abrir).
  3. Vaya a la carpeta HolographicAcademy-Holograms-212-Voice que ha archivado anteriormente.
  4. Busque y seleccione la carpeta Starting Model Explorer (Iniciar/ exploradorde modelos).
  5. Haga clic en el botón Seleccionar carpeta .
  6. En el panel Proyecto , expanda la carpeta Escenas .
  7. Haga doble clic en ModelExplorer scene (Escena modelExplorer ) para cargarla en Unity.

Compilación

  1. En Unity, seleccione Configuración de compilación de archivos>.
  2. Si Scenes/ModelExplorer no aparece en Escenas en compilación, haga clic en Agregar escenas abiertas para agregar la escena.
  3. Si está desarrollando específicamente para HoloLens, establezca Dispositivo de destino en HoloLens. De lo contrario, déjelo en Cualquier dispositivo.
  4. Asegúrese de que el tipo de compilación esté establecido en D3D y el SDK esté establecido en Más reciente instalado (que debe ser SDK 16299 o posterior).
  5. Haga clic en Generar.
  6. Cree una nueva carpeta denominada "App".
  7. Haga clic en la carpeta Aplicación .
  8. Presione Seleccionar carpeta y Unity comenzará a compilar el proyecto para Visual Studio.

Cuando se realiza Unity, aparecerá una ventana Explorador de archivos.

  1. Abra la carpeta Aplicación .
  2. Abra la solución ModelExplorer de Visual Studio.

Si se implementa en HoloLens:

  1. Con la barra de herramientas superior de Visual Studio, cambie el destino de Depurar a Versión y de ARM a x86.
  2. Haga clic en la flecha desplegable situada junto al botón Máquina local y seleccione Equipo remoto.
  3. Escriba la dirección IP del dispositivo HoloLens y establezca Modo de autenticación en Universal (Protocolo sin cifrar). Haga clic en Seleccionar. Si no conoce la dirección IP del dispositivo, consulte Configuración > Red & Opciones avanzadas de Internet>.
  4. En la barra de menús superior, haga clic en Depurar -> Iniciar sin depurar o presione Ctrl + F5. Si es la primera vez que se implementa en el dispositivo, deberá emparejarlo con Visual Studio.
  5. Cuando la aplicación se haya implementado, descarte fitbox con un gesto de selección.

Si se implementa en un casco envolvente:

  1. Con la barra de herramientas superior de Visual Studio, cambie el destino de Depurar a Versión y de ARM a x64.
  2. Asegúrese de que el destino de implementación está establecido en Máquina local.
  3. En la barra de menús superior, haga clic en Depurar -> Iniciar sin depurar o presione Ctrl + F5.
  4. Cuando la aplicación se haya implementado, descarte fitbox al extraer el desencadenador en un controlador de movimiento.

Nota

Es posible que observe algunos errores rojos en el panel Errores de Visual Studio. Es seguro ignorarlos. Cambie al panel Salida para ver el progreso real de la compilación. Los errores en el panel Salida requerirán que realice una corrección (la mayoría de las veces se deben a un error en un script).

Capítulo 1: Concienciación

Objetivos

  • Obtenga información sobre el diseño de comandos Dos y Don'ts de voz.
  • Use KeywordRecognizer para agregar comandos de voz basados en mirada.
  • Haga que los usuarios conozcan los comandos de voz mediante comentarios del cursor.

Diseño de comandos de voz

En este capítulo, obtendrá información sobre cómo diseñar comandos de voz. Al crear comandos de voz:

DO

  • Cree comandos concisos. No desea usar "Reproducir el vídeo seleccionado actualmente", ya que ese comando no es conciso y el usuario lo olvidaría fácilmente. En su lugar, debe usar: "Reproducir vídeo", ya que es conciso y tiene varias sílabas.
  • Use un vocabulario simple. Intente usar siempre palabras y frases comunes que sean fáciles de detectar y recordar al usuario. Por ejemplo, si la aplicación tuviera un objeto de nota que se pudiera mostrar o ocultar desde la vista, no usaría el comando "Mostrar placard", porque "placard" es un término que rara vez se usa. En su lugar, usaría el comando : "Mostrar nota", para mostrar la nota en la aplicación.
  • Ser coherente. Los comandos de voz deben mantenerse coherentes en toda la aplicación. Imagine que tiene dos escenas en la aplicación y ambas escenas contienen un botón para cerrar la aplicación. Si la primera escena usó el comando "Exit" para desencadenar el botón, pero la segunda escena usó el comando "Cerrar aplicación", el usuario se confundirá. Si la misma funcionalidad persiste en varias escenas, se debe usar el mismo comando de voz para desencadenarla.

NO

  • Use comandos syllable únicos. Por ejemplo, si estaba creando un comando de voz para reproducir un vídeo, debe evitar el uso del comando simple "Play", ya que solo es un único síllable y el sistema podría perderse fácilmente. En su lugar, debe usar: "Reproducir vídeo", ya que es conciso y tiene varias sílabas.
  • Use comandos del sistema. El sistema reserva el comando "Select" para desencadenar un evento Tap para el objeto centrado actualmente. No vuelva a usar el comando "Select" en una palabra clave o frase, ya que podría no funcionar como esperaba. Por ejemplo, si el comando de voz para seleccionar un cubo en la aplicación era "Seleccionar cubo", pero el usuario estaba mirando una esfera cuando expresó el comando, se seleccionaría la esfera en su lugar. De forma similar, los comandos de la barra de aplicaciones están habilitados para voz. No use los siguientes comandos de voz en la vista CoreWindow:
    1. Hacia atrás
    2. Herramienta de desplazamiento
    3. Herramienta Zoom
    4. Herramienta de arrastrar
    5. Ajustar
    6. Quitar
  • Usa sonidos similares. Intente evitar el uso de comandos de voz que riman. Si tenía una aplicación de compra que admitía "Mostrar tienda" y "Mostrar más" como comandos de voz, le gustaría deshabilitar uno de los comandos mientras el otro estaba en uso. Por ejemplo, puede usar el botón "Mostrar tienda" para abrir el almacén y, a continuación, deshabilitar ese comando cuando se muestre el almacén para que se pueda usar el comando "Mostrar más" para la exploración.

Instrucciones

  • En el panel Jerarquía de Unity, use la herramienta de búsqueda para buscar el objeto holoComm_screen_mesh .
  • Haga doble clic en el objeto holoComm_screen_mesh para verlo en la escena. Este es el watch del astronauta, que responderá a nuestros comandos de voz.
  • En el panel Inspector, busque el componente Origen de entrada de voz (script).
  • Expanda la sección Palabras clave para ver el comando de voz compatible: Open Communicator.
  • Haga clic en el engranaje situado a la derecha y seleccione Editar script.
  • Explore SpeechInputSource.cs para comprender cómo usa KeywordRecognizer para agregar comandos de voz.

Compilación e implementación

  • En Unity, use Configuración de compilación de archivos > para volver a generar la aplicación.
  • Abra la carpeta Aplicación .
  • Abra la solución ModelExplorer de Visual Studio.

(Si ya ha creado o implementado este proyecto en Visual Studio durante la configuración, puede abrir esa instancia de VS y hacer clic en "Volver a cargar todo" cuando se le solicite).

  • En Visual Studio, haga clic en Depurar:> iniciar sin depurar o presione Ctrl + F5.
  • Después de que la aplicación se implemente en HoloLens, descarte el cuadro de ajuste con el gesto de pulsar en el aire .
  • Mira la watch del astronauta.
  • Cuando el watch tenga el foco, compruebe que el cursor cambia a un micrófono. Esto proporciona comentarios que la aplicación está escuchando comandos de voz.
  • Compruebe que aparece una información sobre herramientas en el watch. Esto ayuda a los usuarios a detectar el comando "Open Communicator".
  • Mientras observa en el watch, diga "Abrir comunicador" para abrir el panel del comunicador.

Capítulo 2: Confirmación

Objetivos

  • Registre un mensaje mediante la entrada micrófono.
  • Envíe comentarios al usuario que la aplicación está escuchando su voz.

Nota

La funcionalidad Micrófono debe declararse para que una aplicación grabe desde el micrófono. Esto se hace para usted ya en MR Input 212, pero tenga esto en cuenta para sus propios proyectos.

  1. En el Editor de Unity, vaya a la configuración del reproductor; para ello, vaya a "Editar > reproductor de configuración del > proyecto".
  2. Haga clic en la pestaña "Plataforma universal de Windows"
  3. En la sección "Funcionalidades de configuración > de publicación", compruebe la funcionalidad Micrófono .

Instrucciones

  • En el panel Jerarquía de Unity, compruebe que el objeto holoComm_screen_mesh está seleccionado.
  • En el panel Inspector, busque el componente Astronauta Watch (Script).
  • Haga clic en el cubo azul pequeño que se establece como el valor de la propiedad Communicator Prefab .
  • En el panel Proyecto , el objeto prefabricado Communicator ahora debe tener el foco.
  • Haga clic en el objeto prefabricado Communicator en el panel Proyecto para ver sus componentes en el Inspector.
  • Observe el componente Administrador de micrófonos (script), lo que nos permitirá grabar la voz del usuario.
  • Observe que el objeto Communicator tiene un componente de controlador de entrada de voz (script) para responder al comando Enviar mensaje .
  • Examine el componente Communicator (Script) y haga doble clic en el script para abrirlo en Visual Studio.

Communicator.cs es responsable de establecer los estados de botón adecuados en el dispositivo communicator. Esto permitirá a nuestros usuarios grabar un mensaje, reproducirlo y enviar el mensaje al astronauta. También se iniciará y detendrá una forma de onda animada, para confirmar al usuario que su voz se escuchó.

  • En Communicator.cs, elimine las líneas siguientes (81 y 82) del método Start . Esto habilitará el botón "Grabar" en el comunicador.
// TODO: 2.a Delete the following two lines:
RecordButton.SetActive(false);
MessageUIRenderer.gameObject.SetActive(false);

Compilación e implementación

  • En Visual Studio, recompile la aplicación e implemente en el dispositivo.
  • Mira el watch del astronauta y dice "Open Communicator" para mostrar al comunicador.
  • Presione el botón Grabar (micrófono) para empezar a grabar un mensaje verbal para el astronauta.
  • Comience a hablar y compruebe que la animación de onda se reproduce en el comunicador, que proporciona comentarios al usuario de que su voz se escucha.
  • Presione el botón Detener (cuadrado izquierdo) y compruebe que la animación de onda deja de ejecutarse.
  • Presione el botón Reproducir (triángulo derecho) para reproducir el mensaje grabado y escucharlo en el dispositivo.
  • Presione el botón Detener (cuadrado derecho) para detener la reproducción del mensaje grabado.
  • Diga "Enviar mensaje" para cerrar el comunicador y recibir una respuesta "Mensaje recibido" del astronauta.

Capítulo 3: Descripción y el reconocedor de dictado

Objetivos

  • Use dictation Recognizer para convertir la voz del usuario en texto.
  • Muestre los resultados hipotizados y finales de Dictation Recognizer en el comunicador.

En este capítulo, usaremos el reconocedor de dictado para crear un mensaje para el astronauta. Al usar el reconocedor de dictado, tenga en cuenta lo siguiente:

  • Debe estar conectado a WiFi para que el Dictadotion Recognizer funcione.
  • Los tiempos de espera se producen después de un período de tiempo establecido. Hay dos tiempos de espera que tenga en cuenta:
    • Si el reconocedor se inicia y no escucha ningún audio durante los primeros cinco segundos, se producirá un tiempo de espera.
    • Si el reconocedor ha dado un resultado, pero luego escucha silencio durante veinte segundos, se producirá un tiempo de espera.
  • Solo se puede ejecutar un tipo de reconocedor (palabra clave o dictado) a la vez.

Nota

La funcionalidad Micrófono debe declararse para que una aplicación grabe desde el micrófono. Esto se hace para usted ya en MR Input 212, pero tenga esto en cuenta para sus propios proyectos.

  1. En el Editor de Unity, vaya a la configuración del reproductor; para ello, vaya a "Editar > reproductor de configuración > del proyecto".
  2. Haga clic en la pestaña "Plataforma universal de Windows"
  3. En la sección "Funcionalidades de configuración > de publicación", compruebe la funcionalidad Micrófono .

Instrucciones

Vamos a editar MicrophoneManager.cs para usar el reconocedor de dictado. Esto es lo que agregaremos:

  1. Cuando se presione el botón Grabar , iniciaremos el dictadoRecognizer.
  2. Muestre la hipótesis de lo que el DictadoRecognizer entendió.
  3. Bloquee los resultados de lo que el DictadoRecognizer entendió.
  4. Compruebe si hay tiempos de espera del DictadoRecognizer.
  5. Cuando se presiona el botón Detener o se agota el tiempo de espera de la sesión del micrófono, detenga el dictadoRecognizer.
  6. Reinicie KeywordRecognizer, que escuchará el comando Enviar mensaje .

Empecemos. Complete todos los ejercicios de codificación de 3.a en MicrophoneManager.cs, o copie y pegue el código terminado que se encuentra a continuación:

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See LICENSE in the project root for license information.

using System.Collections;
using System.Text;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Windows.Speech;

namespace Academy
{
    public class MicrophoneManager : MonoBehaviour
    {
        [Tooltip("A text area for the recognizer to display the recognized strings.")]
        [SerializeField]
        private Text dictationDisplay;

        private DictationRecognizer dictationRecognizer;

        // Use this string to cache the text currently displayed in the text box.
        private StringBuilder textSoFar;

        // Using an empty string specifies the default microphone.
        private static string deviceName = string.Empty;
        private int samplingRate;
        private const int messageLength = 10;

        // Use this to reset the UI once the Microphone is done recording after it was started.
        private bool hasRecordingStarted;

        void Awake()
        {
            /* TODO: DEVELOPER CODING EXERCISE 3.a */

            // 3.a: Create a new DictationRecognizer and assign it to dictationRecognizer variable.
            dictationRecognizer = new DictationRecognizer();

            // 3.a: Register for dictationRecognizer.DictationHypothesis and implement DictationHypothesis below
            // This event is fired while the user is talking. As the recognizer listens, it provides text of what it's heard so far.
            dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;

            // 3.a: Register for dictationRecognizer.DictationResult and implement DictationResult below
            // This event is fired after the user pauses, typically at the end of a sentence. The full recognized string is returned here.
            dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;

            // 3.a: Register for dictationRecognizer.DictationComplete and implement DictationComplete below
            // This event is fired when the recognizer stops, whether from Stop() being called, a timeout occurring, or some other error.
            dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;

            // 3.a: Register for dictationRecognizer.DictationError and implement DictationError below
            // This event is fired when an error occurs.
            dictationRecognizer.DictationError += DictationRecognizer_DictationError;

            // Query the maximum frequency of the default microphone. Use 'unused' to ignore the minimum frequency.
            int unused;
            Microphone.GetDeviceCaps(deviceName, out unused, out samplingRate);

            // Use this string to cache the text currently displayed in the text box.
            textSoFar = new StringBuilder();

            // Use this to reset the UI once the Microphone is done recording after it was started.
            hasRecordingStarted = false;
        }

        void Update()
        {
            // 3.a: Add condition to check if dictationRecognizer.Status is Running
            if (hasRecordingStarted && !Microphone.IsRecording(deviceName) && dictationRecognizer.Status == SpeechSystemStatus.Running)
            {
                // Reset the flag now that we're cleaning up the UI.
                hasRecordingStarted = false;

                // This acts like pressing the Stop button and sends the message to the Communicator.
                // If the microphone stops as a result of timing out, make sure to manually stop the dictation recognizer.
                // Look at the StopRecording function.
                SendMessage("RecordStop");
            }
        }

        /// <summary>
        /// Turns on the dictation recognizer and begins recording audio from the default microphone.
        /// </summary>
        /// <returns>The audio clip recorded from the microphone.</returns>
        public AudioClip StartRecording()
        {
            // 3.a Shutdown the PhraseRecognitionSystem. This controls the KeywordRecognizers
            PhraseRecognitionSystem.Shutdown();

            // 3.a: Start dictationRecognizer
            dictationRecognizer.Start();

            // 3.a Uncomment this line
            dictationDisplay.text = "Dictation is starting. It may take time to display your text the first time, but begin speaking now...";

            // Set the flag that we've started recording.
            hasRecordingStarted = true;

            // Start recording from the microphone for 10 seconds.
            return Microphone.Start(deviceName, false, messageLength, samplingRate);
        }

        /// <summary>
        /// Ends the recording session.
        /// </summary>
        public void StopRecording()
        {
            // 3.a: Check if dictationRecognizer.Status is Running and stop it if so
            if (dictationRecognizer.Status == SpeechSystemStatus.Running)
            {
                dictationRecognizer.Stop();
            }

            Microphone.End(deviceName);
        }

        /// <summary>
        /// This event is fired while the user is talking. As the recognizer listens, it provides text of what it's heard so far.
        /// </summary>
        /// <param name="text">The currently hypothesized recognition.</param>
        private void DictationRecognizer_DictationHypothesis(string text)
        {
            // 3.a: Set DictationDisplay text to be textSoFar and new hypothesized text
            // We don't want to append to textSoFar yet, because the hypothesis may have changed on the next event
            dictationDisplay.text = textSoFar.ToString() + " " + text + "...";
        }

        /// <summary>
        /// This event is fired after the user pauses, typically at the end of a sentence. The full recognized string is returned here.
        /// </summary>
        /// <param name="text">The text that was heard by the recognizer.</param>
        /// <param name="confidence">A representation of how confident (rejected, low, medium, high) the recognizer is of this recognition.</param>
        private void DictationRecognizer_DictationResult(string text, ConfidenceLevel confidence)
        {
            // 3.a: Append textSoFar with latest text
            textSoFar.Append(text + ". ");

            // 3.a: Set DictationDisplay text to be textSoFar
            dictationDisplay.text = textSoFar.ToString();
        }

        /// <summary>
        /// This event is fired when the recognizer stops, whether from Stop() being called, a timeout occurring, or some other error.
        /// Typically, this will simply return "Complete". In this case, we check to see if the recognizer timed out.
        /// </summary>
        /// <param name="cause">An enumerated reason for the session completing.</param>
        private void DictationRecognizer_DictationComplete(DictationCompletionCause cause)
        {
            // If Timeout occurs, the user has been silent for too long.
            // With dictation, the default timeout after a recognition is 20 seconds.
            // The default timeout with initial silence is 5 seconds.
            if (cause == DictationCompletionCause.TimeoutExceeded)
            {
                Microphone.End(deviceName);

                dictationDisplay.text = "Dictation has timed out. Please press the record button again.";
                SendMessage("ResetAfterTimeout");
            }
        }

        /// <summary>
        /// This event is fired when an error occurs.
        /// </summary>
        /// <param name="error">The string representation of the error reason.</param>
        /// <param name="hresult">The int representation of the hresult.</param>
        private void DictationRecognizer_DictationError(string error, int hresult)
        {
            // 3.a: Set DictationDisplay text to be the error string
            dictationDisplay.text = error + "\nHRESULT: " + hresult;
        }

        /// <summary>
        /// The dictation recognizer may not turn off immediately, so this call blocks on
        /// the recognizer reporting that it has actually stopped.
        /// </summary>
        public IEnumerator WaitForDictationToStop()
        {
            while (dictationRecognizer != null && dictationRecognizer.Status == SpeechSystemStatus.Running)
            {
                yield return null;
            }
        }
    }
}

Compilación e implementación

  • Recompile en Visual Studio e implemente en el dispositivo.
  • Descarte el cuadro de ajuste con un gesto de pulsación en el aire.
  • Mira la watch del astronauta y dice "Comunicador abierto".
  • Seleccione el botón Grabar (micrófono) para grabar el mensaje.
  • Empieza a hablar. El Reconocedor de dictado interpretará su voz y mostrará el texto hipotizado en el comunicador.
  • Intente decir "Enviar mensaje" mientras está grabando un mensaje. Observe que keyword Recognizer no responde porque el reconocedor de dictado sigue activo.
  • Deja de hablar durante unos segundos. Observe que dictation Recognizer completa su hipótesis y muestra el resultado final.
  • Comience a hablar y, a continuación, pause durante 20 segundos. Esto hará que el reconocedor de dictado se atencione al tiempo de espera.
  • Tenga en cuenta que keyword Recognizer se vuelve a habilitar después del tiempo de espera anterior. El comunicador ahora responderá a los comandos de voz.
  • Diga "Enviar mensaje" para enviar el mensaje al astronauta.

Capítulo 4: Grammar Recognizer

Objetivos

  • Use Grammar Recognizer para reconocer la voz del usuario según una especificación de gramática de reconocimiento de voz o SRGS.

Nota

La funcionalidad Micrófono debe declararse para que una aplicación grabe desde el micrófono. Esto se hace para usted ya en MR Input 212, pero tenga esto en cuenta para sus propios proyectos.

  1. En el Editor de Unity, vaya a la configuración del reproductor; para ello, vaya a "Editar > reproductor de configuración > del proyecto".
  2. Haga clic en la pestaña "Plataforma universal de Windows"
  3. En la sección "Funcionalidades de configuración > de publicación", compruebe la funcionalidad Micrófono .

Instrucciones

  1. En el panel Jerarquía , busque Jetpack_Center y selecciónelo.
  2. Busque el script de acción de Tagalong en el panel Inspector .
  3. Haga clic en el círculo pequeño situado a la derecha del campo Objeto a etiquetar a lo largo .
  4. En la ventana que aparece, busque SRGSToolbox y selecciónelo en la lista.
  5. Eche un vistazo al archivo SRGSColor.xml en la carpeta StreamingAssets .
    1. La especificación de diseño srGS se puede encontrar en el sitio web de W3C aquí.

En nuestro archivo SRGS, tenemos tres tipos de reglas:

  • Una regla que le permite decir un color de una lista de doce colores.
  • Tres reglas que escuchan una combinación de la regla de color y una de las tres formas.
  • La regla raíz, colorChooser, que escucha cualquier combinación de las tres reglas de "color + forma". Las formas se pueden decir en cualquier orden y en cualquier cantidad de solo uno a los tres. Esta es la única regla que se escucha, ya que se especifica como regla raíz en la parte superior del archivo en la etiqueta de gramática> inicial<.

Compilación e implementación

  • Recompile la aplicación en Unity y, a continuación, compile e implemente desde Visual Studio para experimentar la aplicación en HoloLens.
  • Descarte el cuadro de ajuste con un gesto de pulsación en el aire.
  • Mira el jetpack del astronauta y realiza un gesto de pulsación en el aire.
  • Empieza a hablar. Grammar Recognizer interpretará su voz y cambiará los colores de las formas en función del reconocimiento. Un comando de ejemplo es "círculo azul, cuadrado amarillo".
  • Realice otro gesto de pulsación de aire para descartar el cuadro de herramientas.

Fin

¡Enhorabuena! Ya ha completado MR Input 212: Voice( Entrada de MR 212: Voz).

  • Conoces los comandos Dos y Don't de voz.
  • Ha visto cómo se emplea información sobre herramientas para que los usuarios conozcan los comandos de voz.
  • Ha visto varios tipos de comentarios usados para confirmar que se ha escuchado la voz del usuario.
  • Sabe cómo cambiar entre Keyword Recognizer y Dictado Recognizer, y cómo estas dos características entienden e interpretan su voz.
  • Ha aprendido a usar un archivo SRGS y Grammar Recognizer para el reconocimiento de voz en la aplicación.