MR e Azure 301: TraduzioneMR and Azure 301: Language translation


Nota

Le esercitazioni di Mixed Reality Academy sono state progettate in base a HoloLens (prima generazione) e ai visori VR immersive di realtà mista.The Mixed Reality Academy tutorials were designed with HoloLens (1st gen) and Mixed Reality Immersive Headsets in mind. Pertanto, riteniamo importante lasciarle a disposizione degli sviluppatori a cui serve ancora materiale sussidiario per lo sviluppo di questi dispositivi.As such, we feel it is important to leave these tutorials in place for developers who are still looking for guidance in developing for those devices. Queste esercitazioni non verranno aggiornate con i set di strumenti o le interazioni più recenti usati per HoloLens 2.These tutorials will not be updated with the latest toolsets or interactions being used for HoloLens 2. Rimarranno invariate per consentire di continuare a lavorare sui dispositivi supportati.They will be maintained to continue working on the supported devices. In futuro sarà disponibile una nuova serie di esercitazioni che illustrano come sviluppare per HoloLens 2.There will be a new series of tutorials that will be posted in the future that will demonstrate how to develop for HoloLens 2. Questo avviso verrà aggiornato con un collegamento a queste esercitazioni quando vengono pubblicate.This notice will be updated with a link to those tutorials when they are posted.


In questo corso si apprenderà come aggiungere funzionalità di traduzione a un'applicazione di realtà mista usando servizi cognitivi di Azure, con il API Traduzione testuale.In this course, you will learn how to add translation capabilities to a mixed reality application using Azure Cognitive Services, with the Translator Text API.

Prodotto finale

Il API Traduzione testuale è un servizio di traduzione che funziona quasi in tempo reale.The Translator Text API is a translation Service which works in near real-time. Il servizio è basato sul cloud e, usando una chiamata API REST, un'app può usare la tecnologia di traduzione dei computer neurali per tradurre il testo in un'altra lingua.The Service is cloud-based, and, using a REST API call, an app can make use of the neural machine translation technology to translate text to another language. Per ulteriori informazioni, visitare la pagina API traduzione testuale di Azure.For more information, visit the Azure Translator Text API page.

Al termine di questo corso, sarà disponibile un'applicazione di realtà mista che sarà in grado di eseguire le operazioni seguenti:Upon completion of this course, you will have a mixed reality application which will be able to do the following:

  1. L'utente parlerà di un microfono connesso a un headset immersivo (VR) o del microfono incorporato di HoloLens.The user will speak into a microphone connected to an immersive (VR) headset (or the built-in microphone of HoloLens).
  2. L'app acquisisce la dettatura e la invia al API Traduzione testuale di Azure.The app will capture the dictation and send it to the Azure Translator Text API.
  3. Il risultato della conversione verrà visualizzato in un gruppo di interfaccia utente semplice nella scena Unity.The translation result will be displayed in a simple UI group in the Unity Scene.

Questo corso spiegherà come ottenere i risultati dal servizio di conversione in un'applicazione di esempio basata su Unity.This course will teach you how to get the results from the Translator Service into a Unity-based sample application. Sarà necessario applicare questi concetti a un'applicazione personalizzata che è possibile creare.It will be up to you to apply these concepts to a custom application you might be building.

Supporto di dispositiviDevice support

CorsoCourse HoloLensHoloLens Visori VR immersiveImmersive headsets
MR e Azure 301: TraduzioneMR and Azure 301: Language translation ✔️✔️ ✔️✔️

Nota

Sebbene questo corso sia incentrato principalmente sugli auricolari per la realtà mista (VR) di Windows, è anche possibile applicare le informazioni apprese in questo corso a Microsoft HoloLens.While this course primarily focuses on Windows Mixed Reality immersive (VR) headsets, you can also apply what you learn in this course to Microsoft HoloLens. Seguendo le istruzioni riportate in questo corso, vengono visualizzate le note sulle eventuali modifiche che potrebbero essere necessarie per supportare HoloLens.As you follow along with the course, you will see notes on any changes you might need to employ to support HoloLens. Quando si usa HoloLens, è possibile notare alcuni echi durante l'acquisizione vocale.When using HoloLens, you may notice some echo during voice capture.

PrerequisitiPrerequisites

Nota

Questa esercitazione è progettata per gli sviluppatori che hanno esperienza di base con Unity e C#.This tutorial is designed for developers who have basic experience with Unity and C#. Tenere inoltre presente che i prerequisiti e le istruzioni scritte in questo documento rappresentano gli elementi testati e verificati al momento della stesura del documento (maggio 2018).Please also be aware that the prerequisites and written instructions within this document represent what has been tested and verified at the time of writing (May 2018). È possibile utilizzare il software più recente, come indicato nell'articolo installare gli strumenti , ma non si presuppone che le informazioni in questo corso corrispondano perfettamente a quelle disponibili nel software più recente rispetto a quanto indicato di seguito.You are free to use the latest software, as listed within the install the tools article, though it should not be assumed that the information in this course will perfectly match what you'll find in newer software than what's listed below.

Per questo corso è consigliabile usare i componenti hardware e software seguenti:We recommend the following hardware and software for this course:

Prima di iniziareBefore you start

  • Per evitare che si verifichino problemi durante la compilazione di questo progetto, è consigliabile creare il progetto indicato in questa esercitazione in una cartella radice o quasi radice (i percorsi di cartella lunghi possono causare problemi in fase di compilazione).To avoid encountering issues building this project, it is strongly suggested that you create the project mentioned in this tutorial in a root or near-root folder (long folder paths can cause issues at build-time).

  • Il codice in questa esercitazione consentirà di registrare dal dispositivo microfono predefinito connesso al PC.The code in this tutorial will allow you to record from the default microphone device connected to your PC. Verificare che il dispositivo microfonico predefinito sia impostato sul dispositivo che si intende usare per acquisire la voce.Make sure the default microphone device is set to the device you plan to use to capture your voice.

  • Per consentire al PC di abilitare la dettatura, passare a impostazioni > Privacy > vocale, Inking & digitando e selezionare il pulsante Attiva servizi vocali e digitando suggerimenti.To allow your PC to enable dictation, go to Settings > Privacy > Speech, inking & typing and select the button Turn On speech services and typing suggestions.

  • Se si usa un microfono e cuffie connesse a (o incorporata), assicurarsi che l'opzione "quando si indossa la cuffia, passa alla cuffia auricolare" sia attivata in impostazioni > realtà mista > audio e sintesi vocale.If you're using a microphone and headphones connected to (or built-in to) your headset, make sure the option “When I wear my headset, switch to headset mic” is turned on in Settings > Mixed reality > Audio and speech.

    Impostazioni della realtà mista

    Impostazione del microfono

