HoloLens (1. Generation) und Azure 301: Sprachübersetzung


Hinweis

Die Tutorials der Mixed Reality Academy wurden im Hinblick auf HoloLens (1. Gen.) und immersive Mixed Reality-Headsets entworfen. Daher halten wir es für wichtig, diese Tutorials für Entwickler verfügbar zu halten, die noch nach Anleitung beim Entwickeln für diese Geräte suchen. Diese Tutorials werden nicht mit den neuesten Toolsets oder Interaktionen aktualisiert, die für HoloLens 2 verwendet werden. Sie werden gewartet, um weiterhin auf den unterstützten Geräten zu funktionieren. Es wird eine neue Reihe von Tutorials geben, die in Zukunft veröffentlicht werden, die zeigen, wie für HoloLens 2 entwickelt werden kann. Dieser Hinweis wird mit einem Link zu diesen Tutorials aktualisiert, wenn sie veröffentlicht werden.


In diesem Kurs erfahren Sie, wie Sie einer Mixed Reality-Anwendung mithilfe von Azure Cognitive Services mit der Textübersetzungs-API Übersetzungsfunktionen hinzufügen.

Endprodukt

Die Textübersetzungs-API ist ein Übersetzungsdienst, der nahezu in Echtzeit funktioniert. Der Dienst ist cloudbasiert, und mithilfe eines REST-API-Aufrufs kann eine App die Neuronale Maschinelle Übersetzungstechnologie verwenden, um Text in eine andere Sprache zu übersetzen. Weitere Informationen finden Sie auf der Seite Azure Translator Text API.

Nach Abschluss dieses Kurses verfügen Sie über eine Mixed Reality-Anwendung, die folgendes ausführen kann:

  1. Der Benutzer spricht in ein Mikrofon, das mit einem immersiven Headset (VR) (oder dem integrierten Mikrofon von HoloLens) verbunden ist.
  2. Die App erfasst das Diktat und sendet es an die Textübersetzungs-API von Azure.
  3. Das Übersetzungsergebnis wird in einer einfachen Benutzeroberflächengruppe in der Unity-Szene angezeigt.

In diesem Kurs erfahren Sie, wie Sie die Ergebnisse aus dem Translator Service in eine Unity-basierte Beispielanwendung abrufen. Sie müssen diese Konzepte auf eine benutzerdefinierte Anwendung anwenden, die Sie möglicherweise erstellen.

Geräteunterstützung

Kurs HoloLens Immersive Headsets
MR und Azure 301: Sprachübersetzung ✔️ ✔️

Hinweis

Während sich dieser Kurs hauptsächlich auf Windows Mixed Reality immersiven Headsets (VR) konzentriert, können Sie das, was Sie in diesem Kurs lernen, auch auf Microsoft HoloLens anwenden. Während Sie den Kurs befolgen, werden Ihnen Notizen zu allen Änderungen angezeigt, die Sie möglicherweise zur Unterstützung von HoloLens anwenden müssen. Wenn Sie HoloLens verwenden, können Sie während der Sprachaufnahme ein gewisses Echo bemerken.

Voraussetzungen

Hinweis

Dieses Tutorial richtet sich an Entwickler, die über grundlegende Erfahrungen mit Unity und C# verfügen. Bitte beachten Sie auch, dass die Voraussetzungen und schriftlichen Anweisungen in diesem Dokument das darstellen, was zum Zeitpunkt des Schreibens (Mai 2018) getestet und überprüft wurde. Sie können die neueste Software verwenden, wie im Artikel Installieren der Tools aufgeführt, aber es sollte nicht davon ausgegangen werden, dass die Informationen in diesem Kurs perfekt dem entsprechen, was Sie in neuerer Software finden, als die unten aufgeführten.

Wir empfehlen die folgende Hard- und Software für diesen Kurs:

Vorbereitung

  • Um Probleme beim Erstellen dieses Projekts zu vermeiden, wird dringend empfohlen, das in diesem Tutorial erwähnte Projekt in einem Stamm- oder Fast-Root-Ordner zu erstellen (lange Ordnerpfade können zur Buildzeit Zu Problemen führen).

  • Mit dem Code in diesem Tutorial können Sie das Standardmikrofongerät aufzeichnen, das mit Ihrem PC verbunden ist. Stellen Sie sicher, dass das Standardmikrofongerät auf das Gerät festgelegt ist, das Sie zum Erfassen Ihrer Stimme verwenden möchten.

  • Damit Ihr PC das Diktat aktivieren kann, wechseln Sie zu Einstellungen > Datenschutzsprache > , Freihandeingabe & Eingabe , und wählen Sie die Schaltfläche Sprachdienste aktivieren und Vorschläge eingeben aus.

  • Wenn Sie ein Mikrofon und Kopfhörer verwenden, die mit Ihrem Headset verbunden sind (oder in ihr integriert sind), stellen Sie sicher, dass die Option "Wenn ich mein Headset trage, zum Headset-Mikrofon wechseln" in den Einstellungen > Mixed Reality > Audio und Sprache aktiviert ist.

    Mixed Reality-Einstellungen

    Mikrofoneinstellung

