Josi.de

Google Wavenet und Node-RED

Intelligente Sprachausgabe auf meinen Google Home Minis

Willkommen zurück, liebe Leserinnen und Leser! Heute möchte ich euch zeigen, wie ich mit Hilfe des Node-RED-Plugins „node-red-contrib-wavenet“ auf meinen Google Home Minis intelligente Sprachausgaben generiere. Diese spannende Integration eröffnet vielfältige Möglichkeiten, um automatisierte Benachrichtigungen, personalisierte Nachrichten und mehr auf meinen Google Home-Geräten wiederzugeben. Entstanden ist diese Lösung, um mir zum Beispiel mitzuteilen, wenn die Waschmaschine im Keller fertig ist (Dazu später in einem weiteren Post)!

Warum Google Wavenet?

Google Wavenet ist eine bahnbrechende Technologie zur Sprachsynthese, die auf Deep Learning und neuronalen Netzwerken basiert. Die generierten Stimmen sind beeindruckend realistisch und natürlich. Indem wir Google Wavenet in Node-RED integrieren, können wir unsere eigenen personalisierten Sprachausgaben erstellen und auf unseren Google Home Minis abspielen, um die Art und Weise zu revolutionieren, wie wir mit unseren Smart Homes interagieren.

Voraussetzungen:

  • Node-RED-Installation (zum Beispiel lokal auf einem Raspberry Pi 3)
  • Google Home oder Google Nest-Mini-Geräte
  • Google Cloud Platform (GCP)-Konto mit aktivierter „Text-to-Speech API“
  • Node-RED-Plugin „node-red-contrib-wavenet“
  • Node-RED-Plugin „node-red-contrib-fs-ops“
  • Node-RED-Plugin „node-red-contrib-cast“

Schritt 1: Einrichtung der Google Cloud Platform (GCP)

  • Falls noch nicht vorhanden, erstelle ein Google Cloud Platform-Konto und aktiviere die „Text-to-Speech API“.
  • Erstelle einen Service Account und generiere die benötigten API-Schlüssel, um Zugriff auf die Sprachsynthese von Google Wavenet zu erhalten.

Schritt 2: Installation des „node-red-contrib-wavenet“-Plugins

  • Öffne Node-RED und navigiere zum „Manage Palette“-Bereich.
  • Installiere die benötigten Plugins.

Schritt 3: Den Node-RED Flow erstellen

  • Füge einen „Inject“-Node hinzu, um den manuellen Auslöser für die Sprachausgabe zu erstellen. Er erhält als Payload den Text, den du gerne auf deinen Geräten wiedergegeben haben möchtest.
  • Füge einen function-Node hinzu. Dieser soll aus dem Text im Payload einen eindeutigen Dateinamen generieren, um später den Wavenet-Stream zu speichern. Die Funktion ist hier recht einfach gehalten, letztendlich schmeiße ich nur Leerzeichen, Ausrufezeichen und Punkte raus und hänge ein ‚.mp3‘ hinten an. Für meine Fälle hat dies immer ausgereicht. (Ja, ich habe überlegt, einen md5-hash zu verwenden, anstatt unbrauchbare Zeichen rauszuwerfen. Das ist auch weiterhin eine gute Idee, allerdings wollte ich sprechende Dateinamen auf dem Filesystem haben. Das bleibt aber jedem selbst überlassen und kann entsprechend selbst gebastelt werden.)
  • Mittels den File Access-Node aus dem fs-ops-Plugin überprüfe ich, ob diese Datei bereits existiert. Ist dies der Fall, brauche ich nicht erneut Wavenet anfragen und der Text wird schneller ausgegeben.
    Ich habe dafür auf meinem Dateisystem den Pfad ‚/home/pi/audio/‘ angelegt und überprüfe hier, ob msg.filename bereits existiert/lesbar ist.
    Der Node hat 2 Ausgänge, im Fall „nicht-lesbar“ geht der Flow weiter auf dem unteren Ausgang.
  • Füge den „Wavenet“-Node hinzu und konfiguriere ihn mit deinen GCP-API-Schlüsseln und den gewünschten Einstellungen, wie z.B. der Stimme und Spracheinstellungen. Ich habe mich hier für „Ben“ entschieden, eine deutsche, männliche Stimme, reine Frage des Geschmacks. Auch die anderen Einstellungen können am Besten durch Ausprobieren gesetzt werden. Bei Audio-Encoding habe ich mich für MP3 entschieden, die Speaking rate habe ich auf den Wert 1.25 gesetzt.
  • Verbinde den Eingang vom Wavenet-Node mit dem unteren Ausgang vom File Access-Node.
  • Nach dem Wavenet-Node kommt ein Change-Node, um msg.filename mit dem Pfad ‚/home/pi/audio/‘ zu erweitern.
    Ich habe das mittels JSONata gelöst (“/home/pi/audio/‘ & msg.filename‘).
  • Jetzt wird der payload, das Ergebnis des Wavenet-Nodes, in einem write File-Node gespeichert. Ich gebe dafür msg.filename als Speicherort vor und lasse den payload an die Datei anhängen. Hier habe ich auch noch ein Häkchen bei „Verzeichnis erstellen“ gesetzt.
  • Als nächstes folgt im Flow ein Change-Node, in dem ich den Payload für den Cast vorbereite.
  • Füge einen Cast-Node hinzu, um den gerade generierten Payload an deine Google Home Minis zu senden.
