HoloLens (första generationen) och Azure 301: Språköversättning


Anteckning

Självstudierna Mixed Reality Academy har utformats med HoloLens (första generationen) och Mixed Reality integrerande headset i åtanke. Därför tycker vi att det är viktigt att låta de här självstudierna vara kvar för utvecklare som fortfarande behöver vägledning för att utveckla för dessa enheter. De här självstudierna uppdateras inte med de senaste verktygsuppsättningarna eller interaktionerna som används för HoloLens 2. De kommer att underhållas för att fortsätta arbeta på de enheter som stöds. Det kommer att finnas en ny serie självstudier som kommer att publiceras i framtiden som visar hur man utvecklar för HoloLens 2. Det här meddelandet uppdateras med en länk till dessa självstudier när de publiceras.


I den här kursen får du lära dig hur du lägger till översättningsfunktioner i ett program för mixad verklighet med hjälp av Azure Cognitive Services med Translator Text-API:et.

Slutprodukt

Translator Text-API:et är en översättningstjänst som fungerar nästan i realtid. Tjänsten är molnbaserad och med hjälp av ett REST API-anrop kan en app använda neural maskinöversättningsteknik för att översätta text till ett annat språk. Mer information finns på sidan för Azure Translator Text API.

När kursen är klar har du ett mixed reality-program som kan göra följande:

  1. Användaren talar i en mikrofon som är ansluten till ett integrerande (VR)-headset (eller holoLens inbyggda mikrofon).
  2. Appen samlar in dikteringen och skickar den till Azure Translator Text-API:et.
  3. Översättningsresultatet visas i en enkel användargränssnittsgrupp i Unity-scenen.

Den här kursen lär dig hur du hämtar resultaten från Translator Service till ett Unity-baserat exempelprogram. Det är upp till dig att tillämpa dessa begrepp på ett anpassat program som du kanske skapar.

Stöd för enheter

Kurs HoloLens Integrerande headset
MR och Azure 301: Språköversättning ✔️ ✔️

Anteckning

Den här kursen fokuserar främst på Windows Mixed Reality integrerande (VR) headset, men du kan också använda det du lär dig i den här kursen för att Microsoft HoloLens. När du följer kursen visas anteckningar om eventuella ändringar som du kan behöva använda för att stödja HoloLens. När du använder HoloLens kan du märka eko under röstinspelningen.

Förutsättningar

Anteckning

Den här självstudien är utformad för utvecklare som har grundläggande erfarenhet av Unity och C#. Tänk också på att kraven och de skriftliga anvisningarna i det här dokumentet representerar vad som har testats och verifierats i skrivande stund (maj 2018). Du är fri att använda den senaste programvaran, som anges i artikeln installera verktyg , men det bör inte antas att informationen i den här kursen kommer att matcha perfekt vad du hittar i nyare programvara än vad som anges nedan.

Vi rekommenderar följande maskinvara och programvara för den här kursen:

Innan du börjar

  • För att undvika problem med att skapa det här projektet rekommenderar vi starkt att du skapar projektet som nämns i den här självstudien i en rotmapp eller nära rotmapp (långa mappsökvägar kan orsaka problem vid byggtiden).

  • Koden i den här självstudien gör att du kan spela in från standardmikrofonenheten som är ansluten till datorn. Kontrollera att standardmikrofonenheten är inställd på den enhet som du planerar att använda för att spela in din röst.

  • Om du vill tillåta att datorn aktiverar diktering går du till Inställningar > Sekretesstal > , skriver & skriver och väljer knappen Aktivera taltjänster och skriver förslag.

  • Om du använder en mikrofon och hörlurar som är anslutna till (eller inbyggda i) headsetet kontrollerar du att alternativet "När jag använder mitt headset, växla till headsetmikrofon" är aktiverat i Inställningar > Mixed Reality > Audio och tal.

    Inställningar för mixad verklighet

    Mikrofoninställning

Varning

Tänk på att om du utvecklar för ett integrerande headset för den här labbuppgiften kan det uppstå problem med ljudutdataenheten. Detta beror på ett problem med Unity, som åtgärdas i senare versioner av Unity (Unity 2018.2). Problemet hindrar Unity från att ändra standardenheten för ljudutdata vid körning. Se till att du har slutfört stegen ovan och stäng och öppna redigeraren igen när problemet uppstår.