Warnung

Beachten Sie, dass bei der Entwicklung eines immersiven Headsets für dieses Lab möglicherweise Probleme mit dem Audioausgabegerät auftreten. Dies ist auf ein Problem mit Unity zurückzuführen, das in späteren Versionen von Unity (Unity 2018.2) behoben wurde. Das Problem verhindert, dass Unity das Standardaudioausgabegerät zur Laufzeit ändert. Stellen Sie sicher, dass Sie die oben genannten Schritte ausgeführt haben, und schließen Sie den Editor, und öffnen Sie ihn erneut, wenn dieses Problem angezeigt wird.

Kapitel 1: Das Azure-Portal

Um die Azure Translator-API verwenden zu können, müssen Sie eine instance des Diensts konfigurieren, die für Ihre Anwendung verfügbar gemacht wird.

  1. Melden Sie sich beim Azure-Portal an.

    Hinweis

    Wenn Sie noch nicht über ein Azure-Konto verfügen, müssen Sie ein Azure-Konto erstellen. Wenn Sie dieses Tutorial in einer Unterrichts- oder Labsituation befolgen, bitten Sie Ihren Kursleiter oder einen der Verantwortlichen um Hilfe beim Einrichten Ihres neuen Kontos.

  2. Nachdem Sie angemeldet sind, klicken Sie in der oberen linken Ecke auf Neu , und suchen Sie nach "Textübersetzungs-API". Wählen Sie die EINGABETASTE aus.

    Neue Ressource

    Hinweis

    Das Wort Neu wurde in neueren Portalen möglicherweise durch Ressource erstellen ersetzt.

  3. Die neue Seite enthält eine Beschreibung des Textübersetzungs-API-Diensts . Wählen Sie unten links auf dieser Seite die Schaltfläche Erstellen aus, um eine Zuordnung zu diesem Dienst zu erstellen.

    Erstellen des Textübersetzungs-API-Diensts

  4. Nachdem Sie auf Erstellen geklickt haben:

    1. Fügen Sie den gewünschten Namen für diesen Dienst instance ein.

    2. Wählen Sie ein entsprechendes Abonnement aus.

    3. Wählen Sie den für Sie geeigneten Tarif aus. Wenn Sie zum ersten Mal einen Textübersetzungsdienst erstellen, sollte ihnen ein kostenloser Tarif (F0) zur Verfügung stehen.

    4. Wählen Sie eine Ressourcengruppe aus, oder erstellen Sie eine neue. Eine Ressourcengruppe bietet eine Möglichkeit zum Überwachen, Steuern des Zugriffs, Bereitstellen und Verwalten der Abrechnung für eine Sammlung von Azure-Ressourcen. Es wird empfohlen, alle Azure-Dienste, die einem einzelnen Projekt (z. B. diesen Labs) zugeordnet sind, unter einer gemeinsamen Ressourcengruppe zu speichern.

      Wenn Sie mehr über Azure-Ressourcengruppen erfahren möchten, lesen Sie den Artikel Ressourcengruppe.

    5. Bestimmen Sie den Speicherort für Ihre Ressourcengruppe (wenn Sie eine neue Ressourcengruppe erstellen). Der Speicherort befindet sich idealerweise in der Region, in der die Anwendung ausgeführt wird. Einige Azure-Ressourcen sind nur in bestimmten Regionen verfügbar.

    6. Sie müssen auch bestätigen, dass Sie die für diesen Dienst geltenden Geschäftsbedingungen verstanden haben.

    7. Klicken Sie auf Erstellen.

      Wählen Sie die Schaltfläche Erstellen aus.

  5. Nachdem Sie auf Erstellen geklickt haben, müssen Sie warten, bis der Dienst erstellt wird. Dies kann eine Minute dauern.

  6. Eine Benachrichtigung wird im Portal angezeigt, sobald der Dienst instance erstellt wurde.

    Azure-Diensterstellungsbenachrichtigung

  7. Klicken Sie auf die Benachrichtigung, um Ihre neue Dienst-instance zu erkunden.

    Wechseln Sie zum Ressourcen-Popup.

  8. Klicken Sie in der Benachrichtigung auf die Schaltfläche Zu Ressource wechseln, um Ihren neuen Dienst instance zu erkunden. Sie werden zu Ihrem neuen textübersetzungs-API-Dienst instance weitergeleitet.

    Seite

  9. In diesem Tutorial muss Ihre Anwendung Aufrufe an Ihren Dienst tätigen, was mithilfe des Abonnementschlüssels Ihres Diensts erfolgt.

  10. Navigieren Sie auf der Schnellstartseite Ihres Textübersetzungsdiensts zum ersten Schritt, greifen Sie Ihre Schlüssel, und klicken Sie auf Schlüssel (Sie können dies auch erreichen, indem Sie auf den blauen Link Schlüssel klicken, der sich im Navigationsmenü Dienste befindet und durch das Schlüsselsymbol gekennzeichnet ist). Dadurch werden Ihre Dienstschlüssel angezeigt.

  11. Erstellen Sie eine Kopie eines der angezeigten Schlüssel, da Sie dies später in Ihrem Projekt benötigen.

