HoloLens (1º género) e Azure 301: Tradução linguística


Nota

Os tutoriais da Mixed Reality Academy foram desenhados com HoloLens (1º género) e Auscultadores Imersivos de Realidade Mista em mente. Como tal, sentimos que é importante deixar estes tutoriais no lugar para os desenvolvedores que ainda estão à procura de orientação no desenvolvimento para esses dispositivos. Estes tutoriais não serão atualizados com os mais recentes instrumentos ou interações a serem utilizados para HoloLens 2. Serão mantidos para continuar a trabalhar nos dispositivos suportados. Haverá uma nova série de tutoriais que serão publicados no futuro que demonstrarão como se desenvolver para HoloLens 2. Este aviso será atualizado com um link para esses tutoriais quando forem publicados.


Neste curso, você aprenderá a adicionar capacidades de tradução a uma aplicação de realidade mista usando Azure Cognitive Services, com o Tradutor Texto API.

Produto final

A API de texto Tradutor é um serviço de tradução que funciona em tempo real. O Serviço é baseado em nuvem e, usando uma chamada REST API, uma aplicação pode usar a tecnologia de tradução de máquinas neurais para traduzir texto para outra língua. Para mais informações, visite a página API de texto Azure Tradutor.

Após a conclusão deste curso, terá uma aplicação de realidade mista que poderá fazer o seguinte:

  1. O utilizador falará num microfone ligado a um auricular imersivo (VR) (ou ao microfone incorporado de HoloLens).
  2. A aplicação irá capturar o ditado e enviá-lo para a API de texto Tradutor AZure.
  3. O resultado da tradução será exibido num simples grupo de UI na Cena da Unidade.

Este curso irá ensinar-lhe como obter os resultados do Serviço de Tradutor numa aplicação de amostra baseada na Unidade. Cabe-lhe a si aplicar estes conceitos a uma aplicação personalizada que poderá estar a construir.

Suporte de dispositivos

Curso HoloLens Auscultadores imersivos
MR e Azure 301: Tradução linguística ✔️ ✔️

Nota

Embora este curso se centre principalmente em auscultadores imersivos Windows Mixed Reality (VR), também pode aplicar o que aprende neste curso para Microsoft HoloLens. À medida que acompanha o curso, verá notas sobre quaisquer alterações que possa ter de empregar para apoiar HoloLens. Ao utilizar HoloLens, poderá notar algum eco durante a captura de voz.

Pré-requisitos

Nota

Este tutorial é projetado para desenvolvedores que têm experiência básica com Unidade e C#. Tenha também em atenção que os pré-requisitos e instruções escritas neste documento representam o que foi testado e verificado no momento da escrita (maio de 2018). Você é livre de usar o software mais recente, como listado dentro do artigo de instalação do artigo de ferramentas, embora não deva presumir-se que as informações neste curso irão perfeitamente corresponder ao que você vai 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 na construção deste projeto, sugere-se fortemente que crie o projeto mencionado neste tutorial numa pasta de raiz ou de raiz (os caminhos de pasta longa podem causar problemas no tempo de construção).

  • O código deste tutorial permitir-lhe-á gravar a partir do dispositivo de microfone predefinido ligado ao seu PC. Certifique-se de que o dispositivo de microfone predefinido está definido para o dispositivo que pretende utilizar para capturar a sua voz.

  • Para permitir que o seu PC ative o ditado, vá a Definições Privacy > Speech, & digitando e selecione o botão >.

  • Se estiver a utilizar um microfone e auscultadores ligados (ou incorporados) aos seus auscultadores, certifique-se de que a opção "Quando uso o meu auricular, mude para o microfone dos auscultadores" é ativada Definições > Misturação de realidade áudio e fala.

    Configurações de realidade mista

    Configuração do microfone

Aviso

