IBM Watson in Unity

Gefällt Dir der Artikel? Dann teile ihn doch, um diese Informationen auch anderen zugänglich zu machen!

Seiteninhalt

In diesem Tutorial zeige ich dir wie du mit Hilfe des Watson SDK die Vorteile von IBM Watson direkt in Unity verwenden kannst. Wir werden unter anderem die Spracheingabe, Sprachausgabe und eine Sprachübersetzung programmieren.

Intro – Spracherkennung, Übersetzung und mehr

Watson ist ein Computerprogramm von IBM aus dem Bereich der künstlichen Intelligenz. Vielleicht kennst du Watson auch schon aus den verschiedenen Werbespots oder aus dem Video als Watson bei der Quiz-Sendung Jeopardy gewonnen hat.

Um nun Watson in Unity zu verwenden musst du dir zuerst das SDK in dein Unity Projekt importieren. Als Beispiel nehme ich hierfür ein komplett leeres Projekt. Das Watson SDK findest du direkt im Unity Asset Store. Lade es herunter und importiere es in dein Unity Projekt. Weitere Infos findest du auch auf der Github Seite zum SDK.

Nachdem du das Watson SDK in dein Unity Projekt importiert hast erhältst du einen Warnhinweis, dass du dir zuerst einen IBM Account erstellen musst. Ein solche Account ist vollkommen kostenfrei und du kannst ihn dir direkt bei IBM erstellen.

Im nächsten Schritt sehen wir uns das Watson SDK einmal genauer an. Im SDK selbst findest du verschiedene Unterordner und Beispiele. Einige dieser Beispiele können wir in unserer Videoreihe auch verwenden. Öffne im Ordner Assets > Watson > Examples > ServiceExamples die Scene “ExampleStreaming”. Dieses Beispiel verfügt bereits über ein Canvas zur Ausgabe von Inhalten und einem Skript das die Verbindung zur Watson API aufbaut. Bevor du aber nun Anfragen an die Watson API senden kannst ist ein API-Key notwendig. Diesen erhältst du sobald du eine entsprechende App im IBM Dashboard hinzufügst. Navigiere dazu zu Apps > App erstellen und erstelle deine erste App. Innerhalb dieser App werden alle Ressourcen wie Text to speech oder auch der language translator hinzugefügt. Für jede Ressource erhältst du unterschiedliche Logindaten. Im nächsten Video werden wir uns eine Speech to text Ressource hinzufügen und die Spracheingabe in Unity testen.

Diktierfunktion / Spracheingabe erstellen (speech to text)

Im letzten Abschnitt haben wir das Watson SDK in Unity importiert und einen IBM Account mit einer App angelegt. In diesem Abschnitt legen wir uns jetzt eine speech to text Ressource an und testen den Aufruf an die Watson API direkt in Unity.

Selektiere im IBM Dashboard deine App und füge eine neue Ressource hinzu. Wähle hier speech to text. Achte darauf, dass du es nicht mit text to speech verwechselt, denn sonst funktioniert unser Beispiel nicht. Erstelle nun deine Ressource und speichere dir die angezeigten Logindaten zwischen.

Öffne nun in Unity die Beispielscene “ExampleStreaming” und selektiere das game object “ExampleStreaming”. An diesem game object befindet sich bereits ein Skript. Hier kannst du direkt über den Inspector deine Daten eingeben. Du benötigst sowohl Service Url als auch Username und Passwort. Im nächsten Schritt startest du deine Anwendung im Unity Editor über den Play Button und sprichst in dein Mikrofon. Ganz wichtig, speech to text funktioniert noch nicht in deutscher Sprache. Wenn du herausfinden möchtest für welche Sprachen es bereits verfügbar ist dann findest du hier weitere Informationen.

Mit einem kostenlosen Account kannst du 100 Minuten pro Monat per Watson API versenden und analysieren lassen. Details zu den Preisen findest du hier.

Sprachausgabe (text to speech)

