Entrada 212 do HoloLens (1.ª geração): Voz

Importante

Os tutoriais da Academia Mixed Reality foram concebidos com HoloLens (1.ª geração), Unity 2017 e Mixed Reality Headsets Envolventes em mente. Como tal, consideramos importante deixar estes tutoriais em vigor para os programadores que ainda procuram orientações no desenvolvimento desses dispositivos. Estes tutoriais não serão atualizados com os conjuntos de ferramentas ou interações mais recentes utilizados para HoloLens 2 e poderão não ser compatíveis com versões mais recentes do Unity. Serão mantidos para continuar a trabalhar nos dispositivos suportados. Foi publicada uma nova série de tutoriais para HoloLens 2.

A entrada de voz dá-nos outra forma de interagir com os nossos hologramas. Os comandos de voz funcionam de uma forma muito natural e fácil. Crie os seus comandos de voz para que sejam:

  • Natural
  • Fácil de memorizar
  • Contexto adequado
  • Suficientemente diferente de outras opções no mesmo contexto

No MR Basics 101, utilizámos o KeywordRecognizer para criar dois comandos de voz simples. No MR Input 212, vamos aprofundar e aprender a:

  • Estruturar comandos de voz otimizados para o motor de voz do HoloLens.
  • Tome conhecimento do utilizador sobre os comandos de voz disponíveis.
  • Confirme que ouvimos o comando de voz do utilizador.
  • Compreenda o que o utilizador está a dizer, utilizando um Reconhecedor de Ditado.
  • Utilize um Reconhecedor de Gramática para escutar comandos baseados num ficheiro SRGS ou especificação gramatical de reconhecimento de voz.

Neste curso, vamos revisitar o Explorador de Modelos, que criámos no MR Input 210 e mr input 211.

Importante

Os vídeos incorporados em cada um dos capítulos abaixo foram gravados com uma versão mais antiga do Unity e do Mixed Reality Toolkit. Embora as instruções passo a passo sejam precisas e atuais, poderá ver scripts e elementos visuais nos vídeos correspondentes desatualizados. Os vídeos permanecem incluídos para a posteridade e porque os conceitos abrangidos ainda se aplicam.

Suporte de dispositivos

Curso HoloLens Auscultadores envolventes
MR Input 212: Voice ✔️ ✔️

Antes de começar

Pré-requisitos

Ficheiros de projeto

  • Transfira os ficheiros necessários para o projeto. Requer o Unity 2017.2 ou posterior.
  • Anuir o arquivo dos ficheiros no ambiente de trabalho ou noutra localização fácil de alcançar.

Nota

Se quiser ver o código fonte antes de transferir, este estará disponível no GitHub.

Errata e Notas

  • "Ativar o Just My Code" tem de ser desativado (desmarcado) no Visual Studio em Ferramentas-Opções-Depuração>> para atingir pontos de interrupção no seu código.

Configuração do Unity

Instruções

  1. Inicie o Unity.
  2. Selecione Abrir.
  3. Navegue para a pasta HolographicAcademy-Holograms-212-Voice que ansiou anteriormente.
  4. Localize e selecione a pasta Iniciar/Explorador de Modelos .
  5. Clique no botão Selecionar Pasta .
  6. No painel Projeto , expanda a pasta Cenas .
  7. Faça duplo clique na cena ModelExplorer para carregá-la no Unity.

Edifício

  1. No Unity, selecione Definições de Compilação de Ficheiros>.
  2. Se Scenes/ModelExplorer não estiver listado em Cenas Na Compilação, clique em Adicionar Cenas Abertas para adicionar a cena.
  3. Se estiver a desenvolver especificamente para o HoloLens, defina o Dispositivo de destino como HoloLens. Caso contrário, deixe-o em Qualquer dispositivo.
  4. Certifique-se de que o Tipo de Compilação está definido como D3D e que o SDK está definido como Mais Recente instalado (que deve ser o SDK 16299 ou mais recente).
  5. Clique em Compilar.
  6. Crie uma Nova Pasta com o nome "Aplicação".
  7. Clique apenas na pasta Aplicação .
  8. Prima Selecionar Pasta e o Unity começará a criar o projeto para o Visual Studio.