Esteja ciente de que se estiver a desenvolver um auricular imersivo para este laboratório, poderá experimentar problemas com o dispositivo de saída de áudio. Isto deve-se a um problema com a Unidade, que é corrigido em versões posteriores da Unidade (Unidade 2018.2). O problema impede a Unidade de alterar o dispositivo de saída de áudio predefinido no tempo de funcionaamento. Como um trabalho ao redor, certifique-se de ter completado os passos acima, e fechar e reabrir o Editor, quando esta questão se apresentar.

Capítulo 1 – O Portal Azure

Para utilizar a API Azure Tradutor, terá de configurar uma instância do Serviço a disponibilizar à sua aplicação.

  1. Faça login no Portal Azure.

    Nota

    Se ainda não tiver uma conta Azure, terá de criar uma. Se estiver a seguir este tutorial numa sala de aula ou em laboratório, peça ao seu instrutor ou a um dos proctors para ajudar a criar a sua nova conta.

  2. Assim que iniciar sessão, clique em New no canto superior esquerdo e procure por "Tradutor Text API". Selecione Entrar.

    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 Tradutor. Na parte inferior esquerda desta página, selecione o botão Criar, para criar uma associação com este Serviço.

    Criar Tradutor serviço de API de texto

  4. Uma vez clicado no Criar:

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

    2. Selecione uma subscriçãoapropriada.

    3. Selecione o Nível de Preços apropriado para si, se esta for a primeira vez que cria um Serviço de Texto Tradutor, um nível gratuito (chamado F0) deve estar disponível para si.

    4. Escolha um Grupo de Recursos ou crie um novo. Um grupo de recursos fornece uma forma de monitorizar, controlar o acesso, fornecer e gerir a faturação para uma recolha de ativos da Azure. Recomenda-se manter todos os Serviços Azure associados a um único projeto (por exemplo, como estes laboratórios) sob um grupo de recursos comuns).

      Se desejar ler mais sobre os Grupos de Recursos 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). A localização seria idealmente na região onde a aplicação iria decorrer. Alguns ativos da Azure só estão disponíveis em certas regiões.

    6. Também terá de confirmar que compreendeu os Termos e Condições aplicados a este Serviço.

    7. Selecione Criar.

      Selecione Criar o botão.

  5. Uma vez clicado no Create,terá de esperar pela criação do Serviço, pode demorar 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 Azure

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

    Vai para o pop-up de recursos.

  8. Clique no botão 'Ir ao recurso' na notificação para explorar a sua nova instância de Serviço. Você será levado para o seu novo Tradutor exemplo do Serviço API de texto.

    página de serviço de API de texto de Tradutor

  9. Dentro deste tutorial, a sua aplicação terá de estórias para o seu Serviço, o que é feito através da utilização da Chave de Subscrição do seu Serviço.

  10. A partir da página de arranque rápido do seu Serviço de Texto Tradutor, navegue até ao primeiro passo, agarre as suas teclase clique em Teclas (também pode fazê-lo clicando nas teclas de hiperligação azul, localizadas no menu de navegação serviços, denotadas pelo ícone chave). Isto revelará as suas Chavesde Serviço.

  11. Pegue uma cópia de uma das chaves apresentadas, pois vai precisar disso mais tarde no seu projeto.

Capítulo 2 - Criar o projeto Unidade

Configurar e testar os auscultadores imersivos de realidade mista.

Nota

Não vai precisar de controladores de movimento para este curso. Se precisar de suporte para configurar um auricular imersivo, siga estes passos.

