Sdílet prostřednictvím


HoloLens (1. generace) a Azure 301: Překlad jazyka


Poznámka

Kurzy Mixed Reality Academy byly navrženy s ohledem na HoloLens (1. generace) a Mixed Reality Asistivní náhlavní soupravy. Proto se domníváme, že je důležité ponechat tyto kurzy pro vývojáře, kteří stále hledají pokyny při vývoji pro tato zařízení. Tyto kurzy nebudou aktualizovány nejnovějšími sadami nástrojů nebo interakcemi používanými pro HoloLens 2. Budou zachovány, aby mohly pokračovat v práci na podporovaných zařízeních. V budoucnu bude k dispozici nová série kurzů, které předvedou vývoj pro HoloLens 2. Toto oznámení bude aktualizováno odkazem na tyto kurzy, jakmile budou zveřejněny.


V tomto kurzu se dozvíte, jak přidat možnosti překladu do aplikace hybridní reality pomocí služeb Azure Cognitive Services pomocí služby Translator Text API.

Konečný produkt

Translator Text API je služba překladu, která funguje téměř v reálném čase. Služba je cloudová a pomocí volání rozhraní REST API může aplikace využít technologii neurálního strojového překladu k překladu textu do jiného jazyka. Další informace najdete na stránce rozhraní Azure Translator Text API.

Po dokončení tohoto kurzu budete mít aplikaci pro hybridní realitu, která bude umět následující:

  1. Uživatel bude mluvit do mikrofonu připojeného k imerzivní náhlavní soupravě (VR) (nebo integrovanému mikrofonu HoloLensu).
  2. Aplikace zaznamená diktování a odešle ho do rozhraní Azure Translator Text API.
  3. Výsledek překladu se zobrazí v jednoduché skupině uživatelského rozhraní ve scéně Unity.

V tomto kurzu se naučíte, jak získat výsledky ze služby Translator do ukázkové aplikace založené na Unity. Bude na vás, abyste tyto koncepty použili na vlastní aplikaci, kterou možná vytváříte.

Podpora zařízení

Kurz HoloLens Imerzivní náhlavní soupravy
MR a Azure 301: Překlad jazyka ✔️ ✔️

Poznámka

I když se tento kurz zaměřuje primárně na Windows Mixed Reality imerzivní náhlavní soupravy (VR), můžete také využít to, co se v tomto kurzu naučíte, k Microsoft HoloLens. V průběhu kurzu uvidíte poznámky ke všem změnám, které budete muset použít pro podporu HoloLensu. Při používání HoloLensu si můžete všimnout určité ozvěny během zachytávání hlasu.

Požadavky

Poznámka

Tento kurz je určený pro vývojáře, kteří mají základní zkušenosti s Unity a C#. Mějte také na paměti, že požadavky a písemné pokyny v tomto dokumentu představují to, co bylo testováno a ověřeno v době psaní tohoto dokumentu (květen 2018). Můžete používat nejnovější software, jak je uvedeno v článku o instalaci nástrojů , i když by se nemělo předpokládat, že informace v tomto kurzu budou dokonale odpovídat tomu, co najdete v novějším softwaru, než je uvedeno níže.

Pro tento kurz doporučujeme následující hardware a software:

Než začnete

  • Aby nedocházelo k problémům při sestavování tohoto projektu, důrazně doporučujeme vytvořit projekt uvedený v tomto kurzu v kořenové nebo téměř kořenové složce (dlouhé cesty ke složkám můžou způsobit problémy při sestavování).

  • Kód v tomto kurzu vám umožní nahrávat z výchozího mikrofonního zařízení připojeného k počítači. Ujistěte se, že je výchozí mikrofonní zařízení nastavené na zařízení, které chcete použít k zachycení hlasu.

  • Pokud chcete počítači povolit diktování, přejděte na Nastavení > Soukromí > Řeč, rukopis & psaní a vyberte tlačítko Zapnout hlasové služby a návrhy psaní.

  • Pokud používáte mikrofon a sluchátka připojená k náhlavní soupravě (nebo je k němu integrovaná), ujistěte se, že je v Nastavení > Hybridní realita > Zvuk a řeč zapnutá možnost "Když nosím náhlavní soupravu, přepnout na mikrofon náhlavní soupravy".

    Nastavení hybridní reality

    Nastavení mikrofonu