Quando o Unity terminar, será apresentada uma janela Explorador de Ficheiros.

  1. Abra a pasta Aplicação .
  2. Abra a ModelExplorer Visual Studio Solution.

Se estiver a implementar no HoloLens:

  1. Ao utilizar a barra de ferramentas superior no Visual Studio, altere o destino de Depuração para Versão e de ARM para x86.
  2. Clique na seta pendente junto ao botão Máquina Local e selecione Máquina Remota.
  3. Introduza o endereço IP do dispositivo HoloLens e defina o Modo de Autenticação como Universal (Protocolo Não Encriptado). Clique em Selecionar. Se não souber o endereço IP do seu dispositivo, consulte Definições Rede & Opções Avançadas > da Internet>.
  4. Na barra de menus superior, clique em Depurar –> Iniciar Sem depuração ou prima Ctrl + F5. Se esta for a primeira vez que implementa no seu dispositivo, terá de o emparelhar com o Visual Studio.
  5. Quando a aplicação tiver sido implementada, dispense a Caixa de Ajuste com um gesto de seleção.

Se estiver a ser implementado num headset envolvente:

  1. Ao utilizar a barra de ferramentas superior no Visual Studio, altere o destino de Depuração para Versão e de ARM para x64.
  2. Certifique-se de que o destino de implementação está definido como Máquina Local.
  3. Na barra de menus superior, clique em Depurar –> Iniciar Sem depuração ou prima Ctrl + F5.
  4. Quando a aplicação tiver sido implementada, dispense o Fitbox ao puxar o acionador num controlador de movimento.

Nota

Poderá reparar em alguns erros vermelhos no painel Erros do Visual Studio. É seguro ignorá-los. Mude para o painel Saída para ver o progresso real da compilação. Os erros no painel Saída exigirão que efetue uma correção (na maioria das vezes, são causados por um erro num script).

Capítulo 1 - Sensibilização

Objetivos

  • Saiba mais sobre a estrutura do comando Dos and Dons of voice.
  • Utilize KeywordRecognizer para adicionar comandos de voz baseados em olhar.
  • Sensibilizar os utilizadores para os comandos de voz com o feedback do cursor.

Estrutura do Comando de Voz

Neste capítulo, irá aprender a criar comandos de voz. Ao criar comandos de voz:

DO

  • Crie comandos concisos. Não quer utilizar "Reproduzir o vídeo atualmente selecionado", porque esse comando não é conciso e seria facilmente esquecido pelo utilizador. Em vez disso, deve utilizar: "Reproduzir Vídeo", porque é conciso e tem múltiplas sílabas.
  • Utilize um vocabulário simples. Tente sempre utilizar palavras e expressões comuns que são fáceis de detetar e memorizar pelo utilizador. Por exemplo, se a sua aplicação tivesse um objeto de nota que pudesse ser apresentado ou oculto da vista, não utilizaria o comando "Mostrar Cartaz", porque "cartaz" é um termo raramente utilizado. Em vez disso, utilizaria o comando "Mostrar Nota" para revelar a nota na sua aplicação.
  • Seja consistente. Os comandos de voz devem ser mantidos consistentes em toda a sua aplicação. Imagine que tem duas cenas na sua aplicação e ambas as cenas contêm um botão para fechar a aplicação. Se a primeira cena utilizou o comando "Sair" para acionar o botão, mas a segunda cena utilizou o comando "Fechar Aplicação", o utilizador vai ficar muito confuso. Se a mesma funcionalidade persistir em várias cenas, o mesmo comando de voz deve ser utilizado para acioná-lo.

