Compartilhar via


HoloLens (1ª geração) e Azure 301: tradução de idiomas


Observação

Os tutoriais do Mixed Reality Academy foram projetados com o HoloLens (1ª geração) e os headsets imersivos de realidade misturada em mente. Dessa forma, achamos que é importante continuar disponibilizando esses tutoriais para os desenvolvedores que ainda buscam obter diretrizes para o desenvolvimento visando esses dispositivos. Esses tutoriais não serão atualizados com os conjuntos de ferramentas mais recentes nem com as interações usadas para o HoloLens 2. Eles serão mantidos para continuar funcionando nos dispositivos compatíveis. Haverá uma nova série de tutoriais que serão postados no futuro que demonstrarão como desenvolver para o HoloLens 2. Este aviso será atualizado com um link para esses tutoriais quando eles forem postados.


Neste curso, você aprenderá a adicionar recursos de tradução a um aplicativo de realidade misturada usando os Serviços Cognitivos do Azure, com a API de Tradução de Texto.

Produto final

A API de tradução de texto é um serviço de tradução que funciona quase em tempo real. O Serviço é baseado em nuvem e, usando uma chamada à API REST, um aplicativo pode usar a tecnologia de tradução automática neural para traduzir texto para outro idioma. Para obter mais informações, visite a página da API de Texto do Azure Translator.

Após a conclusão deste curso, você terá um aplicativo de realidade mista que poderá fazer o seguinte:

  1. O usuário falará em um microfone conectado a um headset imersivo (VR) (ou ao microfone interno do HoloLens).
  2. O aplicativo capturará o ditado e o enviará para a API de Texto do Tradutor do Azure.
  3. O resultado da tradução será exibido em um grupo de interface do usuário simples na Cena do Unity.

Este curso ensinará como obter os resultados do Serviço de Tradutor em um aplicativo de exemplo baseado em Unity. Caberá a você aplicar esses conceitos a um aplicativo personalizado que você possa estar criando.

Suporte a dispositivos

Curso HoloLens Headsets imersivos
MR e Azure 301: tradução de idiomas ✔️ ✔️

Observação

Embora este curso se concentre principalmente em headsets imersivos (VR) do Windows Mixed Reality, você também pode aplicar o que aprendeu neste curso ao Microsoft HoloLens. Ao acompanhar o curso, você verá anotações sobre as alterações que talvez precise empregar para dar suporte ao HoloLens. Ao usar o HoloLens, você pode observar algum eco durante a captura de voz.

Pré-requisitos

Observação

Este tutorial foi desenvolvido para desenvolvedores que têm experiência básica com Unity e C#. Esteja ciente também de que os pré-requisitos e as instruções escritas neste documento representam o que foi testado e verificado no momento da redação (maio de 2018). Você é livre para usar o software mais recente, conforme listado no artigo instalar as ferramentas , embora não se deva presumir que as informações neste curso corresponderão perfeitamente ao que você encontrará em softwares mais recentes do que os listados abaixo.

Recomendamos o seguinte hardware e software para este curso:

Antes de começar

  • Para evitar problemas ao criar este projeto, é altamente recomendável que você crie o projeto mencionado neste tutorial em uma pasta raiz ou quase raiz (caminhos de pasta longos podem causar problemas no momento da compilação).

  • O código neste tutorial permitirá que você grave a partir do dispositivo de microfone padrão conectado ao seu PC. Certifique-se de que o dispositivo de microfone padrão esteja definido para o dispositivo que você planeja usar para capturar sua voz.

  • Para permitir que seu PC habilite o ditado, vá para Configurações Privacidade Fala, escrita à tinta e digitação e selecione o botão Ativar serviços de fala e sugestões de digitação.> >

  • Se você estiver usando um microfone e fones de ouvido conectados (ou integrados) ao fone de ouvido, verifique se a opção "Quando eu usar meu fone de ouvido, alternar para o microfone do fone de ouvido" está ativada em Configurações > Realidade > misturada Áudio e fala.

    Configurações de realidade misturada

    Configuração do microfone

Aviso

Lembre-se de que, se você estiver desenvolvendo um headset imersivo para este laboratório, poderá ter problemas com o dispositivo de saída de áudio. Isso ocorre devido a um problema com o Unity, que foi corrigido em versões posteriores do Unity (Unity 2018.2). O problema impede que o Unity altere o dispositivo de saída de áudio padrão em tempo de execução. Como solução alternativa, certifique-se de ter concluído as etapas acima e feche e reabra o Editor quando esse problema se apresentar.

Capítulo 1 – O Portal do Azure