Upozornění

Mějte na paměti, že pokud vyvíjíte pro účely tohoto cvičení imerzivní náhlavní soupravu, může docházet k problémům s výstupním zvukovým zařízením. Důvodem je problém s Unity, který je opravený v novějších verzích Unity (Unity 2018.2). Tento problém brání Unity ve změně výchozího výstupního zvukového zařízení za běhu. Jako alternativní řešení se ujistěte, že jste dokončili výše uvedené kroky, a až se tento problém objeví, zavřete a znovu otevřete Editor.

Kapitola 1 – Azure Portal

Pokud chcete používat rozhraní API služby Azure Translator, budete muset nakonfigurovat instanci služby tak, aby byla dostupná pro vaši aplikaci.

  1. Přihlaste se k webu Azure Portal.

    Poznámka

    Pokud ještě nemáte účet Azure, budete si ho muset vytvořit. Pokud tento kurz sledujete v situaci ve třídě nebo testovacím prostředí, požádejte o pomoc s nastavením nového účtu svého instruktora nebo některého z specialistů.

  2. Po přihlášení klikněte v levém horním rohu na Nový a vyhledejte "Translator Text API". Vyberte Enter.

    Nový prostředek

    Poznámka

    Na novějších portálech mohlo být slovo Nový nahrazeno slovem Vytvořit prostředek.

  3. Na nové stránce najdete popis služby Translator Text API . V levém dolním rohu této stránky vyberte tlačítko Vytvořit a vytvořte přidružení k této službě.

    Vytvoření služby Translator Text API

  4. Po kliknutí na Vytvořit:

    1. Vložte požadovaný název pro tuto instanci služby.

    2. Vyberte příslušné předplatné.

    3. Vyberte cenovou úroveň , která je pro vás vhodná. Pokud vytváříte službu Translator Text Service poprvé, měla by vám být k dispozici bezplatná úroveň (s názvem F0).

    4. Zvolte skupinu prostředků nebo vytvořte novou. Skupina prostředků poskytuje způsob, jak monitorovat, řídit přístup, zřizovat a spravovat fakturaci kolekce prostředků Azure. Doporučujeme udržovat všechny služby Azure přidružené k jednomu projektu (např. tato testovací prostředí) ve společné skupině prostředků).

      Pokud si chcete přečíst další informace o skupinách prostředků Azure, přečtěte si článek o skupinách prostředků.

    5. Určete umístění vaší skupiny prostředků (pokud vytváříte novou skupinu prostředků). Umístění by v ideálním případě bylo v oblasti, ve které by se aplikace spustila. Některé prostředky Azure jsou dostupné jenom v určitých oblastech.

    6. Budete také muset potvrdit, že rozumíte podmínkám a ujednáním, které se na tuto službu vztahují.

    7. Vyberte Vytvořit.

      Vyberte tlačítko Vytvořit.

  5. Po kliknutí na Vytvořit budete muset počkat na vytvoření služby, což může chvíli trvat.

  6. Po vytvoření instance služby se na portálu zobrazí oznámení.

    Oznámení o vytvoření služby Azure

  7. Kliknutím na oznámení prozkoumejte novou instanci služby.

    Přejděte na automaticky otevírané okno prostředku.

  8. V oznámení klikněte na tlačítko Přejít k prostředku a prozkoumejte novou instanci služby. Budete přesměrováni do nové instance služby Translator Text API.

    Stránka služby Translator Text API

  9. V rámci tohoto kurzu bude vaše aplikace muset volat službu, což se provádí pomocí klíče předplatného služby.

  10. Na stránce Rychlý start služby Translator Text přejděte k prvnímu kroku : Uchopte klíče a klikněte na Klíče (můžete toho dosáhnout také tak, že kliknete na modrý hypertextový odkaz Klíče, který se nachází v navigační nabídce Služby a je označený ikonou klávesy). Tím se zobrazí vaše klíče služby.

  11. Pořiďte si kopii jednoho ze zobrazených klíčů, protože ho budete potřebovat později v projektu.