Kapitel 2 – Einrichten des Unity-Projekts

Richten Sie Ihr immersives Mixed Reality-Headset ein und testen Sie es.

Hinweis

Für diesen Kurs benötigen Sie keine Bewegungscontroller. Wenn Sie Unterstützung beim Einrichten eines immersiven Headsets benötigen, führen Sie die folgenden Schritte aus.

Das Folgende ist eine typische Einrichtung für die Entwicklung mit Mixed Reality und ist daher eine gute Vorlage für andere Projekte:

  1. Öffnen Sie Unity, und klicken Sie auf Neu.

    Starten Sie ein neues Unity-Projekt.

  2. Sie müssen nun einen Unity-Projektnamen angeben. Fügen Sie MR_Translation ein. Stellen Sie sicher, dass der Projekttyp auf 3D festgelegt ist. Legen Sie den Speicherort auf einen für Sie geeigneten Ort fest (denken Sie daran, dass näher an Stammverzeichnissen besser ist). Klicken Sie dann auf Projekt erstellen.

    Geben Sie Details zum neuen Unity-Projekt an.

  3. Wenn Unity geöffnet ist, lohnt es sich, zu überprüfen, ob der Standardskript-Editor auf Visual Studio festgelegt ist. Navigieren Sie zu Einstellungen bearbeiten>, und navigieren Sie dann im neuen Fenster zu Externe Tools. Ändern Sie den externen Skript-Editor in Visual Studio 2017. Schließen Sie das Fenster Einstellungen.

    Aktualisieren Sie die Skript-Editor-Einstellung.

  4. Wechseln Sie als Nächstes zu Dateibuildeinstellungen>, und wechseln Sie die Plattform auf Universelle Windows-Plattform, indem Sie auf die Schaltfläche Plattform wechseln klicken.

    Fenster

  5. Wechseln Sie zu Dateibuildeinstellungen>, und stellen Sie sicher, dass:

    1. Zielgerät ist auf Beliebiges Gerät festgelegt.

      Legen Sie für Microsoft HoloLens Zielgerät auf HoloLens fest.

    2. Buildtyp ist auf D3D festgelegt

    3. SDK ist auf Zuletzt installiert festgelegt.

    4. Visual Studio-Version ist auf Zuletzt installiert festgelegt.

    5. Build and Run ist auf Lokaler Computer festgelegt.

    6. Speichern Sie die Szene, und fügen Sie sie dem Build hinzu.

      1. Wählen Sie dazu Offene Szenen hinzufügen aus. Es wird ein Fenster zum Speichern angezeigt.

        Klicken Sie auf die Schaltfläche

      2. Erstellen Sie einen neuen Ordner für diese und jede zukünftige Szene, und wählen Sie dann die Schaltfläche Neuer Ordner aus, um einen neuen Ordner zu erstellen, und nennen Sie ihn Szenen.

        Erstellen eines neuen Skriptordners

      3. Öffnen Sie den neu erstellten Ordner Scenes , und geben Sie dann im Textfeld Dateiname: MR_TranslationScene ein, und drücken Sie dann Speichern.

        Geben Sie der neuen Szene einen Namen.

        Beachten Sie, dass Sie Ihre Unity-Szenen im Ordner Assets speichern müssen, da sie dem Unity-Projekt zugeordnet sein müssen. Das Erstellen des Szenenordners (und anderer ähnlicher Ordner) ist eine typische Methode zum Strukturieren eines Unity-Projekts.

    7. Die restlichen Einstellungen in Buildeinstellungen sollten vorerst als Standard beibehalten werden.

  6. Klicken Sie im Fenster Buildeinstellungen auf die Schaltfläche Playereinstellungen . Dadurch wird der zugehörige Bereich in dem Bereich geöffnet, in dem sich der Inspektor befindet.

    Öffnen Sie die Playereinstellungen.

  7. In diesem Bereich müssen einige Einstellungen überprüft werden:

    1. Auf der Registerkarte Andere Einstellungen :

      1. Die Skriptlaufzeitversion sollte stabil (.NET 3.5 gleichwertig) sein.

      2. Skript-Back-End sollte .NET sein

      3. API-Kompatibilitätsgrad sollte .NET 4.6 sein

        Aktualisieren Sie andere Einstellungen.

    2. Überprüfen Sie auf der Registerkarte Veröffentlichungseinstellungen unter Funktionen Folgendes:

      1. InternetClient

      2. Mikrofon

        Aktualisieren der Veröffentlichungseinstellungen.

    3. Wählen Sie weiter unten im Bereich unter XR-Einstellungen (unter Veröffentlichungseinstellungen) die Option Virtual Reality Supported (Virtual Reality Supported) aus, stellen Sie sicher, dass das Windows Mixed Reality SDK hinzugefügt wurde.

      Aktualisieren Sie die X R-Einstellungen.

  8. Zurück in den Buildeinstellungen ist Unity C#-Projekte nicht mehr abgeblendet. aktivieren Sie das Kontrollkästchen neben diesem.

  9. Schließen Sie das Fenster „Build Settings“ (Buildeinstellungen).

  10. Speichern Sie Ihre Szene und Ihr Projekt (FILE > SAVE SCENE / FILE > SAVE PROJECT).