Para usar a API do Azure Translator, você precisará configurar uma instância do Serviço a ser disponibilizada para seu aplicativo.

  1. Faça logon no Portal do Azure.

    Observação

    Se você ainda não tiver uma conta do Azure, precisará criar uma. Se você estiver seguindo este tutorial em uma sala de aula ou laboratório, peça ajuda ao seu instrutor ou a um dos supervisores para configurar sua nova conta.

  2. Depois de fazer login, clique em Novo no canto superior esquerdo e procure por "Translator Text API". Selecione Enter.

    Novo Recurso

    Observação

    A palavra Novo pode ter sido substituída por Criar um recurso, em portais mais recentes.

  3. A nova página fornecerá uma descrição do Serviço de API de Tradução de Texto. Na parte inferior esquerda desta página, selecione o botão Criar para criar uma associação com este Serviço.

    Criar serviço de API de tradução de texto

  4. Depois de clicar em Criar:

    1. Insira o Nome desejado para esta instância de Serviço.

    2. Selecione uma assinatura apropriada.

    3. Selecione o Tipo de Preço apropriado para você, se esta for a primeira vez que cria um Serviço de Tradução de Texto, uma camada gratuita (chamada F0) deverá estar disponível para você.

    4. Escolha um grupo de recursos ou crie um novo. Um grupo de recursos fornece uma maneira de monitorar, controlar o acesso, provisionar e gerenciar a cobrança de uma coleção de ativos do Azure. É recomendável manter todos os Serviços do Azure associados a um único projeto (por exemplo, como esses laboratórios) em um grupo de recursos comum).

      Se você quiser ler mais sobre os Grupos de Recursos do Azure, visite o artigo do grupo de recursos.

    5. Determine o Local do seu grupo de recursos (se você estiver criando um novo Grupo de Recursos). O local seria idealmente na região onde o aplicativo seria executado. Alguns ativos do Azure só estão disponíveis em determinadas regiões.

    6. Você também precisará confirmar que entendeu os Termos e Condições aplicados a este Serviço.

    7. Selecione Criar.

      Selecione o botão Criar.

  5. Depois de clicar em Criar, você terá que esperar que o Serviço seja criado, isso pode levar um minuto.

  6. Uma notificação será exibida no portal assim que a instância de serviço for criada.

    Notificação de criação de serviço do Azure

  7. Clique na notificação para explorar sua nova instância de serviço.

    Vá para pop-up de recursos.

  8. Clique no botão Ir para o recurso na notificação para explorar sua nova instância de serviço. Você será levado para sua nova instância do Serviço de API de Tradução de Texto.

    Página do Serviço de API de Tradução de Texto

  9. Neste tutorial, seu aplicativo precisará fazer chamadas para o Serviço, o que é feito usando a Chave de Assinatura do Serviço.

  10. Na página Início rápido do Serviço de Tradução de Texto , navegue até a primeira etapa, Pegue suas chaves e clique em Chaves (você também pode fazer isso clicando no hiperlink azul Chaves, localizado no menu de navegação Serviços, indicado pelo ícone de chave). Isso revelará suas chaves de serviço.

  11. Faça uma cópia de uma das chaves exibidas, pois você precisará dela mais tarde em seu projeto.

Capítulo 2 – Configurar o projeto Unity

Configure e teste seu headset imersivo de realidade misturada.

Observação

Você não precisará de controladores de movimento para este curso. Se precisar de suporte para configurar um headset imersivo, siga estas etapas.