O seguinte é um conjunto típico para o desenvolvimento com realidade mista e, como tal, é um bom modelo para outros projetos:

  1. Abra a unidade e clique em Novo.

    Inicie o novo projeto de Unidade.

  2. Agora terá de fornecer um nome Project de unidade. Insira MR_Translation. Certifique-se de que o tipo de projeto está definido para 3D. Desa esta medida para um local apropriado para si (lembre-se, mais perto dos diretórios de raiz é melhor). Em seguida, clique em Criar projeto.

    Forneça detalhes para o novo projeto de Unidade.

  3. Com a Unidade aberta, vale a pena verificar se o Script Editor padrão está definido para Visual Studio. Vá para Editar Preferências e, em seguida, a partir da nova janela, navegue para Ferramentas Externas. Alterar editor de script externo para Visual Studio 2017. Feche a janela Preferências.

    Atualizar a preferência do editor do script.

  4. Em seguida, vá ao File Build Definições e mude a plataforma para Plataforma de Windows Universal,clicando no botão 'Plataforma Switch'.

    Construa Definições janela, mude a plataforma para UWP.

  5. Vá à Build de Arquivos Definições e certifique-se de que:

    1. O dispositivo-alvo está definido para qualquer dispositivo.

      Para Microsoft HoloLens, desaponte o dispositivo alvo para HoloLens.

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

    3. SDK está definido para as últimas instalações

    4. Visual Studio versão está definida para o mais recente instalado

    5. Build and Run está definido para máquina local

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

      1. Faça-o selecionando Add Open Scenes. Aparecerá uma janela de salvamento.

        Clique em adicionar botão de cenas abertas

      2. Crie uma nova pasta para isto e qualquer futuro, cena, em seguida, selecione o botão nova pasta, para criar uma nova pasta, nomeie-a Cenas.

        Criar uma pasta de scripts novos

      3. Abra a pasta Cenas recém-criada e, em seguida, no nome Ficheiro: campo de texto, escreva MR_TranslationScene,depois prima Guardar.

        Dê um nome à nova cena.

        Esteja atento, tem de guardar as suas cenas de Unidade dentro da pasta Ativos, uma vez que devem estar associadas à Unidade Project. Criar a pasta cenas (e outras pastas semelhantes) é uma forma típica de estruturar um projeto de Unidade.

    7. As definições restantes, em Build Definições,devem ser deixadas como padrão por enquanto.

  6. Na janela Build Definições, clique no botão Player Definições, isto abrirá o painel relacionado no espaço onde o Inspetor está localizado.

    Abra as definições do jogador.

  7. Neste painel, é necessário verificar algumas definições:

    1. No separador Other Definições:

      1. A versão de tempo de execução de scripts deve ser estável (.NET 3.5 Equivalente).

      2. Scripting Backend deve ser .NET

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

        Atualize outras definições.

    2. No separador Definições de Publicação, em Capacidades,verifique:

      1. InternetClient

      2. Microfone

        Atualizar as definições de publicação.

    3. Mais abaixo no painel, em XR Definições (encontrado abaixo Definições De Publicação),marque o Suporte à Realidade Virtual, certifique-se de que o Windows Mixed Reality SDK é adicionado.

      Atualize o X R Definições.

  8. Back in Build Definições, Unity C# Projects já não está acinzentado; marque a caixa de verificação ao lado desta.

  9. Feche a janela Build Definições.

  10. Guarde a sua Cena e Project(CENA DE SALVAMENTO DE FICHEIROS / > PROJETO DE SALVAMENTO DE FICHEIROS).

Capítulo 3 - Configuração da Câmara Principal

Importante

