Dela via


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


Kommentar

Självstudierna för Mixed Reality Academy har utformats med HoloLens (första generationen) och Mixed Reality Immersive Headsets i åtanke. Därför anser vi att det är viktigt att låta de här självstudierna vara kvar för utvecklare som fortfarande letar efter 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 underhålls för att fortsätta arbeta med de enheter som stöds. Det kommer att finnas en ny serie självstudier som kommer att publiceras i framtiden som visar hur du utvecklar för HoloLens 2. Det här meddelandet uppdateras med en länk till de självstudierna 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.

Slutprodukt

Translator Text API ä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 den neurala maskinöversättningstekniken 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 program för mixad verklighet som kan göra följande:

  1. Användaren talar i en mikrofon som är ansluten till ett uppslukande (VR) headset (eller den inbyggda mikrofonen i HoloLens).
  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 Scene.

I den här kursen får du lära 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 Uppslukande headset
MR och Azure 301: Språköversättning ✔️ ✔️

Kommentar

Den här kursen fokuserar främst på Windows Mixed Reality-headset (VR) men du kan även använda det du lär dig i den här kursen för 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 ett eko under röstinspelningen.

Förutsättningar

Kommentar

Den här självstudien är utformad för utvecklare som har grundläggande erfarenhet av Unity och C#. Tänk också på att förutsättningarna och de skriftliga instruktionerna i det här dokumentet representerar det 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 perfekt matchar 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 byggtid).

  • 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 samla in din röst.

  • Om du vill att datorn ska kunna aktivera diktering går du till Inställningar > Sekretesstal > , pennanteckningar och 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 är inbyggda i) ditt headset kontrollerar du att alternativet "När jag använder mitt headset, växla till headsetmikrofon" är aktiverat i Inställningar > Mixed reality > Ljud och tal.

    Inställningar för mixad verklighet

    Mikrofoninställning

Varning

Tänk på att om du utvecklar för ett uppslukande headset för det här labbet kan det uppstå problem med ljudutdataenheter. 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 måste du konfigurera en instans av tjänsten som ska göras tillgänglig för ditt program.

  1. Logga in på Azure Portal.

    Kommentar

    Om du inte redan har ett Azure-konto måste du skapa ett. Om du följer den här självstudien i en klassrums- eller labbsituation ber du din instruktör 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

    Kommentar

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

  3. Den nya sidan innehåller en beskrivning av Translator Text API Service. 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 Service

  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 är lämplig för dig, om det är första gången du skapar en Translator Text Service, 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 enskilt projekt (t.ex. dessa labb) under en gemensam resursgrupp).

      Om du vill läsa mer om Azure-resursgrupper kan du gå till resursgruppens artikel.

    5. Fastställa platsen för resursgruppen (om du skapar en ny resursgrupp). Platsen skulle helst vara 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 gäller för 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 popup-fönstret resurs.

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

    Translator Text API Service-sidan

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

  10. Från sidan Snabbstart i Translator Text Service går 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 det senare i projektet.

Kapitel 2 – Konfigurera Unity-projektet

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

Kommentar

Du behöver inte rörelsestyrenheter för den här kursen. Följ dessa steg om du behöver stöd för att konfigurera ett uppslukande headset.

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

    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 platsen till någonstans som passar dig (kom ihåg att närmare rotkataloger ä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 Universal Windows Platform 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 eventuella framtida scenarier, välj sedan knappen Ny mapp , för att skapa en ny mapp, ge den namnet Scener.

        Skapa ny skriptmapp

      3. Öppna den nyligen skapade mappen Scener och skriv sedan MR_TranslationScene i fältet Filnamn: text och tryck sedan på Spara.

        Ge den nya scenen ett namn.

        Tänk på att du måste spara Unity-scenerna i mappen Tillgångar , eftersom de måste associeras med Unity-projektet. Att skapa mappen scener (och andra liknande mappar) är ett typiskt sätt att strukturera ett Unity-projekt.

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

  6. I fönstret Bygginställningar klickar du på knappen Spelarinställningar. Då öppnas den relaterade panelen i det utrymme där inspektören finns.

    Öppna spelarinställningar.

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

    1. På fliken Andra inställningar :

      1. Skriptkörningsversionen bör vara stabil (.NET 3.5-motsvarighet).

      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 (som finns under Publiceringsinställningar), markerar du Virtual Reality Supported (Virtual Reality Supported) och kontrollerar att Windows Mixed Reality SDK har lagts till.

      Uppdatera X R-inställningarna.

  8. I 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 scen och projekt (FILE > SAVE SCENE/FILE > SAVE PROJECT).

Kapitel 3 – Installation av huvudkamera

Viktigt!

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

  1. I hierarkipanelen hittar du ett objekt med namnet Main Camera. 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 GameObject, med Transformering ö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 kamerans transformeringskomponent och välja Återställ.

    Återställ transformering av huvudkameran.

  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. Skala är inställt på 1, 1, 1

      Transformera information för kamera

  5. När huvudkameraobjektet är markerat 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 med namnet Ljudkälla enligt nedan och välj den (om du trycker på Retur fungerar det också).

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

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

    Kommentar

    För Microsoft HoloLens måste du också ändra följande, som ingår i kamerakomponenten på huvudkameran:

    • Clear Flags: Solid Color.
    • Bakgrund "Black, Alpha 0" – Hexfärg: #000000000.

Kapitel 4 – Konfigurera felsökningsarbetsyta

För att visa indata och utdata för översättningen måste ett grundläggande användargränssnitt skapas. I den här kursen skapar du ett gränssnittsobjekt för arbetsytor med flera textobjekt för att visa data.

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

    Lägg till nytt gränssnittsobjekt för arbetsytor.

  2. Med objektet Canvas markerat ändrar du Återgivningsläge till Världsutrymme i kontrollpanelen (i komponenten Arbetsyta).

  3. Ändra sedan följande parametrar i Kontrollpanelens rektangulära 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 rekt transformering 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änssnitt och lägg till ett textobjekt. Upprepa samma process tills du har skapat totalt fyra gränssnittstextobjekt (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 väljer du det och använder tabellerna nedan för att ange parametrarna i Kontrollpanelen.

    1. För komponenten Rect Transform :

      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 användargränssnittsetiketterna.

    3. Gör också teckensnittsformatet fetstil. 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 skapas i kapitel 5. Dessa underordnade visar programmets utdata. Skapa underordnade objekt genom att högerklicka på din avsedda överordnade (t.ex. MicrophoneStatusLabel) och välj sedan användargränssnittet 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 komponenten Rect Transform :

      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. Om du vill se till att de underordnade gränssnittstextobjekten ä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. Ändra sedan hexfärgen till: 0032EAFF i det nya, lilla färgfönstret

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

      Ha scen- och spelvyer i samma struktur.

Kapitel 5 – Skapa klassen Resultat

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 i projektpanelen och sedan på Skapa > mapp. Ge mappen namnet Skript.

    Skapa skriptmapp.

    Öppna mappen skript.

  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 >sedan C#-skript. Ge skriptet namnet 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 diktering 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 samma som följande överst 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(); 
        }
    

    Dricks

    Även om det här programmet inte använder 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 Editor ("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 klassen Translator .

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 i 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; 
    

    Kommentar

    • De språk som infogas i språkuppräkningen ä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 modersmål). 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 den nyckel som du fick när du prenumererade på Azure Translator Text-API:et. 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); 
        }
    

    Kommentar

    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:et 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. Tillbaka i Unity-redigeraren klickar du och drar klassen Resultat från mappen Skript till huvudkameraobjektet i hierarkipanelen.

  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 de fyra facken, enligt bilden nedan.

    Uppdatera målreferenser med angivna värden.

  4. Klicka sedan på och dra klassen Translator från mappen Skript till huvudkameraobjektet i hierarkipanelen.

  5. Klicka sedan på och dra klassen MicrophoneManager från mappen Skript till huvudkameraobjektet i hierarkipanelen.

  6. Slutligen klickar du på huvudkameran och tittar 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 – Test 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 uppslukande 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 portalen för mixad verklighet 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 Bygginställningar klickar du på Skapa.

    Skapa Unity-scenen.

  3. Om inte redan markerar du Unity C#-projekt.

  4. Klicka på Skapa. Unity startar ett Istraživač datoteka 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 med appmappen markerad.

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

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

Kapitel 11 – Distribuera ditt program

Så här distribuerar du ditt program:

  1. Gå till din nya Unity-version (appmappen) 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 enklare att ställa in detta på Fjärrdator, så att du inte är ansluten till datorn. Men du måste också göra följande:

    • Känna till IP-adressen för dina HoloLens, som finns i Inställningar > Nätverk och Internet > Wi-Fi > Avancerade alternativ. IPv4 är den adress som du bör använda.
    • Se till att utvecklarläget är på; finns i Inställningar > Uppdatera och 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 till 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. Klicka på ja-knappen .

  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.