A seguir está uma configuração típica para desenvolvimento com realidade mista e, como tal, é um bom modelo para outros projetos:

  1. Abra o Unity e clique em Novo.

    Inicie um novo projeto do Unity.

  2. Agora você precisará fornecer um nome de projeto do Unity. Insira MR_Translation. Certifique-se de que o tipo de projeto esteja definido como 3D. Defina o local para algum lugar apropriado para você (lembre-se, mais perto dos diretórios raiz é melhor). Em seguida, clique em Criar projeto.

    Forneça detalhes para o novo projeto do Unity.

  3. Com o Unity aberto, vale a pena verificar se o Editor de Scripts padrão está definido como Visual Studio. Vá para Editar > preferências e, na nova janela, navegue até Ferramentas externas. Altere o Editor de Script Externo para Visual Studio 2017. Feche a janela Preferências.

    Atualize a preferência do editor de scripts.

  4. Em seguida, vá para Configurações de Build de Arquivo > e alterne a plataforma para Plataforma Universal do Windows, clicando no botão Alternar Plataforma.

    Janela Configurações de Build, alterne a plataforma para UWP.

  5. Vá para Configurações de Build de Arquivo > e certifique-se de que:

    1. O dispositivo de destino está definido como Qualquer dispositivo.

      Para Microsoft HoloLens, defina Dispositivo de Destino como HoloLens.

    2. O Tipo de Construção está definido como D3D

    3. O SDK está definido como Instalado mais recente

    4. A versão do Visual Studio está definida como Mais recente instalado

    5. Build and Run está definido como Computador Local

    6. Salve a cena e adicione-a à compilação.

      1. Faça isso selecionando Adicionar cenas abertas. Uma janela de salvamento aparecerá.

        Clique no botão adicionar cenas abertas

      2. Crie uma nova pasta para esta e qualquer cena futura e, em seguida, selecione o botão Nova pasta , para criar uma nova pasta, nomeie-a como Cenas.

        Criar nova pasta de scripts

      3. Abra a pasta Cenas recém-criada e, no campo de texto Nome do arquivo:, digite MR_TranslationScene e pressione Salvar.

        Dê um nome à nova cena.

        Lembre-se de que você deve salvar suas cenas do Unity na pasta Ativos , pois elas devem estar associadas ao Projeto do Unity. Criar a pasta scenes (e outras pastas semelhantes) é uma maneira típica de estruturar um projeto do Unity.

    7. As configurações restantes, em Configurações de Build, devem ser deixadas como padrão por enquanto.

  6. Na janela Configurações de construção, clique no botão Configurações do player, isso abrirá o painel relacionado no espaço onde o Inspetor está localizado.

    Abra as configurações do player.

  7. Neste painel, algumas configurações precisam ser verificadas:

    1. Na guia Outras configurações:

      1. A versão do tempo de execução de script deve ser estável (equivalente ao .NET 3.5).

      2. O back-end de script deve ser .NET

      3. O nível de compatibilidade da API deve ser .NET 4.6

        Atualize outras configurações.

    2. Na guia Configurações de Publicação, em Recursos, marque:

      1. InternetClient

      2. Microfone

        Atualizando as configurações de publicação.

    3. Mais abaixo no painel, em Configurações XR (encontradas abaixo de Configurações de Publicação), marque Realidade Virtual com Suporte, verifique se o SDK do Windows Mixed Reality foi adicionado.

      Atualize as configurações do X R.

  8. De volta às Configurações de Build, os Projetos C# do Unity não estão mais esmaecidos; marque a caixa de seleção ao lado dela.

  9. Feche a janela Configurações de Build.

  10. Salve sua cena e projeto (FILE > SAVE SCENE / FILE > SAVE PROJECT).

Capítulo 3 - Configuração da câmera principal

Importante

Se você quiser ignorar o componente de configuração do Unity deste curso e continuar direto para o código, sinta-se à vontade para baixar este .unitypackage, importá-lo para o seu projeto como um pacote personalizado e continuar a partir do Capítulo 5. Você ainda precisará criar um projeto do Unity.

  1. No Painel de Hierarquia, você encontrará um objeto chamado Câmera Principal, este objeto representa o ponto de vista da sua "cabeça" quando você estiver "dentro" da sua aplicação.

  2. Com o Painel do Unity à sua frente, selecione o GameObject da Câmera Principal. Você notará que o Painel do Inspetor (geralmente encontrado à direita, dentro do Painel) mostrará os vários componentes desse GameObject, com Transform na parte superior, seguido por Camera e alguns outros componentes. Você precisará redefinir a transformação da câmera principal, para que ela seja posicionada corretamente.

  3. Para fazer isso, selecione o ícone de engrenagem ao lado do componente Transformação da câmera e selecione Redefinir.

    Redefina a transformação da câmera principal.

  4. O componente Transform deve ter a seguinte aparência:

    1. A posição é definida como 0, 0, 0

    2. A rotação é definida como 0, 0, 0

    3. E a escala é definida como 1, 1, 1

      Transformar informações para a câmera

  5. Em seguida, com o objeto Câmera principal selecionado, consulte o botão Adicionar componente localizado na parte inferior do painel Inspetor.

  6. Selecione esse botão e pesquise (digitando Audio Source no campo de pesquisa ou navegando pelas seções) o componente chamado Audio Source , conforme mostrado abaixo, e selecione-o (pressionar Enter também funciona).

  7. Um componente de fonte de áudio será adicionado à câmera principal, conforme demonstrado abaixo.

    Adicione um componente Fonte de áudio.

    Observação

    Para o Microsoft HoloLens, você também precisará alterar o seguinte, que faz parte do componente Câmera em sua Câmera Principal:

    • Bandeiras Claras: Cor Sólida.
    • Plano de fundo 'Preto, Alfa 0' – Cor hexadecimal: #00000000.

Capítulo 4 - Configurar a tela de depuração