Kapitel 3 – Einrichtung der Hauptkamera

Wichtig

Wenn Sie die Unity Set up-Komponente dieses Kurses überspringen und direkt mit dem Code fortfahren möchten, können Sie dieses UnityPackage herunterladen, es als benutzerdefiniertes Paket in Ihr Projekt importieren und dann mit Kapitel 5 fortfahren. Sie müssen weiterhin ein Unity-Projekt erstellen.

  1. Im Hierarchiebereich finden Sie ein Objekt namens Hauptkamera. Dieses Objekt stellt Ihren "Kopf"-Standpunkt dar, sobald Sie sich "in" Ihrer Anwendung befinden.

  2. Wählen Sie mit dem Unity-Dashboard das Hauptkamera-GameObjekt aus. Sie werden feststellen, dass im Inspektorbereich (im Allgemeinen rechts im Dashboard) die verschiedenen Komponenten dieses GameObject angezeigt werden, wobei die Transformation oben, gefolgt von Der Kamera und einigen anderen Komponenten angezeigt wird. Sie müssen die Transformation der Hauptkamera zurücksetzen, damit sie richtig positioniert ist.

  3. Wählen Sie dazu das Zahnradsymbol neben der Transformationskomponente der Kamera aus, und wählen Sie Zurücksetzen aus.

    Setzen Sie die Hauptkameratransformation zurück.

  4. Die Transformationskomponente sollte dann wie folgt aussehen:

    1. Die Position ist auf 0, 0, 0 festgelegt.

    2. Die Drehung ist auf 0, 0, 0 festgelegt.

    3. Und Skalierung ist auf 1, 1, 1 festgelegt.

      Transformieren von Informationen für die Kamera

  5. Sehen Sie sich als Nächstes die Schaltfläche Komponente hinzufügen an, die sich ganz unten im Inspektorbereich befindet, wenn Sie das Hauptkameraobjekt ausgewählt haben.

  6. Wählen Sie diese Schaltfläche aus, und suchen Sie (indem Sie entweder Audioquelle in das Suchfeld eingeben oder in den Abschnitten navigieren) nach der Komponente Mit dem Namen Audioquelle , wie unten gezeigt, und wählen Sie sie aus (Drücken der EINGABETASTE funktioniert auch).

  7. Wie unten gezeigt wird, wird der Hauptkamera eine Audioquelle-Komponente hinzugefügt.

    Fügen Sie eine Audioquelle-Komponente hinzu.

    Hinweis

    Für Microsoft HoloLens müssen Sie auch Folgendes ändern, das Teil der Kamerakomponente ihrer Hauptkamera ist:

    • Flags löschen: Volltonfarbe.
    • Hintergrund "Schwarz, Alpha 0" – Sechskantfarbe: #0000000000.

Kapitel 4– Einrichten von Debug canvas

