Partilhar via


HoloLens (1.ª geração) e Azure 301: Tradução linguística


Nota

Os tutoriais da Academia de Realidade Mista foram projetados com HoloLens (1ª geração) e Headsets Imersivos de Realidade Mista em mente. Como tal, sentimos que é importante deixar estes tutoriais no lugar para desenvolvedores que ainda estão procurando orientação no desenvolvimento para esses dispositivos. Esses tutoriais não serão atualizados com os conjuntos de ferramentas ou interações mais recentes que estão sendo usados para o HoloLens 2. Eles serão mantidos para continuar trabalhando nos dispositivos suportados. Haverá uma nova série de tutoriais que serão publicados no futuro que demonstrarão como desenvolver para o HoloLens 2. Este aviso será atualizado com um link para esses tutoriais quando eles forem publicados.


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

Produto final

A Translator Text API é um serviço de tradução que funciona quase em tempo real. O Serviço é baseado em nuvem e, usando uma chamada de 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 Tradutor do Azure.

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

  1. O usuário falará em um microfone conectado a um fone de ouvido imersivo (VR) (ou o microfone embutido 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 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ê pode estar criando.

Suporte de dispositivos

Curso HoloLens Auriculares imersivos
MR e Azure 301: Tradução de idiomas ✔️ ✔️

Nota

Embora este curso se concentre principalmente em fones de ouvido imersivos (VR) do Windows Mixed Reality, você também pode aplicar o que aprendeu neste curso ao Microsoft HoloLens. À medida que você acompanha o curso, você verá anotações sobre quaisquer alterações que você possa precisar empregar para dar suporte ao HoloLens. Ao utilizar o HoloLens, poderá notar algum eco durante a captura de voz.

Pré-requisitos

Nota

Este tutorial foi projetado para desenvolvedores que têm experiência básica com Unity e C#. Por favor, esteja ciente de que os pré-requisitos e 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 software mais recente do que o listado abaixo.

Recomendamos o seguinte hardware e software para este curso:

Antes de começar

  • Para evitar encontrar 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 em tempo de compilação).

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

  • Para permitir que o seu PC ative o ditado, aceda a Definições > de Fala de Privacidade > , imprima à tinta e selecione o botão Ativar serviços de voz e sugestões de escrita.

  • Se estiver a utilizar um microfone e auscultadores ligados (ou incorporados) ao auricular, certifique-se de que a opção "Quando usar o auricular, mude para o microfone do auricular" está ativada em Definições > Áudio e voz de realidade > mista.

    Configurações de realidade mista

    Configuração do microfone

Aviso

Esteja ciente de que, se você estiver desenvolvendo um fone de ouvido imersivo para este laboratório, poderá ter problemas no 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 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 Tradutor do Azure, você precisará configurar uma instância do Serviço a ser disponibilizada para seu aplicativo.

  1. Inicie sessão no Portal do Azure.

    Nota

    Se ainda não tiver uma conta do Azure, terá de criar uma. Se você estiver seguindo este tutorial em uma situação de sala de aula ou laboratório, peça ajuda ao seu instrutor ou a um dos proctors 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

    Nota

    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 Texto do Tradutor. No canto inferior esquerdo desta página, selecione o botão Criar para criar uma associação com este Serviço.

    Criar serviço de API de texto do tradutor

  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 Nível de Preços apropriado para você, se esta for a primeira vez que cria um Serviço de Texto do Tradutor, um nível gratuito (chamado F0) deve 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 desejar ler mais sobre os Grupos de Recursos do Azure, visite o artigo do grupo de recursos.

    5. Determine a Localização do seu grupo de recursos (se estiver a criar um novo Grupo de Recursos). O ideal seria que o local fosse 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 compreendeu 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 aparecerá no portal assim que a instância de serviço for criada.

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

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

    Vá para pop-up de recurso.

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

    Página do Serviço de API de Texto do Tradutor

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

  10. Na página Início rápido do seu Serviço de Texto do Tradutor, 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. Tire uma cópia de uma das chaves exibidas, pois você precisará disso mais tarde em seu projeto.

Capítulo 2 – Configurar o projeto Unity

Configure e teste o seu auricular imersivo de realidade mista.

Nota

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