Kapitola 2 – Nastavení projektu Unity

Nastavte a otestujte imerzivní náhlavní soupravu pro hybridní realitu.

Poznámka

Pro tento kurz nebudete potřebovat ovladače pohybu. Pokud potřebujete podporu pro nastavení imerzivní náhlavní soupravy, postupujte podle těchto kroků.

Následující příklad je typickým nastavením pro vývoj s využitím hybridní reality a jako takový je dobrou šablonou pro další projekty:

  1. Otevřete Unity a klikněte na Nový.

    Spusťte nový projekt Unity.

  2. Teď budete muset zadat název projektu Unity. Vložit MR_Translation. Ujistěte se, že je typ projektu nastavený na 3D. Nastavte umístění na místo, které je pro vás vhodné (nezapomeňte, že lepší je blíž ke kořenovým adresářům). Pak klikněte na Vytvořit projekt.

    Zadejte podrobnosti o novém projektu Unity.

  3. Když je Unity otevřená, stojí za to zkontrolovat, jestli je výchozí Editor skriptů nastavený na Visual Studio. Přejděte na Upravit > předvolby a pak v novém okně přejděte na Externí nástroje. Změňte Editor externích skriptů na Visual Studio 2017. Zavřete okno Předvolby .

    Aktualizujte předvolbu editoru skriptů.

  4. Pak přejděte na Nastavení sestavení souboru > a přepněte platformu na Univerzální platforma Windows kliknutím na tlačítko Přepnout platformu.

    Okno Nastavení sestavení, přepnutí platformy na UPW

  5. Přejděte na Nastavení sestavení souboru > a ujistěte se, že:

    1. Cílové zařízení je nastavené na Všechna zařízení.

      Pro Microsoft HoloLens nastavte Cílové zařízení na HoloLens.

    2. Typ sestavení je nastavený na D3D.

    3. Sada SDK je nastavená na nejnovější nainstalovanou verzi.

    4. Verze sady Visual Studio je nastavená na nejnovější nainstalovanou verzi.

    5. Sestavení a spuštění je nastavené na místní počítač.

    6. Uložte scénu a přidejte ji do sestavení.

      1. Uděláte to tak, že vyberete Přidat otevřené scény. Zobrazí se okno pro uložení.

        Klikněte na tlačítko Přidat otevřené scény.

      2. Vytvořte novou složku pro tuto a libovolnou budoucí scénu a pak vyberte tlačítko Nová složka a vytvořte novou složku s názvem Scény.

        Vytvořit novou složku skriptů

      3. Otevřete nově vytvořenou složku Scény , do textového pole Název souboru: zadejte MR_TranslationScene a pak stiskněte Uložit.

        Pojmenujte novou scénu.

        Mějte na paměti, že scény Unity musíte uložit do složky Assets , protože musí být přidružené k projektu Unity. Vytvoření složky scenes (a dalších podobných složek) je typickým způsobem strukturování projektu Unity.

    7. Zbývající nastavení v nastavení sestavení by prozatím měla zůstat ve výchozím nastavení.

  6. V okně Nastavení sestavení klikněte na tlačítko Nastavení přehrávače . Tím se otevře související panel v prostoru, kde se nachází Inspektor .

    Otevřete nastavení přehrávače.

  7. Na tomto panelu je potřeba ověřit několik nastavení:

    1. Na kartě Další nastavení :

      1. Verze modulu runtime skriptování by měla být stabilní (ekvivalent .NET 3.5).

      2. Skriptovací back-end by měl být .NET.

      3. Úroveň kompatibility rozhraní API by měla být .NET 4.6.

        Aktualizujte další nastavení.

    2. Na kartě Nastavení publikování v části Možnosti zaškrtněte:

      1. InternetClient

      2. Mikrofon

        Aktualizuje se nastavení publikování.

    3. Dále na panelu v Nastavení XR (najdete pod nastavením publikování) zaškrtněte možnost Virtuální realita podporovaná a ujistěte se, že je přidaná sada Windows Mixed Reality SDK.

      Aktualizujte nastavení X R.

  8. V nastavení sestavení už nejsou projekty Unity C# šedě. zaškrtněte políčko vedle tohoto políčka.

  9. Zavřete okno Nastavení sestavení.

  10. Uložte scénu a projekt (FILE > SAVE SCENE / FILE > SAVE PROJECT).