Um die Eingabe und Ausgabe der Übersetzung anzuzeigen, muss eine einfache Benutzeroberfläche erstellt werden. In diesem Kurs erstellen Sie ein Canvas-UI-Objekt mit mehreren Text-Objekten, um die Daten anzuzeigen.

  1. Klicken Sie mit der rechten Maustaste in einen leeren Bereich des Hierarchiebereichs, und fügen Sie unter benutzeroberfläche eine Canvas hinzu.

    Fügen Sie ein neues Canvas-UI-Objekt hinzu.

  2. Wenn Sie das Canvas-Objekt ausgewählt haben, ändern Sie im Inspektorbereich (innerhalb der Komponente "Canvas") den Rendermodus in Weltraum.

  3. Ändern Sie als Nächstes die folgenden Parameter in der Rect-Transformation des Inspektorbereichs:

    1. POS - X 0 Y 0 Z 40

    2. Breite : 500

    3. Höhe : 300

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

      Aktualisieren Sie die Rect-Transformation für den Canvas.

  4. Klicken Sie im Hierarchiebereich unter UI mit der rechten Maustaste auf die Canvas, und fügen Sie einen Bereich hinzu. Dieser Bereich stellt einen Hintergrund für den Text bereit, den Sie in der Szene anzeigen.

  5. Klicken Sie mit der rechten Maustaste im Hierarchiebereich unter UI auf den Bereich, und fügen Sie ein Text-Objekt hinzu. Wiederholen Sie denselben Vorgang, bis Sie insgesamt vier Textobjekte der Benutzeroberfläche erstellt haben (Hinweis: Wenn Sie das erste "Text"-Objekt ausgewählt haben, können Sie einfach "STRG" + "D" drücken, um es zu duplizieren, bis Sie insgesamt vier haben).

  6. Wählen Sie es für jedes Textobjekt aus, und verwenden Sie die folgenden Tabellen, um die Parameter im Inspektorbereich festzulegen.

    1. Für die Rekttransformationskomponente :

      Name Transformieren – Position Breite Höhe
      MicrophoneStatusLabel X -80 Y 90 Z 0 300 30
      AzureResponseLabel X -80 Y 30 Z 0 300 30
      Diktierbezeichnung X -80 Y -30 Z 0 300 30
      TranslationResultLabel X -80 Y -90 Z 0 300 30
    2. Für die Text (Script)- Komponente:

      Name Text Schriftgrad
      MicrophoneStatusLabel Mikrofonstatus: 20
      AzureResponseLabel Azure-Webantwort 20
      Diktierbezeichnung Sie haben gerade gesagt: 20
      TranslationResultLabel Übersetzung: 20

      Geben Sie die entsprechenden Werte für die Beschriftungen der Benutzeroberfläche ein.

    3. Legen Sie außerdem den Schriftschnitt fett fest. Dadurch ist der Text einfacher zu lesen.

      Fett formatierte Schriftart.

  7. Erstellen Sie für jedes benutzeroberflächentext-Objekt, das in Kapitel 5 erstellt wurde, ein neues untergeordnetesBenutzeroberflächentextobjekt. Diese untergeordneten Elemente zeigen die Ausgabe der Anwendung an. Erstellen Sie untergeordnete Objekte, indem Sie mit der rechten Maustaste auf das gewünschte übergeordnete Element klicken (z. B. MicrophoneStatusLabel), und wählen Sie dann UI und dann Text aus.

  8. Wählen Sie sie für jedes dieser untergeordneten Elemente aus, und verwenden Sie die folgenden Tabellen, um die Parameter im Inspektorbereich festzulegen.

    1. Für die Rect Transform-Komponente :

      Name Transformieren – Position Breite Höhe
      MicrophoneStatusText X 0 Y -30 Z 0 300 30
      AzureResponseText X 0 Y -30 Z 0 300 30
      Diktiertext X 0 Y -30 Z 0 300 30
      TranslationResultText X 0 Y -30 Z 0 300 30
    2. Für die Text (Script)- Komponente:

      Name Text Schriftgrad
      MicrophoneStatusText ?? 20
      AzureResponseText ?? 20
      Diktiertext ?? 20
      TranslationResultText ?? 20
  9. Wählen Sie als Nächstes die Ausrichtungsoption "zentrieren" für jede Textkomponente aus:

    Text ausrichten.

  10. Um sicherzustellen, dass die untergeordneten Benutzeroberflächentextobjekte leicht lesbar sind, ändern Sie ihre Farbe. Klicken Sie dazu auf die Leiste (derzeit "Schwarz") neben Farbe.

    Geben Sie entsprechende Werte für die Textausgaben der Benutzeroberfläche ein.

  11. Ändern Sie dann im neuen, kleinen Fenster Farbe die Hexadezimalfarbe in: 0032EAFF

    Aktualisieren Sie die Farbe auf Blau.

  12. Unten sehen Sie, wie die Benutzeroberfläche aussehen sollte.

    1. Im Hierarchiebereich:

      Verfügen Sie über eine Hierarchie in der bereitgestellten Struktur.

    2. In den Szenen- und Spielansichten:

      Die Szenen- und Spielansichten befinden sich in derselben Struktur.

Kapitel 5: Erstellen der Results-Klasse

Das erste Skript, das Sie erstellen müssen, ist die Results-Klasse , die dafür verantwortlich ist, die Ergebnisse der Übersetzung anzuzeigen. In der -Klasse wird Folgendes gespeichert und angezeigt:

  • Das Antwortergebnis von Azure.
  • Das Mikrofon status.
  • Das Ergebnis des Diktats (Sprachausgabe).
  • Das Ergebnis der Übersetzung.