Kapitel 1 – Azure-portalen

Om du vill använda Azure Translator-API:et måste du konfigurera en instans av tjänsten som ska göras tillgänglig för ditt program.

  1. Logga in på Azure-portalen.

    Anteckning

    Om du inte redan har ett Azure-konto måste du skapa ett. Om du följer den här självstudien i ett klassrum eller en labbsituation ber du din lärare eller någon av rektorerna om hjälp med att konfigurera ditt nya konto.

  2. När du är inloggad klickar du på Nytt i det övre vänstra hörnet och söker efter "Translator Text API". Välj Retur.

    Ny resurs

    Anteckning

    Ordet Ny kan ha ersatts med Skapa en resurs i nyare portaler.

  3. Den nya sidan innehåller en beskrivning av Translator Text API-tjänsten . Längst ned till vänster på den här sidan väljer du knappen Skapa för att skapa en association med den här tjänsten.

    Skapa Translator Text API-tjänsten

  4. När du har klickat på Skapa:

    1. Infoga önskat namn för den här tjänstinstansen.

    2. Välj en lämplig prenumeration.

    3. Välj den prisnivå som passar dig. Om det är första gången du skapar en Translator Text-tjänst bör en kostnadsfri nivå (med namnet F0) vara tillgänglig för dig.

    4. Välj en resursgrupp eller skapa en ny. En resursgrupp är ett sätt att övervaka, kontrollera åtkomst, etablera och hantera fakturering för en samling Azure-tillgångar. Vi rekommenderar att du behåller alla Azure-tjänster som är associerade med ett enda projekt (t.ex. dessa labb) under en gemensam resursgrupp).

      Om du vill läsa mer om Azure-resursgrupper kan du läsa artikeln om resursgrupper.

    5. Fastställ platsen för resursgruppen (om du skapar en ny resursgrupp). Platsen skulle helst finnas i den region där programmet skulle köras. Vissa Azure-tillgångar är bara tillgängliga i vissa regioner.

    6. Du måste också bekräfta att du har förstått de villkor som tillämpas på den här tjänsten.

    7. Välj Skapa.

      Välj knappen Skapa.

  5. När du har klickat på Skapa måste du vänta tills tjänsten har skapats. Det kan ta en minut.

  6. Ett meddelande visas i portalen när tjänstinstansen har skapats.

    Meddelande om skapande av Azure-tjänst

  7. Klicka på meddelandet för att utforska din nya tjänstinstans.

    Gå till resurs-popup-fönstret.

  8. Klicka på knappen Gå till resurs i meddelandet för att utforska din nya tjänstinstans. Du kommer till din nya Translator Text API Service-instans.

    Translator Text API-tjänstsida

  9. I den här självstudien måste ditt program göra anrop till tjänsten, vilket görs med hjälp av din tjänsts prenumerationsnyckel.

  10. Från sidan Snabbstart i Translator Text Service navigerar du till det första steget, Hämtar dina nycklar och klickar på Nycklar (du kan också uppnå detta genom att klicka på den blå hyperlänken Nycklar, som finns i navigeringsmenyn Tjänster, som anges av nyckelikonen). Då visas dina tjänstnycklar.

  11. Ta en kopia av en av de nycklar som visas, eftersom du behöver den senare i projektet.

Kapitel 2 – Konfigurera Unity-projektet

Konfigurera och testa ditt integrerande headset för mixad verklighet.

Anteckning

Du behöver inte rörelsekontrollanter för den här kursen. Om du behöver stöd för att konfigurera ett integrerande headset följer du dessa steg.