Para mostrar a entrada e a saída da tradução, uma interface do usuário básica precisa ser criada. Para este curso, você criará um objeto de interface do usuário do Canvas, com vários objetos 'Text' para mostrar os dados.

  1. Clique com o botão direito do mouse em uma área vazia do Painel de Hierarquia, em UI, adicione uma Tela.

    Adicione um novo objeto de interface do usuário do Canvas.

  2. Com o objeto Canvas selecionado, no Painel Inspetor (dentro do componente 'Canvas'), altere o Modo de renderização para Espaço do mundo.

  3. Em seguida, altere os seguintes parâmetros na Transformação Retângulo do Painel Inspetor:

    1. POS - X 0 Y 0 Z 40

    2. Largura - 500

    3. Altura - 300

    4. Escala - X 0,13 Y 0,13 Z 0,13

      Atualize a transformação rect para a tela.

  4. Clique com o botão direito do mouse na tela no painel de hierarquia, em interface do usuário e adicione um painel. Este painel fornecerá um plano de fundo para o texto que você exibirá na cena.

  5. Clique com o botão direito do mouse no Painel no Painel de Hierarquia, em UI, e adicione um objeto Text. Repita o mesmo processo até criar quatro objetos de texto da interface do usuário no total (Dica: se você tiver o primeiro objeto 'Texto' selecionado, basta pressionar 'Ctrl' + 'D' para duplicá-lo, até ter quatro no total).

  6. Para cada objeto de texto, selecione-o e use as tabelas abaixo para definir os parâmetros no painel Inspetor.

    1. Para o componente Rect Transform:

      Nome Transformar - Posição Width Height
      Rótulo de status do microfone X -80 Y 90 Z 0 300 30
      AzureResponseLabel X -80 Y 30 Z 0 300 30
      Ditado Rótulo X -80 Y -30 Z 0 300 30
      TranslationResultLabel X -80 Y -90 Z 0 300 30
    2. Para o componente Texto (Script):

      Nome Texto Tamanho da Fonte
      Rótulo de status do microfone Status do microfone: 20
      AzureResponseLabel Resposta Web do Azure 20
      Ditado Rótulo Você acabou de dizer: 20
      TranslationResultLabel Translação: 20

      Insira os valores correspondentes para os rótulos da interface do usuário.

    3. Além disso, coloque o estilo da fonte em negrito. Isso tornará o texto mais fácil de ler.

      Fonte em negrito.

  7. Para cada objeto de texto da interface do usuário criado no Capítulo 5, crie um novo objeto de texto da interface do usuário filho. Esses filhos exibirão a saída do aplicativo. Crie objetos filho clicando com o botão direito do mouse no pai pretendido (por exemplo, MicrophoneStatusLabel) e, em seguida, selecione Interface do usuário e, em seguida, selecione Texto.

  8. Para cada um desses filhos, selecione-o e use as tabelas abaixo para definir os parâmetros no Painel Inspetor.

    1. Para o componente Rect Transform:

      Nome Transformar - Posição Width Height
      MicrophoneStatusText X 0 Y -30 Z 0 300 30
      AzureResponseText X 0 Y -30 Z 0 300 30
      Texto do ditado X 0 Y -30 Z 0 300 30
      TranslationResultText X 0 Y -30 Z 0 300 30
    2. Para o componente Texto (Script):

      Nome Texto Tamanho da Fonte
      MicrophoneStatusText ?? 20
      AzureResponseText ?? 20
      Texto do ditado ?? 20
      TranslationResultText ?? 20
  9. Em seguida, selecione a opção de alinhamento 'central' para cada componente de texto:

    Alinhar texto.

  10. Para garantir que os objetos de texto da interface do usuário filho sejam facilmente legíveis, altere sua cor. Faça isso clicando na barra (atualmente 'Preto') ao lado de Cor.

    Insira valores correspondentes para as saídas de texto da interface do usuário.

  11. Em seguida, na nova e pequena janela Cor , altere a Cor Hexadecimal para: 0032EAFF

    Atualize a cor para azul.

  12. Abaixo está como a interface do usuário deve ficar.

    1. No painel Hierarquia:

      Ter hierarquia na estrutura fornecida.

    2. Nas visualizações de cena e jogo:

      Tenha as visualizações de cena e jogo na mesma estrutura.

Capítulo 5 – Criar a classe Resultados

O primeiro script que você precisa criar é a classe Results , que é responsável por fornecer uma maneira de ver os resultados da tradução. A classe armazena e exibe o seguinte:

  • O resultado da resposta do Azure.
  • O status do microfone.
  • O resultado do ditado (voz para texto).
  • O resultado da tradução.