Se desejar saltar a componente De Unidade Configurar este curso, e continuar em linha reta em código, sinta-se livre para descarregar esta .unitypackage, importá-la para o seu projeto como pacote personalizado, e depois continuar a partir do Capítulo 5. Ainda terá de criar uma Project de unidade.

  1. No Painel hierarquia, encontrará um objeto chamado Câmara Principal, este objeto representa o seu ponto de vista de "cabeça" uma vez que está "dentro" da sua aplicação.

  2. Com o Painel de Unidade à sua frente, selecione o GameObject da Câmara Principal. Irá notar que o Painel de Inspetores (geralmente encontrado à direita, dentro do Painel de Instrumentos) mostrará os vários componentes desse GameObject, com a Transform no topo, seguido da Câmara, e alguns outros componentes. Terá de reiniciar a Transformação da Câmara Principal, para que esta esteja corretamente posicionada.

  3. Para isso, selecione o ícone De Engrenagem ao lado do componente Transform da Câmara e selecione Reset.

    Reinicie a transformação da câmara principal.

  4. O componente Transform deve então parecer:

    1. A posição está definida para 0,0,0

    2. A rotação está definida para 0,0,0

    3. E escala está definida para 1, 1, 1

      Transformar informação para câmera

  5. Em seguida, com o objeto da Câmara Principal selecionado, consulte o botão Adicionar Componente localizado na parte inferior do Painel de Inspetor.

  6. Selecione este botão e procure (digitando a Fonte de Áudio no campo de pesquisa ou navegando nas secções) para o componente chamado Audio Source como mostrado abaixo e selecione-o (premindo a entrada nele também funciona).

  7. Um componente Audio Source será adicionado à Câmara Principal,como demonstrado abaixo.

    Adicione um componente Audio Source.

    Nota

    Para Microsoft HoloLens, terá também de alterar o seguinte, que fazem parte do componente da Câmara na sua Câmara Principal:

    • Bandeiras claras: Cor sólida.
    • Fundo 'Preto, Alfa 0' – Cor hex: #000000000.

Capítulo 4 - Configuração Tela de Debug

Para mostrar a entrada e a saída da tradução, é necessário criar um UI básico. Para este curso, irá criar um objeto de UI de tela, com vários objetos 'Text' para mostrar os dados.

  1. Clique à direita numa área vazia do Painel Hierárquico,em UI,adicione uma tela.

    Adicione novo objeto de UI de lona.

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

  3. Em seguida, altere os seguintes parâmetros na Rect Transform do Inspetor Panel:

    1. POSX 0 Y 0 Z 40

    2. Largura - 500

    3. Altura - 300

    4. EscalaX 0.13 Y 0.13 Z 0.13

      Atualize a rect transforme para a tela.

  4. Clique à direita na Tela no Painel hierárquico,em UI,e adicione um Painel. Este Painel fornecerá um pano de fundo para o texto que irá exibir na cena.

  5. Clique à direita no Painel no Painel da Hierarquia,na UI,e adicione um objeto de texto. Repita o mesmo processo até criar quatro objetos de Texto UI no total (Dica: se tiver o primeiro objeto 'Texto' selecionado, pode simplesmente premir 'Ctrl' + 'D',para o duplicar, até ter quatro no total).

  6. Para cada Objeto de Texto,selecione-o e utilize as tabelas abaixo para definir os parâmetros no Painel de Inspetores.

    1. Para o componente Rect Transform:

      Name Transformar - Posição Width Height
      MicrofoneStatusLabel X -80 Y 90 Z 0 300 30
      AzureResponseLabel X -80 Y 30 Z 0 300 30
      DitadorLabel X -80 Y -30 Z 0 300 30
      TraduçãoResultLabel X -80 Y -90 Z 0 300 30
    2. Para o componente Texto (Script):

      Name Texto Tamanho da fonte
      MicrofoneStatusLabel Estado do microfone: 20
      AzureResponseLabel Resposta Web Azure 20
      DitadorLabel Acabou de dizer: 20
      TraduçãoResultLabel Tradução: 20

      Insira os valores correspondentes para as etiquetas de UI.

    3. Além disso, faça o Estilo de Fonte Arrojado. Isto facilitará a leitura do texto.

      Fonte ousada.

  7. Para cada objeto de texto ui criado no capítulo 5,crie um novoobjeto de texto de UIinfantil. Estas crianças mostrarão a saída da aplicação. Crie objetos infantis através de clicar no seu progenitor pretendido (por exemplo, MicrofoneStatusLabel)e, em seguida, selecione UI e, em seguida, selecione Texto.

  8. Para cada uma destas crianças, selecione-a e utilize as tabelas abaixo para definir os parâmetros no Painel de Inspetor.

    1. Para o componente Rect Transform:

      Name Transformar - Posição Width Height
      MicrofoneStatusText X 0 Y -30 Z 0 300 30
      AzureResponseText X 0 Y -30 Z 0 300 30
      Texto de ditado X 0 Y -30 Z 0 300 30
      TraduçãoResultTexto X 0 Y -30 Z 0 300 30
    2. Para o componente Texto (Script):

      Name Texto Tamanho da fonte
      MicrofoneStatusText ?? 20
      AzureResponseText ?? 20
      Texto de ditado ?? 20
      TraduçãoResultTexto ?? 20
  9. Em seguida, selecione a opção de alinhamento 'centro' para cada componente de texto:

    alinhar texto.

  10. Para garantir que os objetos de texto da UI da criança são facilmente legíveis, altere a sua cor. Faça isto clicando na barra (atualmente 'Preto') ao lado da Color.

    Inserir valores correspondentes para as saídas de texto de UI.

  11. Em seguida, na nova, pequena janela de cor, mude a Cor Hex para: 0032EAFF

    Atualizar a cor para o azul.

  12. Abaixo está como a UI deve parecer.

    1. No Painel Hierárquica:

      Ter hierarquia na estrutura fornecida.

    2. Na cena e vistas do jogo:

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