Kapitola 3 – Nastavení hlavní kamery

Důležité

Pokud chcete vynechat komponentu Unity Set up tohoto kurzu a pokračovat přímo do kódu, můžete si stáhnout tento soubor .unitypackage, naimportovat ho do projektu jako vlastní balíček a pak pokračovat z kapitoly 5. Stále budete muset vytvořit projekt Unity.

  1. Na panelu hierarchie najdete objekt s názvem Hlavní kamera, který představuje váš "hlavní" pohled, jakmile jste "uvnitř" aplikace.

  2. S řídicím panelem Unity před vámi vyberte GameObject hlavní kamery. Všimněte si, že na panelu inspektoru (obvykle napravo na řídicím panelu) se zobrazí různé komponenty tohoto objektu GameObject s transformací v horní části, následovanou kamerou a některými dalšími komponentami. Budete muset resetovat transformaci hlavní kamery, aby byla správně umístěná.

  3. Uděláte to tak, že vyberete ikonu ozubeného kola vedle komponenty Transformace kamery a vyberete Resetovat.

    Obnovte transformaci Hlavní kamera.

  4. Komponenta Transform by pak měla vypadat takto:

    1. Pozice je nastavená na 0, 0, 0.

    2. Otočení je nastaveno na 0, 0, 0.

    3. A měřítko je nastavené na 1, 1, 1.

      Transformovat informace pro kameru

  5. Dále s vybraným objektem Main Camera (Hlavní kamera ) se podívejte na tlačítko Přidat komponentu umístěné úplně dole na panelu inspektoru.

  6. Vyberte toto tlačítko a vyhledejte (buď zadáním zvukového zdroje do vyhledávacího pole nebo přechodem do oddílů) komponentu s názvem Zdroj zvuku , jak je znázorněno níže, a vyberte ji (funguje také stisknutím klávesy Enter).

  7. Do hlavní kamery se přidá komponenta Zdroj zvuku, jak je znázorněno níže.

    Přidejte komponentu Zdroj zvuku.

    Poznámka

    U Microsoft HoloLens budete muset také změnit následující položky, které jsou součástí komponenty Kamera na hlavní kameře:

    • Vymazat příznaky: Plná barva.
    • Pozadí 'Black, Alpha 0' – šestnáctková barva: #000000000.

Kapitola 4 – Nastavení ladicího plátna