Följande är en typisk konfiguration för utveckling med mixad verklighet och är därför en bra mall för andra projekt:

  1. Öppna Unity och klicka på Ny.

    Starta ett nytt Unity-projekt.

  2. Nu måste du ange ett Unity-projektnamn. Infoga MR_Translation. Kontrollera att projekttypen är inställd på 3D. Ange plats till någonstans som passar dig (kom ihåg att närmare rotkatalogerna är bättre). Klicka sedan på Skapa projekt.

    Ange information för det nya Unity-projektet.

  3. När Unity är öppet är det värt att kontrollera att standardskriptredigeraren är inställd på Visual Studio. Gå till Redigera > inställningar och gå sedan till Externa verktyg från det nya fönstret. Ändra extern skriptredigerare till Visual Studio 2017. Stäng fönstret Inställningar .

    Uppdatera skriptredigerarens inställningar.

  4. Gå sedan till Inställningar för filbygge > och växla plattformen till Universell Windows-plattform genom att klicka på knappen Växla plattform.

    Fönstret Skapa inställningar, växla plattform till UWP.

  5. Gå till Inställningar för filbygge > och kontrollera att:

    1. Målenheten är inställd på Valfri enhet.

      För Microsoft HoloLens anger du Målenhet till HoloLens.

    2. Byggtyp är inställd på D3D

    3. SDK är inställt på Senaste installerat

    4. Visual Studio-versionen är inställd på Senaste installerad

    5. Build and Run är inställt på Lokal dator

    6. Spara scenen och lägg till den i bygget.

      1. Gör detta genom att välja Lägg till öppna scener. Ett spara-fönster visas.

        Klicka på knappen Lägg till öppna scener

      2. Skapa en ny mapp för detta och eventuell framtida scen och välj sedan knappen Ny mapp för att skapa en ny mapp och ge den namnet Scener.

        Skapa ny skriptmapp

      3. Öppna mappen Scener och skriv MR_TranslationScene i textfältet Filnamn: och tryck sedan på Spara.

        Ge den nya scenen ett namn.

        Tänk på att du måste spara Unity-scenerna i mappen Assets eftersom de måste vara associerade med Unity-projektet. Att skapa mappen scenes (och andra liknande mappar) är ett vanligt sätt att strukturera ett Unity-projekt.

    7. De återstående inställningarna i Build Settings (Bygginställningar) bör vara kvar som standard för tillfället.

  6. I fönstret Build Settings (Bygginställningar ) klickar du på knappen Spelarinställningar . Då öppnas den relaterade panelen i utrymmet där Inspector finns.

    Öppna spelarinställningar.

  7. I den här panelen måste några inställningar verifieras:

    1. På fliken Andra inställningar :

      1. Körningsversionen för skript ska vara stabil (.NET 3.5 Motsvarande).

      2. Skriptserverdelen ska vara .NET

      3. API-kompatibilitetsnivån ska vara .NET 4.6

        Uppdatera andra inställningar.

    2. På fliken Publiceringsinställningar går du till Funktioner och kontrollerar:

      1. InternetClient

      2. Mikrofon

        Uppdaterar publiceringsinställningar.

    3. Längre ned på panelen, i XR-inställningar (finns under Publiceringsinställningar), markerar du Virtual Reality Supported (Virtuell verklighet stöds) och kontrollerar att Windows Mixed Reality SDK har lagts till.

      Uppdatera X R-inställningarna.

  8. Tillbaka i Build Settings (Bygginställningar) är Unity C# Projects inte längre nedtonat. markera kryssrutan bredvid detta.

  9. Stäng fönstret Build Settings (Bygginställningar).

  10. Spara din scen och ditt projekt (FILE > SAVE SCENE/FILE > SAVE PROJECT).

Kapitel 3 – Installation av huvudkamera

Viktigt

Om du vill hoppa över unity-konfigurationskomponenten i den här kursen och fortsätta direkt i koden kan du ladda ned .unitypackage, importera den till ditt projekt som ett anpassat paket och sedan fortsätta från kapitel 5. Du måste fortfarande skapa ett Unity-projekt.

  1. hierarkipanelen hittar du ett objekt som heter Huvudkamera. Det här objektet representerar din "huvudpunkt" när du är "inuti" ditt program.

  2. Med Unity-instrumentpanelen framför dig väljer du Main Camera GameObject. Du kommer att märka att Kontrollpanelen (som vanligtvis finns till höger, i instrumentpanelen) visar de olika komponenterna i det GameObject, med Transformera överst, följt av Kamera och några andra komponenter. Du måste återställa transformering av huvudkameran, så att den är korrekt placerad.

  3. Det gör du genom att välja kugghjulsikonen bredvid komponenten Kameratransformering och sedan Återställa.

    Återställ huvudkameratransformen.

  4. Transformeringskomponenten bör sedan se ut så här:

    1. Positionen är inställd på 0, 0, 0

    2. Rotationen är inställd på 0, 0, 0

    3. Och Skala är inställt på 1, 1, 1

      Transformera information för kamera

  5. När huvudkameraobjektet har valts kan du sedan se knappen Lägg till komponent längst ned i kontrollpanelen.

  6. Välj den knappen och sök (genom att antingen skriva Ljudkälla i sökfältet eller navigera i avsnitten) för komponenten som heter Ljudkälla enligt nedan och markera den (tryck på Retur på den fungerar också).

  7. En komponent för ljudkälla läggs till i huvudkameran enligt nedan.

    Lägg till en komponent för ljudkälla.

    Anteckning

    För Microsoft HoloLens måste du också ändra följande, som är en del av kamerakomponentenhuvudkameran:

    • Ta bort flaggor: Enfärgad.
    • Bakgrund "Black, Alpha 0" – Hexfärg: #000000000.

