HoloLens (1e generatie) en Azure 301: taalomzetting


Notitie

De Mixed Reality Academy-zelfstudies zijn ontworpen met het oog op HoloLens (1e generatie) en Mixed Reality Immersive Headsets. Daarom vinden we het belangrijk om deze zelfstudies te laten staan voor ontwikkelaars die nog steeds op zoek zijn naar hulp bij het ontwikkelen van deze apparaten. Deze zelfstudies worden niet bijgewerkt met de nieuwste hulpprogrammasets of interacties die worden gebruikt voor HoloLens 2. Ze worden onderhouden om te blijven werken op de ondersteunde apparaten. Er komt een nieuwe reeks zelfstudies die in de toekomst worden gepost, waarin wordt gedemonstreerd hoe u kunt ontwikkelen voor HoloLens 2. Deze kennisgeving wordt bijgewerkt met een koppeling naar deze zelfstudies wanneer deze worden gepost.


In deze cursus leert u hoe u vertaalmogelijkheden toevoegt aan een mixed reality-toepassing met behulp van Azure Cognitive Services, met behulp van de Translator Text-API.

Eindproduct

De Translator Text-API is een vertaalservice die bijna in 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 pagina Azure Translator Text-API voor meer informatie.

Na het voltooien van deze cursus hebt u een mixed reality-toepassing die het volgende kan doen:

  1. De gebruiker spreekt in een microfoon die is verbonden met een immersive (VR)-headset (of de ingebouwde microfoon van HoloLens).
  2. De app legt de dicteerfunctie vast en verzendt deze naar de Azure Translator Text-API.
  3. Het vertaalresultaat wordt weergegeven in een eenvoudige gebruikersinterfacegroep in de Unity-scène.

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 Immersive headsets
MR en Azure 301: Taalomzetting ✔️ ✔️

Notitie

Hoewel deze cursus zich voornamelijk richt op Windows Mixed Reality immersive (VR)-headsets, kunt u wat u in deze cursus leert ook toepassen op Microsoft HoloLens. Terwijl u de cursus volgt, ziet u notities over eventuele wijzigingen die u mogelijk moet doorvoeren om HoloLens te ondersteunen. Wanneer u HoloLens gebruikt, ziet u mogelijk wat echo tijdens het vastleggen van spraak.

Vereisten

Notitie

Deze zelfstudie is bedoeld voor ontwikkelaars die basiservaring hebben met Unity en C#. Houd er ook rekening mee dat de vereisten en schriftelijke instructies in dit document overeenkomen met wat is getest en geverifieerd op het moment van schrijven (mei 2018). U bent vrij om de nieuwste software te gebruiken, zoals vermeld in het artikel over het installeren van de hulpprogramma's , hoewel niet mag worden aangenomen dat de informatie in deze cursus perfect overeenkomt met wat u in nieuwere software vindt dan wat hieronder wordt vermeld.

Voor deze cursus raden we de volgende hardware en software aan:

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 vermeld in een hoofdmap of een bijna-hoofdmap (lange mappaden kunnen problemen veroorzaken tijdens het bouwen).

  • 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 wilt toestaan dat uw pc dicteert, gaat u naar Instellingen > Privacy > Spraak, handschrift & typen en selecteert u de knop Spraakservices en typsuggesties inschakelen.

  • Als u een microfoon en hoofdtelefoon gebruikt die zijn verbonden met (of ingebouwd op) uw headset, controleert u of de optie 'Wanneer ik mijn headset draag, overschakelen naar headsetmicrofoon' is ingeschakeld in Instellingen > Mixed reality > Audio en spraak.

    Instellingen voor mixed reality

    Microfooninstelling

Waarschuwing

Houd er rekening mee dat als u ontwikkelt voor een immersive headset voor dit lab, u problemen met het audio-uitvoerapparaat kunt ondervinden. Dit wordt veroorzaakt 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. Als tijdelijke oplossing moet u ervoor zorgen dat u de bovenstaande stappen hebt voltooid en sluit en opent u de editor opnieuw wanneer dit probleem zich voordoet.

Hoofdstuk 1: De Azure-portal