O seguinte é uma configuração típica para desenvolver com realidade mista e, como tal, é um bom modelo para outros projetos:

  1. Abra o Unity e clique em Novo.

    Inicie um novo projeto Unity.

  2. Agora você precisará fornecer um nome de Projeto Unity. Inserir MR_Translation. Verifique se o tipo de projeto está definido como 3D. Defina o Local para algum lugar apropriado para você (lembre-se, mais perto de diretórios raiz é melhor). Em seguida, clique em Criar projeto.

    Forneça detalhes para o novo projeto 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 Scripts 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 compilação de arquivos > e mude a plataforma para a Plataforma Universal do Windows, clicando no botão Alternar plataforma.

    Janela Configurações de compilação, mude a plataforma para UWP.

  5. Vá para Configurações de compilação de arquivo > e certifique-se de que:

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

      Para Microsoft HoloLens, defina Target Device como HoloLens.

    2. O tipo de compilação está definido como D3D

    3. O SDK está definido como Instalado mais recente

    4. Versão do Visual Studio está definida como A versão mais recente instalada

    5. Build and Run está definido como Máquina Local

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

      1. Faça isso selecionando Adicionar cenas abertas. Será exibida uma janela de salvamento.

        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 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.

        Esteja ciente, você deve salvar suas cenas Unity dentro da pasta Ativos , pois elas devem estar associadas ao Projeto Unity. Criar a pasta scenes (e outras pastas semelhantes) é uma maneira típica de estruturar um projeto Unity.

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

  6. Na janela Configurações de compilaçã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 Scripting Runtime deve ser estável (equivalente ao .NET 3.5).

      2. O back-end de scripts 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, verifique:

      1. InternetClient

      2. Microfone

        Atualização das 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 suportada, verifique se o SDK de realidade mista do Windows foi adicionado.

      Atualize as configurações do X R.

  8. De volta às Configurações de compilação, o Unity C# Projects não está mais acinzentado, marque a caixa de seleção ao lado disso.

  9. Feche a janela Configurações de compilação.

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

Capítulo 3 – Configuração da câmara principal

Importante

Se você deseja pular o componente Unity set deste curso e continuar direto no código, sinta-se à vontade para baixar este .unitypackage, importá-lo para seu projeto como um pacote personalizado e, em seguida, continuar a partir do Capítulo 5. Você ainda precisará criar um Projeto Unity.

  1. No Painel de Hierarquia, você encontrará um objeto chamado Câmara Principal, este objeto representa o seu ponto de vista "cabeça" uma vez que você está "dentro" do seu aplicativo.

  2. Com o Painel 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 esteja posicionada corretamente.

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

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

  4. O componente Transformar deve então 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 Escala é definida como 1, 1, 1

      Transforme informações para a câmera

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

  6. Selecione esse botão e procure (digitando Fonte de áudio no campo de pesquisa ou navegando nas seções) pelo componente chamado Fonte de áudio, 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.

    Nota

    Para o Microsoft HoloLens, você também precisará alterar o seguinte, que fazem parte do componente Câmera na sua câmera principal:

    • Clear Flags: Cor sólida.
    • Fundo 'Preto, Alpha 0' – Cor hexadecimal: #00000000.

Capítulo 4 – Setup Debug Canvas