Kapitel 4 – Konfigurera felsökningsarbetsyta

Om du vill visa indata och utdata för översättningen måste du skapa ett grundläggande användargränssnitt. För den här kursen skapar du ett gränssnittsobjekt för arbetsytor med flera Text-objekt för att visa data.

  1. Högerklicka i ett tomt område i hierarkipanelen och lägg till en arbetsyta under Användargränssnitt.

    Lägg till ett nytt gränssnittsobjekt för arbetsytan.

  2. När objektet Arbetsyta är markerat går du till Kontrollpanelen (i komponenten Arbetsyta) och ändrar Återgivningsläge till Världsutrymme.

  3. Ändra sedan följande parametrar i Kontrollpanelens Rect-transformering:

    1. POS - X 0 Y 0 Z 40

    2. Bredd - 500

    3. Höjd - 300

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

      Uppdatera rekttransformering för arbetsytan.

  4. Högerklicka på Arbetsytan i hierarkipanelen under Användargränssnitt och lägg till en panel. Den här panelen ger en bakgrund till den text som du kommer att visa i scenen.

  5. Högerklicka på panelen i hierarkipanelen, under användargränssnittet, och lägg till ett Text-objekt. Upprepa samma process tills du har skapat fyra UI Text-objekt totalt (Tips: om du har valt det första textobjektet kan du helt enkelt trycka på Ctrl + D för att duplicera det tills du har fyra totalt).

  6. För varje textobjekt markerar du det och använder tabellerna nedan för att ange parametrarna i Kontrollpanelen.

    1. För rekttransformeringskomponenten :

      Name Transformera – position Bredd Höjd
      MicrophoneStatusLabel X -80 Y 90 Z 0 300 30
      AzureResponseLabel X -80 Y 30 Z 0 300 30
      DikteringLabel X -80 Y -30 Z 0 300 30
      TranslationResultLabel X -80 Y -90 Z 0 300 30
    2. För komponenten Text (skript):

      Name Text Teckenstorlek
      MicrophoneStatusLabel Mikrofonstatus: 20
      AzureResponseLabel Azure Web Response 20
      DikteringLabel Du sa bara: 20
      TranslationResultLabel Översättning: 20

      Ange motsvarande värden för gränssnittsetiketterna.

    3. Gör även stilen Fet. På så sätt blir texten lättare att läsa.

      Fetstil.

  7. Skapa ett nytt underordnat UI Text-objekt för varje UI Text-objekt som skapats i kapitel 5. Dessa underordnade objekt visar programmets utdata. Skapa underordnade objekt genom att högerklicka på den överordnade (t.ex. MicrophoneStatusLabel) och välj sedan Användargränssnitt och välj sedan Text.

  8. För vart och ett av dessa underordnade objekt väljer du det och använder tabellerna nedan för att ange parametrarna i Kontrollpanelen.

    1. För rekttransformeringskomponenten :

      Name Transformera – position Bredd Höjd
      MicrophoneStatusText X 0 Y -30 Z 0 300 30
      AzureResponseText X 0 Y -30 Z 0 300 30
      Dikteringstext X 0 Y -30 Z 0 300 30
      TranslationResultText X 0 Y -30 Z 0 300 30
    2. För komponenten Text (skript):

      Name Text Teckenstorlek
      MicrophoneStatusText ?? 20
      AzureResponseText ?? 20
      Dikteringstext ?? 20
      TranslationResultText ?? 20
  9. Välj sedan justeringsalternativet "mitten" för varje textkomponent:

    justera text.

  10. För att säkerställa att det underordnade gränssnittets textobjekt är lättläst ändrar du deras färg. Gör detta genom att klicka på fältet (för närvarande "Svart") bredvid Färg.

    Ange motsvarande värden för UI-textutdata.

  11. Sedan ändrar du Hexfärg i det nya lilla fönstret Färg till: 0032EAFF

    Uppdatera färgen till blå.

  12. Nedan visas hur användargränssnittet ska se ut.

    1. I hierarkipanelen:

      Ha hierarkin i den angivna strukturen.

    2. I scen- och spelvyerna:

      Ha scen- och spelvyer i samma struktur.