Als u de Azure Translator-API wilt gebruiken, moet u een exemplaar van de service configureren dat beschikbaar moet worden gesteld aan uw toepassing.

  1. Meld u aan bij 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 docenten om hulp bij het instellen van uw nieuwe account.

  2. Zodra u bent aangemeld, klikt u op Nieuw in de linkerbovenhoek en zoekt u naar 'Translator Text-API'. Selecteer Enter.

    Nieuwe resource

    Notitie

    Het woord Nieuw is mogelijk vervangen door Een resource maken in nieuwere portals.

  3. 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.

    Translator Text API-service maken

  4. Nadat u op Maken hebt geklikt:

    1. Voeg de gewenste naam in voor dit service-exemplaar.

    2. Selecteer een geschikt abonnement.

    3. Selecteer de prijscategorie die geschikt is voor u. 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.

    4. Kies een resourcegroep of maak een nieuwe. Een resourcegroep biedt een manier om een verzameling Azure-assets te bewaken, toegang te beheren, in te richten en facturering te beheren. Het wordt aanbevolen om alle Azure-services die zijn gekoppeld aan één project (bijvoorbeeld deze labs) onder een gemeenschappelijke resourcegroep te houden.

      Als u meer wilt lezen over Azure-resourcegroepen, gaat u naar het artikel over resourcegroepen.

    5. Bepaal de locatie voor uw resourcegroep (als u een nieuwe resourcegroep maakt). De locatie bevindt zich idealiter in de regio waar de toepassing wordt uitgevoerd. Sommige Azure-assets zijn alleen beschikbaar in bepaalde regio's.

    6. U moet ook bevestigen dat u de voorwaarden hebt begrepen die van toepassing zijn op deze Service.

    7. Selecteer Maken.

      Selecteer de knop Maken.

  5. Nadat u op Maken hebt geklikt, moet u wachten tot de Service is gemaakt. Dit kan een minuut duren.

  6. Er wordt een melding weergegeven in de portal zodra het service-exemplaar is gemaakt.

    Melding voor het maken van Azure-service

  7. Klik op de melding om uw nieuwe service-exemplaar te verkennen.

    Ga naar het pop-upvenster van de resource.

  8. Klik op de knop Ga naar resource in de melding om uw nieuwe service-exemplaar te verkennen. U wordt naar uw nieuwe Translator Text API Service-exemplaar gebracht.

    Pagina Translator Text API-service

  9. In deze zelfstudie moet uw toepassing uw service aanroepen doen. Dit wordt gedaan met behulp van de abonnementssleutel van uw service.

  10. Ga 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 doen door te klikken op de blauwe hyperlinkSleutels, die zich in het navigatiemenu Services bevindt, aangegeven met het sleutelpictogram). Hiermee worden uw servicesleutels weergegeven.

  11. Maak een kopie van een van de weergegeven sleutels, omdat u deze 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 immersive headset, volgt u deze stappen.