Capítulo 5 - Criar a classe Resultados

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

  • A resposta resulta do Azure.
  • O estado do microfone.
  • O resultado do ditado (voz a texto).
  • O resultado da tradução.

Para criar esta classe:

  1. Clique com o botão direito no painel de Projecte, em seguida, crie pasta. Nomeie as pastas Scripts.

    Crie a pasta scripts.

    Abra a pasta dos scripts.

  2. Com a pasta Scripts criar, clique duas vezes para abrir. Em seguida, dentro dessa pasta, clique com o botão direito e selecione Criar então C# Script. Nomeie o guião Resultados.

    Crie o primeiro roteiro.

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

  4. Insira os seguintes espaços de nome:

        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 Despertar,que será chamado quando a classe iniram.

        private void Awake() 
        { 
            // Set this class to behave similar to singleton 
            instance = this;           
        } 
    
  7. Por último, adicione os métodos responsáveis pela produção das várias informações de resultados para a UI.

        /// <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 que guarda as suas alterações na Visual Studio antes de regressar à Unidade.

Capítulo 6 - Criar a classe MicrofoneManager

A segunda classe que vai criar é o MicrofoneManager.

Esta classe é responsável por:

  • Detetando o dispositivo de gravação ligado ao auricular ou à máquina (o que for o padrão).
  • Capture o áudio (voz) e use ditado para armazená-lo como uma corda.
  • Uma vez que a voz tenha parado, submeta o ditado à classe Tradutor.
  • Hospedar um método que pode parar a captura de voz se desejar.

Para criar esta classe:

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

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

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

  4. Atualize os espaços de nome para serem os mesmos que os seguintes, no topo da classe MicrophoneManager:

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

        // 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 Despertar e Arranque() tem agora de ser adicionado. Estes serão chamados quando a classe rubricar:

        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. Pode eliminar o método 'Actualizar') uma vez que esta classe não a utilizará.

  8. Agora precisa dos métodos que a App utiliza para iniciar e parar a captura de voz, e passá-la para a classe Tradutor, que irá construir em breve. Copie o seguinte código e cole-o por baixo do método Iniciar().

        /// <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 esta aplicação não a utilize, o método StopCapturingAudio também foi fornecido aqui, caso pretenda implementar a capacidade de parar de capturar áudio na sua aplicação.

  9. Agora precisa adicionar um Manipulador de Ditados que será invocado quando a voz parar. Este método passará então o texto ditado para a classe Tradutor.

        /// <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 guardar as suas alterações na Visual Studio antes de regressar à Unidade.

Aviso

