Freigeben über


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 Lernprogrammen geben, die in Zukunft veröffentlicht werden, die zeigen, wie sie für HoloLens 2 entwickelt werden. Dieser Hinweis wird mit einem Link zu diesen Lernprogrammen aktualisiert, wenn sie veröffentlicht werden.


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

Endprodukt

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

Nach Abschluss dieses Kurses haben Sie eine Mixed Reality-Anwendung, die folgende Aktionen ausführen kann:

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

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

Unterstützung für Geräte

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

Hinweis

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

Voraussetzungen

Hinweis

Dieses Lernprogramm wurde für Entwickler entwickelt, die grundlegende Erfahrung mit Unity und C# haben. Bitte beachten Sie auch, dass die Voraussetzungen und schriftlichen Anweisungen in diesem Dokument das zum Zeitpunkt der Schriftlichkeit (Mai 2018) getestet und überprüft wurden. Sie sind kostenlos, die neueste Software zu verwenden, wie im Artikel "Tools installieren" aufgeführt, aber es sollte nicht angenommen werden, dass die Informationen in diesem Kurs perfekt mit dem übereinstimmen, was Sie in neuerer Software finden als die unten aufgeführten.

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

Vor der Installation

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

  • Mit dem Code in diesem Lernprogramm können Sie von dem standardmäßigen Mikrofongerät aufzeichnen, das mit Ihrem PC verbunden ist. Stellen Sie sicher, dass das Standardmäßige Mikrofongerät auf das Gerät festgelegt ist, das Sie für die Aufnahme Ihrer Stimme verwenden möchten.

  • Um Ihrem PC das Aktivieren des Diktierens zu ermöglichen, wechseln Sie zu "Datenschutz-Spracherkennung > einstellungen>", "Freihandeingabe" und wählen Sie die Schaltfläche "Sprachdienste aktivieren" aus, und geben Sie Vorschläge ein.

  • Wenn Sie ein Mikrofon und Kopfhörer verwenden, die mit Ihrem Headset verbunden (oder integriert sind) verwenden, stellen Sie sicher, dass die Option "Wenn ich mein Headset verwende, 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 für ein immersives Headset für dieses Labor 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 als Problemumgehung sicher, dass Sie die oben genannten Schritte abgeschlossen haben, und schließen und erneut öffnen Sie den Editor, wenn sich dieses Problem darstellt.

Kapitel 1 – Das Azure-Portal

Um die Azure Translator-API zu verwenden, müssen Sie eine Instanz des Diensts konfigurieren, die Für Ihre Anwendung verfügbar gemacht wird.

  1. Melden Sie sich beim Azure-Portalan.

    Hinweis

    Wenn Sie noch nicht über ein Azure-Konto verfügen, müssen Sie ein Konto erstellen. Wenn Sie diesem Lernprogramm in einer Unterrichts- oder Laborsituation folgen, bitten Sie Ihren Kursleiter oder einen der Betreuer, Hilfe beim Einrichten Ihres neuen Kontos zu erhalten.

  2. Sobald Sie angemeldet sind, klicken Sie in der oberen linken Ecke auf "Neu ", und suchen Sie nach "Übersetzertext-API". Wählen Sie die EINGABETASTE aus.

    Neue Ressource

    Hinweis

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

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

    Text-API-Dienst für Übersetzer erstellen

  4. Nachdem Sie auf "Erstellen" geklickt haben:

    1. Fügen Sie ihren gewünschten Namen für diese Dienstinstanz ein.

    2. Wählen Sie ein entsprechendes Abonnement aus.

    3. Wählen Sie die für Sie geeignete Preisstufe aus, wenn Sie zum ersten Mal einen Übersetzertextdienst erstellen, sollte ihnen eine kostenlose Stufe (mit dem Namen F0) zur Verfügung stehen.

    4. Wählen Sie eine Ressourcengruppe aus, oder erstellen Sie eine neue. Eine Ressourcengruppe bietet eine Möglichkeit, die Abrechnung für eine Sammlung von Azure-Ressourcen zu überwachen, zu steuern, den Zugriff zu steuern, bereitzustellen und zu verwalten. Es wird empfohlen, alle Azure-Dienste, die einem einzelnen Projekt (z. B. diesen Laboren) zugeordnet sind, unter einer gemeinsamen Ressourcengruppe zu halten.

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

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

    6. Sie müssen auch bestätigen, dass Sie die auf diesen Dienst angewendeten Allgemeinen 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 wurde. Dies kann eine Minute dauern.

  6. Sobald die Dienstinstanz erstellt wurde, wird im Portal eine Benachrichtigung angezeigt.

    Azure-Diensterstellungsbenachrichtigung

  7. Klicken Sie auf die Benachrichtigung, um Ihre neue Dienstinstanz zu erkunden.

    Wechseln Sie zum Ressourcenpopup.

  8. Klicken Sie in der Benachrichtigung auf die Schaltfläche "Zur Ressource wechseln", um Ihre neue Dienstinstanz zu erkunden. Sie werden zur neuen Instanz des Übersetzertext-API-Diensts weitergeleitet.

    Seite des Übersetzertext-API-Diensts

  9. In diesem Lernprogramm muss Ihre Anwendung Aufrufe an Ihren Dienst tätigen, was über den Abonnementschlüssel Ihres Diensts erfolgt.

  10. Navigieren Sie auf der Schnellstartseite Ihres Übersetzertextdiensts zum ersten Schritt, greifen Sie ihre Tasten ab, und klicken Sie auf "Tasten". (Sie können dies auch erreichen, indem Sie auf die blauen Linktasten klicken, die sich im Navigationsmenü "Dienste" befinden, das durch das Schlüsselsymbol gekennzeichnet ist). Dadurch werden Ihre Dienstschlüssel angezeigt.

  11. Erstellen Sie eine Kopie einer 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.