//Erzeuge aus dem payload einen Dateinamen
let filename = msg.payload.split(/[\s\!\.]/).join('') + '.mp3';
msg.filename = filename;
msg.origText = msg.payload;
return msg;

Schritt 4: Der „MP3-Server“

Dieser kleine Server lauscht auf dem Pi und gibt die soeben gespeicherte mp3-Datei zurück. Das bedeutet also auch, dass der Node RED-Rechner erreichbar von den Google Homes sein sollte. Hier stehen Pi als auch Google Home Minis in einem Netzwerk, ist also über die IP-Adresse leicht erreichbar.

  • Ausgangspunkt ist ein http in-Node. Er achtet auf GET-Anfragen auf die URL ‚mp3/:name‘
  • Darauf folgt dann eine weitere Funktion, die aus der URL den Dateinamen extrahiert:
let filename = '/home/pi/audio/' + msg.req.params.name.split(/[\s\!\.]/).join('') + '.mp3';
msg.filename = filename;
return msg;
  • Mittels read file-Node wird das gespeicherte mp3 in den payload geholt. Die Ausgabe ist ein einzelnes Buffer-Objekt.
  • Zuletzt wird der Response erstellt. Dazu fügt man den http response-Node hinzu, setzt dort den StatusCode auf 200 und fügt einen Content-Type ‚audio/mp3‘ als Header hinzu.

Schritt 5: Testen und Inbetriebnahme

  • Speichere den Node-RED Flow und führe ihn aus.
  • Klicke auf den „Inject“-Node, um den Text in Sprache umzuwandeln und auf deinen Google Home Minis wiederzugeben.
  • Genieße die beeindruckend realistische und natürliche Sprachausgabe auf deinen Google Home Minis!

Fazit:

Die Integration von Google Wavenet in Node-RED mithilfe des „node-red-contrib-wavenet“-Plugins ermöglicht es uns, unsere smarten Sprachausgaben auf ein neues Level zu heben. Mit dieser leistungsfähigen Technologie können wir personalisierte Benachrichtigungen, Begrüßungen, Erinnerungen und vieles mehr erstellen. Die nahtlose Verbindung von Node-RED mit unseren Google Home Minis eröffnet uns eine Welt voller smarter Möglichkeiten. In meinem Haushalt habe ich schon einige Sachen, die ausgegeben werden. Probiere es selbst aus und erlebe die Zukunft der Sprachausgabe in deinem Smart Home! Vielen Dank fürs Lesen und viel Spaß beim Experimentieren!

In diesem Artikel sind Partnerlinks enthalten. Durch einen Klick darauf ge­lan­gt ihr direkt zum Anbieter. Solltet ihr euch dort für einen Kauf entscheiden, erhalten wir ei­ne kleine Provision. Für euch ändert sich am Preis nichts. Partnerlinks haben keinerlei Einfluss auf unsere Berichterstattung.


Beitrag veröffentlicht

in

von

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert