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.
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:
- O usuário falará em um microfone conectado a um fone de ouvido imersivo (VR) (ou o microfone embutido do HoloLens).
- O aplicativo capturará o ditado e o enviará para a API de Texto do Tradutor do Azure.
- 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:
- Um PC de desenvolvimento, compatível com Windows Mixed Reality para desenvolvimento imersivo (VR) de auriculares
- Windows 10 Fall Creators Update (ou posterior) com o modo de desenvolvedor ativado
- O SDK mais recente do Windows 10
- Unidade 2017.4
- Visual Studio 2017
- Um auricular imersivo (VR) Windows Mixed Reality ou Microsoft HoloLens com o modo de programador ativado
- Um conjunto de auscultadores com microfone incorporado (se o auricular não tiver um microfone e altifalantes incorporados)
- Acesso à Internet para configuração do Azure e recuperação de tradução
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.
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.
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.
Depois de fazer login, clique em Novo no canto superior esquerdo e procure por "Translator Text API". Selecione Enter.
Nota
A palavra Novo pode ter sido substituída por Criar um recurso, em portais mais recentes.
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.
Depois de clicar em Criar:
Insira o Nome desejado para esta instância de Serviço.
Selecione uma Assinatura apropriada.
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ê.
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.
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.
Você também precisará confirmar que compreendeu os Termos e Condições aplicados a este Serviço.
Selecione Criar.
Depois de clicar em Criar, você terá que esperar que o Serviço seja criado, isso pode levar um minuto.
Uma notificação aparecerá no portal assim que a instância de serviço for criada.
Clique na notificação para explorar sua nova instância de serviço.
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.
Neste tutorial, seu aplicativo precisará fazer chamadas para o seu Serviço, o que é feito usando a Chave de Assinatura do seu Serviço.
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.
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:
Abra o Unity e clique em Novo.
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.
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 .
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.
Vá para Configurações de compilação de arquivo > e certifique-se de que:
Dispositivo de destino está definido como Qualquer dispositivo.
Para Microsoft HoloLens, defina Target Device como HoloLens.
O tipo de compilação está definido como D3D
O SDK está definido como Instalado mais recente
Versão do Visual Studio está definida como A versão mais recente instalada
Build and Run está definido como Máquina Local
Salve a cena e adicione-a à compilação.
Faça isso selecionando Adicionar cenas abertas. Será exibida uma janela de salvamento.
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.
Abra a pasta Cenas recém-criada e, no campo de texto Nome do arquivo:, digite MR_TranslationScene e pressione Salvar.
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.
As configurações restantes, em Configurações de compilação, devem ser deixadas como padrão por enquanto.
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.
Neste painel, algumas configurações precisam ser verificadas:
Na guia Outras configurações:
A versão do Scripting Runtime deve ser estável (equivalente ao .NET 3.5).
O back-end de scripts deve ser .NET
O nível de compatibilidade da API deve ser .NET 4.6
Na guia Configurações de publicação , em Recursos, verifique:
InternetClient
Microfone
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.
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.
Feche a janela Configurações de compilação.
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.
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.
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.
Para fazer isso, selecione o ícone de engrenagem ao lado do componente Transformar da câmera e selecione Redefinir.
O componente Transformar deve então ter a seguinte aparência:
A posição é definida como 0, 0, 0
A rotação é definida como 0, 0, 0
E Escala é definida como 1, 1, 1
Em seguida, com o objeto Câmara principal selecionado, consulte o botão Adicionar componente localizado na parte inferior do painel Inspetor.
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).
Um componente de fonte de áudio será adicionado à câmera principal, conforme demonstrado abaixo.
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.
Clique com o botão direito do mouse em uma área vazia do Painel de Hierarquia, em UI, adicione uma Tela.
Com o objeto Canvas selecionado, no Painel do Inspetor (dentro do componente 'Canvas'), altere o Modo de renderização para Espaço Mundial.
Em seguida, altere os seguintes parâmetros na Transformação Rect do Painel do Inspetor:
POS - X 0 Y 0 Z 40
Largura - 500
Altura - 300
Escala - X 0,13 Y 0,13 Z 0,13
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.
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).
Para cada objeto de texto, selecione-o e use as tabelas abaixo para definir os parâmetros no painel Inspetor.
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 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 Além disso, coloque o estilo de fonte em negrito. Isso tornará o texto mais fácil de ler.
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.
Para cada um desses filhos, selecione-o e use as tabelas abaixo para definir os parâmetros no Painel do Inspetor.
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 Para o componente Texto (Script):
Nome Texto Tamanho do Tipo de Letra MicrofoneStatusText ?? 20 AzureResponseText ?? 20 DitadoTexto ?? 20 TraduçãoResultText ?? 20
Em seguida, selecione a opção de alinhamento «central» para cada componente de texto:
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.
Em seguida, na nova janela Color, altere a cor hexadecimal para: 0032EAFF
Abaixo está como a interface do usuário deve parecer.
No Painel Hierarquia:
Nas visualizações de cena e jogo:
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:
Clique com o botão direito do rato no Painel do Projeto e, em seguida, em Criar > Pasta. Nomeie a pasta Scripts.
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.
Clique duas vezes no novo script Resultados para abri-lo com o Visual Studio.
Insira os seguintes namespaces:
using UnityEngine; using UnityEngine.UI;
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;
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; }
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; }
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:
Clique duas vezes na pasta Scripts para abri-la.
Clique com o botão direito do mouse dentro da pasta Scripts , clique em Criar > script C#. Nomeie o script MicrophoneManager.
Clique duas vezes no novo script para abri-lo com o Visual Studio.
Atualize os namespaces para que sejam iguais aos seguintes, na parte superior da classe MicrophoneManager :
using UnityEngine; using UnityEngine.Windows.Speech;
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;
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"); } }
Você pode excluir o método Update(), pois essa classe não o usará.
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.
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)); }
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:
Vá para a pasta Scripts que você criou anteriormente.
Clique com o botão direito do mouse no Painel Projeto, Criar > Script C#. Chame o script de Tradutor.
Clique duas vezes no novo script Translator para abri-lo com o Visual Studio.
Adicione os seguintes namespaces à parte superior do arquivo:
using System; using System.Collections; using System.Xml.Linq; using UnityEngine; using UnityEngine.Networking;
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.
O código para os métodos Awake() e Start() agora precisa ser adicionado.
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.
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.
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); } }
Certifique-se de salvar suas alterações no Visual Studio antes de retornar ao Unity.
Capítulo 8 – Configurar a cena Unity
De volta ao Editor Unity, clique e arraste a classe Results da pasta Scripts para o objeto Main Camera no Painel Hierarchy.
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.
Arraste os objetos Text apropriados do Painel de hierarquia para esses quatro slots, conforme mostrado na imagem abaixo.
Em seguida, clique e arraste a classe Translator da pasta Scripts para o objeto Main Camera no Painel Hierarchy.
Em seguida, clique e arraste a classe MicrophoneManager da pasta Scripts para o objeto Main Camera no painel Hierarchy.
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.
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.
Navegue até Configurações de compilação: Configurações de compilação de arquivo > ...
Na janela Configurações de compilação, clique em Compilar.
Se ainda não tiver, marque Unity C# Projects.
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.
Unity começará a construir seu projeto para a pasta App .
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:
Navegue até sua nova compilação Unity (a pasta App) e abra o arquivo de solução com o Visual Studio.
Na Configuração da Solução, selecione Depurar.
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.
Vá para o menu Build e clique em Deploy Solution para fazer sideload do aplicativo para o seu PC.
Seu aplicativo agora deve aparecer na lista de aplicativos instalados, prontos para serem iniciados.
Uma vez iniciado, o aplicativo solicitará que você autorize o acesso ao microfone. Certifique-se de que clica no botão SIM .
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.
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.