Avviso

Si tenga presente che, se si sta sviluppando per un auricolare immersivo per questo Lab, è possibile che si verifichino problemi di dispositivo di output audio.Be aware that if you are developing for an immersive headset for this lab, you may experience audio output device issues. Ciò è dovuto a un problema di Unity, che è stato risolto nelle versioni successive di Unity (Unity 2018,2).This is due to an issue with Unity, which is fixed in later versions of Unity (Unity 2018.2). Il problema impedisce a Unity di modificare il dispositivo di output audio predefinito in fase di esecuzione.The issue prevents Unity from changing the default audio output device at run time. Per risolvere il problema, assicurarsi di aver completato i passaggi precedenti, quindi chiudere e riaprire l'editor quando si presenta questo problema.As a work around, ensure you have completed the above steps, and close and re-open the Editor, when this issue presents itself.

Capitolo 1: portale di AzureChapter 1 – The Azure Portal

Per usare l'API di Azure translator, sarà necessario configurare un'istanza del servizio da rendere disponibile per l'applicazione.To use the Azure Translator API, you will need to configure an instance of the Service to be made available to your application.

  1. Accedere al portale di Azure.Log in to the Azure Portal.

    Nota

    Se non si dispone già di un account Azure, sarà necessario crearne uno.If you do not already have an Azure account, you will need to create one. Se si segue questa esercitazione in una classe o in una situazione di laboratorio, rivolgersi all'insegnante o a uno dei Proctor per ottenere assistenza nella configurazione del nuovo account.If you are following this tutorial in a classroom or lab situation, ask your instructor or one of the proctors for help setting up your new account.

  2. Una volta effettuato l'accesso, fare clic su nuovo nell'angolo in alto a sinistra e cercare "API traduzione testuale".Once you are logged in, click on New in the top left corner and search for "Translator Text API." Premere INVIO.Select Enter.

    Nuova risorsa

    Nota

    La parola New potrebbe essere stata sostituita con Crea una risorsa, nei portali più recenti.The word New may have been replaced with Create a resource, in newer portals.

  3. La nuova pagina fornirà una descrizione del servizio API traduzione testuale .The new page will provide a description of the Translator Text API Service. Nella parte inferiore sinistra della pagina selezionare il pulsante Crea per creare un'associazione con il servizio.At the bottom left of this page, select the Create button, to create an association with this Service.

    Crea servizio API Traduzione testuale

  4. Una volta fatto clic su Crea:Once you have clicked on Create:

    1. Inserire il nome desiderato per l'istanza del servizio.Insert your desired Name for this Service instance.

    2. Selezionare una sottoscrizione appropriata.Select an appropriate Subscription.

    3. Selezionare il piano tariffario appropriato. se è la prima volta che si crea un servizio di traduzione testuale, è necessario che sia disponibile un livello gratuito (denominato F0).Select the Pricing Tier appropriate for you, if this is the first time creating a Translator Text Service, a free tier (named F0) should be available to you.

    4. Scegliere un gruppo di risorse o crearne uno nuovo.Choose a Resource Group or create a new one. Un gruppo di risorse consente di monitorare, controllare l'accesso, effettuare il provisioning e gestire la fatturazione per una raccolta di asset di Azure.A resource group provides a way to monitor, control access, provision and manage billing for a collection of Azure assets. Si consiglia di lasciare tutti i servizi di Azure associati a un singolo progetto (ad esempio questi Lab) in un gruppo di risorse comune).It is recommended to keep all the Azure Services associated with a single project (e.g. such as these labs) under a common resource group).

      Per altre informazioni sui gruppi di risorse di Azure, vedere l'articolo relativo al gruppo di risorse.If you wish to read more about Azure Resource Groups, please visit the resource group article.

    5. Determinare il percorso del gruppo di risorse (se si sta creando un nuovo gruppo di risorse).Determine the Location for your resource group (if you are creating a new Resource Group). Il percorso dovrebbe trovarsi idealmente nell'area in cui verrà eseguita l'applicazione.The location would ideally be in the region where the application would run. Alcune risorse di Azure sono disponibili solo in determinate aree geografiche.Some Azure assets are only available in certain regions.

    6. Sarà inoltre necessario confermare di aver compreso i termini e le condizioni applicati a questo servizio.You will also need to confirm that you have understood the Terms and Conditions applied to this Service.

    7. Selezionare Crea.Select Create.

      Fare clic sul pulsante Crea.

  5. Una volta fatto clic su Crea, sarà necessario attendere il completamento della creazione del servizio. l'operazione potrebbe richiedere un minuto.Once you have clicked on Create, you will have to wait for the Service to be created, this might take a minute.

  6. Dopo la creazione dell'istanza del servizio, verrà visualizzata una notifica nel portale.A notification will appear in the portal once the Service instance is created.

    Notifica di creazione del servizio di Azure

  7. Fare clic sulla notifica per esplorare la nuova istanza del servizio.Click on the notification to explore your new Service instance.

    Passare a finestra popup risorsa.

  8. Fare clic sul pulsante Vai alla risorsa nella notifica per esplorare la nuova istanza del servizio.Click the Go to resource button in the notification to explore your new Service instance. Si verrà portati alla nuova istanza del servizio API Traduzione testuale.You will be taken to your new Translator Text API Service instance.

    Pagina servizio API Traduzione testuale

  9. All'interno di questa esercitazione, l'applicazione dovrà effettuare chiamate al servizio, operazione eseguita usando la chiave di sottoscrizione del servizio.Within this tutorial, your application will need to make calls to your Service, which is done through using your Service’s Subscription Key.

  10. Dalla pagina avvio rapido del servizio traduzione testuale , passare al primo passaggio, acquisire le chiavi e fare clic su chiavi . a tale scopo, fare clic sui tasti collegamento ipertestuale blu, che si trovano nel menu di navigazione servizi, indicato dall'icona chiave.From the Quick start page of your Translator Text Service, navigate to the first step, Grab your keys, and click Keys (you can also achieve this by clicking the blue hyperlink Keys, located in the Services navigation menu, denoted by the key icon). Le chiavi del servizio vengono rivelate.This will reveal your Service Keys.

  11. Eseguire una copia di una delle chiavi visualizzate, perché sarà necessario in un secondo momento nel progetto.Take a copy of one of the displayed keys, as you will need this later in your project.