Neste momento, notará um erro que aparece no Painel de Consolas do Editor de Unidade ("O nome 'Tradutor' não existe..."). Isto porque o código faz referência à classe Tradutor, que irá criar no próximo capítulo.

Capítulo 7 - Serviço de Chamada para Azure e tradutor

O último guião que precisas de criar é a aula de Tradutor.

Esta classe é responsável por:

  • Autenticação da App com Azure,em troca de um Auth Token.
  • Utilize o Auth Token para submeter texto (recebido da Classe MicrofoneManager) a traduzir.
  • Receba o resultado traduzido e passe-o para a Classe resultados a visualizar na UI.

Para criar esta Classe:

  1. Vá à pasta Scripts que criou anteriormente.

  2. Clique à direita no Painel Project, Crie o Script C.. Ligue para o guião Tradutor.

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

  4. Adicione os seguintes espaços de nome ao topo do ficheiro:

        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 Tradutor:

        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 nas línguas enum são apenas exemplos. Sinta-se livre para adicionar mais se desejar; a API suporta mais de 60 línguas (incluindo Klingon)!
    • Existe 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 para '' (e o site da Microsoft provavelmente irá redirecionar para a sua língua nativa). Pode alterar o idioma do site na parte inferior da página ou alterando o URL.
    • O valor de autorizaçãoTa, no corte de código acima, deve ser a Chave que recebeu quando subscreveu a AZure Tradutor Texto API. Este foi coberto no capítulo 1.
  6. O código para os métodos Despertar e Arranque() tem agora de ser adicionado.

  7. Neste caso, o código fará uma chamada para a 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 símbolo expirará após 10 minutos. Dependendo do cenário para a sua aplicação, poderá ter de fazer a mesma chamada coroutina várias vezes.

  8. A coroutina para obter o Token é o 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 editar o nome do método IEnumerator GetTokenCoroutine(), tem de atualizar os valores de cadeia de chamadas StartCoroutine e StopCoroutine no código acima. De acordo com a documentação da Unidade,para parar um Coroutineespecífico, é necessário utilizar o método de valor das cordas.

  9. Em seguida, adicione a coroutina (com um método de fluxo de "suporte" logo abaixo) para obter a tradução do texto recebido pela classe MicrophoneManager. Este código cria uma cadeia de consulta para enviar para o API de texto AZure Tradutor, e, em seguida, usa a classe UnityWebRequest de unidade interna para fazer uma chamada 'Get' para o ponto final com a cadeia de consulta. O resultado é então utilizado para definir a tradução no seu objeto Resultados. 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 que guarda as suas alterações na Visual Studio antes de regressar à Unidade.

Capítulo 8 - Configurar a Cena da Unidade

  1. De volta ao Editor de Unidade, clique e arraste a classe Resultadosda pasta Scripts para o objeto da Câmara Principal no Painel hierarquia.

  2. Clique na Câmara Principal e veja o Painel do Inspetor. Você vai notar que dentro do componente script recém-adicionado, existem quatro campos com valores vazios. Estas são as referências de saída às propriedades do código.

  3. Arraste os objetos de texto apropriados do Painel hierárquica para as quatro ranhuras, como mostra a imagem abaixo.

    Atualizar referências-alvo com valores especificados.

  4. Em seguida, clique e arraste a classe Tradutor da pasta Scripts para o objeto da Câmara Principal no Painel hierarquia.

  5. Em seguida, clique e arraste a classe MicrofoneManager da pasta Scripts para o objeto da Câmara Principal no Painel hierarquia.

  6. Por último, clique na Câmara Principal e veja o Painel de Inspetores. Você vai notar que no script que arrastou, existem duas caixas de entrega que lhe permitirão definir as línguas.

    Certifique-se de que as línguas de tradução pretendidas são entradas.

Capítulo 9 - Teste em realidade mista

Neste momento, precisa de testar que a Cena foi devidamente implementada.