Het volgende is een typische set-up voor het ontwikkelen met mixed reality en is daarom een goede sjabloon voor andere projecten:

  1. Open Unity en klik op Nieuw.

    Start een nieuw Unity-project.

  2. 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 (houd er rekening mee dat dichter bij hoofdmappen beter is). Klik vervolgens op Project maken.

    Geef details op voor het nieuwe Unity-project.

  3. 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 .

    Voorkeur scripteditor bijwerken.

  4. Ga vervolgens naar Instellingen voor bestandsbuild > en zet het platform over op Universeel Windows-platform door op de knop Platform wisselen te klikken.

    Venster Instellingen bouwen, platform overschakelen naar UWP.

  5. Ga naar Instellingen voor het bouwen > van bestanden en controleer of:

    1. Doelapparaat is ingesteld op Elk apparaat.

      Voor Microsoft HoloLens stelt u Doelapparaat in op HoloLens.

    2. Buildtype is ingesteld op D3D

    3. SDK is ingesteld op Laatst geïnstalleerd

    4. Visual Studio-versie is ingesteld op Laatst geïnstalleerd

    5. Bouwen en uitvoeren is ingesteld op Lokale computer

    6. Sla de scène op en voeg deze toe aan de build.

      1. U doet dit door Open scènes toevoegen te selecteren. Er wordt een venster voor opslaan weergegeven.

        Klik op de knop Geopende scènes toevoegen

      2. Maak hiervoor een nieuwe map en een toekomstige scène en selecteer vervolgens de knop Nieuwe map om een nieuwe map te maken, geef deze de naam Scènes.

        Nieuwe map met scripts maken

      3. Open de zojuist gemaakte map Scènes en typ in het tekstveld Bestandsnaam: MR_TranslationScene en druk op Opslaan.

        Geef de nieuwe scène een naam.

        Houd er rekening mee dat u uw Unity-scènes moet opslaan in de map Assets , 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.

    7. De overige instellingen in Build-instellingen moeten voorlopig als standaard worden ingesteld.

  6. Klik in het venster Build-instellingen op de knop Spelerinstellingen . Hiermee opent u het gerelateerde deelvenster in de ruimte waar de Inspector zich bevindt.

    Spelerinstellingen openen.

  7. In dit deelvenster moeten enkele instellingen worden geverifieerd:

    1. Op het tabblad Overige instellingen :

      1. Scripting Runtime-versie moet stabiel zijn (equivalent van.NET 3.5).

      2. De back-end van scripts moet .NET zijn

      3. API-compatibiliteitsniveau moet .NET 4.6 zijn

        Andere instellingen bijwerken.

    2. Schakel op het tabblad Publicatie-instellingen onder Mogelijkheden het volgende in:

      1. InternetClient

      2. Microfoon

        Publicatie-instellingen bijwerken.

    3. Verderop in het deelvenster, in XR-instellingen (onder Publicatie-instellingen), vinkt u Virtual Reality Ondersteund aan en controleert u of de Windows Mixed Reality SDK is toegevoegd.

      Werk de X R-instellingen bij.

  8. In de build-instellingen wordt Unity C#-projecten niet langer grijs weergegeven; schakel het selectievakje naast dit selectievakje in.

  9. Sluit het venster Build Settings.

  10. Sla uw scène en project op (SCÈNE OPSLAAN/ > PROJECT OPSLAAN >BESTAND).

Hoofdstuk 3 – Hoofdcamera instellen

Belangrijk

Als u het Unity Set up-onderdeel van deze cursus wilt overslaan en direct verder wilt gaan met code, kunt u dit .unitypackage downloaden, het in uw project importeren als een aangepast pakket en vervolgens doorgaan vanaf Hoofdstuk 5. U moet nog steeds een Unity-project maken.

  1. In het deelvenster Hiërarchie vindt u een object met de naam Hoofdcamera. Dit object vertegenwoordigt uw 'hoofd'-standpunt zodra u zich in uw toepassing bevindt.

  2. Met het Unity-dashboard voor u, selecteert u het GameObject van de hoofdcamera. U zult merken dat in het deelvenster Inspector (meestal aan de rechterkant, in het dashboard) de verschillende onderdelen van dat GameObject worden weergegeven, met Transformeren bovenaan, gevolgd door Camera en enkele andere onderdelen. U moet de transformatie van de hoofdcamera opnieuw instellen, zodat deze correct wordt geplaatst.

  3. Hiervoor selecteert u het tandwielpictogram naast het onderdeel Transformeren van de camera en selecteert u Opnieuw instellen.

    Stel de transformatie van de hoofdcamera opnieuw in.

  4. Het onderdeel Transformeren moet er dan als volgt uitzien:

    1. De positie is ingesteld op 0, 0, 0

    2. Draaiing is ingesteld op 0, 0, 0

    3. En Schaal is ingesteld op 1, 1, 1

      Informatie over transformeren voor camera

  5. Vervolgens, met het object Hoofdcamera geselecteerd, ziet u de knop Onderdeel toevoegen helemaal onderaan het deelvenster Inspector.

  6. Selecteer die knop en zoek (door Audiobron in het zoekveld te typen of door de secties te navigeren) naar het onderdeel met de naam Audiobron , zoals hieronder wordt weergegeven en selecteer dit (door op Enter te drukken).

  7. Een audiobrononderdeel wordt toegevoegd aan de hoofdcamera, zoals hieronder wordt weergegeven.

    Voeg een audiobrononderdeel toe.

    Notitie

    Voor Microsoft HoloLens moet u ook het volgende wijzigen, dat deel uitmaakt van het onderdeel Camera op uw hoofdcamera:

    • Markeringen wissen: Effen kleur.
    • Achtergrond 'Black, Alpha 0' – Hex color: #00000000.