Aby bylo možné zobrazit vstup a výstup překladu, je potřeba vytvořit základní uživatelské rozhraní. V tomto kurzu vytvoříte objekt uživatelského rozhraní plátna s několika textovými objekty, které zobrazí data.

  1. Klikněte pravým tlačítkem do prázdné oblasti panelu hierarchie a v části Uživatelské rozhraní přidejte plátno.

    Přidejte nový objekt uživatelského rozhraní plátna.

  2. S vybraným objektem Canvas na panelu inspektoru (v komponentě Plátno) změňte Režim vykreslování na Světový prostor.

  3. Dále změňte následující parametry v rektační transformaci panelu inspektoru:

    1. POS - X 0 Y 0 Z 40

    2. Šířka – 500

    3. Výška – 300

    4. Měřítko - X 0.13 Y 0.13 Z 0.13

      Aktualizujte transformaci rektu pro plátno.

  4. Klikněte pravým tlačítkem na plátno v panelu hierarchie v části Uživatelské rozhraní a přidejte panel. Tento panel poskytne pozadí k textu, který budete zobrazovat ve scéně.

  5. Klikněte pravým tlačítkem na panel v panelu hierarchie v části Uživatelské rozhraní a přidejte objekt Text. Opakujte stejný postup, dokud nevytvořili celkem čtyři textové objekty uživatelského rozhraní (Tip: Pokud máte vybraný první objekt Text, můžete ho duplikovat stisknutím kombinace kláves Ctrl + D, dokud nebudete mít celkem čtyři).

  6. U každého textového objektu ho vyberte a pomocí následujících tabulek nastavte parametry na panelu inspektoru.

    1. Pro komponentu Transformace rect :

      Name Transformace – pozice Width (Šířka) Height (Výška)
      MicrophoneStatusLabel X -80 Y 90 Z 0 300 30
      AzureResponseLabel X -80 Y 30 Z 0 300 30
      DiktováníLabel X -80 Y -30 Z 0 300 30
      TranslationResultLabel X -80 Y -90 Z 0 300 30
    2. Pro komponentu Text (Script):

      Name Text Velikost písma
      MicrophoneStatusLabel Stav mikrofonu: 20
      AzureResponseLabel Webová odpověď Azure 20
      DiktováníLabel Právě jste řekl: 20
      TranslationResultLabel Převod: 20

      Zadejte odpovídající hodnoty pro popisky uživatelského rozhraní.

    3. Také nastavte styl písma tučně. Text se tak bude snadněji číst.

      Tučné písmo.

  7. Pro každý textový objekt uživatelského rozhraní vytvořený v kapitole 5 vytvořte nový podřízenýtextový objekt uživatelského rozhraní. Tyto podřízené položky zobrazí výstup aplikace. Vytvořte podřízené objekty kliknutím pravým tlačítkem na požadovaný nadřazený objekt (např. MicrophoneStatusLabel) a pak vyberte Uživatelské rozhraní a pak vyberte Text.

  8. Pro každou z těchto podřízených položek ji vyberte a pomocí následujících tabulek nastavte parametry na panelu kontroly.

    1. Pro komponentu Transformace rect :

      Name Transformace – pozice Width (Šířka) Height (Výška)
      MicrophoneStatusText X 0 Y -30 Z 0 300 30
      AzureResponseText X 0 Y -30 Z 0 300 30
      DiktováníText X 0 Y -30 Z 0 300 30
      TranslationResultText X 0 Y -30 Z 0 300 30
    2. Pro komponentu Text (Script):

      Name Text Velikost písma
      MicrophoneStatusText ?? 20
      AzureResponseText ?? 20
      DiktováníText ?? 20
      TranslationResultText ?? 20
  9. Dále vyberte možnost zarovnání "na střed" pro každou textovou komponentu:

    zarovnat text.

  10. Pokud chcete zajistit, aby textové objekty podřízeného uživatelského rozhraní byly snadno čitelné, změňte jejich barvu. Uděláte to tak, že kliknete na panel (aktuálně Black) vedle možnosti Barva.

    Zadejte odpovídající hodnoty pro výstupy textu uživatelského rozhraní.

  11. Pak v novém, malém okně Barva změňte šestnáctkovou barvu na: 0032EAFF.

    Aktualizujte barvu na modrou.

  12. Níže je uvedeno, jak by mělo uživatelské rozhraní vypadat.

    1. Na panelu hierarchie:

      Mít hierarchii v poskytnuté struktuře.

    2. V zobrazení scény a hry:

      Mít zobrazení scény a hry ve stejné struktuře.

Kapitola 5 – Vytvoření třídy Výsledků

První skript, který potřebujete vytvořit, je třída Results , která je zodpovědná za poskytování způsobu zobrazení výsledků překladu. Třída ukládá a zobrazuje následující položky:

  • Výsledek odpovědi z Azure.
  • Stav mikrofonu.
  • Výsledek diktování (převod hlasu na text).
  • Výsledek překladu.