Capitolo 2: configurare il progetto UnityChapter 2 – Set up the Unity project

Configurare e testare l'auricolare immersiva della realtà mista.Set up and test your mixed reality immersive headset.

Nota

Non sarà necessario alcun controller di movimento per questo corso.You will not need motion controllers for this course. Se è necessario supporto per la configurazione di un auricolare immersivo, attenersi alla seguente procedura.If you need support setting up an immersive headset, please follow these steps.

Di seguito è riportata una configurazione tipica per lo sviluppo con realtà mista e, di conseguenza, è un modello valido per altri progetti:The following is a typical set up for developing with mixed reality and, as such, is a good template for other projects:

  1. Aprire Unity e fare clic su New.Open Unity and click New.

    Avviare un nuovo progetto Unity.

  2. A questo punto sarà necessario specificare un nome di progetto Unity.You will now need to provide a Unity Project name. Inserire MR_Translation.Insert MR_Translation. Verificare che il tipo di progetto sia impostato su 3D.Make sure the project type is set to 3D. Impostare il percorso su un punto appropriato (ricordare che più vicino alle directory radice è migliore).Set the Location to somewhere appropriate for you (remember, closer to root directories is better). Fare quindi clic su Crea progetto.Then, click Create project.

    Specificare i dettagli per il nuovo progetto Unity.

  3. Con Unity aperto, vale la pena controllare che l' editor di script predefinito sia impostato su Visual Studio.With Unity open, it is worth checking the default Script Editor is set to Visual Studio. Passare a Modifica preferenze > e quindi dalla nuova finestra passare a strumenti esterni.Go to Edit > Preferences and then from the new window, navigate to External Tools. Modificare l' editor di script esterno in Visual Studio 2017.Change External Script Editor to Visual Studio 2017. Chiudere la finestra delle Preferenze .Close the Preferences window.

    Aggiornare la preferenza dell'editor di script.

  4. Passare quindi a File > impostazioni di compilazione e impostare la piattaforma su piattaforma UWP (Universal Windows Platform), facendo clic sul pulsante Switch Platform .Next, go to File > Build Settings and switch the platform to Universal Windows Platform, by clicking on the Switch Platform button.

    Finestra impostazioni di compilazione, passa alla piattaforma UWP.

  5. Passare a File > impostazioni di compilazione e verificare che:Go to File > Build Settings and make sure that:

    1. Il dispositivo di destinazione è impostato su qualsiasi dispositivo.Target Device is set to Any Device.

      Per Microsoft HoloLens, impostare dispositivo di destinazione su HoloLens.For Microsoft HoloLens, set Target Device to HoloLens.

    2. Il tipo di compilazione è impostato su D3DBuild Type is set to D3D

    3. SDK è impostato sull' ultima versione installataSDK is set to Latest installed

    4. La versione di Visual Studio è impostata su installazione più recenteVisual Studio Version is set to Latest installed

    5. Compilazione ed esecuzione è impostato su computer localeBuild and Run is set to Local Machine

    6. Salvare la scena e aggiungerla alla compilazione.Save the scene and add it to the build.

      1. A tale scopo, selezionare Aggiungi scene aperte.Do this by selecting Add Open Scenes. Verrà visualizzata una finestra Salva.A save window will appear.

        Fare clic sul pulsante Aggiungi scene aperte

      2. Creare una nuova cartella per questo e per eventuali scenari futuri, quindi selezionare il pulsante nuova cartella per creare una nuova cartella , assegnarle un nome.Create a new folder for this, and any future, scene, then select the New folder button, to create a new folder, name it Scenes.

        Crea nuova cartella script

      3. Aprire la cartella Scenes appena creata e quindi nel campo nome file: testo digitare MR_TranslationScene e quindi fare clic su Salva.Open your newly created Scenes folder, and then in the File name: text field, type MR_TranslationScene, then press Save.

        Assegnare un nome alla nuova scena.

        Tenere presente che è necessario salvare le scene Unity all'interno della cartella assets , in quanto devono essere associate al progetto Unity.Be aware, you must save your Unity scenes within the Assets folder, as they must be associated with the Unity Project. La creazione della cartella scenes (e di altre cartelle simili) è un modo tipico per strutturare un progetto Unity.Creating the scenes folder (and other similar folders) is a typical way of structuring a Unity project.

    7. Le impostazioni rimanenti, nelle impostazioni di compilazione, devono essere lasciate come predefinite per il momento.The remaining settings, in Build Settings, should be left as default for now.

  6. Nella finestra impostazioni di compilazione fare clic sul pulsante Impostazioni lettore . verrà aperto il pannello correlato nello spazio in cui si trova il controllo .In the Build Settings window, click on the Player Settings button, this will open the related panel in the space where the Inspector is located.

    Aprire le impostazioni del lettore.

  7. In questo pannello è necessario verificare alcune impostazioni:In this panel, a few settings need to be verified:

    1. Nella scheda altre impostazioni :In the Other Settings tab:

      1. La versione di runtime di scripting deve essere stabile (equivalente a .NET 3,5).Scripting Runtime Version should be Stable (.NET 3.5 Equivalent).

      2. Il back-end di scripting deve essere .NETScripting Backend should be .NET

      3. Il livello di compatibilità API deve essere .NET 4,6API Compatibility Level should be .NET 4.6

        Aggiornare altre impostazioni.

    2. Nella scheda impostazioni di pubblicazione , in funzionalità, selezionare:Within the Publishing Settings tab, under Capabilities, check:

      1. InternetClientInternetClient

      2. MicrofonoMicrophone

        Aggiornamento delle impostazioni di pubblicazione.

    3. Nella parte inferiore del pannello, nelle impostazioni di XR (disponibili sotto le impostazioni di pubblicazione), verificare la realtà virtuale supportata, verificare che sia stato aggiunto Windows Mixed Reality SDK .Further down the panel, in XR Settings (found below Publish Settings), tick Virtual Reality Supported, make sure the Windows Mixed Reality SDK is added.

      Aggiornare le impostazioni X R.

  8. Nelle impostazioni di compilazione, i progetti C# Unity non sono più disattivati; Selezionare la casella di controllo accanto a questo.Back in Build Settings, Unity C# Projects is no longer greyed out; tick the checkbox next to this.

  9. Chiudere la finestra Build Settings (Impostazioni di compilazione).Close the Build Settings window.

  10. Salvare la scena e il progetto (file > Salva scena/file > Salva progetto).Save your Scene and Project (FILE > SAVE SCENE / FILE > SAVE PROJECT).

Capitolo 3-configurazione della fotocamera principaleChapter 3 – Main Camera setup

Importante

Se si desidera ignorare il componente di configurazione di Unity di questo corso e continuare direttamente con il codice, è possibile scaricarlo. file unitypackage Tools, importarlo nel progetto come pacchetto personalizzatoe continuare dal capitolo 5.If you wish to skip the Unity Set up component of this course, and continue straight into code, feel free to download this .unitypackage, import it into your project as a Custom Package, and then continue from Chapter 5. Sarà comunque necessario creare un progetto Unity.You will still need to create a Unity Project.

  1. Nel Pannello gerarchia è presente un oggetto denominato Main camera, che rappresenta il punto di visualizzazione "Head" dopo che l'applicazione è stata "interna".In the Hierarchy Panel, you will find an object called Main Camera, this object represents your “head” point of view once you are “inside” your application.

  2. Con il dashboard Unity in primo piano, selezionare la fotocamera principale GameObject.With the Unity Dashboard in front of you, select the Main Camera GameObject. Si noterà che il pannello Inspector , disponibile in genere a destra, all'interno del dashboard, visualizzerà i vari componenti di tale GameObject, con la trasformazione nella parte superiore, seguita dalla fotocamera e da altri componenti.You will notice that the Inspector Panel (generally found to the right, within the Dashboard) will show the various components of that GameObject, with Transform at the top, followed by Camera, and some other components. Sarà necessario reimpostare la trasformazione della fotocamera principale, in modo che venga posizionata correttamente.You will need to reset the Transform of the Main Camera, so it is positioned correctly.

  3. A tale scopo, selezionare l'icona dell' ingranaggio accanto al componente trasformazione della fotocamera e selezionare Reimposta.To do this, select the Gear icon next to the Camera’s Transform component, and selecting Reset.

    Reimposta la trasformazione della fotocamera principale.

  4. Il componente Transform dovrebbe essere simile al seguente:The Transform component should then look like:

    1. La posizione è impostata su 0, 0, 0The Position is set to 0, 0, 0

    2. Rotation è impostato su 0, 0, 0Rotation is set to 0, 0, 0

    3. E la scalabilità è impostata su 1, 1, 1And Scale is set to 1, 1, 1

      Trasforma informazioni per la fotocamera

  5. Quindi, con l'oggetto principale della fotocamera selezionato, vedere il pulsante Aggiungi componente che si trova nella parte inferiore del pannello Inspector.Next, with the Main Camera object selected, see the Add Component button located at the very bottom of the Inspector Panel.

  6. Selezionare tale pulsante e cercare (digitando origine audio nel campo di ricerca o spostandosi nelle sezioni) per il componente denominato origine audio , come illustrato di seguito, e selezionarlo (premendo invio anche in questo caso).Select that button, and search (by either typing Audio Source into the search field or navigating the sections) for the component called Audio Source as shown below and select it (pressing enter on it also works).

  7. Un componente di origine audio verrà aggiunto alla fotocamera principale, come illustrato di seguito.An Audio Source component will be added to the Main Camera, as demonstrated below.

    Aggiungere un componente di origine audio.

    Nota

    Per Microsoft HoloLens, è necessario modificare anche quanto segue, che fa parte del componente della fotocamera della fotocamera principale:For Microsoft HoloLens, you will need to also change the following, which are part of the Camera component on your Main Camera:

    • Cancella flag: Colore a tinta unita.Clear Flags: Solid Color.
    • Informazioni preliminari ' Black, Alpha 0'-colore esadecimale: #00000000.Background ‘Black, Alpha 0’ – Hex color: #00000000.

Capitolo 4: installazione dell'area di disegno debugChapter 4 – Setup Debug Canvas