Hoofdstuk 4 : Foutopsporingscanvas 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.

  1. Klik met de rechtermuisknop in een leeg gebied van het deelvenster Hiërarchie onder Ui en voeg een canvas toe.

    Voeg een nieuw Canvas UI-object toe.

  2. Terwijl het object Canvas is geselecteerd, wijzigt u in het deelvenster Inspector (binnen het onderdeel Canvas) de weergavemodus in Wereldruimte.

  3. Wijzig vervolgens de volgende parameters in recttransformatie van het deelvenster Inspector:

    1. POS - X 0 Y 0 Z 40

    2. Breedte - 500

    3. Hoogte - 300

    4. Schaal - X 0,13 Y 0,13 Z 0,13

      Werk de recttransformatie voor het canvas bij.

  4. Klik met de rechtermuisknop op het canvas in het deelvenster Hiërarchie onder UI en voeg een deelvenster toe. Dit deelvenster biedt een achtergrond voor de tekst die u in de scène wilt weergeven.

  5. Klik met de rechtermuisknop op het deelvensterHiërarchie onder UI en voeg een text-object 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 het te dupliceren, totdat u er in totaal vier hebt).

  6. Selecteer het voor elk tekstobject en gebruik de onderstaande tabellen om de parameters in het deelvenster Inspector in te stellen.

    1. Voor het onderdeel Rect Transform :

      Name Transformeren - positie Breedte Hoogte
      MicrophoneStatusLabel X -80 Y 90 Z 0 300 30
      AzureResponseLabel X -80 Y 30 Z 0 300 30
      Dicteerlabel X -80 Y -30 Z 0 300 30
      TranslationResultLabel X -80 Y -90 Z 0 300 30
    2. Voor het onderdeel Tekst (script):

      Name Tekst Tekengrootte
      MicrophoneStatusLabel Microfoonstatus: 20
      AzureResponseLabel Azure-webantwoord 20
      Dicteerlabel Je zei net: 20
      TranslationResultLabel Vertaling: 20

      Voer de bijbehorende waarden voor de ui-labels in.

    3. Maak ook de tekenstijl vet. Hierdoor is de tekst gemakkelijker te lezen.

      Vet lettertype.

  7. Voor elk UI Text-object dat in hoofdstuk 5 is gemaakt, maakt u een nieuw onderliggendui-tekstobject. Deze onderliggende items geven de uitvoer van de toepassing weer. Maak onderliggende objecten door met de rechtermuisknop op het beoogde bovenliggende item te klikken (bijvoorbeeld MicrophoneStatusLabel), selecteer vervolgens UI en selecteer vervolgens Tekst.

  8. Voor elk van deze onderliggende items selecteert u deze en gebruikt u de onderstaande tabellen om de parameters in het deelvenster Inspector in te stellen.

    1. Voor het onderdeel Rect Transform :

      Name Transformeren - Positie Breedte Hoogte
      MicrophoneStatusText X 0 Y -30 Z 0 300 30
      AzureResponseText X 0 Y -30 Z 0 300 30
      Dicteertekst X 0 Y -30 Z 0 300 30
      TranslationResultText X 0 Y -30 Z 0 300 30
    2. Voor het onderdeel Tekst (script):

      Name Tekst Tekengrootte
      MicrophoneStatusText ?? 20
      AzureResponseText ?? 20
      Dicteertekst ?? 20
      TranslationResultText ?? 20
  9. Selecteer vervolgens de optie 'centreren' voor elk tekstonderdeel:

    tekst uitlijnen.

  10. Wijzig de kleur om ervoor te zorgen dat de onderliggende UI-tekstobjecten gemakkelijk leesbaar zijn. Klik hiervoor op de balk (momenteel 'Zwart') naast Kleur.

    Voer overeenkomende waarden in voor de tekstuitvoer van de gebruikersinterface.

  11. Wijzig vervolgens in het nieuwe, kleine venster Kleur de hexkleur in: 0032EAFF

    Werk de kleur bij naar blauw.

  12. Hieronder ziet u hoe de gebruikersinterface eruit moet zien.

    1. In het deelvenster Hiërarchie:

      Een hiërarchie hebben in de opgegeven structuur.

    2. In de scène- en gameweergaven:

      Zorg dat de scène- en gameweergaven dezelfde structuur hebben.