Kapitel 5 – Skapa klassen Results

Det första skriptet som du behöver skapa är klassen Results , som ansvarar för att tillhandahålla ett sätt att se resultatet av översättningen. Klassen lagrar och visar följande:

  • Svarsresultatet från Azure.
  • Mikrofonstatus.
  • Resultatet av dikteringen (röst till text).
  • Resultatet av översättningen.

Så här skapar du den här klassen:

  1. Högerklicka på projektpanelen och sedan på Skapa > mapp. Ge mappen namnet Skript.

    Skapa skriptmapp.

    Öppna mappen scripts.

  2. När mappen Skript har skapats dubbelklickar du på den för att öppna den. Högerklicka sedan i mappen och välj Skapa > och sedan C#-skript. Ge skriptet namnet Results( Resultat).

    Skapa det första skriptet.

  3. Dubbelklicka på det nya resultatskriptet för att öppna det med Visual Studio.

  4. Infoga följande namnområden:

        using UnityEngine;
        using UnityEngine.UI;
    
  5. Infoga följande variabler i klassen:

        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. Lägg sedan till metoden Awake(), som anropas när klassen initieras.

        private void Awake() 
        { 
            // Set this class to behave similar to singleton 
            instance = this;           
        } 
    
  7. Lägg slutligen till de metoder som ansvarar för att mata ut olika resultatinformation till användargränssnittet.

        /// <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. Se till att spara ändringarna i Visual Studio innan du återvänder till Unity.

Kapitel 6 – Skapa klassen MicrophoneManager

Den andra klassen som du ska skapa är MicrophoneManager.

Den här klassen ansvarar för:

  • Identifiera inspelningsenheten som är ansluten till headsetet eller datorn (beroende på vilket som är standard).
  • Avbilda ljudet (rösten) och använd diktamen för att lagra det som en sträng.
  • När rösten har pausats skickar du dikteringen till klassen Translator.
  • Värd för en metod som kan stoppa röstinspelningen om du vill.

Så här skapar du den här klassen:

  1. Dubbelklicka på mappen Skript för att öppna den.

  2. Högerklicka i mappen Skript och klicka på Skapa > C#-skript. Ge skriptet namnet MicrophoneManager.

  3. Dubbelklicka på det nya skriptet för att öppna det med Visual Studio.

  4. Uppdatera namnrymderna så att de är desamma som följande högst upp i klassen MicrophoneManager :

        using UnityEngine; 
        using UnityEngine.Windows.Speech;
    
  5. Lägg sedan till följande variabler i klassen MicrophoneManager :

        // Help to access instance of this object 
        public static MicrophoneManager instance; 
    
        // AudioSource component, provides access to mic 
        private AudioSource audioSource; 
    
        // Flag indicating mic detection 
        private bool microphoneDetected; 
    
        // Component converting speech to text 
        private DictationRecognizer dictationRecognizer; 
    
  6. Kod för metoderna Awake() och Start() måste nu läggas till. Dessa anropas när klassen initieras:

        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. Du kan ta bort metoden Update() eftersom den här klassen inte använder den.

  8. Nu behöver du de metoder som appen använder för att starta och stoppa röstinspelningen och skicka den till klassen Translator som du snart kommer att skapa. Kopiera följande kod och klistra in den under metoden 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(); 
        }
    

    Tips

    Även om det här programmet inte kommer att använda det, har metoden StopCapturingAudio() också angetts här, om du vill implementera möjligheten att sluta spela in ljud i ditt program.

  9. Nu måste du lägga till en dikteringshanterare som anropas när rösten stoppas. Den här metoden skickar sedan den dikterade texten till klassen Translator .

        /// <summary>
        /// This handler is called every time the Dictation detects a pause in the speech. 
        /// Debugging message is delivered to the Results class.
        /// </summary>
        private void DictationRecognizer_DictationResult(string text, ConfidenceLevel confidence)
        {
            // Update UI with dictation captured
            Results.instance.SetDictationResult(text);
    
            // Start the coroutine that process the dictation through Azure 
            StartCoroutine(Translator.instance.TranslateWithUnityNetworking(text));   
        }
    
  10. Se till att spara ändringarna i Visual Studio innan du återvänder till Unity.

Varning

Nu ser du ett fel som visas i Konsolpanelen för Unity-redigeraren ("Namnet "Translator" finns inte..."). Det beror på att koden refererar till klassen Translator , som du skapar i nästa kapitel.

Kapitel 7 – Samtal till Azure och Translator Service

Det sista skriptet som du behöver skapa är translator-klassen .

Den här klassen ansvarar för:

  • Autentisera appen med Azure i utbyte mot en autentiseringstoken.
  • Använd autentiseringstoken för att skicka text (mottagen från Klassen MicrophoneManager ) som ska översättas.
  • Ta emot det översatta resultatet och skicka det till resultatklassen som ska visualiseras i användargränssnittet.

Så här skapar du den här klassen:

  1. Gå till mappen Skript som du skapade tidigare.

  2. Högerklicka på Projektpanelen, Skapa > C#-skript. Anropa skriptet Translator.

  3. Dubbelklicka på det nya Translator-skriptet för att öppna det med Visual Studio.

  4. Lägg till följande namnområden överst i filen:

        using System;
        using System.Collections;
        using System.Xml.Linq;
        using UnityEngine;
        using UnityEngine.Networking;
    
  5. Lägg sedan till följande variabler i klassen 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; 
    

    Anteckning

    • De språk som infogas i språken uppräkning är bara exempel. Lägg gärna till mer om du vill; API:et stöder över 60 språk (inklusive Klingon)!
    • Det finns en mer interaktiv sida som täcker tillgängliga språk, men tänk på att sidan bara verkar fungera när webbplatsspråket är inställt på "" (och Microsoft-webbplatsen kommer sannolikt att omdirigeras till ditt eget språk). Du kan ändra webbplatsspråket längst ned på sidan eller genom att ändra URL:en.
    • Värdet authorizationKey i kodfragmentet ovan måste vara nyckeln du fick när du prenumererade på Azure Translator Text API. Detta togs upp i kapitel 1.
  6. Kod för metoderna Awake() och Start() måste nu läggas till.

  7. I det här fallet gör koden ett anrop till Azure med hjälp av auktoriseringsnyckeln för att hämta en 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); 
        }
    

    Anteckning

    Token upphör att gälla efter 10 minuter. Beroende på scenariot för din app kan du behöva göra samma coroutine-anrop flera gånger.

  8. Coroutine för att hämta token är följande:

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

    Varning

    Om du redigerar namnet på IEnumerator-metoden GetTokenCoroutine()måste du uppdatera värdena för StartCoroutine - och StopCoroutine-anropssträngen i koden ovan. Enligt Unity-dokumentationen måste du använda strängvärdemetoden för att stoppa en specifik Coroutine.

  9. Lägg sedan till coroutine (med en "support"-strömmetod precis under den) för att hämta översättningen av texten som tas emot av klassen MicrophoneManager . Den här koden skapar en frågesträng som ska skickas till Azure Translator Text API och använder sedan den interna UnityWebRequest-klassen för att göra ett Get-anrop till slutpunkten med frågesträngen. Resultatet används sedan för att ange översättningen i ditt Resultat-objekt. Koden nedan visar implementeringen:

        /// <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. Se till att spara ändringarna i Visual Studio innan du återvänder till Unity.

Kapitel 8 – Konfigurera Unity-scenen

  1. Gå tillbaka till Unity-redigeraren och klicka och dra klassen Resultatfrån mappen Skript till huvudkameraobjektethierarkipanelen.

  2. Klicka på huvudkameran och titta på kontrollpanelen. Du kommer att märka att det finns fyra fält med tomma värden i den nyligen tillagda skriptkomponenten . Det här är utdatareferenserna till egenskaperna i koden.

  3. Dra lämpliga textobjekt från hierarkipanelen till dessa fyra platser, enligt bilden nedan.

    Uppdatera målreferenser med angivna värden.

  4. Klicka sedan på och dra klassen Translator från mappen Skript till huvudkameraobjektethierarkipanelen.

  5. Klicka sedan på och dra klassen MicrophoneManager från mappen Skript till huvudkameraobjektethierarkipanelen.

  6. Klicka slutligen på huvudkameran och titta på kontrollpanelen. Du kommer att märka att i skriptet som du drog på finns det två nedrullningsbara rutor som gör att du kan ange språken.

    Kontrollera att de avsedda översättningsspråken är indata.