Es folgt 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 das neue 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 an einer für Sie geeigneten Stelle fest (denken Sie daran, dass die Stammverzeichnisse besser sind). Klicken Sie dann auf "Projekt erstellen".

    Geben Sie Details für das neue Unity-Projekt an.

  3. Wenn Unity geöffnet ist, lohnt es sich, den Standardmäßigen Skript-Editor auf Visual Studio festzulegen. Wechseln 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 zur Plattform zu Universelle Windows-Plattform, indem Sie auf die Schaltfläche "Plattform wechseln" klicken.

    Fenster

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

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

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

    2. Buildtyp ist auf D3D festgelegt

    3. SDK ist auf "Neueste Installation" festgelegt.

    4. Visual Studio-Version ist auf "Neueste Installation" festgelegt.

    5. Build und Ausführung ist auf den lokalen 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. Ein Speicherfenster wird 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, nennen Sie ihn "Szenen".

        Ordner

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

        Geben Sie einer 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 andere ähnliche Ordner) ist eine typische Methode zum Strukturieren eines Unity-Projekts.

    7. Die übrigen Einstellungen in den Buildeinstellungen sollten jetzt als Standard beibehalten werden.

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

    Öffnen Sie die Spielereinstellungen.

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

    1. Auf der Registerkarte "Andere Einstellungen" folgendes:

      1. Skripting Runtime-Version sollte stabil sein (.NET 3.5-Entsprechung).

      2. Scripting Back-End sollte .NET sein

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

        Aktualisieren Sie andere Einstellungen.

    2. Aktivieren Sie auf der Registerkarte "Veröffentlichungseinstellungen " unter "Funktionen" Folgendes:

      1. InternetClient

      2. Mikrofon

        Aktualisieren der Veröffentlichungseinstellungen.

    3. Klicken Sie weiter unten im Bereich unter "XR-Einstellungen" (unter "Veröffentlichungseinstellungen" finden Sie auf "Virtual Reality Unterstützt"), und vergewissern Sie sich, dass das Windows Mixed Reality SDK hinzugefügt wird.

      Aktualisieren Sie die X R-Einstellungen.

  8. Zurück in build settings, Unity C# Projects is no longer greyed out; tick the checkbox next to this.

  9. Schließen Sie das Fenster 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 Code fortfahren möchten, können Sie dieses Unitypackage herunterladen, es als benutzerdefiniertes Paket in Ihr Projekt importieren und dann von 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"-Blickpunkt dar, sobald Sie sich in der Anwendung befinden.

  2. Wählen Sie mit dem Unity-Dashboard vor Ihnen das Hauptkamera-GameObject aus. Sie werden feststellen, dass im Inspektorbereich (allgemein rechts im Dashboard) die verschiedenen Komponenten dieses GameObjects angezeigt werden, wobei "Transform" oben, gefolgt von "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 Komponente "Kameratransformation" und dann "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. Drehung ist auf 0, 0, 0 festgelegt.

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

      Transformieren von Informationen für Kamera

  5. Sehen Sie sich als Nächstes mit ausgewähltem Hauptkameraobjekt die Schaltfläche "Komponente hinzufügen" am unteren Rand des Inspektorbereichs an.

  6. Wählen Sie diese Schaltfläche aus, und suchen Sie (entweder durch Eingabe der Audioquelle in das Suchfeld oder Navigieren in den Abschnitten) nach der Komponente namens "Audioquelle ", wie unten dargestellt, und wählen Sie sie aus (durch Drücken der EINGABETASTE funktioniert es ebenfalls).

  7. Eine Audioquelle-Komponente wird der Hauptkamera hinzugefügt, wie unten gezeigt.

    Fügen Sie eine Audioquelle-Komponente hinzu.

    Hinweis

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

    • Flags löschen: Volltonfarbe.
    • Hintergrund 'Schwarz, Alpha 0' – Hexfarbe: #000000000.

