HoloLens (1. Generation) und Azure 301: Sprachübersetzung
Hinweis
Die Tutorials der Mixed Reality Academy wurden unter Berücksichtigung von HoloLens (1. Generation) und Mixed Reality Immersive Headsets entwickelt. Daher ist es uns wichtig, diese Tutorials für Entwickler zu belassen, die noch nach Anleitungen bei der Entwicklung 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 beibehalten, um weiterhin auf den unterstützten Geräten zu arbeiten. Es wird eine neue Reihe von Tutorials geben, die in Zukunft veröffentlicht werden, um zu veranschaulichen, wie für HoloLens 2 entwickelt werden kann. Dieser Hinweis wird mit einem Link zu diesen Tutorials aktualisiert, sobald 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.
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 der Azure-Textübersetzungs-API.
Nach Abschluss dieses Kurses verfügen Sie über eine Mixed Reality-Anwendung, die folgende Aufgaben ausführen kann:
- Der Benutzer spricht in ein Mikrofon, das mit einem immersiven Headset (VR) (oder dem integrierten Mikrofon von HoloLens) verbunden ist.
- Die App erfasst das Diktat und sendet es an die Azure-Textübersetzungs-API.
- Das Übersetzungsergebnis wird in einer einfachen Benutzeroberflächengruppe in der Unity-Szene angezeigt.
In diesem Kurs erfahren Sie, wie Sie die Ergebnisse aus dem Übersetzerdienst in eine Unity-basierte Beispielanwendung integrieren. Es ist an Ihnen, diese Konzepte auf eine benutzerdefinierte Anwendung anzuwenden, 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 (VR)-Headsets konzentriert, können Sie das, was Sie in diesem Kurs lernen, auch auf Microsoft HoloLens anwenden. Während Sie den Kurs befolgen, werden Ihnen Hinweise 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 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 entsprechen, was zum Zeitpunkt des Schreibens (Mai 2018) getestet und überprüft wurde. Sie können die neueste Software verwenden, die im Artikel Installieren der Tools aufgeführt ist, obwohl nicht davon ausgegangen werden sollte, dass die Informationen in diesem Kurs perfekt dem entsprechen, was Sie in neuerer Software finden, als die unten aufgeführten.
Wir empfehlen die folgende Hardware und Software für diesen Kurs:
- Ein Entwicklungs-PC, kompatibel mit Windows Mixed Reality für die Entwicklung immersiver (VR)-Headsets
- Windows 10 Fall Creators Update (oder höher) mit aktiviertem Entwicklermodus
- Das neueste Windows 10 SDK
- Unity 2017.4
- Visual Studio 2017
- Ein Windows Mixed Reality immersives Headset (VR) oder Microsoft HoloLens mit aktiviertem Entwicklermodus
- Kopfhörer mit integriertem Mikrofon (wenn das Headset nicht über ein integriertes Mikrofon und Lautsprecher verfügt)
- Internetzugriff für Azure-Setup und Übersetzungsabruf
Vorbereitende Schritte
Um Probleme beim Erstellen dieses Projekts zu vermeiden, wird dringend empfohlen, das in diesem Tutorial erwähnte Projekt in einem Stammordner oder in der Nähe des Stammordners zu erstellen (lange Ordnerpfade können zur Buildzeit Zu Problemen führen).
Mit dem Code in diesem Tutorial können Sie aufzeichnungen vom Standardmikrofongerät aus ausführen, das an Ihren PC angeschlossen 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 Diktieren aktivieren kann, wechseln Sie zu Einstellungen > Datenschutz > Spracherkennung, Freihandeingabe & Eingabe , und wählen Sie die Schaltfläche Sprachdienste und Eingabevorschläge aktivieren aus.
Wenn Sie ein Mikrofon und Kopfhörer verwenden, die mit Ihrem Headset verbunden (oder integriert) sind, stellen Sie sicher, dass die Option "Wenn ich mein Headset trage, zum Headset-Mikrofon wechseln" unter Einstellungen > Mixed Reality > Audio und Sprache aktiviert ist.
Warnung
Beachten Sie, dass bei der Entwicklung für ein immersives Headset für dieses Lab probleme mit dem Audioausgabegerät auftreten können. 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 zur Umgehung der Problembehandlung sicher, dass Sie die oben genannten Schritte ausgeführt haben, und schließen und öffnen Sie die Editor, wenn sich dieses Problem darstellt.
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.
Melden Sie sich beim Azure-Portal an.
Hinweis
Wenn Sie noch nicht über ein Azure-Konto verfügen, müssen Sie eines erstellen. Wenn Sie dieses Tutorial in einer Unterrichts- oder Lab-Situation durcharbeiten, bitten Sie Ihren Kursleiter oder einen der Betreuer um Hilfe beim Einrichten Ihres neuen Kontos.
Nachdem Sie angemeldet sind, klicken Sie in der oberen linken Ecke auf Neu , und suchen Sie nach "Textübersetzungs-API". Drücken Sie die EINGABETASTE.
Hinweis
Das Wort Neu wurde in neueren Portalen möglicherweise durch Ressource erstellen ersetzt.
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.
Nachdem Sie auf Erstellen geklickt haben:
Fügen Sie den gewünschten Namen für diese Dienst-instance ein.
Wählen Sie ein geeignetes Abonnement aus.
Wählen Sie den für Sie geeigneten Tarif aus. Wenn Sie zum ersten Mal einen Textübersetzungsdienst erstellen, sollte ihnen ein Free-Tarif (mit dem Namen F0) zur Verfügung stehen.
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 zugeordnet sind (z. B. diese Labs), in einer gemeinsamen Ressourcengruppe zu speichern.
Weitere Informationen zu Azure-Ressourcengruppen finden Sie im Artikel ressourcengruppen.
Bestimmen Sie den Speicherort für Ihre Ressourcengruppe (wenn Sie eine neue Ressourcengruppe erstellen). Der Standort befindet sich idealerweise in der Region, in der die Anwendung ausgeführt wird. Einige Azure-Ressourcen sind nur in bestimmten Regionen verfügbar.
Sie müssen auch bestätigen, dass Sie die für diesen Dienst geltenden Geschäftsbedingungen verstanden haben.
Wählen Sie Erstellen aus.
Nachdem Sie auf Erstellen geklickt haben, müssen Sie warten, bis der Dienst erstellt wurde. Dies kann eine Minute dauern.
Eine Benachrichtigung wird im Portal angezeigt, nachdem die Dienst-instance erstellt wurde.
Klicken Sie auf die Benachrichtigung, um Ihre neue Dienst-instance zu erkunden.
Klicken Sie in der Benachrichtigung auf die Schaltfläche Zu Ressource wechseln, um Ihre neue Dienst-instance zu erkunden. Sie werden zu Ihrem neuen textübersetzungs-API-Instance weitergeleitet.
In diesem Tutorial muss Ihre Anwendung Aufrufe an Ihren Dienst senden. Dies geschieht mithilfe des Abonnementschlüssels Ihres Diensts.
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.
Erstellen Sie eine Kopie eines der angezeigten Schlüssel, da Sie diese 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 Motion-Controller. 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:
Öffnen Sie Unity , und klicken Sie auf Neu.
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 Speicherort fest (denken Sie daran, dass näher an Stammverzeichnissen besser ist). Klicken Sie dann auf Projekt erstellen.
Wenn Unity geöffnet ist, empfiehlt es sich, die Standardskript Editor auf Visual Studio festgelegt ist, zu überprüfen. Wechseln Sie zu Einstellungen bearbeiten>, und navigieren Sie dann im neuen Fenster zu Externe Tools. Ändern Sie external script Editor in Visual Studio 2017. Schließen Sie das Fenster Einstellungen .
Wechseln Sie als Nächstes zu Dateibuildeinstellungen>, und ändern Sie die Plattform auf Universelle Windows-Plattform, indem Sie auf die Schaltfläche Plattform wechseln klicken.
Wechseln Sie zu Dateibuildeinstellungen>, und stellen Sie sicher, dass:
Zielgerät ist auf Any Device (Beliebiges Gerät) festgelegt.
Legen Sie Microsoft HoloLens Zielgerät auf HoloLens fest.
Buildtyp ist auf D3D festgelegt.
SDK ist auf Latest installed (Neueste Installation) festgelegt.
Visual Studio-Version ist auf Zuletzt installiert festgelegt.
Build und Ausführen ist auf Lokaler Computer festgelegt.
Speichern Sie die Szene, und fügen Sie sie dem Build hinzu.
Wählen Sie hierzu Geöffnete Szenen hinzufügen aus. Ein Speicherfenster wird angezeigt.
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.
Öffnen Sie den neu erstellten Ordner Scenes , geben Sie dann im Textfeld Dateiname: MR_TranslationScene ein, und klicken Sie dann auf Speichern.
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.
Die restlichen Einstellungen in Buildeinstellungen sollten vorerst als Standard beibehalten werden.
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.
In diesem Bereich müssen einige Einstellungen überprüft werden:
Auf der Registerkarte Andere Einstellungen :
Die Skriptruntimeversion sollte stabil sein (.NET 3.5-Äquivalent).
Skripterstellungs-Back-End sollte .NET sein
API-Kompatibilitätsgrad sollte .NET 4.6 sein
Aktivieren Sie auf der Registerkarte Veröffentlichungseinstellungen unter Funktionen Folgendes:
InternetClient
Mikrofon
Wählen Sie weiter unten im Bereich unter XR-Einstellungen (unter Veröffentlichungseinstellungen) das Kontrollkästchen Virtual Reality Supported (Virtuelle Realität unterstützt) aus, und stellen Sie sicher, dass das Windows Mixed Reality SDK hinzugefügt wurde.
Zurück in den Buildeinstellungen ist Unity C#-Projekte nicht mehr ausgegraut. aktivieren Sie das Kontrollkästchen daneben.
Schließen Sie das Fenster Buildeinstellungen.
Speichern Sie Ihre Szene und Ihr Projekt (FILE > SAVE SCENE / FILE > SAVE PROJECT).
Kapitel 3 – Setup der Hauptkamera
Wichtig
Wenn Sie die Unity Setup-Komponente dieses Kurses überspringen und direkt mit dem Code fortfahren möchten, können Sie dieses UNITY-Paket herunterladen, es als benutzerdefiniertes Paket in Ihr Projekt importieren und dann in Kapitel 5 fortfahren. Sie müssen weiterhin ein Unity-Projekt erstellen.
Im Hierarchiebereich finden Sie ein Objekt namens Hauptkamera. Dieses Objekt stellt Ihren "Kopf"-Standpunkt dar, sobald Sie sich in Ihrer Anwendung "befinden".
Wählen Sie vor dem Unity-Dashboard das Hauptkamera-GameObject aus. Sie werden feststellen, dass im Inspektorbereich (in der Regel rechts im Dashboard) die verschiedenen Komponenten dieses GameObject angezeigt werden, wobei die Transformation oben, gefolgt von Kamera und einigen anderen Komponenten angezeigt wird. Sie müssen die Transformation der Hauptkamera zurücksetzen, damit sie richtig positioniert ist.
Wählen Sie dazu das Zahnradsymbol neben der Komponente Transformieren der Kamera und dann Zurücksetzen aus.
Die Transformationskomponente sollte dann wie folgt aussehen:
Die Position ist auf 0, 0, 0 festgelegt.
Die Drehung ist auf 0, 0, 0 festgelegt.
Und Die Skalierung ist auf 1, 1, 1 festgelegt.
Sehen Sie sich als Nächstes bei ausgewähltem Hauptkameraobjekt die Schaltfläche Komponente hinzufügen ganz unten im Inspektorbereich an.
Wählen Sie diese Schaltfläche aus, und suchen Sie (indem Sie audio source in das Suchfeld eingeben oder in den Abschnitten navigieren) nach der Komponente Audioquelle , wie unten gezeigt, und wählen Sie sie aus (das Drücken der EINGABETASTE funktioniert auch).
Wie unten gezeigt wird, wird der Hauptkamera eine Audioquelle-Komponente hinzugefügt.
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" – Hexadynmalfarbe: #000000000.
Kapitel 4: Einrichten der Debugcanvas
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.
Klicken Sie mit der rechten Maustaste in einen leeren Bereich des Hierarchiebereichs, und fügen Sie unter der Benutzeroberfläche eine Canvas hinzu.
Wenn das Canvas-Objekt ausgewählt ist, ändern Sie im Inspektorbereich (innerhalb der Komponente "Canvas" den Rendermodus in Weltbereich.
Ändern Sie als Nächstes die folgenden Parameter in der Rect-Transformation des Inspektorbereichs:
POS - X 0 Y 0 Z 40
Breite - 500
Höhe - 300
Maßstab - X 0,13 Y 0,13 Z 0,13
Klicken Sie im Hierarchiebereich unter der Benutzeroberfläche 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.
Klicken Sie im Hierarchiebereich unter der Benutzeroberfläche mit der rechten Maustaste auf das Panel, 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).
Wählen Sie es für jedes Textobjekt aus, und verwenden Sie die folgenden Tabellen, um die Parameter im Inspektorbereich festzulegen.
Für die Rect Transform-Komponente :
Name Transformieren – Position Width Height 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 Für die Text (Skript)- Komponente:
Name Text FontSize MicrophoneStatusLabel Mikrofonstatus: 20 AzureResponseLabel Azure-Webantwort 20 DictationLabel Sie haben gerade gesagt: 20 TranslationResultLabel Übersetzung: 20 Legen Sie außerdem den Schriftschnitt fett fest. Dadurch ist der Text leichter zu lesen.
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 (z. B. MicrophoneStatusLabel) klicken, und wählen Sie dann UI und dann Text aus.
Wählen Sie sie für jedes dieser untergeordneten Elemente aus, und verwenden Sie die folgenden Tabellen, um die Parameter im Inspektorbereich festzulegen.
Für die Rect Transform-Komponente :
Name Transformieren – Position Width Height 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 Für die Text (Skript)- Komponente:
Name Text FontSize MicrophoneStatusText ?? 20 AzureResponseText ?? 20 DictationText ?? 20 TranslationResultText ?? 20
Wählen Sie als Nächstes die Ausrichtungsoption "zentrieren" für jede Textkomponente aus:
Um sicherzustellen, dass die untergeordneten Textobjekte der Benutzeroberfläche leicht lesbar sind, ändern Sie ihre Farbe. Klicken Sie dazu auf die Leiste (derzeit "Schwarz") neben Farbe.
Ändern Sie dann im neuen, kleinen Farbfenster die Hexadezimalfarbe in 0032EAFF.
Unten sehen Sie, wie die Benutzeroberfläche aussehen sollte.
Im Hierarchiebereich:
In den Szenen - und Spielansichten:
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.
- Das Mikrofon status.
- Das Ergebnis des Diktats (Sprache in Text).
- Das Ergebnis der Übersetzung.
So erstellen Sie diese Klasse:
Klicken Sie mit der rechten Maustaste in den Projektbereich, und klicken Sie dann auf Ordner erstellen>. Nennen Sie den Ordner Skripts.
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.
Doppelklicken Sie auf das neue Ergebnisskript , um es mit Visual Studio zu öffnen.
Fügen Sie die folgenden Namespaces ein:
using UnityEngine; using UnityEngine.UI;
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;
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; }
Fügen Sie abschließend 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; }
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, ist MicrophoneManager.
Diese Klasse ist für Folgendes zuständig:
- Erkennen des an das Headset oder den Computer angeschlossenen Aufzeichnungsgeräts (je nachdem, was die Standardeinstellung ist).
- Erfassen Sie die Audiodaten (Stimme), und verwenden Sie diktieren, um sie 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:
Doppelklicken Sie auf den Ordner Skripts , um ihn zu öffnen.
Klicken Sie mit der rechten Maustaste in den Ordner Skripts, und klicken Sie auf C#-Skript erstellen>. Nennen Sie das Skript MicrophoneManager.
Doppelklicken Sie auf das neue Skript, um es mit Visual Studio zu öffnen.
Aktualisieren Sie die Namespaces oben in der MicrophoneManager-Klasse so, dass sie mit den folgenden identisch sind:
using UnityEngine; using UnityEngine.Windows.Speech;
Fügen Sie dann die folgenden Variablen innerhalb 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;
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"); } }
Sie können die Update()-Methode löschen, da diese Klasse sie nicht verwendet.
Nun benötigen Sie die Methoden, die die App zum Starten und Beenden der Sprachaufnahme verwendet, und übergeben 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 sie nicht verwendet, wurde hier auch die StopCapturingAudio() -Methode bereitgestellt, wenn Sie die Möglichkeit implementieren möchten, die Audioaufzeichnung in Ihrer Anwendung zu beenden.
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)); }
Achten Sie darauf, ihre Änderungen in Visual Studio zu speichern, bevor Sie zu Unity zurückkehren.
Warnung
An diesem Punkt wird ein Fehler im Unity-Editor-Konsolenbereich 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 werden.
Kapitel 7: Aufrufen von Azure und Übersetzerdienst
Das letzte Skript, das Sie erstellen müssen, ist die Translator-Klasse .
Diese Klasse ist für Folgendes zuständig:
- 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.
- Empfangen Sie das übersetzte Ergebnis, und übergeben Sie es an die Results-Klasse , die auf der Benutzeroberfläche visualisiert werden soll.
So erstellen Sie diese Klasse:
Wechseln Sie zum Ordner Skripts, den Sie zuvor erstellt haben.
Klicken Sie im Projektbereich mit der rechten Maustaste auf C#-Skript erstellen>. Rufen Sie das Skript Translator auf.
Doppelklicken Sie auf das neue Translator-Skript , um es mit Visual Studio zu öffnen.
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;
Fügen Sie dann die folgenden Variablen in 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 Aufzählung der Sprachen eingefügten Sprachen sind nur Beispiele. Fühlen Sie sich frei, mehr hinzuzufügen, wenn Sie möchten. die API unterstützt über 60 Sprachen (einschließlich Klingonisch)!
- Es gibt eine interaktivere Seite, die die verfügbaren Sprachen abdeckt. Beachten Sie jedoch, dass die Seite nur funktioniert, wenn die Websitesprache auf "" festgelegt ist (und die Microsoft-Website wahrscheinlich in Ihre Muttersprache umgeleitet wird). Sie können die Websitesprache am unteren Rand der Seite oder durch Ändern der URL ändern.
- Der AuthorizationKey-Wert im obigen Codeausschnitt muss der Schlüssel sein, den Sie beim Abonnieren der Azure-Textübersetzungs-API erhalten haben. Dies wurde in Kapitel 1 behandelt.
Code für die Methoden Awake() und Start() muss jetzt hinzugefügt werden.
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 durchführen.
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 GetTokenCoroutine()-Methode der IEnumerator-Methode bearbeiten, müssen Sie die Aufrufzeichenfolgenwerte StartCoroutine und StopCoroutine im obigen Code aktualisieren. Wie in der Unity-Dokumentation beschrieben, müssen Sie zum Beenden einer bestimmten Coroutine die Zeichenfolgenwertmethode verwenden.
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-Textübersetzungs-API gesendet werden soll, und verwendet dann die interne Unity UnityWebRequest-Klasse, um einen "Get"-Aufruf an den Endpunkt mit der Abfragezeichenfolge zu senden. 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); } }
Achten Sie darauf, ihre Änderungen in Visual Studio zu speichern, bevor Sie zu Unity zurückkehren.
Kapitel 8: Konfigurieren der Unity-Szene
Klicken Sie im Unity-Editor auf die Results-Klasse, und ziehen Sie sie aus dem Ordner Skripts in das Objekt Hauptkamera im Hierarchiebereich.
Klicken Sie auf die Hauptkamera , und sehen Sie sich den Inspektorbereich an. Sie werden feststellen, dass in der neu hinzugefügten Skriptkomponente vier Felder mit leeren Werten vorhanden sind. Dies sind die Ausgabeverweise auf die Eigenschaften im Code.
Ziehen Sie die entsprechenden Text-Objekte aus dem Hierarchiebereich in diese vier Slots, wie in der folgenden Abbildung dargestellt.
Klicken Sie als Nächstes auf die Translator-Klasse , und ziehen Sie sie aus dem Ordner Skripts in das Hauptkameraobjekt im Hierarchiebereich.
Klicken Sie dann auf die MicrophoneManager-Klasse , und ziehen Sie sie aus dem Ordner Skripts in das Objekt Hauptkamera im Hierarchiebereich.
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.
Kapitel 9 – Testen in Mixed Reality
An diesem Punkt müssen Sie testen, dass die Szene ordnungsgemäß implementiert wurde.
Stellen Sie sicher, dass:
- Alle in Kapitel 1 erwähnten Einstellungen sind richtig festgelegt.
- Die Skripts Results, Translator und MicrophoneManager sind an das Hauptkameraobjekt angefügt.
- Sie haben Ihren Azure-Textübersetzungs-API-Dienstschlüssel in der Variablen authorizationKey innerhalb des Translator-Skripts platziert.
- Alle Felder im Hauptkameraprüfungsbereich sind ordnungsgemäß zugewiesen.
- Ihr Mikrofon funktioniert, wenn Sie Ihre Szene ausführen (falls nicht, überprüfen Sie, ob das angeschlossene Mikrofon das Standardgerät ist und ob Sie es in Windows ordnungsgemäß eingerichtet haben).
Sie können das immersive Headset testen, indem Sie im Unity-Editor auf die Schaltfläche Wiedergabe klicken. 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 an der Art und Weise, wie das Mixed Reality-Portal mit integrierten Mikrofonen für Headsets umgeht, die über diese verfügen. Wenn dieser Fehler angezeigt wird, beenden Sie einfach die Szene, und starten Sie sie erneut. Dies sollte 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, ist nun abgeschlossen, sodass es an der Zeit ist, es über Unity zu erstellen.
Navigieren Sie zu Buildeinstellungen: Dateibuildeinstellungen > ...
Klicken Sie im Fenster Buildeinstellungen auf Erstellen.
Wenn noch nicht geschehen, markieren Sie Unity C#-Projekte.
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. Klicken Sie dann bei ausgewähltem App-Ordner auf Ordner auswählen.
Unity beginnt mit dem Erstellen Ihres Projekts im Ordner App .
Sobald 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 es möglicherweise nicht immer über Ihren Fenstern angezeigt wird, aber Sie über das Hinzufügen eines neuen Fensters informiert).
Kapitel 11: Bereitstellen Ihrer Anwendung
So stellen Sie Ihre Anwendung bereit:
Navigieren Sie zu Ihrem neuen Unity-Build (dem Ordner App ), und öffnen Sie die Projektmappendatei mit Visual Studio.
Wählen Sie unter Projektmappenkonfiguration die Option Debuggen aus.
Wählen Sie auf der Lösungsplattform x86, Lokaler Computer aus.
Für die Microsoft HoloLens ist es möglicherweise einfacher, dies auf Remotecomputer festzulegen, damit 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 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.
Wechseln Sie zum Menü Erstellen , und klicken Sie auf Lösung bereitstellen , um die Anwendung auf Ihren PC querzuladen.
Ihre App sollte nun in der Liste der installierten Apps angezeigt werden, die zum Starten bereit sind.
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.
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.
Bonusü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 ("from" und "to") innerhalb der App selbst zu ändern, damit die App nicht jedes Mal neu erstellt werden muss, wenn Sie die Sprache ändern möchten.