Para criar essa classe:

  1. Clique com o botão direito do mouse no painel Projeto e, em seguida, em Criar > pasta. Nomeie a pasta Scripts.

    Criar pasta de scripts.

    Abra a pasta de scripts.

  2. Com a pasta Scripts create, clique duas vezes nela para abri-la. Em seguida, dentro dessa pasta, clique com o botão direito do mouse e selecione Criar >e, em seguida, Script C#. Nomeie o script como Resultados.

    Crie o primeiro script.

  3. Clique duas vezes no novo script de Resultados para abri-lo com o Visual Studio.

  4. Insira os seguintes namespaces:

        using UnityEngine;
        using UnityEngine.UI;
    
  5. Dentro da Classe insira as seguintes variáveis:

        public static Results instance;
    
        [HideInInspector] 
        public string azureResponseCode;
    
        [HideInInspector] 
        public string translationResult;
    
        [HideInInspector] 
        public string dictationResult;
    
        [HideInInspector] 
        public string micStatus;
    
        public Text microphoneStatusText;
    
        public Text azureResponseText;
    
        public Text dictationText;
    
        public Text translationResultText;
    
  6. Em seguida, adicione o método Awake(), que será chamado quando a classe for inicializada.

        private void Awake() 
        { 
            // Set this class to behave similar to singleton 
            instance = this;           
        } 
    
  7. Por fim, adicione os métodos responsáveis por gerar as várias informações de resultados para a interface do usuário.

        /// <summary>
        /// Stores the Azure response value in the static instance of Result class.
        /// </summary>
        public void SetAzureResponse(string result)
        {
            azureResponseCode = result;
            azureResponseText.text = azureResponseCode;
        }
    
        /// <summary>
        /// Stores the translated result from dictation in the static instance of Result class. 
        /// </summary>
        public void SetDictationResult(string result)
        {
            dictationResult = result;
            dictationText.text = dictationResult;
        }
    
        /// <summary>
        /// Stores the translated result from Azure Service in the static instance of Result class. 
        /// </summary>
        public void SetTranslatedResult(string result)
        {
            translationResult = result;
            translationResultText.text = translationResult;
        }
    
        /// <summary>
        /// Stores the status of the Microphone in the static instance of Result class. 
        /// </summary>
        public void SetMicrophoneStatus(string result)
        {
            micStatus = result;
            microphoneStatusText.text = micStatus;
        }
    
  8. Certifique-se de salvar suas alterações no Visual Studio antes de retornar ao Unity.

Capítulo 6 – Criar a classe MicrophoneManager

A segunda classe que você vai criar é o MicrophoneManager.

Esta classe é responsável por:

  • Detectando o dispositivo de gravação conectado ao fone de ouvido ou máquina (o que for o padrão).
  • Capture o áudio (voz) e use o ditado para armazená-lo como uma string.
  • Depois que a voz for pausada, envie o ditado para a classe Translator.
  • Hospede um método que possa interromper a captura de voz, se desejado.