Per visualizzare l'input e l'output della traduzione, è necessario creare un'interfaccia utente di base.To show the input and output of the translation, a basic UI needs to be created. Per questo corso, verrà creato un oggetto dell'interfaccia utente Canvas con diversi oggetti ' text ' per visualizzare i dati.For this course, you will create a Canvas UI object, with several ‘Text’ objects to show the data.

  1. Fare clic con il pulsante destro del mouse in un'area vuota del Pannello gerarchia, in interfaccia utente, Aggiungi un'area di disegno.Right-click in an empty area of the Hierarchy Panel, under UI, add a Canvas.

    Aggiungere un nuovo oggetto interfaccia utente Canvas.

  2. Con l'oggetto Canvas selezionato, nel pannello Inspector (nel componente "canvas") modificare la modalità di rendering in spazio globale.With the Canvas object selected, in the Inspector Panel (within the ‘Canvas’ component), change Render Mode to World Space.

  3. Modificare quindi i parametri seguenti nella trasformazione Rect del pannello di controllo:Next, change the following parameters in the Inspector Panel’s Rect Transform:

    1. Pos - X 0 Y 0 Z 40POS - X 0 Y 0 Z 40

    2. Larghezza -500Width - 500

    3. Altezza -300Height - 300

    4. Ridimensiona - X 0,13 Y 0,13 Z 0,13Scale - X 0.13 Y 0.13 Z 0.13

      Aggiornare la trasformazione Rect per l'area di disegno.

  4. Fare clic con il pulsante destro del mouse sull' area di disegno nel Pannello gerarchia, in interfaccia utente e aggiungere un Pannello.Right click on the Canvas in the Hierarchy Panel, under UI, and add a Panel. Questo Pannello fornirà uno sfondo al testo che verrà visualizzato nella scena.This Panel will provide a background to the text that you will be displaying in the scene.

  5. Fare clic con il pulsante destro del mouse sul pannello nel Pannello gerarchia in interfaccia utente e aggiungere un oggetto testo.Right click on the Panel in the Hierarchy Panel, under UI, and add a Text object. Ripetere lo stesso processo fino a quando non sono stati creati quattro oggetti testo dell'interfaccia utente in totale (Suggerimento: se è stato selezionato il primo oggetto ' text ', è possibile premere ' Ctrl ' + d'' per duplicarlo, fino a quando non si dispone di quattro in totale).Repeat the same process until you have created four UI Text objects in total (Hint: if you have the first ‘Text’ object selected, you can simply press ‘Ctrl’ + ‘D’, to duplicate it, until you have four in total).

  6. Per ogni oggetto testo, selezionarlo e utilizzare le tabelle seguenti per impostare i parametri nel Pannello di controllo.For each Text Object, select it and use the below tables to set the parameters in the Inspector Panel.

    1. Per il componente di trasformazione Rect :For the Rect Transform component:

      NomeName Trasformazione- posizioneTransform - Position LarghezzaWidth AltezzaHeight
      MicrophoneStatusLabelMicrophoneStatusLabel X -80 Y 90 Z 0X -80 Y 90 Z 0 300300 3030
      AzureResponseLabelAzureResponseLabel X -80 Y 30 Z 0X -80 Y 30 Z 0 300300 3030
      DictationLabelDictationLabel X -80 Y -30 Z 0X -80 Y -30 Z 0 300300 3030
      TranslationResultLabelTranslationResultLabel X -80 Y -90 Z 0X -80 Y -90 Z 0 300300 3030
    2. Per il componente testo (script) :For the Text (Script) component:

      NomeName TestoText Dimensione carattereFont Size
      MicrophoneStatusLabelMicrophoneStatusLabel Stato microfono:Microphone Status: 2020
      AzureResponseLabelAzureResponseLabel Risposta Web di AzureAzure Web Response 2020
      DictationLabelDictationLabel Si è appena detto:You just said: 2020
      TranslationResultLabelTranslationResultLabel Conversione:Translation: 2020

      Immettere i valori corrispondenti per le etichette dell'interfaccia utente.

    3. Inoltre, applicare lo stile del carattere in grassetto.Also, make the Font Style Bold. In questo modo sarà più facile leggere il testo.This will make the text easier to read.

      Carattere grassetto.

  7. Per ogni oggetto testo dell'interfaccia utente creato nel capitolo 5, creare un nuovo oggetto testo dell'interfaccia utente figlio .For each UI Text object created in Chapter 5, create a new child UI Text object. Questi elementi figlio visualizzeranno l'output dell'applicazione.These children will display the output of the application. Creare oggetti figlio facendo clic con il pulsante destro del mouse sul padre desiderato, ad esempio MicrophoneStatusLabel, e quindi selezionando interfaccia utente e quindi selezionando testo.Create child objects through right-clicking your intended parent (e.g. MicrophoneStatusLabel) and then select UI and then select Text.

  8. Per ognuno di questi elementi figlio, selezionarlo e utilizzare le tabelle seguenti per impostare i parametri nel pannello di controllo.For each of these children, select it and use the below tables to set the parameters in the Inspector Panel.

    1. Per il componente di trasformazione Rect :For the Rect Transform component:

      NomeName Trasformazione- posizioneTransform - Position LarghezzaWidth AltezzaHeight
      MicrophoneStatusTextMicrophoneStatusText X 0 Y-30 Z 0X 0 Y -30 Z 0 300300 3030
      AzureResponseTextAzureResponseText X 0 Y-30 Z 0X 0 Y -30 Z 0 300300 3030
      DictationTextDictationText X 0 Y-30 Z 0X 0 Y -30 Z 0 300300 3030
      TranslationResultTextTranslationResultText X 0 Y-30 Z 0X 0 Y -30 Z 0 300300 3030
    2. Per il componente testo (script) :For the Text (Script) component:

      NomeName TestoText Dimensione carattereFont Size
      MicrophoneStatusTextMicrophoneStatusText ???? 2020
      AzureResponseTextAzureResponseText ???? 2020
      DictationTextDictationText ???? 2020
      TranslationResultTextTranslationResultText ???? 2020
  9. Selezionare quindi l'opzione di allineamento "Center" per ogni componente di testo:Next, select the 'centre' alignment option for each text component:

    Allinea il testo.

  10. Per assicurarsi che gli oggetti testo dell'interfaccia utente figlio siano facilmente leggibili, modificarne il colore.To ensure the child UI Text objects are easily readable, change their Color. A tale scopo, fare clic sulla barra (attualmente "nero") accanto a colore.Do this by clicking on the bar (currently ‘Black’) next to Color.

    Immettere i valori corrispondenti per gli output di testo dell'interfaccia utente.

  11. Quindi, nella finestra nuovo, piccolo, colore modificare il colore esadecimale in: 0032EAFFThen, in the new, little, Color window, change the Hex Color to: 0032EAFF

    Aggiornare il colore al blu.

  12. Di seguito è illustrata l'aspetto dell' interfaccia utente .Below is how the UI should look.

    1. Nel Pannello gerarchia:In the Hierarchy Panel:

      Dispone della gerarchia nella struttura fornita.

    2. Nelle viste scene e giochi:In the Scene and Game Views:

      Includere le viste scene e giochi nella stessa struttura.

Capitolo 5: creare la classe ResultsChapter 5 – Create the Results class

Il primo script che è necessario creare è la classe results , che è responsabile di fornire un modo per visualizzare i risultati della conversione.The first script you need to create is the Results class, which is responsible for providing a way to see the results of translation. La classe archivia e visualizza quanto segue:The Class stores and displays the following:

  • Risultato della risposta da Azure.The response result from Azure.
  • Stato del microfono.The microphone status.
  • Risultato della dettatura (Voice to Text).The result of the dictation (voice to text).
  • Risultato della traslazione.The result of the translation.