Para mostrar a entrada e saída da tradução, uma interface do usuário básica precisa ser criada. Para este curso, você criará um objeto Canvas UI, 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 Canvas UI.

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

  3. Em seguida, altere os seguintes parâmetros na Transformação Rect do Painel do 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 ret para a tela.

  4. Clique com o botão direito do mouse na tela no Painel de hierarquia, em UI, 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é ter criado quatro objetos UI Text no total (Dica: se você tiver o primeiro objeto 'Text' selecionado, você pode simplesmente 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 Largura Altura
      MicrofoneStatusLabel X -80 Y 90 Z 0 300 30
      AzureResponseLabel X -80 Y 30 Z 0 300 30
      DitadoRó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 do Tipo de Letra
      MicrofoneStatusLabel Estado do microfone: 20
      AzureResponseLabel Resposta da Web do Azure 20
      DitadoRótulo Você acabou de dizer: 20
      TranslationResultLabel Tradução: 20

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

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

      Fonte negrito.

  7. Para cada objeto UI Text criado no Capítulo 5, crie um novo objeto filho UI Text. Essas crianças 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 UI 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 do Inspetor.

    1. Para o componente Rect Transform :

      Nome Transformar - Posição Largura Altura
      MicrofoneStatusText X 0 Y -30 Z 0 300 30
      AzureResponseText X 0 Y -30 Z 0 300 30
      DitadoTexto X 0 Y -30 Z 0 300 30
      TraduçãoResultText X 0 Y -30 Z 0 300 30
    2. Para o componente Texto (Script):

      Nome Texto Tamanho do Tipo de Letra
      MicrofoneStatusText ?? 20
      AzureResponseText ?? 20
      DitadoTexto ?? 20
      TraduçãoResultText ?? 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 janela Color, altere a cor hexadecimal para: 0032EAFF

    Atualize a cor para azul.

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

    1. No Painel Hierarquia:

      Ter hierarquia na estrutura fornecida.

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

      Tenha a cena e as vistas do jogo na mesma estrutura.

Capítulo 5 – Criar a classe Results

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 esta classe:

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

    Crie uma pasta de scripts.

    Abra a pasta scripts.

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

    Crie o primeiro script.

  3. Clique duas vezes no novo script 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. Finalmente, adicione os métodos que são responsáveis por enviar 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:

  • Detetar 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 cadeia de caracteres.
  • Uma vez pausada a voz, envie o ditado para a classe Tradutor.
  • Hospede um método que pode parar a captura de voz, se desejado.

Para criar esta 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 MicrophoneManager.

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

  4. Atualize os namespaces para que sejam 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. Estes serão chamados quando a classe inicializar:

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

    Gorjeta

    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 parar de capturar á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 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 serviço de tradução

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 Results 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 Tradutor.

  3. Clique duas vezes no novo script Translator 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; 
    

    Nota

    • As línguas inseridas no enum linguístico 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 cobrindo 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 trecho de código acima, deve ser a Chave que você recebeu quando se inscreveu na API de Texto do Tradutor do Azure. Esta questão foi abordada 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); 
        }
    

    Nota

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

  8. A co-rotina 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 da cadeia de caracteres de chamada StartCoroutine e StopCoroutine no código acima. De acordo com a documentação do Unity, para parar uma co-rotina específica, você precisa usar o método string value.

  9. Em seguida, adicione a co-rotina (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 para enviar à API de Texto do Tradutor do Azure e, em seguida, usa a classe interna Unity WebRequest para fazer uma chamada 'Get' para o ponto de extremidade com a cadeia de caracteres de consulta. O resultado é então usado para definir a tradução no 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 Unity

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

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

  3. Arraste os objetos Text 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 Hierarchy.

  5. Em seguida, clique e arraste a classe MicrophoneManager da pasta Scripts para o objeto Main Camera no painel Hierarchy.

  6. Por fim, clique na câmera principal e olhe para o painel do inspetor. Você notará que no script que você arrastou, há duas caixas suspensas que permitirão que você defina os idiomas.

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

Capítulo 9 – Teste em realidade mista

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

Certifique-se de que:

  • 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 Texto do Tradutor do Azure dentro da variável authorizationKey dentro do Script do Tradutor.
  • Todos os campos no painel principal do inspetor da câmera são atribuídos corretamente.
  • O microfone está funcionando ao executar a cena (se não, verifique se o microfone conectado é o dispositivo padrão e se você o configurou corretamente no Windows).

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

Aviso

Se você vir um erro no console Unity sobre a alteração do dispositivo de áudio padrão, a cena pode não funcionar conforme o esperado. Isso se deve à forma como o portal de realidade mista lida com microfones embutidos para fones de ouvido que os possuem. Se você vir esse erro, basta parar a cena e iniciá-la novamente e as coisas devem funcionar como esperado.

Capítulo 10 – Criar a solução UWP e sideload na máquina local

Tudo o que é necessário para a seção Unity deste projeto já foi concluído, então é hora de construí-lo a partir de 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.

    Construa a cena Unity.

  3. Se ainda não tiver, marque Unity C# Projects.

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

  5. Unity começará a construir seu projeto para a pasta App .

  6. Assim que o Unity terminar de construir (pode levar algum tempo), ele abrirá uma janela do Explorador de Arquivos no local da sua compilação (verifique sua barra de tarefas, pois nem sempre ela aparecerá acima de suas 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é sua nova compilação 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, Máquina Local.

    Para o Microsoft HoloLens, você pode achar mais fácil definir isso como Máquina Remota, para que você não esteja preso ao seu computador. No entanto, você também precisará fazer o seguinte:

    • Conheça o endereço IP do seu HoloLens, que pode ser encontrado nas Configurações > de Rede e Opções Avançadas de Wi-Fi > da Internet>, o IPv4 é o endereço que você deve usar.
    • Verifique se o Modo de Desenvolvedor está 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 Build e clique em Deploy Solution para fazer sideload do aplicativo para o seu PC.

  5. Seu aplicativo agora deve aparecer na lista de aplicativos instalados, prontos para serem iniciados.

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

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

Seu aplicativo de API de texto de tradução concluído

Parabéns, você criou um aplicativo de realidade mista que aproveita a API de Texto de Tradução 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 reconstruído toda vez que você quiser alterar idiomas.