Para criar essa classe:

  1. Clique duas vezes na pasta Scripts para abri-la.

  2. Clique com o botão direito do mouse dentro da pasta Scripts , clique em Criar > Script C#. Nomeie o script como MicrophoneManager.

  3. Clique duas vezes no novo script para abri-lo com o Visual Studio.

  4. Atualize os namespaces para serem iguais aos seguintes, na parte superior da classe MicrophoneManager :

        using UnityEngine; 
        using UnityEngine.Windows.Speech;
    
  5. Em seguida, adicione as seguintes variáveis dentro da classe MicrophoneManager :

        // Help to access instance of this object 
        public static MicrophoneManager instance; 
    
        // AudioSource component, provides access to mic 
        private AudioSource audioSource; 
    
        // Flag indicating mic detection 
        private bool microphoneDetected; 
    
        // Component converting speech to text 
        private DictationRecognizer dictationRecognizer; 
    
  6. O código para os métodos Awake() e Start() agora precisa ser adicionado. Eles serão chamados quando a classe for inicializada:

        private void Awake() 
        { 
            // Set this class to behave similar to singleton 
            instance = this; 
        } 
    
        void Start() 
        { 
            //Use Unity Microphone class to detect devices and setup AudioSource 
            if(Microphone.devices.Length > 0) 
            { 
                Results.instance.SetMicrophoneStatus("Initialising..."); 
                audioSource = GetComponent<AudioSource>(); 
                microphoneDetected = true; 
            } 
            else 
            { 
                Results.instance.SetMicrophoneStatus("No Microphone detected"); 
            } 
        } 
    
  7. Você pode excluir o método Update(), pois essa classe não o usará.

  8. Agora você precisa dos métodos que o aplicativo usa para iniciar e parar a captura de voz e passá-la para a classe Translator , que você criará em breve. Copie o código a seguir e cole-o abaixo do método Start().

        /// <summary> 
        /// Start microphone capture. Debugging message is delivered to the Results class. 
        /// </summary> 
        public void StartCapturingAudio() 
        { 
            if(microphoneDetected) 
            {               
                // Start dictation 
                dictationRecognizer = new DictationRecognizer(); 
                dictationRecognizer.DictationResult += DictationRecognizer_DictationResult; 
                dictationRecognizer.Start(); 
    
                // Update UI with mic status 
                Results.instance.SetMicrophoneStatus("Capturing..."); 
            }      
        } 
    
        /// <summary> 
        /// Stop microphone capture. Debugging message is delivered to the Results class. 
        /// </summary> 
        public void StopCapturingAudio() 
        { 
            Results.instance.SetMicrophoneStatus("Mic sleeping"); 
            Microphone.End(null); 
            dictationRecognizer.DictationResult -= DictationRecognizer_DictationResult; 
            dictationRecognizer.Dispose(); 
        }
    

    Dica

    Embora este aplicativo não faça uso dele, o método StopCapturingAudio() também foi fornecido aqui, caso você queira implementar a capacidade de interromper a captura de áudio em seu aplicativo.

  9. Agora você precisa adicionar um manipulador de ditado que será invocado quando a voz parar. Esse método passará o texto ditado para a classe Translator .

        /// <summary>
        /// This handler is called every time the Dictation detects a pause in the speech. 
        /// Debugging message is delivered to the Results class.
        /// </summary>
        private void DictationRecognizer_DictationResult(string text, ConfidenceLevel confidence)
        {
            // Update UI with dictation captured
            Results.instance.SetDictationResult(text);
    
            // Start the coroutine that process the dictation through Azure 
            StartCoroutine(Translator.instance.TranslateWithUnityNetworking(text));   
        }
    
  10. Certifique-se de salvar suas alterações no Visual Studio antes de retornar ao Unity.

Aviso

Neste ponto, você notará um erro aparecendo no Painel do Console do Editor do Unity ("O nome 'Tradutor' não existe..."). Isso ocorre porque o código faz referência à classe Translator , que você criará no próximo capítulo.

Capítulo 7 – Chamada para o Azure e o serviço de tradutor

O último script que você precisa criar é a classe Translator .

Esta classe é responsável por:

  • Autenticar o aplicativo com o Azure, em troca de um token de autenticação.
  • Use o Token de Autenticação para enviar texto (recebido da Classe MicrophoneManager ) para ser traduzido.
  • Receba o resultado traduzido e passe-o para a Classe de Resultados para ser visualizado na interface do usuário.