Per creare questa classe:To create this class:

  1. Fare clic con il pulsante destro del mouse nel Pannello del progetto, quindi creare > cartella.Right-click in the Project Panel, then Create > Folder. Denominare gli script della cartella.Name the folder Scripts.

    Crea cartella script.

    Aprire la cartella script.

  2. Con la cartella Scripts create, fare doppio clic su di essa per aprirla.With the Scripts folder create, double click it to open. Quindi, all'interno di tale cartella, fare clic con il pulsante destro del mouse e selezionare crea > script C#.Then within that folder, right-click, and select Create > then C# Script. Assegnare un nome ai risultati dello script.Name the script Results.

    Creare il primo script.

  3. Fare doppio clic sul nuovo script dei risultati per aprirlo con Visual Studio.Double click on the new Results script to open it with Visual Studio.

  4. Inserire gli spazi dei nomi seguenti:Insert the following namespaces:

        using UnityEngine;
        using UnityEngine.UI;
    
  5. All'interno della classe inserire le variabili seguenti:Inside the Class insert the following variables:

        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. Aggiungere quindi il metodo sveglie () che verrà chiamato quando la classe viene inizializzata.Then add the Awake() method, which will be called when the class initializes.

        private void Awake() 
        { 
            // Set this class to behave similar to singleton 
            instance = this;           
        } 
    
  7. Aggiungere infine i metodi che sono responsabili dell'output delle varie informazioni sui risultati nell'interfaccia utente.Finally, add the methods which are responsible for outputting the various results information to the 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. Assicurarsi di salvare le modifiche in Visual Studio prima di tornare a Unity.Be sure to save your changes in Visual Studio before returning to Unity.

Capitolo 6: creare la classe MicrophoneManagerChapter 6 – Create the MicrophoneManager class

La seconda classe che si intende creare è MicrophoneManager.The second class you are going to create is the MicrophoneManager.

Questa classe è responsabile di:This class is responsible for:

  • Rilevamento del dispositivo di registrazione collegato all'auricolare o al computer (a seconda di quale sia l'impostazione predefinita).Detecting the recording device attached to the headset or machine (whichever is the default).
  • Acquisire l'audio (voce) e utilizzare la dettatura per archiviarlo come stringa.Capture the audio (voice) and use dictation to store it as a string.
  • Una volta sospesa la voce, inviare la dettatura alla classe Translator.Once the voice has paused, submit the dictation to the Translator class.
  • Ospitare un metodo che può arrestare l'acquisizione vocale, se lo si desidera.Host a method that can stop the voice capture if desired.

Per creare questa classe:To create this class:

  1. Fare doppio clic sulla cartella Scripts per aprirla.Double click on the Scripts folder, to open it.

  2. Fare clic con il pulsante destro del mouse nella cartella Scripts , quindi scegliere Crea > script C#.Right-click inside the Scripts folder, click Create > C# Script. Denominare lo script MicrophoneManager.Name the script MicrophoneManager.

  3. Fare doppio clic sul nuovo script per aprirlo con Visual Studio.Double click on the new script to open it with Visual Studio.

  4. Aggiornare gli spazi dei nomi in modo che corrispondano a quelli riportati di seguito, all'inizio della classe MicrophoneManager :Update the namespaces to be the same as the following, at the top of the MicrophoneManager class:

        using UnityEngine; 
        using UnityEngine.Windows.Speech;
    
  5. Aggiungere quindi le variabili seguenti all'interno della classe MicrophoneManager :Then, add the following variables inside the MicrophoneManager class:

        // 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. È ora necessario aggiungere il codice per i metodi svegli () e Start () .Code for the Awake() and Start() methods now needs to be added. Questi verranno chiamati quando la classe inizializza:These will be called when the class initializes:

        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. È possibile eliminare il metodo Update () perché non verrà utilizzato da questa classe.You can delete the Update() method since this class will not use it.

  8. A questo punto sono necessari i metodi usati dall'app per avviare e arrestare l'acquisizione vocale e passarli alla classe Translator , che verrà compilata a breve.Now you need the methods that the App uses to start and stop the voice capture, and pass it to the Translator class, that you will build soon. Copiare il codice seguente e incollarlo sotto il metodo Start () .Copy the following code and paste it beneath the Start() method.

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

    Suggerimento

    Anche se questa applicazione non lo userà, il metodo StopCapturingAudio () è stato fornito qui. Se si vuole implementare la possibilità di arrestare l'acquisizione dell'audio nell'applicazione.Though this application will not make use of it, the StopCapturingAudio() method has also been provided here, should you want to implement the ability to stop capturing audio in your application.

  9. A questo punto è necessario aggiungere un gestore di dettatura che verrà richiamato quando la voce viene arrestata.You now need to add a Dictation Handler that will be invoked when the voice stops. Questo metodo passerà quindi il testo imposto alla classe Translator .This method will then pass the dictated text to the Translator class.

        /// <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. Assicurarsi di salvare le modifiche in Visual Studio prima di tornare a Unity.Be sure to save your changes in Visual Studio before returning to Unity.

Avviso

A questo punto si noterà un errore nel pannello console Editor Unity ("il nome ' Translator ' non esiste...").At this point you will notice an error appearing in the Unity Editor Console Panel (“The name ‘Translator’ does not exist...”). Questo perché il codice fa riferimento alla classe Translator , che verrà creata nel capitolo successivo.This is because the code references the Translator class, which you will create in the next chapter.

Capitolo 7-chiamata a Azure e al servizio TranslatorChapter 7 – Call to Azure and translator service

L'ultimo script che è necessario creare è la classe Translator .The last script you need to create is the Translator class.

Questa classe è responsabile di:This class is responsible for:

  • Autenticazione dell'app con Azure, in Exchange per un token di autenticazione.Authenticating the App with Azure, in exchange for an Auth Token.
  • Usare il token di autenticazione per inviare il testo (ricevuto dalla classe MicrophoneManager ) da tradurre.Use the Auth Token to submit text (received from the MicrophoneManager Class) to be translated.
  • Ricevere il risultato tradotto e passarlo alla classe results da visualizzare nell'interfaccia utente.Receive the translated result and pass it to the Results Class to be visualized in the UI.