So erstellen Sie diese Klasse:

  1. Klicken Sie mit der rechten Maustaste in den Projektbereich, und klicken Sie dann auf Ordner erstellen>. Nennen Sie den Ordner Skripts.

    Ordner

    Öffnen Sie den Ordner skripts.

  2. Doppelklicken Sie beim Erstellen des Ordners Skripts darauf, um ihn zu öffnen. Klicken Sie dann in diesem Ordner mit der rechten Maustaste, und wählen Sie Erstellen > und dann C#-Skript aus. Nennen Sie das Skript Ergebnisse.

    Erstellen Sie das erste Skript.

  3. Doppelklicken Sie auf das neue Ergebnisskript , um es mit Visual Studio zu öffnen.

  4. Fügen Sie die folgenden Namespaces ein:

        using UnityEngine;
        using UnityEngine.UI;
    
  5. Fügen Sie in der Klasse die folgenden Variablen ein:

        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. Fügen Sie dann die Awake()- Methode hinzu, die aufgerufen wird, wenn die Klasse initialisiert wird.

        private void Awake() 
        { 
            // Set this class to behave similar to singleton 
            instance = this;           
        } 
    
  7. Fügen Sie schließlich die Methoden hinzu, die für die Ausgabe der verschiedenen Ergebnisinformationen auf der Benutzeroberfläche verantwortlich sind.

        /// <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. Speichern Sie ihre Änderungen in Visual Studio , bevor Sie zu Unity zurückkehren.

Kapitel 6: Erstellen der MicrophoneManager-Klasse

Die zweite Klasse, die Sie erstellen möchten, ist microphoneManager.

Diese Klasse ist verantwortlich für:

  • Erkennen des am Headset oder Computer angeschlossenen Aufzeichnungsgeräts (je nachdem, welcher Standardwert ist).
  • Erfassen Sie das Audio (Voice) und verwenden Sie diktation, um es als Zeichenfolge zu speichern.
  • Nachdem die Stimme angehalten wurde, übermitteln Sie das Diktat an die Translator-Klasse.
  • Hosten Sie eine Methode, die die Sprachaufnahme bei Bedarf beenden kann.

So erstellen Sie diese Klasse:

  1. Doppelklicken Sie auf den Ordner Skripts , um ihn zu öffnen.

  2. Klicken Sie mit der rechten Maustaste in den Ordner Skripts, und klicken Sie auf C#-Skript erstellen>. Nennen Sie das Skript MicrophoneManager.

  3. Doppelklicken Sie auf das neue Skript, um es mit Visual Studio zu öffnen.

  4. Aktualisieren Sie die Namespaces so, dass sie sich an der Spitze der MicrophoneManager-Klasse wie folgt befinden:

        using UnityEngine; 
        using UnityEngine.Windows.Speech;
    
  5. Fügen Sie dann die folgenden Variablen der MicrophoneManager-Klasse hinzu:

        // 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 für die Methoden Awake() und Start() muss jetzt hinzugefügt werden. Diese werden aufgerufen, wenn die -Klasse initialisiert:

        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. Sie können die Update()-Methode löschen, da diese Klasse sie nicht verwendet.

  8. Nun benötigen Sie die Methoden, die die App verwendet, um die Sprachaufnahme zu starten und zu beenden, und übergeben Sie sie an die Translator-Klasse , die Sie in Kürze erstellen werden. Kopieren Sie den folgenden Code, und fügen Sie ihn unter die Start()- Methode ein.

        /// <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(); 
        }
    

    Tipp

    Obwohl diese Anwendung es nicht nutzt, wurde hier auch die StopCapturingAudio()- Methode bereitgestellt, wenn Sie die Möglichkeit zum Beenden der Audioaufzeichnung in Ihrer Anwendung implementieren möchten.

  9. Sie müssen jetzt einen Diktierhandler hinzufügen, der aufgerufen wird, wenn die Stimme beendet wird. Diese Methode übergibt dann den diktierten Text an die 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. Speichern Sie ihre Änderungen in Visual Studio, bevor Sie zu Unity zurückkehren.

Warnung

An diesem Punkt wird im Konsolenbereich des Unity-Editors ein Fehler angezeigt ("Der Name "Translator" ist nicht vorhanden..."). Dies liegt daran, dass der Code auf die Translator-Klasse verweist, die Sie im nächsten Kapitel erstellen.

Kapitel 7: Aufruf an Azure und Den Übersetzerdienst

Das letzte Skript, das Sie erstellen müssen, ist die Translator-Klasse .

Diese Klasse ist verantwortlich für:

  • Authentifizieren der App bei Azure im Austausch gegen ein Authentifizierungstoken.
  • Verwenden Sie das Authentifizierungstoken , um Text (empfangen von der MicrophoneManager-Klasse ) zu übermitteln, der übersetzt werden soll.
  • Erhalten Sie das übersetzte Ergebnis, und übergeben Sie es an die Ergebnisklasse , die auf der Benutzeroberfläche visualisiert werden soll.