NÃO

  • Utilize comandos sílabas únicos. Por exemplo, se estiver a criar um comando de voz para reproduzir um vídeo, deve evitar utilizar o comando simples "Reproduzir", uma vez que é apenas uma única sílaba e pode facilmente não ser utilizado pelo sistema. Em vez disso, deve utilizar: "Reproduzir Vídeo", porque é conciso e tem múltiplas sílabas.
  • Utilize comandos de sistema. O comando "Selecionar" é reservado pelo sistema para acionar um evento De Toque para o objeto atualmente focado. Não volte a utilizar o comando "Selecionar" numa palavra-chave ou expressão, uma vez que poderá não funcionar como esperado. Por exemplo, se o comando de voz para selecionar um cubo na sua aplicação fosse "Selecionar cubo", mas o utilizador estivesse a olhar para uma esfera quando proferiu o comando, a esfera seria selecionada. Da mesma forma, os comandos da barra de aplicações são ativados por voz. Não utilize os seguintes comandos de voz na vista CoreWindow:
    1. Voltar
    2. Ferramenta de Deslocamento
    3. Ferramenta de Zoom
    4. Ferramenta de Arrastar
    5. Ajustar
    6. Remover
  • Utilize sons semelhantes. Tente evitar utilizar comandos de voz que rimam. Se tivesse uma aplicação de compras que suportasse "Show Store" e "Show More" como comandos de voz, então gostaria de desativar um dos comandos enquanto o outro estava a ser utilizado. Por exemplo, pode utilizar o botão "Mostrar Loja" para abrir o arquivo e, em seguida, desativar esse comando quando o arquivo foi apresentado para que o comando "Mostrar Mais" pudesse ser utilizado para navegar.

Instruções

  • No painel Hierarquia do Unity, utilize a ferramenta de pesquisa para localizar o objeto holoComm_screen_mesh .
  • Faça duplo clique no objeto holoComm_screen_mesh para vê-lo na Cena. Este é o watch do astronauta, que irá responder aos nossos comandos de voz.
  • No painel Inspetor , localize o componente Origem de Entrada de Voz (Script ).
  • Expanda a secção Palavras-chave para ver o comando de voz suportado: Abrir o Communicator.
  • Clique na engrenagem no lado direito e, em seguida, selecione Editar Script.
  • Explore SpeechInputSource.cs para compreender como utiliza o KeywordRecognizer para adicionar comandos de voz.

Criar e Implementar

  • No Unity, utilize as Definições de Compilação de Ficheiros > para reconstruir a aplicação.
  • Abra a pasta Aplicação .
  • Abra a ModelExplorer Visual Studio Solution.

(Se já tiver criado/implementado este projeto no Visual Studio durante a configuração, pode abrir essa instância do VS e clicar em "Recarregar Tudo" quando lhe for pedido).

  • No Visual Studio, clique em Depurar –> Iniciar Sem depuração ou prima Ctrl + F5.
  • Depois de a aplicação ser implementada no HoloLens, dispense a caixa de ajuste com o gesto de toque de ar .
  • Olhe para o watch do astronauta.
  • Quando o watch tiver o foco, verifique se o cursor muda para um microfone. Isto fornece feedback de que a aplicação está a escutar comandos de voz.
  • Verifique se é apresentada uma descrição no watch. Isto ajuda os utilizadores a descobrir o comando "Open Communicator ".
  • Enquanto olha para o watch, diga "Open Communicator" para abrir o painel de comunicação.

Capítulo 2 - Reconhecimento

Objetivos

  • Grave uma mensagem com a entrada Microfone.
  • Envie feedback ao utilizador de que a aplicação está a ouvir a sua voz.

Nota

A capacidade Microfone tem de ser declarada para que uma aplicação grave a partir do microfone. Isto já é feito por si no MR Input 212, mas tenha isso em mente para os seus próprios projetos.

  1. No Editor do Unity, aceda às definições do leitor ao navegar para "Editar > Leitor de Definições > do Projeto"
  2. Clique no separador "Plataforma Universal do Windows"
  3. Na secção "Funcionalidades de Definições > de Publicação", verifique a capacidade microfone

Instruções

  • No painel Hierarquia do Unity, verifique se o objeto holoComm_screen_mesh está selecionado.
  • No painel Inspetor , localize o componente Relógio astronauta (Script ).
  • Clique no cubo azul pequeno, definido como o valor da propriedade Communicator Prefab .
  • No painel Projeto , o prefáb do Communicator deverá agora ter o foco.
  • Clique na pré-base do Communicator no painel Projeto para ver os respetivos componentes no Inspetor.
  • Observe o componente Gestor de Microfone (Script ), o que nos permitirá gravar a voz do utilizador.
  • Tenha em atenção que o objeto Communicator tem um componente processador de entrada de voz (Script) para responder ao comando Enviar Mensagem .
  • Observe o componente Communicator (Script) e faça duplo clique no script para o abrir no Visual Studio.