Para criar esta classe:

  1. Vá para a pasta Scripts que você criou anteriormente.

  2. Clique com o botão direito do mouse no painel Projeto, Criar > Script C#. Chame o script de Translator.

  3. Clique duas vezes no novo script do Tradutor para abri-lo com o Visual Studio.

  4. Adicione os seguintes namespaces à parte superior do arquivo:

        using System;
        using System.Collections;
        using System.Xml.Linq;
        using UnityEngine;
        using UnityEngine.Networking;
    
  5. Em seguida, adicione as seguintes variáveis dentro da classe Translator :

        public static Translator instance; 
        private string translationTokenEndpoint = "https://api.cognitive.microsoft.com/sts/v1.0/issueToken"; 
        private string translationTextEndpoint = "https://api.microsofttranslator.com/v2/http.svc/Translate?"; 
        private const string ocpApimSubscriptionKeyHeader = "Ocp-Apim-Subscription-Key"; 
    
        //Substitute the value of authorizationKey with your own Key 
        private const string authorizationKey = "-InsertYourAuthKeyHere-"; 
        private string authorizationToken; 
    
        // languages set below are: 
        // English 
        // French 
        // Italian 
        // Japanese 
        // Korean 
        public enum Languages { en, fr, it, ja, ko }; 
        public Languages from = Languages.en; 
        public Languages to = Languages.it; 
    

    Observação

    • Os idiomas inseridos no enum de idiomas são apenas exemplos. Sinta-se à vontade para adicionar mais, se desejar; a API suporta mais de 60 idiomas (incluindo Klingon)!
    • Há uma página mais interativa que cobre os idiomas disponíveis, embora esteja ciente de que a página só parece funcionar quando o idioma do site está definido como '' (e o site da Microsoft provavelmente redirecionará para seu idioma nativo). Você pode alterar o idioma do site na parte inferior da página ou alterando o URL.
    • O valor authorizationKey, no snippet de código acima, deve ser a chave que você recebeu quando se inscreveu na API de Texto do Azure Translator. Isso foi abordado no Capítulo 1.
  6. O código para os métodos Awake() e Start() agora precisa ser adicionado.

  7. Nesse caso, o código fará uma chamada para o Azure usando a chave de autorização, para obter um token.

        private void Awake() 
        { 
            // Set this class to behave similar to singleton  
            instance = this; 
        } 
    
        // Use this for initialization  
        void Start() 
        { 
            // When the application starts, request an auth token 
            StartCoroutine("GetTokenCoroutine", authorizationKey); 
        }
    

    Observação

    O token expirará após 10 minutos. Dependendo do cenário do seu app, talvez seja necessário fazer a mesma chamada de corrotina várias vezes.

  8. A corrotina para obter o Token é a seguinte:

        /// <summary> 
        /// Request a Token from Azure Translation Service by providing the access key. 
        /// Debugging result is delivered to the Results class. 
        /// </summary> 
        private IEnumerator GetTokenCoroutine(string key)
        {
            if (string.IsNullOrEmpty(key))
            {
                throw new InvalidOperationException("Authorization key not set.");
            }
    
            using (UnityWebRequest unityWebRequest = UnityWebRequest.Post(translationTokenEndpoint, string.Empty))
            {
                unityWebRequest.SetRequestHeader("Ocp-Apim-Subscription-Key", key);
                yield return unityWebRequest.SendWebRequest();
    
                long responseCode = unityWebRequest.responseCode;
    
                // Update the UI with the response code 
                Results.instance.SetAzureResponse(responseCode.ToString());
    
                if (unityWebRequest.isNetworkError || unityWebRequest.isHttpError)
                {
                    Results.instance.azureResponseText.text = unityWebRequest.error;
                    yield return null;
                }
                else
                {
                    authorizationToken = unityWebRequest.downloadHandler.text;
                }
            }
    
            // After receiving the token, begin capturing Audio with the MicrophoneManager Class 
            MicrophoneManager.instance.StartCapturingAudio();
        }
    

    Aviso

    Se você editar o nome do método IEnumerator GetTokenCoroutine(), precisará atualizar os valores de cadeia de caracteres de chamada StartCoroutine e StopCoroutine no código acima. De acordo com a documentação do Unity, para interromper uma corrotina específica, você precisa usar o método de valor de string.

  9. Em seguida, adicione a corrotina (com um método de fluxo "support" logo abaixo dela) para obter a tradução do texto recebido pela classe MicrophoneManager . Esse código cria uma cadeia de caracteres de consulta a ser enviada para a API de Tradução de Texto do Azure e, em seguida, usa a classe interna UnityWebRequest do Unity para fazer uma chamada 'Get' para o ponto de extremidade com a cadeia de caracteres de consulta. O resultado é usado para definir a conversão em seu objeto Results. O código abaixo mostra a implementação:

        /// <summary> 
        /// Request a translation from Azure Translation Service by providing a string.  
        /// Debugging result is delivered to the Results class. 
        /// </summary> 
        public IEnumerator TranslateWithUnityNetworking(string text)
        {
            // This query string will contain the parameters for the translation 
            string queryString = string.Concat("text=", Uri.EscapeDataString(text), "&from=", from, "&to=", to);
    
            using (UnityWebRequest unityWebRequest = UnityWebRequest.Get(translationTextEndpoint + queryString))
            {
                unityWebRequest.SetRequestHeader("Authorization", "Bearer " + authorizationToken);
                unityWebRequest.SetRequestHeader("Accept", "application/xml");
                yield return unityWebRequest.SendWebRequest();
    
                if (unityWebRequest.isNetworkError || unityWebRequest.isHttpError)
                {
                    Debug.Log(unityWebRequest.error);
                    yield return null;
                }
    
                // Parse out the response text from the returned Xml
                string result = XElement.Parse(unityWebRequest.downloadHandler.text).Value;
                Results.instance.SetTranslatedResult(result);
            }
        }
    
  10. Certifique-se de salvar suas alterações no Visual Studio antes de retornar ao Unity.

Capítulo 8 – Configurar a cena do Unity

  1. De volta ao Editor do Unity, clique e arraste a classe Results da pasta Scripts para o objeto Main Camera no Painel de Hierarquia.

  2. Clique na Câmera Principal e olhe para o Painel do Inspetor. Você notará que, no componente Script recém-adicionado, há quatro campos com valores vazios. Essas são as referências de saída para as propriedades no código.

  3. Arraste os objetos de texto apropriados do painel de hierarquia para esses quatro slots, conforme mostrado na imagem abaixo.

    Atualize as referências de destino com valores especificados.

  4. Em seguida, clique e arraste a classe Translator da pasta Scripts para o objeto Main Camera no Painel de Hierarquia.

  5. Em seguida, clique e arraste a classe MicrophoneManager da pasta Scripts para o objeto Câmera Principal no Painel de Hierarquia.

  6. Por fim, clique na Câmera Principal e olhe para o Painel do Inspetor. Você notará que no script que você arrastou, existem duas caixas suspensas que permitirão definir os idiomas.

    Certifique-se de que os idiomas de tradução pretendidos sejam inseridos.