Kapitel 4 – Setup 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 Textobjekten, um die Daten anzuzeigen.

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

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

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

  3. Ändern Sie als Nächstes die folgenden Parameter in der Rect Transform des Inspektorpanels:

    1. POS - X 0 Y 0 Z 40

    2. Breite - 500

    3. Höhe - 300

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

      Aktualisieren Sie die Rettransformation für den Zeichenbereich.

  4. Klicken Sie mit der rechten Maustaste auf den Canvas im Hierarchiebereich, unter der Benutzeroberfläche, und fügen Sie einen Bereich hinzu. Dieser Bereich stellt einen Hintergrund zu dem Text bereit, der in der Szene angezeigt wird.

  5. Klicken Sie mit der rechten Maustaste auf den Bereich im Hierarchiebereich, unter der Benutzeroberfläche, und fügen Sie ein Textobjekt hinzu. Wiederholen Sie denselben Vorgang, bis Sie insgesamt vier UI-Textobjekte 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. Markieren Sie es für jedes Textobjekt, 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
      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. Für die Textkomponente (Skript):

      Name Text Schriftgröße
      MicrophoneStatusLabel Mikrofonstatus: 20
      AzureResponseLabel Azure Web Response 20
      DictationLabel Sie haben gerade gesagt: 20
      TranslationResultLabel Übersetzung: 20

      Geben Sie die entsprechenden Werte für die Ui-Beschriftungen ein.

    3. Legen Sie außerdem den Schriftschnitt fett fest. Dadurch wird der Text leichter lesbar.

      Fett formatierte Schriftart.

  7. Erstellen Sie für jedes in Kapitel 5 erstellte UI-Textobjekt ein neues untergeordnetes UI-Textobjekt. 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 (z. B. MicrophoneStatusLabel) klicken und dann die Benutzeroberfläche auswählen und dann "Text" auswählen.

  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
      DictationText X 0 Y -30 Z 0 300 30
      TranslationResultText X 0 Y -30 Z 0 300 30
    2. Für die Textkomponente (Skript):

      Name Text Schriftgröße
      MicrophoneStatusText ?? 20
      AzureResponseText ?? 20
      DictationText ?? 20
      TranslationResultText ?? 20
  9. Wählen Sie als Nächstes die Ausrichtungsoption "Mitte" für jede Textkomponente aus:

    Text ausrichten.

  10. Um sicherzustellen, dass die untergeordneten UI-Textobjekte leicht lesbar sind, ändern Sie deren Farbe. Klicken Sie dazu auf die Leiste (derzeit 'Schwarz') neben "Farbe".

    Geben Sie entsprechende Werte für die Ui-Textausgabe ein.

  11. Ändern Sie dann im neuen, kleinen Farbfenster die Hexfarbe in: 0032EAFF

    Farbe auf Blau aktualisieren.

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

    1. Im Hierarchiebereich:

      Weisen Sie die Hierarchie in der bereitgestellten Struktur auf.

    2. In den Szenen - und Spielansichten:

      Weisen Sie die Szenen- und Spielansichten in derselben Struktur auf.

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. Die Klasse speichert und zeigt Folgendes an:

  • Das Antwortergebnis von Azure.
  • Der Mikrofonstatus.
  • Das Ergebnis des Diktats (Sprache zu Text).
  • Das Ergebnis der Übersetzung.

