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.
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í:
- Uživatel bude mluvit do mikrofonu připojeného k imerzivní náhlavní soupravě (VR) (nebo integrovanému mikrofonu HoloLensu).
- Aplikace zaznamená diktování a odešle ho do rozhraní Azure Translator Text API.
- 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:
- Vývojový počítač kompatibilní s Windows Mixed Reality pro vývoj imerzivních náhlavních souprav (VR)
- Windows 10 Fall Creators Update (nebo novější) s povoleným vývojářským režimem
- Nejnovější Windows 10 SDK
- Unity 2017.4
- Visual Studio 2017
- Windows Mixed Reality imerzivní náhlavní souprava nebo Microsoft HoloLens s povoleným režimem Vývojář
- Sada sluchátek s vestavěným mikrofonem (pokud náhlavní souprava nemá vestavěný mikrofon a reproduktory)
- Přístup k internetu pro nastavení Azure a načítání překladů
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".
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.
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ů.
Po přihlášení klikněte v levém horním rohu na Nový a vyhledejte "Translator Text API". Vyberte Enter.
Poznámka
Na novějších portálech mohlo být slovo Nový nahrazeno slovem Vytvořit prostředek.
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ě.
Po kliknutí na Vytvořit:
Vložte požadovaný název pro tuto instanci služby.
Vyberte příslušné předplatné.
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).
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ů.
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.
Budete také muset potvrdit, že rozumíte podmínkám a ujednáním, které se na tuto službu vztahují.
Vyberte Vytvořit.
Po kliknutí na Vytvořit budete muset počkat na vytvoření služby, což může chvíli trvat.
Po vytvoření instance služby se na portálu zobrazí oznámení.
Kliknutím na oznámení prozkoumejte novou instanci služby.
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.
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.
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.
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:
Otevřete Unity a klikněte na Nový.
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.
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 .
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.
Přejděte na Nastavení sestavení souboru > a ujistěte se, že:
Cílové zařízení je nastavené na Všechna zařízení.
Pro Microsoft HoloLens nastavte Cílové zařízení na HoloLens.
Typ sestavení je nastavený na D3D.
Sada SDK je nastavená na nejnovější nainstalovanou verzi.
Verze sady Visual Studio je nastavená na nejnovější nainstalovanou verzi.
Sestavení a spuštění je nastavené na místní počítač.
Uložte scénu a přidejte ji do sestavení.
Uděláte to tak, že vyberete Přidat otevřené scény. Zobrazí se okno pro uložení.
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.
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.
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.
Zbývající nastavení v nastavení sestavení by prozatím měla zůstat ve výchozím nastavení.
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 .
Na tomto panelu je potřeba ověřit několik nastavení:
Na kartě Další nastavení :
Verze modulu runtime skriptování by měla být stabilní (ekvivalent .NET 3.5).
Skriptovací back-end by měl být .NET.
Úroveň kompatibility rozhraní API by měla být .NET 4.6.
Na kartě Nastavení publikování v části Možnosti zaškrtněte:
InternetClient
Mikrofon
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.
V nastavení sestavení už nejsou projekty Unity C# šedě. zaškrtněte políčko vedle tohoto políčka.
Zavřete okno Nastavení sestavení.
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.
Na panelu hierarchie najdete objekt s názvem Hlavní kamera, který představuje váš "hlavní" pohled, jakmile jste "uvnitř" aplikace.
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á.
Uděláte to tak, že vyberete ikonu ozubeného kola vedle komponenty Transformace kamery a vyberete Resetovat.
Komponenta Transform by pak měla vypadat takto:
Pozice je nastavená na 0, 0, 0.
Otočení je nastaveno na 0, 0, 0.
A měřítko je nastavené na 1, 1, 1.
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.
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).
Do hlavní kamery se přidá komponenta Zdroj zvuku, jak je znázorněno níže.
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.
Klikněte pravým tlačítkem do prázdné oblasti panelu hierarchie a v části Uživatelské rozhraní přidejte plátno.
S vybraným objektem Canvas na panelu inspektoru (v komponentě Plátno) změňte Režim vykreslování na Světový prostor.
Dále změňte následující parametry v rektační transformaci panelu inspektoru:
POS - X 0 Y 0 Z 40
Šířka – 500
Výška – 300
Měřítko - X 0.13 Y 0.13 Z 0.13
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ě.
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).
U každého textového objektu ho vyberte a pomocí následujících tabulek nastavte parametry na panelu inspektoru.
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 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 Také nastavte styl písma tučně. Text se tak bude snadněji číst.
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.
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.
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 Pro komponentu Text (Script):
Name Text Velikost písma MicrophoneStatusText ?? 20 AzureResponseText ?? 20 DiktováníText ?? 20 TranslationResultText ?? 20
Dále vyberte možnost zarovnání "na střed" pro každou textovou komponentu:
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.
Pak v novém, malém okně Barva změňte šestnáctkovou barvu na: 0032EAFF.
Níže je uvedeno, jak by mělo uživatelské rozhraní vypadat.
Na panelu hierarchie:
V zobrazení scény a hry:
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:
Klikněte pravým tlačítkem na panel projektu a pak na Vytvořit > složku. Pojmenujte složku Skripty.
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).
Poklikáním na nový skript Výsledků ho otevřete v sadě Visual Studio.
Vložte následující obory názvů:
using UnityEngine; using UnityEngine.UI;
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;
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; }
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; }
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:
Poklikáním na složku Scripts ji otevřete.
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.
Poklikáním na nový skript ho otevřete v sadě Visual Studio.
Aktualizujte obory názvů tak, aby byly stejné jako následující v horní části třídy MicrophoneManager :
using UnityEngine; using UnityEngine.Windows.Speech;
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;
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"); } }
Můžete odstranit metodu Update(), protože tato třída ji nebude používat.
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.
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)); }
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:
Přejděte do složky Scripts , kterou jste vytvořili dříve.
Klikněte pravým tlačítkem myši na panel projektuVytvořit > skript jazyka C#. Zavolejte skript Translator.
Poklikáním na nový skript Translator ho otevřete v sadě Visual Studio.
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;
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.
Teď je potřeba přidat kód pro metody Awake() a Start().
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.
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.
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); } }
Před návratem do Unity nezapomeňte uložit změny v sadě Visual Studio.
Kapitola 8 – Konfigurace scény Unity
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.
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.
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.
Potom klikněte na třídu Translator a přetáhněte ji ze složky Scripts do objektu Main Camera v panelu hierarchie.
Potom klikněte a přetáhněte třídu MicrophoneManager ze složky Scripts do objektu Main Camera v panelu hierarchie.
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.
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.
Přejděte na Nastavení sestavení: Nastavení sestavení souboru > ...
V okně Nastavení sestavení klikněte na Sestavit.
Pokud tomu tak není, zaškrtněte políčko Projekty Unity C#.
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.
Unity začne váš projekt vytvářet do složky Aplikace .
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:
Přejděte do nového sestavení Unity (složka Aplikace ) a otevřete soubor řešení v sadě Visual Studio.
V části Konfigurace řešení vyberte Ladit.
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.
Přejděte do nabídky Sestavení a kliknutím na Nasadit řešení načtěte aplikaci do počítače bokem.
Vaše aplikace by se teď měla zobrazit v seznamu nainstalovaných aplikací připravených ke spuštění.
Po spuštění vás aplikace vyzve k autorizaci přístupu k mikrofonu. Nezapomeňte kliknout na tlačítko ANO .
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.
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.