Hoofdstuk 5: De klasse Resultaten maken

Het eerste script dat u moet maken, is de klasse Results , die verantwoordelijk is voor het bieden van een manier om de resultaten van de vertaling te bekijken. In de klasse wordt het volgende opgeslagen en weergegeven:

  • Het antwoord is het resultaat van Azure.
  • De status van de microfoon.
  • Het resultaat van de dicteerfunctie (spraak naar tekst).
  • Het resultaat van de vertaling.

Ga als volgt te werk om deze klasse te maken:

  1. Klik met de rechtermuisknop in het deelvenster Project en klik vervolgens op Map maken>. Geef de map de naam Scripts.

    Map scripts maken.

    Open de map scripts.

  2. Dubbelklik op de map Scripts maken om de map te openen. Klik vervolgens in die map met de rechtermuisknop en selecteer Maken > en vervolgens C#-script. Geef het script de naam Resultaten.

    Maak het eerste script.

  3. Dubbelklik op het nieuwe resultatenscript om het te openen met Visual Studio.

  4. Voeg de volgende naamruimten in:

        using UnityEngine;
        using UnityEngine.UI;
    
  5. 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;
    
  6. 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;           
        } 
    
  7. Voeg ten slotte de methoden toe die verantwoordelijk zijn voor het uitvoeren van de verschillende resultatengegevens naar 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;
        }
    
  8. Zorg ervoor dat u uw wijzigingen opslaat 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:

  • Detecteren van het opnameapparaat dat is aangesloten op de headset of machine (afhankelijk van wat de standaardinstelling is).
  • Leg de audio (stem) vast en gebruik dicteren om deze op te slaan als een tekenreeks.
  • Zodra de stem is onderbroken, verzendt u de dicteerfunctie naar de translator-klasse.
  • Host een methode die de spraakopname indien gewenst kan stoppen.

Ga als volgt te werk om deze klasse te maken:

  1. Dubbelklik op de map Scripts om deze te openen.

  2. Klik met de rechtermuisknop in de map Scripts en klik op C#-script maken>. Geef het script de naam MicrophoneManager.

  3. Dubbelklik op het nieuwe script om het te openen met Visual Studio.

  4. Werk de naamruimten bij zodat deze gelijk zijn aan de volgende, bovenaan de klasse MicrophoneManager :

        using UnityEngine; 
        using UnityEngine.Windows.Speech;
    
  5. 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; 
    
  6. Code voor de methoden Awake() en Start() moet nu worden toegevoegd. Deze worden aangeroepen wanneer de klasse initialiseert:

        private void Awake() 
        { 
            // Set this class to behave similar to singleton 
            instance = this; 
        } 
    
        void Start() 
        { 
            //Use Unity Microphone class to detect devices and setup AudioSource 
            if(Microphone.devices.Length > 0) 
            { 
                Results.instance.SetMicrophoneStatus("Initialising..."); 
                audioSource = GetComponent<AudioSource>(); 
                microphoneDetected = true; 
            } 
            else 
            { 
                Results.instance.SetMicrophoneStatus("No Microphone detected"); 
            } 
        } 
    
  7. U kunt de methode Update()verwijderen, omdat deze niet door deze klasse wordt gebruikt.

  8. 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 zal maken, is hier ook de methode StopCapturingAudio() opgegeven, als u de mogelijkheid wilt implementeren om te stoppen met het vastleggen van audio in uw toepassing.

  9. U moet nu een dicteerhandler toevoegen die wordt aangeroepen wanneer de stem stopt. Met deze methode wordt de gedicteerde tekst vervolgens 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));   
        }
    
  10. Zorg ervoor dat u uw wijzigingen opslaat in Visual Studio voordat u terugkeert naar Unity.