Vytvoření této třídy:

  1. Klikněte pravým tlačítkem na panel projektu a pak na Vytvořit > složku. Pojmenujte složku Skripty.

    Vytvořte složku scripts.

    Otevřete složku scripts.

  2. Po vytvoření složky Scripts na ni poklikáním otevřete. Potom v této složce klikněte pravým tlačítkem myši a vyberte Vytvořit > a pak skript jazyka C#. Pojmenujte skript Results (Výsledky skriptu).

    Vytvořte první skript.

  3. Poklikáním na nový skript Výsledků ho otevřete v sadě Visual Studio.

  4. Vložte následující obory názvů:

        using UnityEngine;
        using UnityEngine.UI;
    
  5. Do třídy vložte následující proměnné:

        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. Pak přidejte metodu Awake(), která bude volána při inicializaci třídy.

        private void Awake() 
        { 
            // Set this class to behave similar to singleton 
            instance = this;           
        } 
    
  7. Nakonec přidejte metody, které jsou zodpovědné za výstup různých informací o výsledcích do uživatelského rozhraní.

        /// <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. Před návratem do Unity nezapomeňte uložit změny v sadě Visual Studio.

Kapitola 6 – Vytvoření třídy MicrophoneManager

Druhá třída, kterou chcete vytvořit, je MicrophoneManager.

Tato třída zodpovídá za:

  • Zjištění záznamového zařízení připojeného k náhlavní soupravě nebo zařízení (podle toho, které nastavení je výchozí).
  • Zachyťte zvuk (hlas) a pomocí diktování ho uložte jako řetězec.
  • Jakmile se hlas pozastaví, odešlete diktování do třídy Translator.
  • Hostujte metodu, která může v případě potřeby zastavit zachytávání hlasu.

Vytvoření této třídy:

  1. Poklikáním na složku Scripts ji otevřete.

  2. Klikněte pravým tlačítkem do složky Scripts (Skripty ) a klikněte na Create C# Script (Vytvořit > skript jazyka C#). Pojmenujte skript MicrophoneManager.

  3. Poklikáním na nový skript ho otevřete v sadě Visual Studio.

  4. Aktualizujte obory názvů tak, aby byly stejné jako následující v horní části třídy MicrophoneManager :

        using UnityEngine; 
        using UnityEngine.Windows.Speech;
    
  5. Pak přidejte následující proměnné do třídy 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. Teď je potřeba přidat kód pro metody Awake() a Start(). Tyto funkce budou volány při inicializaci třídy:

        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. Můžete odstranit metodu Update(), protože tato třída ji nebude používat.

  8. Teď potřebujete metody, které aplikace používá ke spuštění a zastavení záznamu hlasu a předání do třídy Translator , kterou brzy sestavíte. Zkopírujte následující kód a vložte ho pod metodu 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(); 
        }
    

    Tip

    I když ji tato aplikace nebude využívat, byla zde také k dispozici metoda StopCapturingAudio(), pokud chcete implementovat možnost zastavit záznam zvuku ve vaší aplikaci.

  9. Teď musíte přidat obslužnou rutinu diktování, která se vyvolá, když se hlas zastaví. Tato metoda pak předá diktovaný text do třídy 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. Před návratem do Unity nezapomeňte uložit změny v sadě Visual Studio.

Upozornění

V tomto okamžiku si všimnete, že se na panelu konzoly Unity Editoru zobrazí chyba ("Název Translator neexistuje..."). Je to proto, že kód odkazuje na třídu Translator , kterou vytvoříte v další kapitole.

Kapitola 7 – Volání do Azure a služba translator

Poslední skript, který je potřeba vytvořit, je třída Translator .

Tato třída zodpovídá za:

  • Ověřování aplikace v Azure výměnou za ověřovací token
  • Pomocí ověřovacího tokenu odešlete text (přijatý z třídy MicrophoneManager ) k překladu.
  • Získejte přeložený výsledek a předejte ho třídě výsledků , která se má vizualizovat v uživatelském rozhraní.

Vytvoření této třídy:

  1. Přejděte do složky Scripts , kterou jste vytvořili dříve.

  2. Klikněte pravým tlačítkem myši na panel projektuVytvořit > skript jazyka C#. Zavolejte skript Translator.

  3. Poklikáním na nový skript Translator ho otevřete v sadě Visual Studio.

  4. Na začátek souboru přidejte následující obory názvů:

        using System;
        using System.Collections;
        using System.Xml.Linq;
        using UnityEngine;
        using UnityEngine.Networking;
    
  5. Pak do třídy Translator přidejte následující proměnné:

        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; 
    

    Poznámka

    • Jazyky vložené do výčtu jazyků jsou jen příklady. Nebojte se přidat další, pokud chcete; rozhraní API podporuje více než 60 jazyků (včetně Klingonů)!
    • K dispozici je interaktivnější stránka, která pokrývá dostupné jazyky, ale mějte na paměti, že stránka funguje, jenom když je jazyk webu nastavený na hodnotu (a web Microsoftu se pravděpodobně přesměruje do vašeho rodného jazyka). Jazyk webu můžete změnit v dolní části stránky nebo změnou adresy URL.
    • Hodnota authorizationKey ve výše uvedeném fragmentu kódu musí být klíč , který jste obdrželi při přihlášení k odběru rozhraní Azure Translator Text API. To bylo popsáno v kapitole 1.
  6. Teď je potřeba přidat kód pro metody Awake() a Start().

  7. V tomto případě kód zavolá do Azure pomocí autorizačního klíče, aby získal 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); 
        }
    

    Poznámka

    Platnost tokenu vyprší po 10 minutách. V závislosti na scénáři vaší aplikace možná budete muset provést stejné volání corutin několikrát.

  8. Korutin pro získání tokenu je následující:

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

    Upozornění

    Pokud upravíte název metody IEnumerator GetTokenCoroutine(), musíte aktualizovat hodnoty řetězce volání StartCoroutine a StopCoroutine ve výše uvedeném kódu. Jak je uvedeno v dokumentaci k Unity, pokud chcete zastavit konkrétní Coroutine, musíte použít metodu řetězcové hodnoty.

  9. Dále přidejte korutin (s metodou "support" stream přímo pod ní), abyste získali překlad textu přijatého třídou MicrophoneManager . Tento kód vytvoří řetězec dotazu, který se odešle do rozhraní Azure Translator Text API, a pak pomocí interní třídy UnityWebRequest provede volání get koncového bodu s řetězcem dotazu. Výsledek se pak použije k nastavení překladu v objektu Results. Následující kód ukazuje implementaci:

        /// <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. Před návratem do Unity nezapomeňte uložit změny v sadě Visual Studio.

Kapitola 8 – Konfigurace scény Unity

  1. Zpět v Editoru Unity klikněte a přetáhněte třídu Resultsze složky Scripts do objektu Main Camera na panelu hierarchie.

  2. Klikněte na hlavní kameru a podívejte se na panel inspektoru. Všimněte si, že v nově přidané komponentě Script jsou čtyři pole s prázdnými hodnotami. Toto jsou výstupní odkazy na vlastnosti v kódu.

  3. Přetáhněte příslušné textové objekty z panelu hierarchie do těchto čtyř slotů, jak je znázorněno na obrázku níže.

    Aktualizujte cílové odkazy na zadané hodnoty.

  4. Potom klikněte na třídu Translator a přetáhněte ji ze složky Scripts do objektu Main Camera v panelu hierarchie.

  5. Potom klikněte a přetáhněte třídu MicrophoneManager ze složky Scripts do objektu Main Camera v panelu hierarchie.

  6. Nakonec klikněte na hlavní kameru a podívejte se na panel inspektoru. Všimněte si, že ve skriptu, který jste přetáhli, jsou dvě rozevírací pole, která vám umožní nastavit jazyky.

    Ujistěte se, že jsou zadané jazyky překladu.

Kapitola 9 – Testování v hybridní realitě

V tomto okamžiku musíte otestovat, že je scéna správně implementovaná.

Zajistěte následující:

  • Všechna nastavení uvedená v kapitole 1 jsou nastavena správně.
  • K objektu Main Camera jsou připojeny skripty Results, Translator a MicrophoneManager.
  • Umístili jste klíč služby Azure Translator Text API do proměnné authorizationKey v rámci služby Translator Script.
  • Všechna pole na hlavním panelu kontroly kamery jsou správně přiřazená.
  • Při spuštění scény funguje mikrofon (pokud ne, zkontrolujte, jestli je připojený mikrofon výchozím zařízením a jestli jste ho správně nastavili ve Windows).

