Hallo, Computer….bist Du da?

Neulich so am Pinephone:

„Sophia, wie wird das Wetter morgen?“

Sophia: „Die Wetteraussichten für Morgen in Braunschweig : Morgens wird es Bedeckt 18 Grad Celsius. Mittags wird es Bedeckt 21 Grad Celsius. Abends wird es Leicht Bewölkt 22 bis 25 Grad Celsius. in der Nacht wird es Leicht Bewölkt 18 Grad Celsius“

Personal Voice Assistant für Linux

Ja, mein Pinephone redet jetzt mit mir und dafür gibt es einen Grund, es hört nämlich auch aufs Wort \o/

Möglich macht das die Spracherkennung Vosk und die Sprachmodelle von Alphacephei. Das besondere daran ist, es funktioniert lokal ohne Internetanbindung und es ist vergleichsweise schlank. Schlank genug jedenfalls, daß es auf einem Pinephone starten kann und gute Ergebnisse bekommt 🙂 Wo massiv viel Licht ist, ist natürlich auch Schatten: 100% auf einem Core des Pinephones sind normal und damit ist die Batterie leider sehr schnell, sehr leer 🙂

Was braucht man alles dafür?

Da die Lösung auch auf dem Desktop läuft, stell Ihr Euch jetzt natürlich die Frage, wo und wie Ihr die Software installiert. Ihr könnt zwar die Spracherkennung und die Sprachausgabe schon haben, aber leider ist „Sophia PVA“ noch nicht als Source verfügbar, weil ich da gerade die Alpha Version schreibe 😉

Hinweis: Wir benutzen hier Fedora 33/35.

Wir brauchen:

  • Python3
  • pip3
  • portaudio
  • mbrola
  • espeak
    vosk

Espeak:

sudo dnf  -y install espeak

Es könnte aber gut, das es auf Eurem PC schon drauf ist 😉

Mbrola:

Wie man Mbrola installiert könnte Ihr hier lesen:

Mbrola – etwas bessere Sprachsynthese

Von der Anleitung braucht Ihr auch mindestens das „say“ Bashscript und leider eine neue Version, denn aplay zickt rum. Ändert es von:

mbrola -t 1.2 -f 0.8 /usr/share/mbrola/$VOICE/$VOICE /tmp/out.pho -.au | aplay 1>/dev/null 2>/dev/null

nach:

FILENAME=/tmp/mbrola$RANDOM.wav
mbrola -t 1.2 -f 0.8 /usr/share/mbrola/$VOICE/$VOICE /tmp/out.pho $FILENAME
aplay $FILENAME 1>/dev/null 2>/dev/null

dann geht es wieder.

Python3 + Pip3 + portaudio

pip3 install sounddevice
sudo dnf install python3-pyaudio espeak

Vosk:

Wenn man das für den Desktop haben will:

pip3 install vosk

Wenn man es auf den Pine haben will, geht nur eine Beta:

pip3 install https://github.com/alphacep/vosk-api/releases/download/v0.3.30/vosk-0.3.30-py3-none-linux_aarch64.whl

Die Version 0.3.30 könnte sich natürlich bereits geändert haben, da müßt Ihr selbst mal nachsehen.

Das Sprachmodell

Das für Euch passende Sprachmodell kann man hier finden, ich nehme an Ihr wollt Deutsch mit Eurem PC reden 😉 : https://alphacephei.com/vosk/models

Es gibt große und kleine Modelle, die unterscheiden sich in den gelernten Sprachumfang, daher empfehle ich für den PC die große Deutschversion: https://alphacephei.com/vosk/models/vosk-model-de-0.6.zip

Nun noch installieren ( achtet auf die roten Zeilen, die müßt Ihr anpassen, die sind fürs Pine ):

mkdir Programme
cd Programme/
mkdir vosk
cd vosk/
git clone https://github.com/alphacep/vosk-api
cd vosk-api/python/example/
unzip vosk-model-small-de-0.15.zip
ln -s vosk-model-small-de-0.15 model
./test_microphone.py

Und schon läuft Eure Spracherkennungssoftware. Ihr könnt losreden 🙂

Diese Software tut nichts, außer Euch anzuzeigen, was Ihr sagt. Damit trainiert Ihr Euch. Der Personal Voice Assistent namens Sophia, der ist eine andere Sache:

Jetzt hat so ein Voice Assistent keine Oberfläche , also kann man Euch nichts außer seinen Taten zeigen:

auf der Konsole sieht dies so aus:

Nicht für mich gedacht:
 spiele musik ab
Nicht für mich gedacht:vielen danke
Nicht für mich gedacht:ich helfe gerne
Nicht für mich gedacht:können
Nicht für mich gedacht:hm
stelle eine verbindung mit wolfgang her
Ich habe stelle eine verbindung mit wolfgang her nicht verstanden
Nicht für mich gedacht:das hatte schon anwendungen oder zumindest verstanden
Nicht für mich gedacht:klar

Sophia (so heißt mein PVA auf dem Pinephone 😉 ) kann:

Musik suchen und abspielen
Dokumente wie PDF,Text,Calc,Word suchen und öffnen
Videos suchen und abspielen
Musik starten, stoppen und die Lautstärke anpassen
Es weiß was Netflix bedeutet
sagt das aktuelle oder morgige Wetter an
öffnet Firefox, Blender und noch ein paar andere Programme 😉

außerdem kann Sie sich auf Zuruf selbst kompilieren, das macht das Programmieren echt einfacher 😀

Alle Musik nicht mehr selbst suchen zu müssen, sondern suchen zu lassen inklusive Abspielen, ist Gold wert sag ich Euch 😉 Sophia ist in Java geschrieben, also ein Bruch mit dem Pyhonframework Vosk, aber das macht rein gar nicht, da man ja eh nur die Texte braucht 😉

Das gibt einen hübschen Wettlauf, wenn Ihr jetzt alle PVAs programmiert und ins Netz stellt. Weil das absehbar passieren wird, habe ich bei Purism, auch ein bisschen als Scherz, einen Verbesserungsvorschlag gepostet, dafür doch einen ein/aus Button ins Panel zu integrieren 😉

Auf dem Pinephone

müßt Ihr unbedingt darauf achten, den wieder auszumachen. Es schluckt mit meisten 100% von einem Core doch sehr viel Leistung und damit Strom. Die Spracherkennungsleistung ist allerdings besser als auf dem Desktop, was am kleineren Modell liegen könnte.

Außerdem ist das so eine Sache mit Alice Cooper und dem Pinephone, da sitzt der Lautsprecher einfach viel zu dicht am Mikro, was es für Sprache dann taub macht, also ist er als Musikassistent bauartbedingt nicht so richtig brauchbar.

Mbrola – etwas bessere Sprachsynthese

ESpeak kennt Ihr sicher alle. Diese Roboterstimme, die beim Desktop dabei ist, damit sehbehinderte Menschen einen Bildschirmleser haben können. Jetzt ist espeak aber nicht wirklich toll 🙂

Mbrola – etwas bessere Sprachsynthese

Mbrola wird in einigen Distors, wie bspw. Fedora, nicht ausgeliefert, da die Lizenzen und deren Verständnis dies nicht zu lassen. Wer das selbst austesten möchte, kann sich die nötigen Files hier runterziehen:

https://github.com/numediart/MBROLA

https://github.com/numediart/MBROLA-voices

Mbrola muß kurz kompiliert werden, aber das ist selbst für Anfänger leicht zu meistern, weil es kein kompliziertes Buildsystem gibt und man eigentlich nur den GCC Compiler und CMAKE auf dem Rechner installiert haben muß. Ich bin mir ganz sicher, daß Ihr das alleine schafft 🙂

Nicht? na ok: „cd MBROLA-master; make; cp Bin/mbrola /usr/local/sbin/“ das wars 😀

Die Stimmen kommen nach /usr/shar/mbrola/ , die muß man nicht extra kompilieren.

Um espeak kommt man leider nicht rum

Da mbrola keine Übersetzung von geschriebenem Text in Phonetische Abbildungen macht, muß man das espeak machen lassen. Damit Euch das nicht über den Kopf wächst, habe ich da mal was vorbereitet:

/usr/local/sbin/say:

#!/bin/bash

if [ „$VOICE“ == „“ ]; then
      VOICE=“de5″
fi

if [ ! -f „$1“ ]; then
      espeak -v mb-$VOICE -q –pho –phonout=/tmp/out.pho „$1“
else
      A=$(cat „$1“)
      espeak -v mb-$VOICE -q –pho –phonout=/tmp/out.pho „$A“
fi

mbrola -t 1.2 -f 0.8 /usr/share/mbrola/$VOICE/$VOICE /tmp/out.pho -.au | aplay 1>/dev/null 2>/dev/null
rm -f /tmp/out.pho

Die Datei noch mit chmod 755 aufrufbar machen und wir sind fertig.

Um die Anwendung zu vereinfachen kann man entweder eine Datei als Argument angeben oder den Text:

say „Ich bin ein Roboter.“

say Bunte-Schafe-von-Arthur-Miller.txt

Die Stimme ist auf die de5 Stimme voreingestellt, es geht aber auch jede andere Sprache:

env VOICE=de7 say text

Die Aussprache kann man noch stark verbessern. Beispiel: Das Wort „Zumutung“.Versucht mal diesen Satz:

say „Dies ist eine Zumutung“

und dann schreibt ihn mal so:

say „Diehs ihst eine Zumuhtung“

Ihr werdet den Unterschied heraushören können. Genauso ist es mit „gähnt“ und „gehnt“, weil das „ä“ überbetont wird. Es klingt wirklich besser es pauschal mit „e“ zu ersetzen. Wenn man sich dann erst einmal eine Datenbank mit „besseren“ Worten zusammen gesetzt hat, kann man das Script so erweitern, daß vor dem espeak aufruf, erst noch die Ersetzung passiert. Von einer SED Orgie kann ich aber nur abraten. Lasst dies besser ein spezialisiertes Programm wie „replace“ machen oder schreibt gleich ein eigenes kleines C Tool, daß sich eine Art Datenbank einliest.

Viel Spaß damit 😀