Waarschuwing

Op dit moment ziet u een fout die wordt weergegeven in het consolepaneel van de Unity-editor ('De naam 'Translator' bestaat niet...'). Dit komt omdat 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 ) die moet worden vertaald.
  • Ontvang het vertaalde resultaat en geef het door aan de resultatenklasse die moet worden gevisualiseerd in de gebruikersinterface.

Deze klasse maken:

  1. Ga naar de map Scripts die u eerder hebt gemaakt.

  2. Klik met de rechtermuisknop in het deelvenster Project op C#-script maken>. Roep het script Translator aan.

  3. Dubbelklik op het nieuwe Translator-script om het te openen met Visual Studio.

  4. 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;
    
  5. Voeg vervolgens de volgende variabelen toe in de klasse Translator :

        public static Translator instance; 
        private string translationTokenEndpoint = "https://api.cognitive.microsoft.com/sts/v1.0/issueToken"; 
        private string translationTextEndpoint = "https://api.microsofttranslator.com/v2/http.svc/Translate?"; 
        private const string ocpApimSubscriptionKeyHeader = "Ocp-Apim-Subscription-Key"; 
    
        //Substitute the value of authorizationKey with your own Key 
        private const string authorizationKey = "-InsertYourAuthKeyHere-"; 
        private string authorizationToken; 
    
        // languages set below are: 
        // English 
        // French 
        // Italian 
        // Japanese 
        // Korean 
        public enum Languages { en, fr, it, ja, ko }; 
        public Languages from = Languages.en; 
        public Languages to = Languages.it; 
    

    Notitie

    • De talen die in de talenlijst zijn ingevoegd, zijn slechts voorbeelden. Voel je vrij om meer toe te voegen als je wilt; de API ondersteunt meer dan 60 talen (waaronder Klingon)!
    • Er is een meer interactieve pagina met de beschikbare talen, maar houd er rekening mee dat de pagina alleen werkt wanneer de taal van de site is ingesteld op '' (en de Microsoft-site wordt waarschijnlijk omgeleid naar uw eigen taal). U kunt de taal van de site wijzigen onder aan de pagina of door de URL te wijzigen.
    • De authorizationKey-waarde in het bovenstaande codefragment moet de sleutel zijn die u hebt ontvangen toen u zich abonneert op de Azure Translator Text-API. Dit werd behandeld in hoofdstuk 1.
  6. Code voor de methoden Awake() en Start() moet nu worden toegevoegd.

  7. 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 doen.

  8. De coroutinus voor het verkrijgen van het token is de 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 IEnumerator-methode GetTokenCoroutine() bewerkt, moet u de aanroeptekenreekswaarden StartCoroutine en StopCoroutine in de bovenstaande code bijwerken. Volgens de Documentatie van Unity moet u de tekenreekswaardemethode gebruiken om een specifieke Coroutine te stoppen.

  9. Voeg vervolgens de coroutine toe (met een stroommethode 'ondersteuning' eronder) om de vertaling te verkrijgen van de tekst die is ontvangen door de klasse MicrophoneManager . Met deze code maakt u een queryreeks die wordt verzonden naar de Azure Translator Text-API en gebruikt u vervolgens de interne UnityWebRequest-klasse om een 'Get'-aanroep naar het eindpunt te maken met de querytekenreeks. Het resultaat wordt vervolgens gebruikt om de vertaling in uw Object Results in te stellen. In de onderstaande code ziet u 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);
            }
        }
    
  10. Zorg ervoor dat u uw wijzigingen opslaat in Visual Studio voordat u terugkeert naar Unity.