So erstellen Sie diese Klasse:

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

    Ordner

    Öffnen Sie den Skriptordner.

  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 dann "C#-Skript erstellen>" 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. Achten Sie darauf, ihre Änderungen in Visual Studio zu speichern, bevor Sie zu Unity zurückkehren.

Kapitel 6 – Erstellen der MicrophoneManager-Klasse

Die zweite Klasse, die Sie erstellen werden, ist der MicrophoneManager.

Diese Klasse ist für Folgendes verantwortlich:

  • Erkennen des aufzeichnungsgeräts, das an das Headset oder den Computer angeschlossen ist (je nachdem, was der Standardwert ist).
  • Erfassen Sie die Audiodaten (Sprache), und verwenden Sie diktieren, um sie als Zeichenfolge zu speichern.
  • Nachdem die Stimme angehalten wurde, übermitteln Sie das Diktieren 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 mit dem folgenden identisch sind, am oberen Rand der MicrophoneManager-Klasse :

        using UnityEngine; 
        using UnityEngine.Windows.Speech;
    
  5. Fügen Sie dann die folgenden Variablen in 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 wird:

        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. Jetzt benötigen Sie die Methoden, die die App zum Starten und Beenden der Sprachaufnahme verwendet, 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 der 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 nicht verwendet wird, wurde hier auch die StopCapturingAudio() -Methode bereitgestellt, wenn Sie die Möglichkeit zum Beenden der Aufnahme von Audio 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 dikierten 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. Achten Sie darauf, ihre Änderungen in Visual Studio zu speichern, bevor Sie zu Unity zurückkehren.

Warnung

An diesem Punkt werden Sie feststellen, dass im Unity Editor Console Panel ein Fehler angezeigt wird ("Der Name 'Übersetzer' ist nicht vorhanden..."). Dies liegt daran, dass der Code auf die Translator-Klasse verweist, die Sie im nächsten Kapitel erstellen.

Kapitel 7 – Anruf beim Azure- und Übersetzerdienst

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

Diese Klasse ist für Folgendes verantwortlich:

  • Authentifizieren der App mit Azure im Austausch für ein Authentifizierungstoken.
  • Verwenden Sie das Authentifizierungstoken , um Text (empfangen von der MicrophoneManager-Klasse ) zu übermitteln, um übersetzt zu werden.
  • Empfangen Sie das übersetzte Ergebnis, und übergeben Sie es an die Ergebnisklasse , die in 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 mit der rechten Maustaste in den Projektbereich, C#-Skript erstellen>. Rufen Sie den Skriptübersetzer auf.

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

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

        using System;
        using System.Collections;
        using System.Xml.Linq;
        using UnityEngine;
        using UnityEngine.Networking;
    
  5. Fügen Sie dann die folgenden Variablen innerhalb 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 in die Enumeration der Sprachen eingefügten Sprachen sind nur Beispiele. Wenn Sie möchten, können Sie mehr hinzufügen; die API unterstützt mehr als 60 Sprachen (einschließlich Klingon)!
    • Es gibt eine interaktivere Seite mit verfügbaren Sprachen. Beachten Sie jedoch, dass die Seite nur funktioniert, wenn die Websitesprache auf "" festgelegt ist (und die Microsoft-Website wird wahrscheinlich zu Ihrer Muttersprache umgeleitet). Sie können die Sprache der Website unten auf der Seite ändern oder die URL ändern.
    • Der AuthorizationKey-Wert im obigen Codeausschnitt muss der Schlüssel sein, den Sie erhalten haben, wenn 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 Coroutine-Anruf 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 Zeichenfolgenwerte "StartCoroutine " und "StopCoroutine " im obigen Code aktualisieren. Gemäß Unity-Dokumentation müssen Sie zum Beenden eines 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 Texts abzurufen, der von der MicrophoneManager-Klasse empfangen wurde. Dieser Code erstellt eine Abfragezeichenfolge, die an die Text-API von Azure Translator gesendet werden soll, und verwendet dann die interne UnityWebRequest-Klasse, um einen "Get"-Aufruf an den Endpunkt mit der Abfragezeichenfolge auszuführen. 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. Achten Sie darauf, ihre Änderungen in Visual Studio zu speichern, bevor Sie zu Unity zurückkehren.

Kapitel 8 – Konfigurieren der Unity-Szene

  1. Klicken Sie zurück im Unity-Editor, und ziehen Sie die Ergebnisklasse aus dem Ordner "Skripts" in das Hauptkameraobjekt im Hierarchiebereich.

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

  3. Ziehen Sie die entsprechenden Textobjekte aus dem Hierarchiebereich auf diese vier Steckplätze, wie in der abbildung unten dargestellt.

    Aktualisieren Sie Zielverweise mit angegebenen Werten.

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

  5. Klicken Und ziehen Sie dann die MicrophoneManager-Klasse aus dem Ordner "Skripts " in das Hauptkameraobjekt im Hierarchiebereich.

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

    Stellen Sie sicher, dass die vorgesehenen Ü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 genannten Einstellungen sind korrekt festgelegt.
  • Die Skripts "Ergebnisse", "Übersetzer" und "MicrophoneManager" sind an das Hauptkameraobjekt angefügt.
  • Sie haben Ihren Azure Translator Text API Service Key in die AuthorizationKey-Variable innerhalb des Übersetzerskripts platziert.
  • Alle Felder im Hauptkameraprüfungsbereich werden ordnungsgemäß zugewiesen.
  • Ihr Mikrofon funktioniert beim Ausführen der Szene (falls nicht, überprüfen Sie, ob Ihr angeschlossenes Mikrofon das Standardgerät ist und dass Sie es in Windows ordnungsgemäß eingerichtet haben).

Sie können das immersive Headset testen, indem Sie die Wiedergabeschaltfläche im Unity-Editor drücken. Die App sollte über das angefügte immersive Headset funktionieren.

Warnung

Wenn in der Unity-Konsole ein Fehler zum Ändern des Standardaudiogeräts angezeigt wird, funktioniert die Szene möglicherweise nicht wie erwartet. Dies liegt daran, wie sich das Mixed Reality-Portal mit integrierten Mikrofonen für Headsets befasst, die über sie verfügen. 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 erforderlich ist, wurde jetzt abgeschlossen, daher ist es an der Zeit, es aus Unity 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 geschehen, ticken Sie unter "Unity C#-Projekte".

  4. Klicken Sie auf Erstellen. Unity startet ein Explorer-Fenster, in dem Sie einen Ordner erstellen und dann einen Ordner 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 mit ausgewähltem App-Ordner "Ordner auswählen".

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

  6. Nachdem Unity das Erstellen abgeschlossen hat (es kann einige Zeit dauern), öffnet es ein Explorer Fenster an der Position Ihres Builds (überprüfen Sie Ihre Taskleiste, da sie möglicherweise nicht immer über Ihren Fenstern angezeigt wird, sondern Sie über dem Hinzufügen eines neuen Fensters informiert).

Kapitel 11 – Bereitstellen Ihrer Anwendung

So stellen Sie Ihre Anwendung bereit:

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

  2. Wählen Sie in der Lösungskonfiguration "Debuggen" aus.

  3. Wählen Sie in der Lösungsplattform x86, lokaler Computer aus.

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

    • Kennen Sie die IP-Adresse Ihrer HoloLens, die sich in den erweiterten Optionen für Netzwerkeinstellungen > und Internet > wi-Fi > befindet. IPv4 ist die Adresse, die Sie verwenden sollten.
    • Stellen Sie sicher, dass der Entwicklermodus aktiviert ist; finden Sie in "Einstellungen > Update & Sicherheit > für Entwickler".

    Stellen Sie die Lösung aus 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 die App Sie auf, den Zugriff auf das Mikrofon zu autorisieren. Stellen Sie sicher, dass Sie auf die Schaltfläche "JA " klicken.

  7. Sie sind jetzt bereit, mit der Übersetzung zu 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-Funktionen hinzufügen, damit der zurückgegebene Text gesprochen wird?

Übung 2

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