Communicator.cs é responsável por definir os estados de botão adequados no dispositivo do comunicador. Isto permitirá que os nossos utilizadores gravem uma mensagem, reproduzam-na e enviem a mensagem para o astronauta. Também iniciará e parará uma forma de onda animada, para reconhecer ao utilizador que a sua voz foi ouvida.

  • Em Communicator.cs, elimine as seguintes linhas (81 e 82) do método Iniciar . Isto ativará o botão "Gravar" no comunicador.
// TODO: 2.a Delete the following two lines:
RecordButton.SetActive(false);
MessageUIRenderer.gameObject.SetActive(false);

Criar e Implementar

  • No Visual Studio, recompile a sua aplicação e implemente no dispositivo.
  • Olhe para o watch do astronauta e diga "Open Communicator" para mostrar o comunicador.
  • Prima o botão Gravar (microfone) para começar a gravar uma mensagem verbal para o astronauta.
  • Comece a falar e verifique se a animação de onda é reproduzida no comunicador, que fornece feedback ao utilizador de que a sua voz é ouvida.
  • Prima o botão Parar (quadrado esquerdo) e verifique se a animação de onda deixa de ser executada.
  • Prima o botão Reproduzir (triângulo direito) para reproduzir a mensagem gravada e ouvi-la no dispositivo.
  • Prima o botão Parar (quadrado direito) para parar a reprodução da mensagem gravada.
  • Diga "Enviar Mensagem" para fechar o comunicador e receber uma resposta "Mensagem Recebida" do astronauta.

Capítulo 3 – Compreender e o Reconhecedor de Ditado

Objetivos

  • Utilize o Reconhecedor de Ditado para converter a voz do utilizador em texto.
  • Mostrar a hipótese e os resultados finais do Reconhecedor de Ditado no comunicador.

Neste capítulo, vamos utilizar o Reconhecedor de Ditado para criar uma mensagem para o astronauta. Ao utilizar o Reconhecedor de Ditado, tenha em atenção que:

  • Tem de estar ligado ao Wi-Fi para que o Reconhecedor de Ditado funcione.
  • Os tempos limite ocorrem após um determinado período de tempo. Existem dois tempos limite a ter em atenção:
    • Se o reconhecedor iniciar e não ouvir áudio durante os primeiros cinco segundos, o tempo limite será excedido.
    • Se o reconhecedor tiver dado um resultado, mas ouvir silêncio durante vinte segundos, o tempo limite será excedido.
  • Apenas um tipo de reconhecedor (Palavra-chave ou Ditado) pode ser executado de cada vez.

Nota

A capacidade Microfone tem de ser declarada para que uma aplicação grave a partir do microfone. Isto já é feito por si no MR Input 212, mas tenha isso em mente para os seus próprios projetos.

  1. No Editor do Unity, aceda às definições do leitor ao navegar para "Editar > Leitor de Definições > do Projeto"
  2. Clique no separador "Plataforma Universal do Windows"
  3. Na secção "Funcionalidades de Definições > de Publicação", verifique a capacidade microfone

Instruções

Vamos editar MicrophoneManager.cs para utilizar o Reconhecedor de Ditado. Isto é o que vamos adicionar:

  1. Quando premir o botão Gravar , iniciaremos o DitadoRecognizer.
  2. Mostrar a hipótese do que o DictationRecognizer compreendeu.
  3. Bloqueie os resultados do que o DictationRecognizer compreendeu.
  4. Verifique se existem tempos limite no DictationRecognizer.
  5. Quando o botão Parar é premido ou a sessão do microfone excede o limite de tempo, pare o DitadoRecognizer.
  6. Reinicie o KeywordRecognizer, que irá escutar o comando Enviar Mensagem .

Vamos começar. Conclua todos os exercícios de codificação da versão 3.a em MicrophoneManager.cs ou copie e cole o código concluído abaixo:

// 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;
            }
        }
    }
}