Hoofdstuk 8 : De Unity-scène configureren

  1. Ga terug naar de Unity Editor en sleep de klasse Resultsvan de map Scripts naar het object Hoofdcamera in het deelvenster Hiërarchie.

  2. Klik op de hoofdcamera en kijk naar het deelvenster Inspector. 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.

  3. Sleep de juiste Tekst-objecten van het deelvenster Hiërarchie naar deze vier sleuven, zoals wordt weergegeven in de onderstaande afbeelding.

    Doelverwijzingen bijwerken met opgegeven waarden.

  4. Klik vervolgens op de klasse Translator van de map Scripts en sleep deze naar het object Hoofdcamera in het deelvenster Hiërarchie.

  5. Klik vervolgens op de klasse MicrophoneManager en sleep deze vanuit de map Scripts naar het object Hoofdcamera in het deelvenster Hiërarchie.

  6. Klik ten slotte op de hoofdcamera en kijk naar het inspector-paneel. U ziet dat er in het script dat u hebt gesleept, twee vervolgkeuzelijsten zijn waarmee u de talen kunt instellen.

    Zorg ervoor dat de beoogde vertaaltalen invoer zijn.

Hoofdstuk 9 : Testen in mixed reality

Op dit punt moet u testen of de scène correct is geïmplementeerd.

U moet het volgende hebben gedaan:

  • Alle instellingen die in hoofdstuk 1 worden vermeld, zijn correct ingesteld.
  • De scripts Results, Translator en MicrophoneManager zijn gekoppeld aan het object Hoofdcamera .
  • U hebt de servicesleutel voor de Azure Translator Text-API binnen de variabele authorizationKey in het Translator-script geplaatst.
  • Alle velden in het deelvenster Hoofdcameracontrole zijn correct toegewezen.
  • Uw microfoon werkt tijdens het uitvoeren van uw scène (als dit niet het standaardapparaat is, controleert u of de gekoppelde microfoon het standaardapparaat is en of u deze correct hebt ingesteld in Windows).

U kunt de immersive headset testen door op de knop Afspelen in de Unity-editor te drukken. De app moet werken via de aangesloten immersive headset.

Waarschuwing

Als u in de Unity-console een fout ziet 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.

  1. Navigeer naar Build-instellingen: Build-instellingen voor bestanden > ...

  2. Klik in het venster Build-instellingen op Bouwen.

    Bouw de Unity-scène.

  3. Als dat nog niet is gebeurd, selecteert u Unity C#-projecten.

  4. Klik op Bouwen. Unity start een Bestandenverkenner venster, waarin u een map moet maken en selecteren waarin u de app wilt bouwen. Maak die map nu en geef deze de naam App. Druk vervolgens op Map selecteren terwijl de map App is geselecteerd.

  5. Unity begint met het bouwen van uw project in de map App .

  6. Zodra Unity klaar is met bouwen (dit 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 op de hoogte wordt gesteld van de toevoeging van een nieuw venster).

Hoofdstuk 11 : Uw toepassing implementeren

Uw toepassing implementeren:

  1. Navigeer naar uw nieuwe Unity-build (de map App ) en open het oplossingsbestand met Visual Studio.

  2. Selecteer foutopsporing in oplossingsconfiguratie.

  3. Selecteer in solution platform x86, Lokale computer.

    Voor de Microsoft HoloLens kunt u deze mogelijk gemakkelijker instellen 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, dat u kunt vinden in het Instellingennetwerk > & Internet > Wi-Fi > Geavanceerde opties; de IPv4 is het adres dat u moet gebruiken.
    • Zorg ervoor dat de ontwikkelaarsmodus is ingeschakeld; gevonden in Instellingen > Update & Beveiliging > voor ontwikkelaars.

    Implementeer de oplossing vanuit Visual Studio.

  4. Ga naar het menu Bouwen en klik op Oplossing implementeren om de toepassing naar uw pc te sideloaden.

  5. Uw app wordt nu weergegeven in de lijst met geïnstalleerde apps, klaar om te worden gestart.

  6. Zodra de app is gestart, wordt u gevraagd toegang tot de microfoon te autoriseren. Zorg ervoor dat u op de knop JA klikt.

  7. U bent nu klaar om aan de slag te gaan met vertalen.

Uw voltooide Translation Text-API-toepassing

Gefeliciteerd, u hebt een mixed reality-app gemaakt die gebruikmaakt van de Azure Translation Text-API om spraak te converteren naar vertaalde tekst.

Eindproduct.

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') binnen de app zelf kan wijzigen, zodat de app niet telkens opnieuw hoeft te worden opgebouwd wanneer u van taal wilt veranderen.