Certifique-se de que:

  • Todas as definições mencionadas no capítulo 1 estão corretamente definidas.
  • Os resultados, Tradutor, e MicrofoneManager,os scripts são anexados ao objeto da Câmara Principal.
  • Colocou a sua Chave de Serviço API de texto AZure Tradutor dentro da variável de autorizaçãoA variável Chaves dentro do Script Tradutor.
  • Todos os campos do Painel De Inspetor de Câmara Principal são atribuídos corretamente.
  • O microfone está a funcionar ao executar a sua cena (caso contrário, verifique se o microfone anexo é o dispositivo predefinido e que o configura corretamente dentro de Windows).

Pode testar o auricular imersivo premindo o botão Reproduzir no Editor de Unidade. A Aplicação deve funcionar através dos auscultadores imersivos anexados.

Aviso

Se vir um erro na consola Unidade sobre a alteração do dispositivo de áudio predefinido, a cena pode não funcionar como esperado. Isto deve-se à forma como o portal de realidade mista lida com microfones incorporados para auscultadores que os possuem. Se vires este erro, basta parar a cena e recomeçar e as coisas devem funcionar como esperado.

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

Tudo o que é necessário para a secção de Unidade deste projeto já está concluído, pelo que é tempo de o construir a partir da Unidade.

  1. Navegar para construir Definições: Construa Definições de arquivos...

  2. A partir da janela Build Definições, clique em Construir.

    Construa a cena da Unidade.

  3. Se já não for, marque projetos de Unidade C#.

  4. Clique em Construir. A Unidade lançará uma janela do Explorador de Ficheiros, onde precisa de criar e, em seguida, selecionará uma pasta para construir a aplicação. Crie esta pasta agora, e nomeie-a App. Em seguida, com a pasta app selecionada, prima Select Folder.

  5. A unidade começará a construir o seu projeto para a pasta app.

  6. Uma vez terminada a construção da Unidade (pode demorar algum tempo), abrirá uma janela do Explorador de Ficheiros no local da sua construção (verifique a sua barra de tarefas, uma vez que pode nem sempre aparecer acima das suas janelas, mas irá notificá-lo da adição de uma nova janela).

Capítulo 11 - Implementar a sua aplicação

Para implementar a sua aplicação:

  1. Navegue para a sua nova build Unity (a pasta App) e abra o ficheiro de solução com Visual Studio.

  2. Na Configuração da Solução selecione Debug.

  3. Na Plataforma solução, selecione x86, Máquina Local.

    Para a Microsoft HoloLens, poderá ser mais fácil de configurar isto para Remote Machine, para que não esteja amarrado ao computador. No entanto, também terá de fazer o seguinte:

    • Conheça o Endereço IP do seu HoloLens, que pode ser encontrado dentro da rede Definições Internet Wi-Fi Advanced >> Options;o IPv4 é o endereço que deve utilizar.
    • Certifique-se de que o modo de desenvolvimento está ligado; encontrado em Definições Atualizar Segurança para desenvolvedores.

    Implemente a solução a partir de Visual Studio.

  4. Vá para construir o menu e clique na Solução de Implementação para carregar lateralmente a aplicação para o seu PC.

  5. A sua App deve agora aparecer na lista de aplicações instaladas, prontas a serem lançadas.

  6. Uma vez lançada, a App irá instrui-lo a autorizar o acesso ao Microfone. Certifique-se de que clica no botão SIM.

  7. Está pronto para começar a traduzir!

A sua aplicação de API de Texto de Tradução Acabada

Parabéns, você construiu uma aplicação de realidade mista que aproveita a API de Texto de Tradução Azure para converter o discurso em texto traduzido.

Produto final.

Exercícios de bónus

Exercício 1

Pode adicionar a funcionalidade texto-a-fala à aplicação, para que o texto devolvido seja falado?

Exercício 2

Permitir que o utilizador altere os idiomas de origem e de saída ('de' e 'para') dentro da própria app, para que a app não precise de ser reconstruída sempre que quiser mudar de idiomas.