HoloLens (1. generace) a Azure 301: Překlad jazyka
Poznámka:
Kurzy Mixed Reality Academy byly navrženy s HoloLensem (1. generace) a imerzivními náhlavními soupravami hybridní reality. Proto máme pocit, že je důležité nechat tyto kurzy zavedené pro vývojáře, kteří stále hledají pokyny při vývoji těchto zařízení. Tyto kurzy nebudou aktualizovány nejnovějšími sadami nástrojů ani interakcemi používanými pro HoloLens 2. Budou zachovány, aby pokračovaly v práci na podporovaných zařízeních. Bude k dispozici nová série kurzů, které budou publikovány v budoucnu, které předvádějí, jak vyvíjet pro HoloLens 2. Toto oznámení se při publikování aktualizuje odkazem na tyto kurzy.
V tomto kurzu se dozvíte, jak pomocí služby Translator Text API přidat možnosti překladu do aplikace hybridní reality pomocí služeb Azure Cognitive Services.
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 azure Translator Text API.
Po dokončení tohoto kurzu budete mít aplikaci hybridní reality, která bude moct provést následující akce:
- Uživatel bude mluvit do mikrofonu připojeného k imerzivní náhlavní soupravě (VR) (nebo integrovanému mikrofonu HoloLens).
- 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 dozvíte, jak získat výsledky ze služby Translator Service do ukázkové aplikace založené na Unity. Bude na vás, abyste tyto koncepty použili na vlastní aplikaci, kterou byste mohli vytvářet.
Podpora zařízení
Kurz | HoloLens | Imerzivní náhlavní soupravy |
---|---|---|
MR a Azure 301: Překlad jazyka | ✔️ | ✔️ |
Poznámka:
I když se tento kurz primárně zaměřuje na imerzivní náhlavní soupravy Windows Mixed Reality (VR), můžete také použít to, co se v tomto kurzu naučíte, na Microsoft HoloLens. Při sledování kurzu uvidíte poznámky o všech změnách, které možná budete potřebovat k podpoře HoloLensu. Při použití HoloLensu si můžete během hlasového zachycení všimnout určité ozvěny.
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 otestováno a ověřeno v době psaní (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 režimem vývojáře
- Nejnovější sada Windows 10 SDK
- Unity 2017.4
- Visual Studio 2017
- Imerzivní náhlavní souprava Windows Mixed Reality (VR) nebo Microsoft HoloLens s povoleným režimem vývojáře
- Sada sluchátek s vestavěným mikrofonem (pokud náhlavní souprava nemá vestavěný mikrofon a reproduktory)
- Přístup k internetu pro nastavení a načítání překladu Azure
Než začnete
Abyste se vyhnuli 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ůsobovat problémy v době sestavení).
Kód v tomto kurzu vám umožní nahrát 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í > řeči ochrany osobních údajů > , rukopis a psaní a vyberte tlačítko Zapnout hlasové služby a psát návrhy.
Pokud používáte mikrofon a sluchátka připojená k náhlavní soupravě (nebo k němu integrovaná), ujistěte se, že je v Nastavení > > zvuku a řeči zapnutá možnost "Když používám náhlavní soupravu, přepnout na mikrofon".
Upozorňující
Mějte na paměti, že pokud vyvíjíte pro imerzivní náhlavní soupravu pro toto cvičení, může docházet k problémům se zvukovým výstupem zařízení. Důvodem je problém s Unity, který je opravený v novějších verzích Unity (Unity 2018.2). Problém brání Unity ve změně výchozího zvukového výstupního zařízení za běhu. Jako alternativní řešení se ujistěte, že jste dokončili výše uvedené kroky, a zavřete a znovu otevřete Editor, když se tento problém prezentuje.
Kapitola 1 – Azure Portal
Pokud chcete používat rozhraní Azure Translator API, budete muset nakonfigurovat instanci služby, aby byla pro vaši aplikaci dostupná.
Přihlaste se k webu Azure Portal.
Poznámka:
Pokud ještě nemáte účet Azure, budete ho muset vytvořit. Pokud tento kurz sledujete v situaci v učebně nebo testovacím prostředí, požádejte svého instruktora nebo některého z proktorů, aby vám pomohli nastavit nový účet.
Po přihlášení klikněte v levém horním rohu na Nový a vyhledejte Translator Text API. Vyberte Enter.
Poznámka:
Slovo Nový mohlo být nahrazeno vytvořením prostředku na novějších portálech.
Na nové stránce se zobrazí 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 se jedná o první vytvoření služby Translator Text, 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 pro kolekci prostředků Azure. Doporučujeme zachovat všechny služby Azure přidružené k jednomu projektu (např. tato testovací prostředí) v rámci společné skupiny prostředků).
Pokud si chcete přečíst další informace o skupinách prostředků Azure, navštivte prosím článek o skupině prostředků.
Určete umístění vaší skupiny prostředků (pokud vytváříte novou skupinu prostředků). Umístění by ideálně bylo v oblasti, ve které by aplikace běžela. Některé prostředky Azure jsou dostupné jenom v určitých oblastech.
Budete také muset potvrdit, že jste porozuměli podmínkám a ujednáním použitým pro tuto službu.
Vyberte Vytvořit.
Jakmile kliknete na Vytvořit, budete muset počkat, až se služba vytvoří, může to chvíli trvat.
Po vytvoření instance služby se na portálu zobrazí oznámení.
Kliknutím na oznámení můžete prozkoumat novou instanci služby.
Kliknutím na tlačítko Přejít k prostředku v oznámení můžete prozkoumat novou instanci služby. Přejdete do nové instance služby Translator Text API.
V tomto kurzu bude vaše aplikace muset volat vaši službu, která se provádí pomocí klíče předplatného vaší 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 Tlačítko (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 označené ikonou klíče). Tím se zobrazí klíče služby.
Pořídit 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 hybridní reality.
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ásleduje typická sada pro vývoj s hybridní realitou a jako taková je vhodná šablona pro jiné 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 blíže ke kořenovým adresářům je lepší). Potom klikněte na Vytvořit projekt.
Při otevření Unity 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.
Dále přejděte do Nastavení sestavení souborů > a přepněte platformu na Univerzální platforma Windows kliknutím na tlačítko Přepnout platformu.
Přejděte do nastavení sestavení souborů > a ujistěte se, že:
Cílové zařízení je nastavené na libovolné 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 jakoukoli budoucí scénu a pak vyberte tlačítko Nová složka a vytvořte novou složku, pojmenujte ji Scény.
Otevřete nově vytvořenou složku Scény a potom do textového pole Název souboru zadejte MR_TranslationScene a 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 scén (a dalších podobných složek) je typický způsob strukturování projektu Unity.
Zbývající nastavení v nastavení sestavení by teď měla zůstat ve výchozím nastavení.
V okně Nastavení sestavení klikněte na tlačítko Nastavení přehrávače, otevře se 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í:
Skriptovací verze modulu runtime by měla být stabilní (ekvivalent .NET 3.5).
Back-end skriptování 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 (v části Nastavení publikování níže) zaškrtněte možnost Podpora virtuální reality a ujistěte se, že je přidaná sada SDK pro Windows Mixed Reality.
Zpět v nastavení sestavení už projekty Unity C# nejsou šedé. Zaškrtněte políčko vedle tohoto nastavení.
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 přeskočit komponentu Nastavení Unity v tomto kurzu a pokračovat přímo do kódu, můžete si stáhnout tento balíček .unitypackage, importovat ho do projektu jako vlastní balíček a pokračovat z kapitoly 5. Stále budete muset vytvořit projekt Unity.
Na panelu hierarchie najdete objekt s názvem Hlavní kamera, tento objekt představuje váš "hlavní" pohled, jakmile budete "uvnitř" aplikace.
Na řídicím panelu Unity před vámi vyberte hlavní objekt GameObject fotoaparátu. Všimněte si, že panel inspektoru (obvykle se nachází vpravo, v řídicím panelu) zobrazí různé komponenty 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ěna.
Uděláte to tak, že vyberete ikonu ozubeného kola vedle komponenty Transformace fotoaparátu a vyberete Obnovit.
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 nastaveno na 1, 1, 1
V dalším kroku s vybraným objektem Hlavní kamera se podívejte na tlačítko Přidat komponentu umístěné v dolní části panelu inspektoru.
Vyberte toto tlačítko a vyhledejte (zadáním zvukového zdroje do vyhledávacího pole nebo procházením oddílů) pro komponentu s názvem Zdroj zvuku, jak je znázorněno níže, a vyberte ji (stisknutím klávesy Enter na něm také funguje).
Do hlavní kamery se přidá komponenta Zdroj zvuku, jak je znázorněno níže.
Poznámka:
Pro Microsoft HoloLens budete muset změnit také následující položky, které jsou součástí komponenty Kamera na hlavní kameru:
- Vymazat příznaky: plná barva.
- Pozadí "Černá, Alfa 0" – šestnáctkové barvy: #00000000.
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 myši do prázdné oblasti panelu hierarchie v části Uživatelské rozhraní a přidejte plátno.
Když je vybraný objekt Plátno, na panelu inspektoru (v rámci komponenty Plátno) změňte režim vykreslování na světový prostor.
V dalším kroku změňte následující parametry v transformaci rektního 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
Pravým tlačítkem myši klikněte na plátno na panelu hierarchie v části Uživatelské rozhraní a přidejte panel. Tento panel bude obsahovat pozadí textu, který se bude zobrazovat ve scéně.
Klikněte pravým tlačítkem myši na panelu hierarchie v části Uživatelské rozhraní a přidejte objekt Text. Opakujte stejný postup, dokud nevytvořili celkem čtyři objekty textu uživatelského rozhraní (Tip: pokud máte vybraný první objekt Text, můžete jednoduše stisknout Ctrl + D, duplikovat ho, dokud nebudete mít celkem čtyři).
Pro každý textový objekt ho vyberte a pomocí následujících tabulek nastavte parametry v panelu inspektoru.
Pro komponentu Rect Transform :
Název Transformace – pozice Šířka 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):
Název 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 Nastavte také tučný styl písma. Tím se text snadněji čte.
Pro každý objekt text 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 tak, že kliknete pravým tlačítkem myši na zamýšlený nadřazený objekt (např. MicrophoneStatusLabel) a pak vyberete uživatelské rozhraní a pak vyberete Text.
Pro každou z těchto podřízených položek ji vyberte a pomocí následujících tabulek nastavte parametry v panelu inspektoru.
Pro komponentu Rect Transform :
Název Transformace – pozice Šířka 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):
Název Text Velikost písma MicrophoneStatusText ?? 20 AzureResponseText ?? 20 Diktování – text ?? 20 TranslationResultText ?? 20
Dále vyberte možnost zarovnání "střed" pro každou textovou komponentu:
Chcete-li zajistit, aby objekty text 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ě černobílé) vedle možnosti Barva.
Potom v novém, malé, Barevné okno, změňte Hex Color na: 0032EAFF
Níže je postup, 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ím skriptem, který potřebujete vytvořit, je třída Výsledky , která je zodpovědná za poskytnutí 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í (hlas na text)
- Výsledek překladu.
Vytvoření této třídy:
Pravým tlačítkem myši klikněte na panel projektu a pak na Vytvořit > složku. Pojmenujte složky Skripty.
Když vytvoříte složku Scripts , poklikejte na ni a otevřete ji. Potom v této složce klikněte pravým tlačítkem myši a vyberte Vytvořit > a potom skript jazyka C#. Pojmenujte výsledky skriptu.
Poklikáním na nový skript Výsledky 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; }
Než se vrátíte do Unity, nezapomeňte změny uložit v sadě Visual Studio.
Kapitola 6 – Vytvoření třídy MicrophoneManager
Druhou třídou, kterou vytvoříte, je MicrophoneManager.
Tato třída zodpovídá za:
- Zjištění nahrávacího zařízení připojeného k náhlavní soupravě nebo počítači (podle toho, co 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 hlasový záznam.
Vytvoření této třídy:
Poklikáním otevřete složku Skripty .
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 v horní části třídy MicrophoneManager :
using UnityEngine; using UnityEngine.Windows.Speech;
Pak do třídy MicrophoneManager přidejte následující proměnné:
// 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;
Kód pro metody Awake() a Start() je teď potřeba přidat. Tyto se budou volat 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"); } }
Metodu Update() můžete odstranit, protože tato třída ji nebude používat.
Teď potřebujete metody, které aplikace používá ke spuštění a zastavení zachytávání 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ž se tato aplikace nebude používat, stopCapturingAudio () metoda byla zde také uvedena, pokud chcete implementovat schopnost zastavit zachytávání zvuku ve vaší aplikaci.
Teď musíte přidat obslužnou rutinu diktování, která se vyvolá při zastavení hlasu. 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)); }
Než se vrátíte do Unity, nezapomeňte změny uložit v sadě Visual Studio.
Upozorňující
V tuto chvíli si všimnete chyby, která se zobrazí na panelu konzoly Unity Editoru (název Translator neexistuje...). Důvodem je to, že kód odkazuje na třídu Translator , kterou vytvoříte v další kapitole.
Kapitola 7 – Volání do Azure a překladatelské služby
Posledním skriptem , který potřebujete 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.
- Ověřovací token použijte k odeslání textu (přijatého z třídy MicrophoneManager), který se má přeložit.
- 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 na panel projektu a vytvořte > skript jazyka C#. Zavolejte translator skriptu.
Poklikáním otevřete nový skript Translatoru v sadě Visual Studio.
Do horní části 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 více, pokud chcete; rozhraní API podporuje více než 60 jazyků (včetně Klingonu)!
- Existuje interaktivnější stránka, která pokrývá dostupné jazyky, ale mějte na paměti, že stránka funguje jenom v případě, že je jazyk webu nastavený na "" (a web Microsoftu pravděpodobně přesměruje do vašeho nativního jazyka). Jazyk webu můžete změnit v dolní části stránky nebo úpravou 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.
Kód pro metody Awake() a Start() je teď potřeba přidat.
V takovém případě kód zavolá Do Azure pomocí autorizačního klíče a získá 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 několikrát provést stejné korutinové volání.
Korutinou k 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(); }
Upozorňující
Pokud upravíte název IEnumerator metody GetTokenCoroutine(), musíte aktualizovat Hodnoty řetězce volání StartCoroutine a StopCoroutine ve výše uvedeném kódu. Jak je uvedeno v dokumentaci Unity, pokud chcete zastavit konkrétní coroutine, musíte použít metodu řetězcové hodnoty.
Dále přidejte korutin (s metodou streamu "support" přímo pod ní) a získejte překlad textu přijatého třídou MicrophoneManager . Tento kód vytvoří řetězec dotazu pro odeslání do rozhraní Azure Translator Text API a pak pomocí interní třídy Unity UnityWebRequest provede volání "Get" koncovému 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); } }
Než se vrátíte do Unity, nezapomeňte změny uložit v sadě Visual Studio.
Kapitola 8 – Konfigurace scény Unity
Zpět v Unity Editoru klikněte a přetáhněte třídu Výsledky ze složky Scripts do objektu Hlavní kamera na panelu hierarchie.
Klikněte na hlavní kameru a podívejte se na panel inspektoru. Všimněte si, že v rámci nově přidané komponenty 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 na tyto čtyři sloty, jak je znázorněno na obrázku níže.
Dále klikněte na třídu Translator a přetáhněte ji ze složky Scripts do objektu Hlavní kamera v panelu hierarchie.
Potom klepněte a přetáhněte MicrophoneManager třídy 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 scéna byla správně implementována.
Zajistěte následující:
- Všechna nastavení uvedená v kapitole 1 jsou správně nastavena.
- K objektu Hlavní kamera jsou připojeny skripty Results, Translator a MicrophoneManager.
- Klíč služby Azure Translator Text API jste umístili 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řazena.
- Mikrofon funguje při spuštění scény (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 Unity Editoru. Aplikace by měla fungovat prostřednictvím připojené imerzivní náhlavní soupravy.
Upozorňující
Pokud se v konzole Unity zobrazí chyba týkající se výchozí změny 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 mělo by to 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 potřebné 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 ještě ne, zaškrtněte projekty Unity C#.
Klikněte na Sestavit. Unity spustí okno Průzkumník souborů, ve kterém potřebujete vytvořit a pak vybrat složku pro sestavení aplikace. Vytvořte teď složku a pojmenujte ji App. Pak s vybranou složkou Aplikace stiskněte vybrat složku.
Unity začne sestavovat projekt do složky Aplikace .
Po dokončení sestavování Unity (může to nějakou dobu trvat), otevře se okno Průzkumník souborů na místě 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 konfiguraci řešení vyberte Ladit.
Na platformě řešení vyberte x86, místní počítač.
U Microsoft HoloLensu může být jednodušší nastavit tento počítač na vzdálený počítač, takže nejste připojení k počítači. I když budete muset udělat toto:
- Znát IP adresu vašeho HoloLensu, který najdete v rozšířených možnostech sítě Nastavení > a Internetu > Wi-Fi>. Protokol IPv4 je adresa, kterou byste měli použít.
- Ujistěte se, že je režim vývojáře zapnutý, najdete v části Aktualizace nastavení > a zabezpečení > pro vývojáře.
Přejděte do nabídky Sestavení a kliknutím na Nasadit řešení aplikaci načtěte 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í aplikace zobrazí výzvu k autorizaci přístupu k mikrofonu. Nezapomeňte kliknout na tlačítko ANO .
Teď jste připraveni začít překládat!
Hotová aplikace rozhraní API pro překlad textu
Blahopřejeme, vytvořili jste aplikaci hybridní reality, 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 byl vrácený text mluvený?
Cvičení 2
Umožňuje uživateli změnit zdrojové a výstupní jazyky ("from" a "to") v rámci samotné aplikace, takže aplikace nemusí být znovu sestavena pokaždé, když chcete změnit jazyky.