Per creare questa classe:To create this Class:

  1. Passare alla cartella Scripts creata in precedenza.Go to the Scripts folder you created previously.

  2. Fare clic con il pulsante destro del mouse nel Pannello del progetto, quindi creare > script C#.Right-click in the Project Panel, Create > C# Script. Chiamare lo script Translator.Call the script Translator.

  3. Fare doppio clic sul nuovo script di conversione per aprirlo con Visual Studio.Double click on the new Translator script to open it with Visual Studio.

  4. Aggiungere i seguenti spazi dei nomi all'inizio del file:Add the following namespaces to the top of the file:

        using System;
        using System.Collections;
        using System.Xml.Linq;
        using UnityEngine;
        using UnityEngine.Networking;
    
  5. Aggiungere quindi le variabili seguenti all'interno della classe Translator :Then add the following variables inside the Translator class:

        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

    • Le lingue inserite nell' enum di lingue sono solo esempi.The languages inserted into the languages enum are just examples. Se lo si desidera, è possibile aggiungerne altri. l' API supporta oltre 60 lingue (incluso Klingon).Feel free to add more if you wish; the API supports over 60 languages (including Klingon)!
    • Esiste una pagina più interattiva che copre le lingue disponibili, ma è importante tenere presente che la pagina sembra funzionare solo quando la lingua del sito è impostata su' ' (e il sito Microsoft verrà probabilmente reindirizzato alla lingua nativa).There is a more interactive page covering available languages, though be aware the page only appears to work when the site language is set to '' (and the Microsoft site will likely redirect to your native language). È possibile modificare la lingua del sito nella parte inferiore della pagina o modificando l'URL.You can change site language at the bottom of the page or by altering the URL.
    • Il valore authorizationKey , nel frammento di codice precedente, deve essere la chiave ricevuta quando si è effettuata la sottoscrizione al API traduzione testuale di Azure.The authorizationKey value, in the above code snippet, must be the Key you received when you subscribed to the Azure Translator Text API. Questo è stato trattato nel capitolo 1.This was covered in Chapter 1.
  6. È ora necessario aggiungere il codice per i metodi svegli () e Start () .Code for the Awake() and Start() methods now needs to be added.

  7. In questo caso, il codice effettuerà una chiamata ad Azure usando la chiave di autorizzazione per ottenere un token.In this case, the code will make a call to Azure using the authorization Key, to get a 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

    Il token scadrà dopo 10 minuti.The token will expire after 10 minutes. A seconda dello scenario per l'app, potrebbe essere necessario eseguire più volte la stessa chiamata di coroutine.Depending on the scenario for your app, you might have to make the same coroutine call multiple times.

  8. La coroutine per ottenere il token è la seguente:The coroutine to obtain the Token is the following:

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

    Avviso

    Se si modifica il nome del metodo IEnumerator GetTokenCoroutine (), è necessario aggiornare i valori della stringa di chiamata StartCoroutine e StopCoroutine nel codice riportato sopra.If you edit the name of the IEnumerator method GetTokenCoroutine(), you need to update the StartCoroutine and StopCoroutine call string values in the above code. In base alla documentazione di Unity, per arrestare una coroutine specifica, è necessario usare il metodo del valore stringa.As per Unity documentation, to Stop a specific Coroutine, you need to use the string value method.

  9. Successivamente, aggiungere la coroutine (con un metodo del flusso di "supporto" sotto di essa) per ottenere la traduzione del testo ricevuto dalla classe MicrophoneManager .Next, add the coroutine (with a “support” stream method right below it) to obtain the translation of the text received by the MicrophoneManager class. Questo codice crea una stringa di query da inviare al API traduzione testuale di Azure, quindi usa la classe UnityWebRequest di Unity interna per effettuare una chiamata Get all'endpoint con la stringa di query.This code creates a query string to send to the Azure Translator Text API, and then uses the internal Unity UnityWebRequest class to make a ‘Get’ call to the endpoint with the query string. Il risultato viene quindi utilizzato per impostare la traduzione nell'oggetto risultati.The result is then used to set the translation in your Results object. Il codice seguente illustra l'implementazione:The code below shows the implementation:

        /// <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. Assicurarsi di salvare le modifiche in Visual Studio prima di tornare a Unity.Be sure to save your changes in Visual Studio before returning to Unity.

Capitolo 8: configurare la scena UnityChapter 8 – Configure the Unity Scene

  1. Nell'editor di Unity fare clic e trascinare la classe results dalla cartella Scripts all'oggetto principale della fotocamera nel Pannello gerarchia.Back in the Unity Editor, click and drag the Results class from the Scripts folder to the Main Camera object in the Hierarchy Panel.

  2. Fare clic sulla fotocamera principale ed esaminare il pannello Inspector.Click on the Main Camera and look at the Inspector Panel. Si noterà che all'interno del componente script appena aggiunto sono presenti quattro campi con valori vuoti.You will notice that within the newly added Script component, there are four fields with empty values. Questi sono i riferimenti di output alle proprietà nel codice.These are the output references to the properties in the code.

  3. Trascinare gli oggetti testo appropriati dal Pannello gerarchia a questi quattro slot, come illustrato nell'immagine seguente.Drag the appropriate Text objects from the Hierarchy Panel to those four slots, as shown in the image below.

    Aggiornare i riferimenti di destinazione con i valori specificati.

  4. Quindi, fare clic e trascinare la classe Translator dalla cartella Scripts all'oggetto principale della fotocamera nel Pannello gerarchia.Next, click and drag the Translator class from the Scripts folder to the Main Camera object in the Hierarchy Panel.

  5. Quindi, fare clic e trascinare la classe MicrophoneManager dalla cartella Scripts all'oggetto principale della fotocamera nel Pannello gerarchia.Then, click and drag the MicrophoneManager class from the Scripts folder to the Main Camera object in the Hierarchy Panel.

  6. Infine, fare clic sulla videocamera principale ed esaminare il pannello Inspector.Lastly, click on the Main Camera and look at the Inspector Panel. Si noterà che nello script che è stato trascinato sono presenti due caselle di riepilogo a discesa che consentono di impostare le lingue.You will notice that in the script you dragged on, there are two drop down boxes that will allow you to set the languages.

    Verificare che i linguaggi di traduzione previsti siano di input.

Capitolo 9: test in realtà mistaChapter 9 – Test in mixed reality

A questo punto è necessario testare che la scena è stata implementata correttamente.At this point you need to test that the Scene has been properly implemented.