Im letzten Abschnitt haben wir das erste Mal die Watson API aus Unity heraus angesteuert. Dafür haben wir die speech to text Ressource verwendet. In diesem Abschnitt drehen wir das ganze um und verwenden die text to speech Ressource. Damit haben wir also eine Sprachausgabe für von uns gewählte Texte und Wörter.

Im ersten Schritt erstellst du dir eine neue Ressource innerhalb deiner App. Diesmal selektierst du hier “text to speech” und speicherst dir wieder deine Daten um auf die API zuzugreifen zwischen. Danach öffnest du dein Unity-Projekt und in den ServiceExamples > Scripts findest du ein Skript mit dem Namen “ExampleTextToSpeech”. Dieses Skript funktioniert leider nicht mit einem IBM free Account. Teste das am besten gleich in deinem Projekt und schau was passiert. Erstelle dir dazu ein leeres game object und verknüpfe hier das ExampleTextToSpeech-Script. Jetzt noch deine Benutzerdaten angeben und schon kannst du die Anwendung starten.

Öffne bei gestartetem Projekt die Unity Console und überprüfe die einzelnen Meldungen. Du siehst nun eine Meldung, dass “Customizations” nicht mit dem free Account möglich sind. Die erwähnten Customizations sind aber für unser Beispiel eigentlich überhaupt nicht wichtig, jedoch ist das Skript so aufgebaut, dass automatisch auf diese Funktion zurückgegriffen wird. Daher werden wir jetzt das originale Skript “ExampleTextToSpeech” etwas abändern. Erstelle dir dazu am besten ein komplett neues C#-Skript in deinem Unity Assets Ordner und vergib einen beliebigen Namen (z.B. MyTextToSpeech). Danach kopierst du den kompletten Inhalt des ExampleTextToSpeech in dein neues Skript und änderst den Namen der Klasse auf deine Klasse um.

Wie bereits erwähnt ist das Problem die Customization. Begebe dich in dein Skript, ab Zeile 140 sollte der Code mit der Customization beginnen. Alles was damit zu tun hat kannst du auskommentieren. Speichere danach dein Skript und teste es erneut. Jetzt solltest du ein positives Feedback erhalten und der Beispieltext aus dem Skript wird dir in englischer Sprache vorgelesen.

Jetzt kannst du auch den Text der vorgelesen werden soll abändern. Dies geht direkt über das Skript. Du könntest für diese Zeichenkette auch eine Variable anlegen und den Text dann aus einem bestimmten Feld auslesen, das bleibt ganz dir überlassen. Wichtig ist nur, dass du hier in deinem Skript eine Zeichenkette an Watson übergibst. Ändere also die Zeichenkette und teste es erneut.

Super, auch das funktioniert! Nun kannst du bei der Sprachausgabe nicht nur den Sprecher ändern sonder auch die Sprache. Wir werden jetzt einmal beides machen. Dazu ist die API Dokumentation zu text to speech sehr hilfreich. Hier findest du sowohl die verfügbaren Sprecher als auch die unterstützten Sprachen. Wähle einen oder eine alternative Sprecherin aus und ersetze die einzelnen Zeilen in deinem Skript. Ganz wichtig, die Schreibweise ist nicht exakt gleich der Schreibweise in der API.

Mit der Änderung des Sprechers kannst du jetzt deine Anwendung erneut testen. Sobald dies funktioniert kannst du auch direkt die Sprache z.B. auf deutsch wechseln, einen Satz in deutscher Sprache eingeben und einen oder eine deutsche Sprecherin wählen. Wenn du alles nach deinen Vorstellungen geändert hast, dann kannst dein Unity Projekt über den Play Button erneut starten und testen.

Soviel also zur Möglichkeit wie du die Sprachausgabe über das Watson SDK in Unity verwenden kannst. Mit dem free Account kannst du bis zu 10.000 Zeichen pro Monat kostenlos abfragen. Weitere Infos zu den Preise bezüglich text to speech findest du hier.

Sprachübersetzer verwenden

Willkommen zurück! Nachdem du nun sowohl speech to text als auch text to speech per Watson API in Unity verwenden kannst. Werden wir in diesem Video einen Sprachübersetzer programmieren. Das bedeutet, dass wir eine Zeichenkette z.B. in englischer Sprache haben und diese auf spanisch übersetzen lassen.