Imerzivní náhlavní soupravu můžete otestovat stisknutím tlačítka Přehrát v Editoru Unity. Aplikace by měla fungovat prostřednictvím připojené imerzivní náhlavní soupravy.

Upozornění

Pokud se v konzole Unity zobrazí chyba týkající se změny výchozího zvukového zařízení, scéna nemusí fungovat podle očekávání. Důvodem je způsob, jakým portál hybridní reality pracuje s integrovanými mikrofony pro náhlavní soupravy, které je mají. Pokud se zobrazí tato chyba, jednoduše zastavte scénu a spusťte ji znovu a vše by mělo fungovat podle očekávání.

Kapitola 10 – Sestavení řešení UPW a zkušební načtení na místním počítači

Všechno, co je potřeba pro oddíl Unity tohoto projektu, bylo dokončeno, takže je čas ho sestavit z Unity.

  1. Přejděte na Nastavení sestavení: Nastavení sestavení souboru > ...

  2. V okně Nastavení sestavení klikněte na Sestavit.

    Sestavte scénu Unity.

  3. Pokud tomu tak není, zaškrtněte políčko Projekty Unity C#.

  4. Klikněte na Sestavit. Unity spustí Průzkumník souborů okno, ve kterém musíte vytvořit a vybrat složku, do které chcete aplikaci sestavit. Vytvořte teď složku a pojmenujte ji App. Pak s vybranou složkou Aplikace stiskněte Vybrat složku.

  5. Unity začne váš projekt vytvářet do složky Aplikace .

  6. Jakmile Unity dokončí sestavování (může to nějakou dobu trvat), otevře se okno Průzkumník souborů v umístění sestavení (zkontrolujte hlavní panel, protože se nemusí vždy zobrazovat nad okny, ale upozorní vás na přidání nového okna).

Kapitola 11 – Nasazení aplikace

Nasazení aplikace:

  1. Přejděte do nového sestavení Unity (složka Aplikace ) a otevřete soubor řešení v sadě Visual Studio.

  2. V části Konfigurace řešení vyberte Ladit.

  3. Na platformě řešení vyberte x86 , Místní počítač.

    Pro Microsoft HoloLens může být jednodušší nastavit tuto možnost na Vzdálený počítač, abyste nebyli připojení k počítači. Budete ale muset provést také následující akce:

    • Zjistěte IP adresu vašeho HoloLensu, kterou najdete v části Nastavení > sítě & Internet > Wi-Fi > Upřesnit možnosti. IPv4 je adresa, kterou byste měli použít.
    • Ujistěte se , že vývojářský režim je zapnutý. najdete v části Aktualizace nastavení > & zabezpečení > pro vývojáře.

    Nasaďte řešení ze sady Visual Studio.

  4. Přejděte do nabídky Sestavení a kliknutím na Nasadit řešení načtěte aplikaci do počítače bokem.

  5. Vaše aplikace by se teď měla zobrazit v seznamu nainstalovaných aplikací připravených ke spuštění.

  6. Po spuštění vás aplikace vyzve k autorizaci přístupu k mikrofonu. Nezapomeňte kliknout na tlačítko ANO .

  7. Teď můžete začít překládat.

Dokončená aplikace Translation Text API

Blahopřejeme, vytvořili jste aplikaci pro hybridní realitu, která využívá rozhraní Azure Translation Text API k převodu řeči na přeložený text.

Konečný produkt.

Bonusová cvičení

Cvičení 1

Můžete do aplikace přidat funkci převodu textu na řeč, aby se vrácený text vyslovil?

Cvičení 2

Umožňuje uživateli změnit zdrojový a výstupní jazyk (from a to) v samotné aplikaci, aby se aplikace nemusela znovu vytvářet pokaždé, když chcete změnit jazyky.