So erstellen Sie diese Klasse:

  1. Wechseln Sie zum Ordner Skripts, den Sie zuvor erstellt haben.

  2. Klicken Sie im Projektbereich mit der rechten Maustaste auf C#-Skript erstellen>. Rufen Sie den Skriptübersetzer auf.

  3. Doppelklicken Sie auf das neue Translator-Skript , um es mit Visual Studio zu öffnen.

  4. Fügen Sie die folgenden Namespaces am Anfang der Datei hinzu:

        using System;
        using System.Collections;
        using System.Xml.Linq;
        using UnityEngine;
        using UnityEngine.Networking;
    
  5. Fügen Sie dann die folgenden Variablen der Translator-Klasse hinzu:

        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; 
    

    Hinweis

    • Die sprachen, die in die Sprachenumeume eingefügt werden , sind nur Beispiele. Wenn Sie möchten, können Sie weitere hinzufügen. die API unterstützt über 60 Sprachen (einschließlich Klingonisch)!
    • Es gibt eine interaktivere Seite, die die verfügbaren Sprachen abdeckt, aber beachten Sie, dass die Seite nur funktioniert, wenn die Websitesprache auf "" festgelegt ist (und die Microsoft-Website wahrscheinlich zu Ihrer Muttersprache weitergeleitet wird). Sie können die Websitesprache am unteren Rand der Seite oder durch Ändern der URL ändern.
    • Der Wert authorizationKey im obigen Codeausschnitt muss der Schlüssel sein, den Sie erhalten haben, als Sie die Azure Translator Text-API abonniert haben. Dies wurde in Kapitel 1 behandelt.
  6. Code für die Methoden Awake() und Start() muss jetzt hinzugefügt werden.

  7. In diesem Fall ruft der Code azure mithilfe des Autorisierungsschlüssels auf, um ein Token abzurufen.

        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); 
        }
    

    Hinweis

    Das Token läuft nach 10 Minuten ab. Je nach Szenario für Ihre App müssen Sie möglicherweise mehrmals denselben Coroutinenaufruf tätigen.

  8. Die Coroutine zum Abrufen des Tokens lautet wie folgt:

        /// <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();
        }
    

    Warnung

    Wenn Sie den Namen der IEnumerator-Methode GetTokenCoroutine()bearbeiten, müssen Sie die StartCoroutine - und StopCoroutine-Aufrufzeichenfolgenwerte im obigen Code aktualisieren. Wie in der Unity-Dokumentation beschrieben, müssen Sie zum Beenden einer bestimmten Coroutine die Zeichenfolgenwertmethode verwenden.

  9. Fügen Sie als Nächstes die Coroutine (mit einer "support"-Streammethode direkt darunter) hinzu, um die Übersetzung des von der MicrophoneManager-Klasse empfangenen Texts zu erhalten. Dieser Code erstellt eine Abfragezeichenfolge, die an die Azure Translator Text-API gesendet werden soll, und verwendet dann die interne UnityWebRequest-Klasse, um einen "Get"-Aufruf des Endpunkts mit der Abfragezeichenfolge zu tätigen. Das Ergebnis wird dann verwendet, um die Übersetzung in Ihrem Results-Objekt festzulegen. Der folgende Code zeigt die Implementierung:

        /// <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. Speichern Sie ihre Änderungen in Visual Studio , bevor Sie zu Unity zurückkehren.

Kapitel 8: Konfigurieren der Unity-Szene

  1. Klicken Sie wieder im Unity-Editor auf die Results-Klasse , und ziehen Sie sie aus dem Ordner Skripts in das Objekt Hauptkamera im Hierarchiebereich.

  2. Klicken Sie auf die Hauptkamera , und sehen Sie sich den Inspektorbereich an. Sie werden feststellen, dass es innerhalb der neu hinzugefügten Skriptkomponente vier Felder mit leeren Werten gibt. Dies sind die Ausgabeverweise auf die Eigenschaften im Code.

  3. Ziehen Sie die entsprechenden Text-Objekte aus dem Hierarchiebereich auf diese vier Slots, wie in der abbildung unten gezeigt.

    Aktualisieren Sie Zielverweise mit angegebenen Werten.

  4. Klicken Sie als Nächstes, und ziehen Sie die Translator-Klasse aus dem Ordner Skripts in das Objekt Hauptkamera im Hierarchiebereich.

  5. Klicken Sie dann, und ziehen Sie die MicrophoneManager-Klasse aus dem Ordner Skripts in das Objekt Hauptkamera im Hierarchiebereich.

  6. Klicken Sie abschließend auf die Hauptkamera , und sehen Sie sich den Inspektorbereich an. Sie werden feststellen, dass es in dem Skript, das Sie gezogen haben, zwei Dropdownfelder gibt, mit denen Sie die Sprachen festlegen können.

    Stellen Sie sicher, dass die gewünschten Übersetzungssprachen eingaben.

Kapitel 9 – Test in Mixed Reality

An diesem Punkt müssen Sie testen, dass die Szene ordnungsgemäß implementiert wurde.