Begebe dich dazu wieder in dein IBM Watson Dashboard und erstelle eine neue Ressource. Diesmal selektierst du “language translator” und speicherst die Anmeldedaten wieder zwischen. Danach öffnest du Unity und erstellst dir ein neues C#-Skript. Ein funktionierendes Beispiel habe ich im Watson SDK für Unity nicht gefunden, daher programmieren wir jetzt unser eigenes Skript.

				
					using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using IBM.Watson.DeveloperCloud.Services.LanguageTranslator.v3;
using IBM.Watson.DeveloperCloud.Logging;
using IBM.Watson.DeveloperCloud.Utilities;
using IBM.Watson.DeveloperCloud.Connection;
using System;

public class MyLanguageTranslator : MonoBehaviour {

    // Variablen
    public Text responseText; // => EN
    public Text originalText; // DE =>

    // Login Daten
    public string url, username, password;
    public string versionDate;

    public string translationModel;

    // Language Translator
    private LanguageTranslator myTranslator;

	// Use this for initialization
	void Start ()
    {
        // Login Daten in Objekt erstellen
        Credentials myCredentials = new Credentials()
        {
            Username = username,
            Password = password,
            Url = url
        };

        // Neuen Translator erstellen
        myTranslator = new LanguageTranslator(versionDate, myCredentials);

        // Übersetzung ausführen
        Translate(originalText.text);
	}
	
	// Update is called once per frame
	void Update () {
		
	}

    public void Translate(string text)
    {
        // Übersetzung starten
        myTranslator.GetTranslation(OnTranslate, OnFail, text, translationModel);
    }

    private void OnFail(RESTConnector.Error error, Dictionary<string, object> customData)
    {
        print("Error: " + error.ToString());
    }

    private void OnTranslate(Translations response, Dictionary<string, object> customData)
    {
        responseText.text = response.translations[0].translation;
    }
}
				
			

Knüpfe das neues Skript an ein leeres game object und trage deine Anmeldedaten über den Unity Inspector ein. Das Spiel mit Url, Usernamen und Passwort kennst du bereits. Beim Sprachübersetzer gibt es jetzt hier noch zwei weitere Parameter die wichtig sind: Version und Translation Model. Mit Version ist das Datum der verwendeten API gemeint, du findest dieses immer auf der Startseite der jeweiligen API Version, z.B. hier. Das Translation Model besteht aus Spracheingabe und Sprachausgabe, Beispiele hierfür wären: en-es (von englisch nach spanisch) oder de-en (von deutsch nach englisch). Zu guter letzt verlinkst du noch dein Textfeld mit dem Skript. Auf diesem wird dann auch das Ergebnis der Übersetzung angezeigt. Wenn du dich fragst welche Sprachen du verwenden kannst dann findest du hier eine Demo mit den möglichen Sprachen.

Mit der free Version kannst du 1.000.000 Zeichen kostenlos übersetzen lassen. Weitere Infos zum Pricing für den language translator findest du hier.

Hinweis: Du willst in der 3D-Entwicklung durchstarten? Dann teste jetzt nobreakpoints Pro. Dort lernst du in zahlreichen Online-Kursen und Workshops alle nötigen Skills.

Free

Trial

Keine Extra-Kosten.
Unverbindlich testen.

Bereit, deinen Weg in die 3D-Entwicklung zu starten?

Gefällt Dir der Artikel? Dann teile ihn doch, um diese Informationen auch anderen zugänglich zu machen!

Weitere Blogartikel

Bereit, deinen Weg in die 3D-Entwicklung zu starten?

Lerne in Rekordzeit alle nötigen Skills für Game Development, VR und AR – praxisnah und flexibel in deinem Tempo!

Suche

Bereit, deinen Weg in die 3D-Entwicklung zu starten?

Lerne in Rekordzeit alle nötigen Skills für Game Development, VR und AR – praxisnah und flexibel in deinem Tempo!