Assicurarsi che:Ensure that:

  • Tutte le impostazioni indicate nel capitolo 1 sono impostate correttamente.All the settings mentioned in Chapter 1 are set correctly.
  • I risultati, Translator e MicrophoneManager, gli script sono allegati all'oggetto della fotocamera principale .The Results, Translator, and MicrophoneManager, scripts are attached to the Main Camera object.
  • La chiave del servizio API traduzione testuale di Azure è stata inserita nella variabile AuthorizationKey all'interno dello script Translator .You have placed your Azure Translator Text API Service Key within the authorizationKey variable within the Translator Script.
  • Tutti i campi nel pannello principale di controllo della fotocamera sono assegnati correttamente.All the fields in the Main Camera Inspector Panel are assigned properly.
  • Il microfono funziona quando si esegue la scena. in caso contrario, verificare che il microfono collegato sia il dispositivo predefinito e che sia stato configurato correttamente all'interno di Windows.Your microphone is working when running your scene (if not, check that your attached microphone is the default device, and that you have set it up correctly within Windows).

È possibile testare l'auricolare immersivo premendo il pulsante Play nell'editor di Unity.You can test the immersive headset by pressing the Play button in the Unity Editor. L'app deve funzionare tramite l'auricolare immersivo collegato.The App should be functioning through the attached immersive headset.

Avviso

Se nella console di Unity viene visualizzato un errore relativo alla modifica del dispositivo audio predefinito, è possibile che la scena non funzioni come previsto.If you see an error in the Unity console about the default audio device changing, the scene may not function as expected. Questo è dovuto al modo in cui il portale di realtà mista gestisce i microfoni predefiniti per le cuffie che li hanno.This is due to the way the mixed reality portal deals with built-in microphones for headsets that have them. Se viene visualizzato questo errore, è sufficiente arrestare la scena e avviarla di nuovo e le operazioni dovrebbero funzionare come previsto.If you see this error, simply stop the scene and start it again and things should work as expected.

Capitolo 10: compilare la soluzione UWP e sideload nel computer localeChapter 10 – Build the UWP solution and sideload on local machine

Tutti gli elementi necessari per la sezione Unity di questo progetto sono stati completati, quindi è giunto il momento di compilarli da Unity.Everything needed for the Unity section of this project has now been completed, so it is time to build it from Unity.

  1. Passare a impostazioni di compilazione: file > impostazioni di compilazione...Navigate to Build Settings: File > Build Settings...

  2. Nella finestra impostazioni di compilazione fare clic su Compila.From the Build Settings window, click Build.

    Compilare la scena Unity.

  3. Se non è già stato fatto, è necessario che i progetti C# Unity.If not already, tick Unity C# Projects.

  4. Fare clic su Compila.Click Build. Unity avvierà una finestra di Esplora file , in cui è necessario creare e quindi selezionare una cartella in cui compilare l'app.Unity will launch a File Explorer window, where you need to create and then select a folder to build the app into. Creare la cartella adesso e denominarla app.Create that folder now, and name it App. Quindi, con la cartella dell' app selezionata, fare clic su Seleziona cartella.Then with the App folder selected, press Select Folder.

  5. Unity inizierà a compilare il progetto nella cartella dell' app .Unity will begin building your project to the App folder.

  6. Una volta completata la compilazione di Unity (potrebbe richiedere del tempo), verrà aperta una finestra Esplora file nella posizione della compilazione (controllare la barra delle applicazioni, perché potrebbe non essere sempre visualizzata sopra le finestre, ma verrà inviata una notifica sull'aggiunta di una nuova finestra).Once Unity has finished building (it might take some time), it will open a File Explorer window at the location of your build (check your task bar, as it may not always appear above your windows, but will notify you of the addition of a new window).

Capitolo 11-distribuire l'applicazioneChapter 11 – Deploy your application

Per distribuire l'applicazione:To deploy your application:

  1. Passare alla nuova compilazione Unity (cartella app ) e aprire il file della soluzione con Visual Studio.Navigate to your new Unity build (the App folder) and open the solution file with Visual Studio.

  2. Nella configurazione della soluzione selezionare debug.In the Solution Configuration select Debug.

  3. Nella piattaforma soluzione selezionare x86, computer locale.In the Solution Platform, select x86, Local Machine.

    Per Microsoft HoloLens, può risultare più semplice impostare questa impostazione su computer remoto, in modo da non essere collegati al computer.For the Microsoft HoloLens, you may find it easier to set this to Remote Machine, so that you are not tethered to your computer. Tuttavia, sarà necessario eseguire anche le operazioni seguenti:Though, you will need to also do the following:

    • Conosce l' indirizzo IP del HoloLens, disponibile all'interno delle impostazioni > rete & Internet > Wi-Fi > opzioni avanzate; IPv4 è l'indirizzo da usare.Know the IP Address of your HoloLens, which can be found within the Settings > Network & Internet > Wi-Fi > Advanced Options; the IPv4 is the address you should use.
    • Verificare che la modalità sviluppatore sia attiva; disponibile in impostazioni > aggiorna & > di sicurezza per gli sviluppatori.Ensure Developer Mode is On; found in Settings > Update & Security > For developers.

    Distribuire la soluzione da Visual Studio.

  4. Passare al menu Compila e fare clic su Distribuisci soluzione per SIDELOAD l'applicazione al PC.Go to Build menu and click on Deploy Solution to sideload the application to your PC.

  5. L'app verrà visualizzata nell'elenco delle app installate, pronte per l'avvio.Your App should now appear in the list of installed apps, ready to be launched.

  6. Una volta avviata, l'app richiederà di autorizzare l'accesso al microfono.Once launched, the App will prompt you to authorize access to the Microphone. Assicurarsi di fare clic sul pulsante .Make sure to click the YES button.

  7. A questo punto è possibile iniziare a tradurre.You are now ready to start translating!

Applicazione API testo traduzione completataYour finished Translation Text API application

Congratulazioni, è stata creata un'app per realtà mista che sfrutta l'API traduzione testuale di Azure per convertire il riconoscimento vocale in testo tradotto.Congratulations, you built a mixed reality app that leverages the Azure Translation Text API to convert speech to translated text.

Prodotto finale.

Esercizi aggiuntiviBonus exercises

Esercizio 1Exercise 1

È possibile aggiungere funzionalità di sintesi vocale all'app, in modo che il testo restituito venga pronunciato?Can you add text-to-speech functionality to the app, so that the returned text is spoken?

Esercizio 2Exercise 2

Consentire all'utente di modificare le lingue di origine e di output ("da" e "in") nell'app stessa, in modo che l'app non debba essere ricompilata ogni volta che si desidera modificare le lingue.Make it possible for the user to change the source and output languages ('from' and 'to') within the app itself, so the app does not need to be rebuilt every time you want to change languages.