Kapitel 9 – Testa i mixad verklighet

Nu måste du testa att scenen har implementerats korrekt.

Se till att du har gjort följande:

  • Alla inställningar som anges i kapitel 1 är korrekt inställda.
  • Skripten Results, Translator och MicrophoneManager är kopplade till huvudkameraobjektet.
  • Du har placerat din Azure Translator Text API-tjänstnyckel i variabeln authorizationKey i Translator Script.
  • Alla fält i huvudpanelen för kamerakontroll tilldelas korrekt.
  • Mikrofonen fungerar när du kör scenen (om inte kontrollerar du att den anslutna mikrofonen är standardenheten och att du har konfigurerat den korrekt i Windows).

Du kan testa det uppslukande headsetet genom att trycka på knappen Spela upp i Unity-redigeraren. Appen ska fungera via det anslutna integrerande headsetet.

Varning

Om du ser ett fel i Unity-konsolen om att standardljudenheten ändras kanske scenen inte fungerar som förväntat. Detta beror på hur mixed reality-portalen hanterar inbyggda mikrofoner för headset som har dem. Om du ser det här felet stoppar du helt enkelt scenen och startar den igen och saker och ting bör fungera som förväntat.

Kapitel 10 – Skapa UWP-lösningen och separat inläsning på den lokala datorn

Allt som behövs för Unity-avsnittet i det här projektet har nu slutförts, så det är dags att bygga det från Unity.

  1. Gå till Bygginställningar: Inställningar för filbygge > ...

  2. I fönstret Build Settings (Skapa inställningar ) klickar du på Skapa.

    Skapa Unity-scenen.

  3. Om inte redan markerar du Unity C# Projects.

  4. Klicka på Skapa. Unity startar ett Utforskaren fönster där du behöver skapa och väljer sedan en mapp som appen ska byggas in i. Skapa mappen nu och ge den namnet App. Tryck sedan påVälj mapp när appmappen är markerad.

  5. Unity börjar skapa projektet i mappen App .

  6. När Unity har byggt klart (det kan ta lite tid) öppnas ett Utforskaren fönster på platsen för bygget (kontrollera aktivitetsfältet eftersom det kanske inte alltid visas ovanför fönstren, men meddelar dig om att ett nytt fönster har lagts till).

Kapitel 11 – Distribuera ditt program

Så här distribuerar du programmet:

  1. Gå till din nya Unity-version (mappen App ) och öppna lösningsfilen med Visual Studio.

  2. I Lösningskonfiguration väljer du Felsök.

  3. I Lösningsplattform väljer du x86, Lokal dator.

    För Microsoft HoloLens kan det vara lättare att ställa in detta på Fjärrdator, så att du inte är bunden till datorn. Men du måste också göra följande:

    • Ta reda på IP-adressen för dina HoloLens, som finns i inställningsnätverket > & Internet > Wi-Fi > avancerade alternativ. IPv4 är den adress som du bör använda.
    • Se till att utvecklarläget är ; finns i Inställningar > Uppdatera & Säkerhet > för utvecklare.

    Distribuera lösningen från Visual Studio.

  4. Gå till menyn Skapa och klicka på Distribuera lösning för att läsa in programmet separat på datorn.

  5. Din app bör nu visas i listan över installerade appar som är redo att startas.

  6. När appen har startats uppmanas du att auktorisera åtkomst till mikrofonen. Se till att klicka på knappen JA .

  7. Nu är du redo att börja översätta!

Ditt färdiga API-program för översättningstext

Grattis, du har skapat en mixed reality-app som använder API:et för Azure Translation Text för att konvertera tal till översatt text.

Slutprodukt.

Bonusövningar

Övning 1

Kan du lägga till text till tal-funktioner i appen så att den returnerade texten talas?

Övning 2

Gör det möjligt för användaren att ändra käll- och utdataspråken ("från" och "till") i själva appen, så att appen inte behöver återskapas varje gång du vill ändra språk.