Criar e Implementar

  • Recrie no Visual Studio e implemente no seu dispositivo.
  • Dispense a caixa de ajuste com um gesto de toque de ar.
  • Olhe para o watch do astronauta e diga "Abrir Communicator".
  • Selecione o botão Gravar (microfone) para gravar a sua mensagem.
  • Comece a falar. O Reconhecedor de Ditado irá interpretar a sua voz e mostrar o texto em hipótese no comunicador.
  • Experimente dizer "Enviar Mensagem" enquanto estiver a gravar uma mensagem. Repare que o Reconhecedor de Palavras-chave não responde porque o Reconhecedor de Ditado ainda está ativo.
  • Pare de falar por alguns segundos. Veja como o Reconhecedor de Ditado conclui a hipótese e mostra o resultado final.
  • Comece a falar e, em seguida, pare durante 20 segundos. Isto fará com que o Reconhecedor de Ditado exceda o tempo limite.
  • Repare que o Reconhecedor de Palavras-chave é reativado após o tempo limite acima. O comunicador irá agora responder aos comandos de voz.
  • Diga "Enviar Mensagem" para enviar a mensagem ao astronauta.

Capítulo 4 - Reconhecedor gramatical

Objetivos

  • Utilize o Reconhecedor gramatical para reconhecer a voz do utilizador de acordo com um ficheiro SRGS ou Especificação gramatical de reconhecimento de voz.

Nota

A capacidade Microfone tem de ser declarada para que uma aplicação grave a partir do microfone. Isto já é feito por si no MR Input 212, mas tenha isso em mente para os seus próprios projetos.

  1. No Editor do Unity, aceda às definições do leitor ao navegar para "Editar > Leitor de Definições > do Projeto"
  2. Clique no separador "Plataforma Universal do Windows"
  3. Na secção "Funcionalidades de Definições > de Publicação", verifique a capacidade microfone

Instruções

  1. No painel Hierarquia , procure Jetpack_Center e selecione-o.
  2. Procure o script Ação do Tagalong no painel Inspetor .
  3. Clique no pequeno círculo à direita do campo Objeto a Etiquetar Ao Longo .
  4. Na janela apresentada, procure SRGSToolbox e selecione-a na lista.
  5. Veja o ficheiro SRGSColor.xml na pasta StreamingAssets .
    1. A especificação de design SRGS pode ser encontrada no site do W3C aqui.

No nosso ficheiro SRGS, temos três tipos de regras:

  • Uma regra que lhe permite dizer uma cor de uma lista de doze cores.
  • Três regras que escutam uma combinação da regra de cor e uma das três formas.
  • A regra de raiz, colorChooser, que escuta qualquer combinação das três regras "cor + forma". As formas podem ser ditas em qualquer ordem e em qualquer quantidade de apenas uma para as três. Esta é a única regra que é escutada, uma vez que é especificada como a regra de raiz na parte superior do ficheiro na etiqueta de gramática> inicial<.

Criar e Implementar

  • Recrie a aplicação no Unity e, em seguida, crie e implemente a partir do Visual Studio para experimentar a aplicação no HoloLens.
  • Dispense a caixa de ajuste com um gesto de toque de ar.
  • Olhe para o jetpack do astronauta e faça um gesto de toque de ar.
  • Comece a falar. O Reconhecedor gramatical interpretará a sua voz e alterará as cores das formas com base no reconhecimento. Um comando de exemplo é "círculo azul, quadrado amarelo".
  • Efetue outro gesto de toque de ar para dispensar a caixa de ferramentas.

O Fim

Parabéns! Concluiu agora o MR Input 212: Voz.

  • Conhece os comandos Dos e Don'ts de voz.
  • Viu como as descrições foram utilizadas para sensibilizar os utilizadores para os comandos de voz.
  • Viu vários tipos de comentários utilizados para reconhecer que a voz do utilizador foi ouvida.
  • Sabe como alternar entre o Reconhecedor de Palavras-chave e o Reconhecedor de Ditado e como estas duas funcionalidades compreendem e interpretam a sua voz.
  • Aprendeu a utilizar um ficheiro SRGS e o Reconhecedor gramatical para reconhecimento de voz na sua aplicação.