Delen via


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.

Eindproduct

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:

  1. De gebruiker spreekt in een microfoon die is verbonden met een insluitende headset (VR) 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 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:

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

    Instellingen voor mixed reality

    Microfooninstelling

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.

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

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

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

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

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

    7. Selecteer Maken.

      Selecteer de knop Maken.

  5. Nadat u op Maken hebt geklikt, moet u wachten totdat 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 Een 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 de 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 aanroepen doen naar uw service, wat wordt gedaan met behulp van de abonnementssleutel van uw service.

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

  11. 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:

  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 (vergeet niet, dichter bij hoofdmappen is beter). 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 .

    De voorkeur van scripteditor bijwerken.

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

    Venster Instellingen bouwen, platform overschakelen naar UWP.

  5. Ga naar Instellingen voor bestandsbuild > en zorg ervoor dat:

    1. Het 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 Meest recent 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. Doe dit door Open Scènes toevoegen te selecteren. Er wordt een venster voor opslaan weergegeven.

        Klik op de knop Open scènes toevoegen

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

        Nieuwe map met scripts maken

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

        Geef een nieuwe scène een naam.

        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.

    7. De overige instellingen, in Build-instellingen, moeten voorlopig standaard blijven staan.

  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.

    Open de spelerinstellingen.

  7. In dit deelvenster moeten enkele instellingen worden geverifieerd:

    1. Op het tabblad Overige instellingen :

      1. De runtimeversie van scripting moet stabiel zijn (equivalent van.NET 3.5).

      2. Back-end voor 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. 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.

      Werk de X R-instellingen bij.

  8. In Build Settings wordt Unity C# Projects niet meer grijs weergegeven. Schakel het selectievakje naast dit selectievakje in.

  9. Sluit het venster Build Settings.

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

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

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

  3. Hiervoor selecteert u het tandwielpictogram naast het onderdeel Transformatie 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 transformeren voor Camera

  5. Als vervolgens het object Hoofdcamera is geselecteerd, ziet u de knop Onderdeel toevoegen aan de onderkant van het inspectorpaneel.

  6. 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).

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

  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 canvasobject is geselecteerd, wijzigt u in het deelvenster Inspector (binnen het onderdeel Canvas) de rendermodus in World Space.

  3. Wijzig vervolgens de volgende parameters in de Rect Transform van het Inspector-deelvenster:

    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 bevat een achtergrond voor de tekst die u in de scène wilt weergeven.

  5. 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).

  6. Voor elk tekstobject selecteert u het en gebruikt u de onderstaande tabellen om de parameters in het Inspector-deelvenster in te stellen.

    1. 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
    2. Voor het onderdeel Tekst (Script):

      Naam Sms verzenden Lettergrootte
      MicrophoneStatusLabel Microfoonstatus: 20
      AzureResponseLabel Azure-webantwoord 20
      DictationLabel 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 beter leesbaar.

      Vet lettertype.

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

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

    1. 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
    2. Voor het onderdeel Tekst (Script):

      Naam Sms verzenden Lettergrootte
      MicrophoneStatusText ?? 20
      AzureResponseText ?? 20
      DictationText ?? 20
      TranslationResultText ?? 20
  9. Selecteer vervolgens de uitlijningsoptie Centreren voor elk tekstonderdeel:

    tekst uitlijnen.

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

    Voer overeenkomende waarden in voor de uitvoer van de gebruikersinterfacetekst.

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

    Kleur bijwerken naar blauw.

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

    1. In het deelvenster Hiërarchie:

      Een hiërarchie in de opgegeven structuur hebben.

    2. In de scène - en gameweergaven:

      Laat de scène en gameweergaven in dezelfde structuur zien.

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:

  1. Klik met de rechtermuisknop in het projectvenster en klik vervolgens op Map maken>. Geef de mapscripts een naam.

    Maak de map Scripts.

    Open de map met scripts.

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

    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 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;
        }
    
  8. 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:

  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 hetzelfde zijn als de volgende, boven aan 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 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"); 
            } 
        } 
    
  7. U kunt de methode Update() verwijderen omdat deze klasse deze niet 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 maakt, is hier ook de methode StopCapturingAudio() opgegeven, als u de mogelijkheid wilt implementeren om het vastleggen van audio in uw toepassing te stoppen.

  9. 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));   
        }
    
  10. 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:

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

  2. Klik met de rechtermuisknop in het deelvenster Project, 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 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.
  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 maken.

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

  9. 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);
            }
        }
    
  10. Sla uw wijzigingen op in Visual Studio voordat u terugkeert naar Unity.

Hoofdstuk 8: De Unity-scène configureren

  1. Klik in de Unity-editor en sleep de klasse Resultaten van de map Scripts naar het object Main Camera in het deelvenster Hierarchy.

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

  3. Sleep de juiste tekstobjecten van het deelvenster Hiërarchie naar die vier sleuven, zoals wordt weergegeven in de onderstaande afbeelding.

    Doelverwijzingen met opgegeven waarden bijwerken.

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

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

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

    Zorg ervoor dat de beoogde vertaaltalen invoer zijn.

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.

  1. Navigeer naar Build-instellingen: Instellingen voor bestandsbuild > ...

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

    Bouw de Unity-scène.

  3. Als dat nog niet zo is, tikt u op Unity C#-projecten.

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

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

  6. 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:

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

  2. Selecteer foutopsporing in de oplossingsconfiguratie.

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

    Implementeer de oplossing vanuit Visual Studio.

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

  5. Uw app moet nu worden weergegeven in de lijst met geïnstalleerde apps die klaar zijn om te worden gestart.

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

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

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