HoloLens (1e generatie) en Azure 301: Taalomzetting
Notitie
De Mixed Reality Academy-zelfstudies zijn ontworpen met HoloLens (1e generatie) en Mixed Reality Immersive Headsets in gedachten. Daarom vinden we het belangrijk om deze zelfstudies te behouden voor ontwikkelaars die nog steeds op zoek zijn naar richtlijnen bij het ontwikkelen voor die apparaten. Deze zelfstudies worden niet bijgewerkt met de nieuwste toolsets of interacties die worden gebruikt voor HoloLens 2. Ze blijven behouden om door te gaan met het werken op de ondersteunde apparaten. Er is een nieuwe reeks zelfstudies die in de toekomst zullen worden gepost en die laten zien hoe u zich ontwikkelt voor HoloLens 2. Deze kennisgeving wordt bijgewerkt met een koppeling naar deze zelfstudies wanneer ze worden gepost.
In deze cursus leert u hoe u vertaalmogelijkheden toevoegt aan een mixed reality-toepassing met behulp van Azure Cognitive Services, met de Translator Text-API.
De Translator Text-API is een vertaalservice die in bijna realtime werkt. De service is gebaseerd op de cloud en met behulp van een REST API-aanroep kan een app gebruikmaken van de technologie voor neurale machinevertaling om tekst naar een andere taal te vertalen. Ga naar de azure Translator Text-API-pagina voor meer informatie.
Na voltooiing van deze cursus hebt u een mixed reality-toepassing die het volgende kan doen:
- De gebruiker spreekt in een microfoon die is verbonden met een insluitende headset (VR) of de ingebouwde microfoon van HoloLens.
- De app legt de dicteerfunctie vast en verzendt deze naar de Azure Translator Text-API.
- Het vertaalresultaat wordt weergegeven in een eenvoudige UI-groep in de Unity Scene.
In deze cursus leert u hoe u de resultaten van de Translator Service kunt ophalen in een voorbeeldtoepassing op basis van Unity. Het is aan u om deze concepten toe te passen op een aangepaste toepassing die u mogelijk bouwt.
Ondersteuning voor apparaten
Cursus | HoloLens | Insluitende headsets |
---|---|---|
MR en Azure 301: Taalomzetting | ✔️ | ✔️ |
Notitie
Hoewel deze cursus voornamelijk gericht is op Windows Mixed Reality immersive headsets (VR), kunt u ook toepassen wat u in deze cursus leert op Microsoft HoloLens. Terwijl u de cursus volgt, ziet u notities over de wijzigingen die u mogelijk moet toepassen om HoloLens te ondersteunen. Wanneer u HoloLens gebruikt, ziet u mogelijk echo tijdens spraakopname.
Vereisten
Notitie
Deze zelfstudie is ontworpen voor ontwikkelaars die basiservaring hebben met Unity en C#. Houd er ook rekening mee dat de vereisten en schriftelijke instructies in dit document staan voor wat is getest en geverifieerd op het moment van schrijven (mei 2018). U kunt de nieuwste software gebruiken, zoals vermeld in het artikel over de installatie van de hulpprogramma's , hoewel er niet van wordt uitgegaan dat de informatie in deze cursus perfect overeenkomt met wat u vindt in nieuwere software dan hieronder wordt vermeld.
Voor deze cursus raden we de volgende hardware en software aan:
- Een ontwikkel-pc, compatibel met Windows Mixed Reality voor insluitende headsetontwikkeling (VR)
- Windows 10 Fall Creators Update (of hoger) waarvoor de ontwikkelaarsmodus is ingeschakeld
- De nieuwste Windows 10 SDK
- Unity 2017.4
- Visual Studio 2017
- Een Windows Mixed Reality immersive (VR)-headset of Microsoft HoloLens waarvoor de ontwikkelaarsmodus is ingeschakeld
- Een set hoofdtelefoons met een ingebouwde microfoon (als de headset geen ingebouwde microfoon en luidsprekers heeft)
- Internettoegang voor het instellen en ophalen van vertalingen in Azure
Voordat u begint
Om problemen met het bouwen van dit project te voorkomen, wordt u sterk aangeraden het project te maken dat in deze zelfstudie wordt genoemd in een hoofdmap of in een near-rootmap (lange mappaden kunnen problemen veroorzaken tijdens de build).
Met de code in deze zelfstudie kunt u opnemen vanaf het standaardmicrofoonapparaat dat is verbonden met uw pc. Zorg ervoor dat het standaardmicrofoonapparaat is ingesteld op het apparaat dat u wilt gebruiken om uw stem vast te leggen.
Als u uw pc wilt toestaan om dicteren in te schakelen, gaat u naar Privacy > > spraakinstellingen, handschrift en typen en selecteert u de knop Spraakservices inschakelen en suggesties typen.
Als u een microfoon en hoofdtelefoon gebruikt die is aangesloten op uw headset (of ingebouwd) moet u ervoor zorgen dat de optie 'Wanneer ik mijn headset draag, schakel over naar microfoon van headset' is ingeschakeld in Instellingen Mixed reality > Audio en spraak>.
Waarschuwing
Houd er rekening mee dat als u ontwikkelt voor een insluitende headset voor dit lab, mogelijk problemen ondervindt met het audio-uitvoerapparaat. Dit komt door een probleem met Unity, dat is opgelost in latere versies van Unity (Unity 2018.2). Het probleem voorkomt dat Unity het standaardapparaat voor audio-uitvoer tijdens runtime wijzigt. Zorg ervoor dat u de bovenstaande stappen hebt voltooid en sluit en open de editor opnieuw wanneer dit probleem zich voordoet.
Hoofdstuk 1: Azure Portal
Als u de Azure Translator-API wilt gebruiken, moet u een exemplaar van de service configureren dat beschikbaar moet worden gesteld voor uw toepassing.
Meld u aan bij de Azure Portal.
Notitie
Als u nog geen Azure-account hebt, moet u er een maken. Als u deze zelfstudie volgt in een leslokaal- of labsituatie, vraagt u uw docent of een van de proctors voor hulp bij het instellen van uw nieuwe account.
Zodra u bent aangemeld, klikt u op Nieuw in de linkerbovenhoek en zoekt u naar 'Translator Text-API'. Selecteer Enter.
Notitie
Het woord Nieuw is mogelijk vervangen door Een resource maken in nieuwere portals.
De nieuwe pagina bevat een beschrijving van de Translator Text-API-service . Selecteer linksonder op deze pagina de knop Maken om een koppeling met deze service te maken.
Zodra u op Maken hebt geklikt:
Voeg de gewenste naam in voor dit service-exemplaar.
Selecteer een geschikt abonnement.
Selecteer de prijscategorie die voor u geschikt is. Als dit de eerste keer is dat u een Translator Text-service maakt, moet er een gratis laag (met de naam F0) voor u beschikbaar zijn.
Kies een resourcegroep of maak een nieuwe. Een resourcegroep biedt een manier om de toegang te bewaken, te beheren, facturering in te richten en te beheren voor een verzameling Azure-assets. Het wordt aanbevolen om alle Azure-services die zijn gekoppeld aan één project (zoals deze labs) onder een gemeenschappelijke resourcegroep te houden.
Als u meer wilt weten over Azure-resourcegroepen, gaat u naar het artikel over de resourcegroep.
Bepaal de locatie voor uw resourcegroep (als u een nieuwe resourcegroep maakt). De locatie zou zich idealiter in de regio bevinden waar de toepassing zou worden uitgevoerd. Sommige Azure-assets zijn alleen beschikbaar in bepaalde regio's.
U moet ook bevestigen dat u de voorwaarden hebt begrepen die op deze Service zijn toegepast.
Selecteer Maken.
Nadat u op Maken hebt geklikt, moet u wachten totdat de service is gemaakt. Dit kan een minuut duren.
Er wordt een melding weergegeven in de portal zodra het service-exemplaar is gemaakt.
Klik op de melding om uw nieuwe service-exemplaar te verkennen.
Klik op de knop Ga naar de resource in de melding om uw nieuwe service-exemplaar te verkennen. U wordt naar uw nieuwe Translator Text API Service-exemplaar gebracht.
In deze zelfstudie moet uw toepassing aanroepen doen naar uw service, wat wordt gedaan met behulp van de abonnementssleutel van uw service.
Navigeer op de pagina Snel starten van uw Translator Text-service naar de eerste stap, pak uw sleutels en klik op Sleutels (u kunt dit ook bereiken door te klikken op de blauwe hyperlinksleutels, die zich in het navigatiemenu van Services bevinden, aangeduid door het sleutelpictogram). Hiermee worden uw servicesleutels weergegeven.
Maak een kopie van een van de weergegeven sleutels, omdat u dit later in uw project nodig hebt.
Hoofdstuk 2 : Het Unity-project instellen
Stel uw mixed reality immersive headset in en test deze.
Notitie
U hebt geen bewegingscontrollers nodig voor deze cursus. Als u ondersteuning nodig hebt bij het instellen van een insluitende headset, volgt u deze stappen.
Hier volgt een typische opzet voor het ontwikkelen met mixed reality en is als zodanig een goede sjabloon voor andere projecten:
Open Unity en klik op Nieuw.
U moet nu een Unity-projectnaam opgeven. Voeg MR_Translation in. Zorg ervoor dat het projecttype is ingesteld op 3D. Stel de locatie in op een locatie die geschikt is voor u (vergeet niet, dichter bij hoofdmappen is beter). Klik vervolgens op Project maken.
Als Unity is geopend, is het de moeite waard om te controleren of de standaardscripteditor is ingesteld op Visual Studio. Ga naar Voorkeuren bewerken > en navigeer vervolgens vanuit het nieuwe venster naar Externe hulpprogramma's. Wijzig de externe scripteditor in Visual Studio 2017. Sluit het venster Voorkeuren .
Ga vervolgens naar > Instellingen voor bestandsbuild en schakel het platform over naar Universeel Windows-platform door op de knop Platform wisselen te klikken.
Ga naar Instellingen voor bestandsbuild > en zorg ervoor dat:
Het doelapparaat is ingesteld op Elk apparaat.
Voor Microsoft HoloLens stelt u Doelapparaat in op HoloLens.
Buildtype is ingesteld op D3D
SDK is ingesteld op Laatst geïnstalleerd
Visual Studio-versie is ingesteld op Meest recent geïnstalleerd
Bouwen en uitvoeren is ingesteld op lokale computer
Sla de scène op en voeg deze toe aan de build.
Doe dit door Open Scènes toevoegen te selecteren. Er wordt een venster voor opslaan weergegeven.
Maak hiervoor een nieuwe map, en voor elke toekomst scène, selecteer vervolgens de knop Nieuwe map om een nieuwe map te maken, geef deze de naam Scènes.
Open de zojuist gemaakte map Scènes en druk vervolgens in het tekstvak Bestandsnaam: tekstveld MR_TranslationScene en druk vervolgens op Opslaan.
Houd er rekening mee dat u uw Unity-scènes in de map Assets moet opslaan, omdat deze moeten worden gekoppeld aan het Unity-project. Het maken van de scènemap (en andere vergelijkbare mappen) is een typische manier om een Unity-project te structureren.
De overige instellingen, in Build-instellingen, moeten voorlopig standaard blijven staan.
Klik in het venster Build-instellingen op de knop Spelerinstellingen . Hiermee opent u het gerelateerde deelvenster in de ruimte waar de Inspector zich bevindt.
In dit deelvenster moeten enkele instellingen worden geverifieerd:
Op het tabblad Overige instellingen :
De runtimeversie van scripting moet stabiel zijn (equivalent van.NET 3.5).
Back-end voor scripts moet .NET zijn
API-compatibiliteitsniveau moet .NET 4.6 zijn
Schakel op het tabblad Publicatie-instellingen onder Mogelijkheden het volgende in:
InternetClient
Microfoon
Schakel verderop in het deelvenster in XR-instellingen (hieronder Publicatie-instellingen) het selectievakje Virtual Reality Ondersteund in, zorg ervoor dat de Windows Mixed Reality SDK is toegevoegd.
In Build Settings wordt Unity C# Projects niet meer grijs weergegeven. Schakel het selectievakje naast dit selectievakje in.
Sluit het venster Build Settings.
Sla uw scène en project op (FILE > SAVE SCENE/ FILE > SAVE PROJECT).
Hoofdstuk 3 – Hoofdcamera instellen
Belangrijk
Als u het Unity Set up-onderdeel van deze cursus wilt overslaan en direct in code wilt doorgaan, kunt u deze .unitypackage downloaden, importeren in uw project als een aangepast pakket en vervolgens doorgaan vanaf hoofdstuk 5. U moet nog steeds een Unity-project maken.
In het deelvenster Hiërarchie vindt u een object met de naam Hoofdcamera, dit object vertegenwoordigt uw 'hoofd'-weergavepunt zodra u zich 'binnen' uw toepassing bevindt.
Selecteer het Main Camera GameObject met het Unity-dashboard voor u. U ziet dat in het Inspector Panel (meestal aan de rechterkant, in het dashboard) de verschillende onderdelen van dat GameObject worden weergegeven, met Transform bovenaan, gevolgd door Camera en enkele andere onderdelen. U moet de transformatie van de hoofdcamera opnieuw instellen, zodat deze correct is ingesteld.
Hiervoor selecteert u het tandwielpictogram naast het onderdeel Transformatie van de camera en selecteert u Opnieuw instellen.
Het onderdeel Transformeren moet er dan als volgt uitzien:
De positie is ingesteld op 0, 0, 0
Draaiing is ingesteld op 0, 0, 0
En schaal is ingesteld op 1, 1, 1
Als vervolgens het object Hoofdcamera is geselecteerd, ziet u de knop Onderdeel toevoegen aan de onderkant van het inspectorpaneel.
Selecteer die knop en zoek (door Audiobron in het zoekveld te typen of door de secties te navigeren) voor het onderdeel audiobron, zoals hieronder wordt weergegeven en selecteer het (door op Enter te drukken, werkt ook).
Een audiobrononderdeel wordt toegevoegd aan de hoofdcamera, zoals hieronder wordt weergegeven.
Notitie
Voor Microsoft HoloLens moet u ook het volgende wijzigen, dat deel uitmaakt van het cameraonderdeel op uw hoofdcamera:
- Markeringen wissen: effen kleur.
- Achtergrond 'Zwart, Alfa 0' – Hexkleur: #000000000.
Hoofdstuk 4: Canvas voor foutopsporing instellen
Als u de invoer en uitvoer van de vertaling wilt weergeven, moet er een eenvoudige gebruikersinterface worden gemaakt. Voor deze cursus maakt u een Canvas UI-object, met verschillende tekstobjecten om de gegevens weer te geven.
Klik met de rechtermuisknop in een leeg gebied van het deelvenster Hiërarchie onder UI en voeg een canvas toe.
Terwijl het canvasobject is geselecteerd, wijzigt u in het deelvenster Inspector (binnen het onderdeel Canvas) de rendermodus in World Space.
Wijzig vervolgens de volgende parameters in de Rect Transform van het Inspector-deelvenster:
POS - X 0 Y 0 Z 40
Breedte - 500
Hoogte - 300
Schaal - X 0.13 Y 0.13 Z 0.13
Klik met de rechtermuisknop op het canvas in het deelvenster Hiërarchie, onder ui en voeg een deelvenster toe. Dit deelvenster bevat een achtergrond voor de tekst die u in de scène wilt weergeven.
Klik met de rechtermuisknop op het paneel in het deelvenster Hiërarchie, onder ui en voeg een tekstobject toe. Herhaal hetzelfde proces totdat u in totaal vier ui-tekstobjecten hebt gemaakt (Hint: als u het eerste object Tekst hebt geselecteerd, kunt u gewoon op Ctrl + D drukken om deze te dupliceren totdat u er vier in totaal hebt).
Voor elk tekstobject selecteert u het en gebruikt u de onderstaande tabellen om de parameters in het Inspector-deelvenster in te stellen.
Voor het onderdeel Rect Transform :
Naam Transformeren - positie Width Hoogte MicrophoneStatusLabel X -80 Y 90 Z 0 300 30 AzureResponseLabel X -80 Y 30 Z 0 300 30 DictationLabel X -80 Y -30 Z 0 300 30 TranslationResultLabel X -80 Y -90 Z 0 300 30 Voor het onderdeel Tekst (Script):
Naam Sms verzenden Lettergrootte MicrophoneStatusLabel Microfoonstatus: 20 AzureResponseLabel Azure-webantwoord 20 DictationLabel Je zei net: 20 TranslationResultLabel Vertaling: 20 Maak ook de tekenstijl vet. Hierdoor is de tekst beter leesbaar.
Maak voor elk UI Text-object dat is gemaakt in hoofdstuk 5 een nieuw onderliggend UI Text-object. Deze onderliggende items geven de uitvoer van de toepassing weer. Maak onderliggende objecten door met de rechtermuisknop op het beoogde bovenliggende item (bijvoorbeeld MicrophoneStatusLabel) te klikken en vervolgens de gebruikersinterface te selecteren en vervolgens Tekst te selecteren.
Voor elk van deze onderliggende items selecteert u deze en gebruikt u de onderstaande tabellen om de parameters in het Inspector-deelvenster in te stellen.
Voor het onderdeel Rect Transform :
Naam Transformeren - positie Width Hoogte MicrophoneStatusText X 0 Y -30 Z 0 300 30 AzureResponseText X 0 Y -30 Z 0 300 30 DictationText X 0 Y -30 Z 0 300 30 TranslationResultText X 0 Y -30 Z 0 300 30 Voor het onderdeel Tekst (Script):
Naam Sms verzenden Lettergrootte MicrophoneStatusText ?? 20 AzureResponseText ?? 20 DictationText ?? 20 TranslationResultText ?? 20
Selecteer vervolgens de uitlijningsoptie Centreren voor elk tekstonderdeel:
Wijzig de kleur van de onderliggende UI-tekstobjecten om ervoor te zorgen dat de onderliggende GEBRUIKERSinterfacetekstobjecten gemakkelijk leesbaar zijn. Klik hiervoor op de balk (momenteel 'Zwart') naast Kleur.
Wijzig vervolgens in het nieuwe, kleine kleurvenster de hexkleur in: 0032EAFF
Hieronder ziet u hoe de gebruikersinterface eruit moet zien.
In het deelvenster Hiërarchie:
In de scène - en gameweergaven:
Hoofdstuk 5: de klasse Resultaten maken
Het eerste script dat u moet maken, is de resultatenklasse , die verantwoordelijk is voor het bieden van een manier om de resultaten van de vertaling te bekijken. De klasse slaat het volgende op en geeft het volgende weer:
- Het antwoordresultaat van Azure.
- De microfoonstatus.
- Het resultaat van de dicteerfunctie (spraak naar tekst).
- Het resultaat van de vertaling.
Ga als volgt te werk om deze klasse te maken:
Klik met de rechtermuisknop in het projectvenster en klik vervolgens op Map maken>. Geef de mapscripts een naam.
Dubbelklik op de map Scripts om deze te openen. Klik vervolgens in die map met de rechtermuisknop en selecteer Vervolgens C#-script maken>. Geef de scriptresultaten een naam.
Dubbelklik op het nieuwe resultatenscript om het te openen met Visual Studio.
Voeg de volgende naamruimten in:
using UnityEngine; using UnityEngine.UI;
Voeg in de klasse de volgende variabelen in:
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;
Voeg vervolgens de Methode Awake() toe, die wordt aangeroepen wanneer de klasse wordt geïnitialiseerd.
private void Awake() { // Set this class to behave similar to singleton instance = this; }
Voeg ten slotte de methoden toe die verantwoordelijk zijn voor het uitvoeren van de verschillende resultateninformatie aan de gebruikersinterface.
/// <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; }
Sla uw wijzigingen op in Visual Studio voordat u terugkeert naar Unity.
Hoofdstuk 6 : de klasse MicrophoneManager maken
De tweede klasse die u gaat maken, is de MicrophoneManager.
Deze klasse is verantwoordelijk voor:
- Het opnameapparaat detecteren dat is gekoppeld aan de headset of machine (afhankelijk van de standaardinstelling).
- Leg de audio (spraak) vast en gebruik dicteren om het op te slaan als een tekenreeks.
- Zodra de stem is onderbroken, dient u de dicteerfunctie in bij de Translator-klasse.
- Host een methode waarmee de spraakopname indien gewenst kan worden gestopt.
Ga als volgt te werk om deze klasse te maken:
Dubbelklik op de map Scripts om deze te openen.
Klik met de rechtermuisknop in de map Scripts en klik op C#-script maken>. Geef het script de naam MicrophoneManager.
Dubbelklik op het nieuwe script om het te openen met Visual Studio.
Werk de naamruimten bij zodat deze hetzelfde zijn als de volgende, boven aan de klasse MicrophoneManager :
using UnityEngine; using UnityEngine.Windows.Speech;
Voeg vervolgens de volgende variabelen toe in de klasse 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;
Code voor de methoden Awake() en Start() moet nu worden toegevoegd. Deze worden aangeroepen wanneer de klasse wordt geïnitialiseerd:
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"); } }
U kunt de methode Update() verwijderen omdat deze klasse deze niet gebruikt.
Nu hebt u de methoden nodig die de app gebruikt om de spraakopname te starten en te stoppen en door te geven aan de Translator-klasse , die u binnenkort gaat bouwen. Kopieer de volgende code en plak deze onder de Methode 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
Hoewel deze toepassing er geen gebruik van maakt, is hier ook de methode StopCapturingAudio() opgegeven, als u de mogelijkheid wilt implementeren om het vastleggen van audio in uw toepassing te stoppen.
U moet nu een dicteerhandler toevoegen die wordt aangeroepen wanneer de stem stopt. Met deze methode wordt vervolgens de gedicteerde tekst doorgegeven aan de Translator-klasse .
/// <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)); }
Sla uw wijzigingen op in Visual Studio voordat u terugkeert naar Unity.
Waarschuwing
Op dit moment ziet u een fout die wordt weergegeven in het consolevenster van de Unity Editor ('De naam 'Translator' bestaat niet...'). Dit komt doordat de code verwijst naar de Translator-klasse , die u in het volgende hoofdstuk gaat maken.
Hoofdstuk 7: Aanroepen naar Azure- en translator-service
Het laatste script dat u moet maken, is de Translator-klasse .
Deze klasse is verantwoordelijk voor:
- De app verifiëren met Azure, in ruil voor een verificatietoken.
- Gebruik het verificatietoken om tekst in te dienen (ontvangen van de Klasse MicrophoneManager ) om te worden vertaald.
- Ontvang het vertaalde resultaat en geef het door aan de resultatenklasse die in de gebruikersinterface moet worden gevisualiseerd.
Ga als volgt te werk om deze klasse te maken:
Ga naar de map Scripts die u eerder hebt gemaakt.
Klik met de rechtermuisknop in het deelvenster Project, C#-script maken>. Roep het script Translator aan.
Dubbelklik op het nieuwe Translator-script om het te openen met Visual Studio.
Voeg de volgende naamruimten toe aan het begin van het bestand:
using System; using System.Collections; using System.Xml.Linq; using UnityEngine; using UnityEngine.Networking;
Voeg vervolgens de volgende variabelen toe in de Translator-klasse :
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;
Notitie
- De talen die in de enum talen zijn ingevoegd, zijn slechts voorbeelden. U kunt desgewenst meer toevoegen; de API ondersteunt meer dan 60 talen (inclusief Klingon)!
- Er is een interactievere pagina met beschikbare talen, maar houd er rekening mee dat de pagina alleen werkt wanneer de sitetaal is ingesteld op '' (en de Microsoft-site wordt waarschijnlijk omgeleid naar uw systeemeigen taal). U kunt de sitetaal onder aan de pagina wijzigen of door de URL te wijzigen.
- De authorizationKey-waarde moet in het bovenstaande codefragment de sleutel zijn die u hebt ontvangen wanneer u zich hebt geabonneerd op de Azure Translator Text-API. Dit werd behandeld in hoofdstuk 1.
Code voor de methoden Awake() en Start() moet nu worden toegevoegd.
In dit geval maakt de code een aanroep naar Azure met behulp van de autorisatiesleutel om een token op te halen.
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); }
Notitie
Het token verloopt na 10 minuten. Afhankelijk van het scenario voor uw app moet u mogelijk meerdere keren dezelfde coroutine-aanroep maken.
De coroutine voor het verkrijgen van het token is het volgende:
/// <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(); }
Waarschuwing
Als u de naam van de methode IEnumerator GetTokenCoroutine()bewerkt, moet u de tekenreekswaarden van StartCoroutine en StopCoroutine bijwerken in de bovenstaande code. Volgens de Unity-documentatie moet u de tekenreekswaardemethode gebruiken om een specifieke Coroutine te stoppen.
Voeg vervolgens de coroutine toe (met een streammethode 'support' direct eronder) om de vertaling te verkrijgen van de tekst die is ontvangen door de klasse MicrophoneManager . Met deze code wordt een queryreeks gemaakt die naar de Azure Translator Text-API wordt verzonden en vervolgens de interne Unity UnityWebRequest-klasse wordt gebruikt om een get-aanroep naar het eindpunt te maken met de querytekenreeks. Het resultaat wordt vervolgens gebruikt om de vertaling in uw resultatenobject in te stellen. De onderstaande code toont de implementatie:
/// <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); } }
Sla uw wijzigingen op in Visual Studio voordat u terugkeert naar Unity.
Hoofdstuk 8: De Unity-scène configureren
Klik in de Unity-editor en sleep de klasse Resultaten van de map Scripts naar het object Main Camera in het deelvenster Hierarchy.
Klik op de hoofdcamera en kijk naar het Inspector Panel. U ziet dat er binnen het zojuist toegevoegde scriptonderdeel vier velden met lege waarden zijn. Dit zijn de uitvoerverwijzingen naar de eigenschappen in de code.
Sleep de juiste tekstobjecten van het deelvenster Hiërarchie naar die vier sleuven, zoals wordt weergegeven in de onderstaande afbeelding.
Klik vervolgens en sleep de Translator-klasse van de map Scripts naar het object Hoofdcamera in het deelvenster Hiërarchie.
Klik en sleep vervolgens de klasse MicrophoneManager uit de map Scripts naar het object Hoofdcamera in het deelvenster Hiërarchie.
Klik ten slotte op de hoofdcamera en kijk naar het Inspector Panel. U ziet dat u in het script dat u hebt gesleept, twee vervolgkeuzelijsten zijn waarmee u de talen kunt instellen.
Hoofdstuk 9 – Testen in mixed reality
Op dit moment moet u testen of de scène correct is geïmplementeerd.
U moet het volgende hebben gedaan:
- Alle instellingen die in hoofdstuk 1 worden genoemd, zijn correct ingesteld.
- De scripts Results, Translator en MicrophoneManager worden gekoppeld aan het object Main Camera .
- U hebt uw Azure Translator Text-API-servicesleutel in de authorizationKey-variabele in het Translator-script geplaatst.
- Alle velden in het configuratiescherm van de hoofdcamera zijn correct toegewezen.
- Uw microfoon werkt bij het uitvoeren van uw scène (zo niet, controleer of de aangesloten microfoon het standaardapparaat is en of u deze juist hebt ingesteld in Windows).
U kunt de insluitende headset testen door op de knop Afspelen te drukken in de Unity Editor. De app moet functioneren via de aangesloten insluitende headset.
Waarschuwing
Als er een fout wordt weergegeven in de Unity-console over het wijzigen van het standaardaudioapparaat, werkt de scène mogelijk niet zoals verwacht. Dit komt door de manier waarop de mixed reality-portal omgaat met ingebouwde microfoons voor headsets die deze hebben. Als u deze fout ziet, stopt u de scène en start u deze opnieuw en werkt alles zoals verwacht.
Hoofdstuk 10: de UWP-oplossing bouwen en sideloaden op de lokale computer
Alles wat nodig is voor de Unity-sectie van dit project is nu voltooid, dus het is tijd om het te bouwen vanuit Unity.
Navigeer naar Build-instellingen: Instellingen voor bestandsbuild > ...
Klik in het venster Build-instellingen op Build.
Als dat nog niet zo is, tikt u op Unity C#-projecten.
Klik op Opbouwen. Unity start een Bestandenverkenner-venster waarin u een map moet maken en vervolgens een map selecteert waarin u de app wilt inbouwen. Maak die map nu en noem deze app. Druk vervolgens op Map selecteren terwijl de app-map is geselecteerd.
Unity begint met het bouwen van uw project in de app-map .
Zodra Unity klaar is met bouwen (het kan enige tijd duren), wordt er een Bestandenverkenner venster geopend op de locatie van uw build (controleer de taakbalk, omdat deze mogelijk niet altijd boven uw vensters wordt weergegeven, maar u ontvangt een melding over de toevoeging van een nieuw venster).
Hoofdstuk 11 : Uw toepassing implementeren
Uw toepassing implementeren:
Navigeer naar uw nieuwe Unity-build (de app-map ) en open het oplossingsbestand met Visual Studio.
Selecteer foutopsporing in de oplossingsconfiguratie.
Selecteer x86 in het Solution Platform, Local Machine.
Voor de Microsoft HoloLens is het mogelijk gemakkelijker om dit in te stellen op Externe computer, zodat u niet aan uw computer bent gekoppeld. U moet echter ook het volgende doen:
- Ken het IP-adres van uw HoloLens, die u kunt vinden in de geavanceerde opties voor het instellingennetwerk > en internet-Wi-Fi > >. De IPv4 is het adres dat u moet gebruiken.
- Zorg ervoor dat de ontwikkelaarsmodus is ingeschakeld. Deze vindt u in Instellingen > bijwerken en beveiliging > voor ontwikkelaars.
Ga naar het menu Build en klik op Oplossing implementeren om de toepassing sideloaden op uw pc.
Uw app moet nu worden weergegeven in de lijst met geïnstalleerde apps die klaar zijn om te worden gestart.
Zodra de app is gestart, wordt u gevraagd om toegang tot de microfoon te autoriseren. Zorg ervoor dat u op de knop JA klikt.
U bent nu klaar om te gaan vertalen!
Uw voltooide vertaaltekst-API-toepassing
Gefeliciteerd, u hebt een mixed reality-app gebouwd die gebruikmaakt van de Azure Translation Text-API om spraak te converteren naar vertaalde tekst.
Bonusoefeningen
Oefening 1
Kunt u tekst-naar-spraak-functionaliteit toevoegen aan de app, zodat de geretourneerde tekst wordt gesproken?
Oefening 2
Zorg ervoor dat de gebruiker de bron- en uitvoertalen ('van' en 'naar') in de app zelf kan wijzigen, zodat de app niet telkens opnieuw hoeft te worden opgebouwd wanneer u talen wilt wijzigen.