Stellen Sie Folgendes sicher:

  • Alle in Kapitel 1 erwähnten Einstellungen sind ordnungsgemäß festgelegt.
  • Die Skripts Results, Translator und MicrophoneManager sind an das Hauptkameraobjekt angefügt.
  • Sie haben Ihren Azure Translator-Text-API-Dienstschlüssel in der Variable authorizationKey innerhalb des Übersetzerskripts platziert.
  • Alle Felder im Hauptkamerainspektorbereich werden ordnungsgemäß zugewiesen.
  • Ihr Mikrofon funktioniert, wenn Sie Ihre Szene ausführen (falls nicht, vergewissern Sie sich, dass Ihr angeschlossenes Mikrofon das Standardgerät ist und Sie es in Windows ordnungsgemäß eingerichtet haben).

Sie können das immersive Headset testen, indem Sie die Wiedergabetaste im Unity-Editor drücken. Die App sollte über das angeschlossene immersive Headset funktionieren.

Warnung

Wenn in der Unity-Konsole ein Fehler beim Ändern des Standardaudiogeräts angezeigt wird, funktioniert die Szene möglicherweise nicht wie erwartet. Dies liegt daran, dass das Mixed Reality-Portal mit integrierten Mikrofonen für Headsets umgeht, die diese haben. Wenn dieser Fehler angezeigt wird, beenden Sie einfach die Szene, und starten Sie sie erneut, und die Dinge sollten wie erwartet funktionieren.

Kapitel 10: Erstellen der UWP-Lösung und Querladen auf dem lokalen Computer

Alles, was für den Unity-Abschnitt dieses Projekts benötigt wird, wurde nun abgeschlossen, daher ist es an der Zeit, es von Unity aus zu erstellen.

  1. Navigieren Sie zu Buildeinstellungen: Dateibuildeinstellungen > ...

  2. Klicken Sie im Fenster Buildeinstellungen auf Erstellen.

    Erstellen Sie die Unity-Szene.

  3. Wenn noch nicht, aktivieren Sie Unity C#-Projekte.

  4. Klicken Sie auf Erstellen. Unity startet ein Explorer Fenster, in dem Sie einen Ordner erstellen und dann auswählen müssen, in dem die App erstellt werden soll. Erstellen Sie diesen Ordner jetzt, und nennen Sie ihn App. Drücken Sie dann, wenn der Ordner App ausgewählt ist, Ordner auswählen.

  5. Unity beginnt mit dem Erstellen Ihres Projekts im Ordner App .

  6. Sobald Unity das Erstellen abgeschlossen hat (es kann einige Zeit dauern), öffnet es ein Explorer Fenster am Speicherort Ihres Builds (überprüfen Sie Ihre Taskleiste, da es möglicherweise nicht immer über Ihren Fenstern angezeigt wird, Sie aber über das Hinzufügen eines neuen Fensters benachrichtigt).

Kapitel 11: Bereitstellen Ihrer Anwendung

So stellen Sie Ihre Anwendung bereit:

  1. Navigieren Sie zu Ihrem neuen Unity-Build (dem Ordner App ), und öffnen Sie die Projektmappendatei mit Visual Studio.

  2. Wählen Sie in der Projektmappenkonfiguration debuggen aus.

  3. Wählen Sie auf der Lösungsplattform die Option x86, Lokaler Computer aus.

    Für die Microsoft HoloLens ist es möglicherweise einfacher, dies auf Remotecomputer festzulegen, sodass Sie nicht an Ihren Computer angebunden werden. Sie müssen jedoch auch die folgenden Schritte ausführen:

    • Kennen Sie die IP-Adresse Ihrer HoloLens, die Sie im Einstellungsnetzwerk > & Internet > Wi-Fi > Erweiterten Optionen finden können. IPv4 ist die Adresse, die Sie verwenden sollten.
    • Stellen Sie sicher , dass der Entwicklermodusaktiviert ist. finden Sie unter Einstellungen > Update & Sicherheit > für Entwickler.

    Stellen Sie die Projektmappe in Visual Studio bereit.

  4. Wechseln Sie zum Menü Erstellen , und klicken Sie auf Lösung bereitstellen , um die Anwendung auf Ihren PC querzuladen.

  5. Ihre App sollte nun in der Liste der installierten Apps angezeigt werden, die zum Starten bereit sind.

  6. Nach dem Start fordert Sie die App auf, den Zugriff auf das Mikrofon zu autorisieren. Klicken Sie unbedingt auf die Schaltfläche JA .

  7. Sie können jetzt mit der Übersetzung beginnen!

Ihre fertige Übersetzungstext-API-Anwendung

Herzlichen Glückwunsch! Sie haben eine Mixed Reality-App erstellt, die die Azure-Übersetzungstext-API nutzt, um Sprache in übersetzten Text zu konvertieren.

Endprodukt.

Zusatzübungen

Übung 1

Können Sie der App Text-zu-Sprache-Funktionalität hinzufügen, damit der zurückgegebene Text gesprochen wird?

Übung 2

Ermöglichen Sie es dem Benutzer, die Quell- und Ausgabesprachen ("from" und "to") innerhalb der App selbst zu ändern, sodass die App nicht jedes Mal neu erstellt werden muss, wenn Sie Sprachen ändern möchten.