Capítulo 9 – Teste em realidade mista

Neste ponto, você precisa testar se a cena foi implementada corretamente.

Verifique se:

  • Todas as configurações mencionadas no Capítulo 1 estão definidas corretamente.
  • Os scripts Results, Translator e MicrophoneManager são anexados ao objeto Main Camera .
  • Você colocou sua Chave de Serviço da API de Tradução de Texto do Azure na variável authorizationKey dentro do Script de Tradução.
  • Todos os campos no Painel Inspetor de Câmera Principal são atribuídos corretamente.
  • Seu microfone está funcionando ao executar sua cena (caso contrário, verifique se o microfone conectado é o dispositivo padrão e se você o configurou corretamente no Windows).

Você pode testar o headset imersivo pressionando o botão Reproduzir no Editor do Unity. O aplicativo deve estar funcionando por meio do fone de ouvido imersivo conectado.

Aviso

Se você vir um erro no console do Unity sobre a alteração do dispositivo de áudio padrão, a cena pode não funcionar conforme o esperado. Isso se deve à maneira como o portal de realidade misturada lida com microfones internos para fones de ouvido que os possuem. Se você vir esse erro, simplesmente pare a cena e reinicie-a e as coisas devem funcionar conforme o esperado.

Capítulo 10 – Criar a solução UWP e fazer sideload no computador local

Tudo o que é necessário para a seção Unity deste projeto foi concluído, então é hora de construí-lo a partir do Unity.

  1. Navegue até Configurações de compilação: Configurações de compilação de arquivo > ...

  2. Na janela Configurações de Compilação, clique em Compilar.

    Crie a cena do Unity.

  3. Se ainda não estiver, marque Projetos C# do Unity.

  4. Clique em Compilar. O Unity abrirá uma janela do Explorador de Arquivos, onde você precisa criar e selecionar uma pasta para criar o aplicativo. Crie essa pasta agora e nomeie-a como App. Em seguida, com a pasta App selecionada, pressione Select Folder (Selecionar pasta).

  5. O Unity começará a criar seu projeto na pasta App .

  6. Depois que o Unity terminar de compilar (pode levar algum tempo), ele abrirá uma janela do Explorador de Arquivos no local da compilação (verifique a barra de tarefas, pois nem sempre ela aparece acima das janelas, mas notificará você sobre a adição de uma nova janela).

Capítulo 11 – Implantar seu aplicativo

Para implantar seu aplicativo:

  1. Navegue até o novo build do Unity (a pasta App ) e abra o arquivo de solução com o Visual Studio.

  2. Na Configuração da Solução, selecione Depurar.

  3. Na Plataforma de Solução, selecione x86, Computador Local.

    Para o Microsoft HoloLens, talvez seja mais fácil definir isso como Computador Remoto, para que você não fique preso ao computador. No entanto, você também precisará fazer o seguinte:

    • Conheça o endereço IP do HoloLens, que pode ser encontrado nas Configurações > Opções avançadas de Wi-Fi > de rede e Internet>; o IPv4 é o endereço que você deve usar.
    • Certifique-se de que o Modo de desenvolvedor esteja ativado; encontrado em Atualização de configurações > e segurança > Para desenvolvedores.

    Implante a solução do Visual Studio.

  4. Vá para o menu Compilar e clique em Implantar Solução para carregar o aplicativo em seu PC.

  5. Seu aplicativo agora deve aparecer na lista de aplicativos instalados, pronto para ser iniciado.

  6. Uma vez iniciado, o aplicativo solicitará que você autorize o acesso ao microfone. Certifique-se de clicar no botão SIM .

  7. Agora você está pronto para começar a traduzir!

Seu aplicativo da API de tradução de texto finalizado

Parabéns, você criou um aplicativo de realidade misturada que aproveita a API de Tradução de Texto do Azure para converter fala em texto traduzido.

Produto final.

Exercícios de bônus

Exercício 1

Você pode adicionar a funcionalidade de conversão de texto em fala ao aplicativo, para que o texto retornado seja falado?

Exercício 2

Possibilite que o usuário altere os idiomas de origem e saída ('de' e 'para') dentro do próprio aplicativo, para que o aplicativo não precise ser recriado toda vez que você quiser alterar os idiomas.