Neues Modul: Text2Speech

Begonnen von Tobias, 07 Januar 2014, 12:57:23

Vorheriges Thema - Nächstes Thema

mumpitzstuff

#990
Zitat von: Ellert am 26 April 2019, 16:30:04
Die Umlaute funktionieren jetzt auch bei mir wieder.

Ein bestehendes Problem bleibt die Trennung bei "und".

Ein Beispiel, hörbar im Anhang:
Ich habe keinen Grund zugehen aber Du gehst immer wieder grundlos oder ist es weil du rundlich bist oder was ist los mit dir und deinem Hund Marie

Edit:
Die Amazon Stimme haut mich jetzt nicht vom Hocker, sie spricht ziemlich schnell und hat kaum Modulation in Vergleich zu Google. Das ist auch die unvoreingenommene Einschätzung meiner Frau.

Da ist vermutlich das regex nicht korrekt. Es sollte nur getrennt werden, wenn 'und' ein eigenständiges Wort ist und nicht Bestandteil eines Wortes.

Versuchs mal indem du:

@text = Text2Speech_SplitString(\@text, $ttsMaxChar{$TTS_Ressource}, "und", 0, "af");

mit

@text = Text2Speech_SplitString(\@text, $ttsMaxChar{$TTS_Ressource}, "\bund\b", 0, "af");

ersetzt.

Prof. Dr. Peter Henning

#991
Betreffend Umlaute bei Google: In den Aufruf muss natürlich das encoding auch rein,

system("wget -q --user-agent='Mozilla/5.0' \'http://translate.google.de/translate_tts?ie=UTF-8&tl=de&client=tw-ob&q=$text\' -O $file.mp3")

Das ie=UTF-8 ist also wichtig, fehlt noch im Modul - dann sollte das Umlautproblem unabhängig von der TTS-Engine gelöst sein.

Edit: Stimmt natürlich nicht - denn den Konverter habe ich ja gerade so eingesetzt, dass er von UTF-8 nach ISO8859-1 codiert (was Polly benötigt). Google benötigt aber UTF-8. Siehe weiterer Post unten.


ZitatIch habe keinen Grund zugehen aber Du gehst immer wieder grundlos oder ist es weil du rundlich bist oder was ist los mit dir und deinem Hund Marie

Pack mal Interpunktion rein - das wirkt Wunder. Etwa
ZitatIch habe keinen Grund zu gehen, aber Du gehst immer wieder grundlos - oder ist es weil du rundlich bist? Oder was ist los mit dir und deinem Hund, Marie?

Nicht unterscheiden können die Kisten bisher "Das sieht Dir ungeheuer ähnlich" und "Das sieht Dir Ungeheuer ähnlich".


LG

pah

Edit:
ZitatDie Amazon Stimme haut mich jetzt nicht vom Hocker, sie spricht ziemlich schnell und hat kaum Modulation in Vergleich zu Google.
.

Erstens kann man das mit der SSML sehr gut steuern - auch die Geschwindigkeit. Zweitens ist der Fachbegriff nicht "Modulation", sondern "Prosodie". Dass die hier fehlt, hängt mit der fehlenden Interpunktion zusammen - der Testsatz ist eben so. Beweis: Siehe oben.

ZitatDas ist auch die unvoreingenommene Einschätzung meiner Frau.

Hmmmm. Spiel ihr das mal mit der Stimme "Hans" statt "Marlene" vor.

LG

pah


Ellert

Zitat von: Prof. Dr. Peter Henning am 26 April 2019, 16:51:31
Pack mal Interpunktion rein - das wirkt Wunder
Das Beispiel ist zur Verdeutlichung gedacht. Die fehlerhafte Trennung kommt in der Praxis vor.

Ellert

Zitat von: mumpitzstuff am 26 April 2019, 16:48:58

@text = Text2Speech_SplitString(\@text, $ttsMaxChar{$TTS_Ressource}, "\bund\b", 0, "af");


Das wird nicht klappen, weil in "Text2Speech_SplitString" der Trenner wieder eingebaut wird und dann stört \b.

Es gibt schon einen Patch, der ist aber etwas komplexer: https://forum.fhem.de/index.php/topic,18481.msg659665.html#msg659665

Tobias

Danke, werd ich die Tage noch einbauen


Gesendet von iPhone mit Tapatalk
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Prof. Dr. Peter Henning

Ich halte von diesen künstlichen Trennern wenig. In dem Code hier https://forum.fhem.de/index.php/topic,99792.0.html nehme ich den Ausgangstext an Hand der Worte auseinander und setze ihn dann wieder zusammen. Aber zu einzelnen Speechlets, deren jedes höchstens die gewünschte Länge hat. Ist auch viel einfacher, als der andere Patch.

LG

pah

mumpitzstuff

#996
Wenn ich auf Polly umschalte bekomme ich mehrmals folgende Warnings:

2019.04.26 17:56:35 1: PERL WARNING: Use of uninitialized value within %ttsUser in numeric gt (>) at ./FHEM/98_Text2Speech.pm line 460.
2019.04.26 17:56:35 1: PERL WARNING: Use of uninitialized value within %ttsAPIKey in numeric gt (>) at ./FHEM/98_Text2Speech.pm line 459.


Es erfolgt keine weitere Ausgabe im Logfile und eine Sprachausgabe gibt es auch nicht. Schalte ich auf Google um, dann kommt meine Testausgabe wieder.

Mir ist auch nicht klar wozu ich das brauchen sollte bei Polly, denn die credentials sind bereits abgelegt. Zudem wird ein Username gar nicht benötigt.

return "No APIKey specified"                  if (!defined($TTS_APIKey) && defined($ttsAPIKey{$TTS_Ressource}) && length($ttsAPIKey{$TTS_Ressource})>0);
  return "No Username for TTS Access specified" if (!defined($TTS_User) && defined($ttsUser{$TTS_Ressource}) && length($ttsUser{$TTS_Ressource})>0);


Damit komme ich erst mal drüber.

Danach fehlt oben ein:

use paws;

Dummerweise findet Perl bei mir die Bibliothek nicht, obwohl ich siw installiert habe. Habe auch schon paws und Paws probiert, geht beides nicht.

Prof. Dr. Peter Henning

Noch einmal zum Thema Umlaute.

Es hängt sehr stark vom Browser und seinen Einstellungen ab, mit welchem Encoding eingetippte Daten weitergeschickt werden. Das gilt auch für Editoren. Meine Systeme arbeiten alle mit UTF-8 (das ist, wie der Name sagt, eine 8-Bit-Codierung von Unicode-Zeichen => Umlaute werden als 2x 8 Bit codiert).

Polly verlangt ISO8859-1, hängt offenbar mit der Region zusammen, die man beim Aufruf angibt. Daher ist bei mir die Konversion UTF-8 => ISO8859-1 ok

Google hat zwar den Parameter ie=..., kann aber laut API-Beschreibung nur den Wert UTF-8 verarbeiten (ich habe ISO-8859-1) ausprobiert, hört sich schauerlich an. Vielleicht kann jemand anders auch mal suchen, ob das an der Schreibweise "ISO-8859-1" liegt...

Wenn jemand anders hier Probleme mit den Google-Umlauten hatte (irgendwo oben war ein Post), ist dessen System möglicherweise anders eingestellt (Windows, oder Ähnliches ??).

Um das ein für alle Mal zu erledigen, sollte man also versuchen, das Encoding des übergebenen Strings zu erkennen. Das geht hiermit: https://metacpan.org/pod/Encode::Detect

Ich werde es mal probieren.

LG

pah

mumpitzstuff

#998
So jetzt hat es geklappt. Keine Ahnung was es jetzt genau war.

Hier noch mal die Zusammenfassung.

Folgende Schritte fehlen:

Oben fehlt:

use Paws;

Weiter unten muss dieser Code rein:

return "No APIKey specified"                  if (!defined($TTS_APIKey) && defined($ttsAPIKey{$TTS_Ressource}) && length($ttsAPIKey{$TTS_Ressource})>0);
  return "No Username for TTS Access specified" if (!defined($TTS_User) && defined($ttsUser{$TTS_Ressource}) && length($ttsUser{$TTS_Ressource})>0);


Die maximale Zeichenanzahl sollte auf 3000 begrenzt sein.

Im Wiki steht drin, dass man:

cpan paws

starten soll. Es muss aber Paws sein!

Die credentials müssen für den user fhem erstellt werden, also unter /opt/fhem/.aws bzw. im Home Directory von fhem.

Die Installation von Paws ist übrigens ein echter Krampf und ich würde eher den einfachen Weg, dafür eventuell etwas unschöneren Weg, über aws gehen. Das liess sich sauber installieren und configurieren. Bei der CPAN Installation können x Dinge schief laufen und sie dauert ewig. Ich habe hier ne Notebook dran hängen und trotzdem lief das noch 20min. Keine Ahnung wie lange das auf einem Raspberry laufen soll.

Prof. Dr. Peter Henning

ZitatEs muss aber Paws sein!
So steht es in meiner Anleitung, gut bemerkt. Da steht auch, dass es lange dauert. Aber von Krampf kann keine Rede sein, und bei CPAN geht eben in der Regel _nichts_ schief.

Wer es schneller mag, sollte auf cpanminus ausweichen, das überpringt die meisten Tests (muss ggf. erst installiert werden, aufruf dann  als cpanm Paws).

LG

pah

Tobias

neue TestVersion in mein Git released. Bitte testen
Einige Bugfixes sind raus. Den Patch von Hanjo habe ich größtenteils übernommen. Die Einbindung der Paws Library habe ich korrigiert

Vor allem bitte mal Umlaute mit Google testen.
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Ellert

#1001
Zitat von: Tobias am 29 April 2019, 16:30:31
neue TestVersion in mein Git released. Bitte testen
Einige Bugfixes sind raus. Den Patch von Hanjo habe ich größtenteils übernommen. Die Einbindung der Paws Library habe ich korrigiert

Vor allem bitte mal Umlaute mit Google testen.
Die Nutzung von File::HomeDir wird sicherlich für Aufregung sorgen. Kann das Laden des Moduls davon abhängig gemacht werden, ob aws genutzt wird?

Der User fhem hat in der Standardinstallation kein Home-Verzeichnis.

Würde statt File::HomeDir nicht auch $ENV{HOME} funktionieren?

Tobias

Hi Ellert,
leider funktioniert $ENV{HOME} nicht, habe ich versucht.
Das Modul File::HomeDir musste ich nicht nachladen, war bei mir da. Wenn es aber Bauchschmerzen bereitet kann ich es auch von der AWS Ressource abhängig machen.
Um AWS zu nutzen muss man dem FHEM User ein Homeverzeicvhnis mitgeben, bei mir ist das /opt/fhem/, kann aber auch /home/fhem/ oder sonstetwas sein.
Ist ja schnell eingerichtet und definiert und kein Hexenwerk ;) Mein FHEM User kann sich auch anmelden sodass ich nicht mit root arbeiten muss ;)
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Ellert

Soweit mir bekannt wird bei einer Standardinstallation der user fhem ohne Homeverzeichnis angelegt.
Und das Perlmodul File::HomeDir ist in der Standardinstallation auch nicht dabei. Wer dann bei einem Update Dein geändertes Modul installiert,  dem Verschwinden erstmal die Text2Speech-Instanzen. Ich schätze mal, das wird bei der Mehrzahl der 468 FHEM-Installationen der Fall sein, die Text2Speech  nutzen.

Ich würde es von der AWS Ressource abhängig machen, um solche Probleme auszuschliessen.

ZitatIst ja schnell eingerichtet und definiert und kein Hexenwerk ;) Mein FHEM User kann sich auch anmelden sodass ich nicht mit root arbeiten muss ;)
Sicher, aber das sollte nicht Voraussetzung für ein funktionierendes Update sein.

Otto123

Zitat von: Ellert am 30 April 2019, 13:28:40
Soweit mir bekannt wird bei einer Standardinstallation der user fhem ohne Homeverzeichnis angelegt.
Das glaub ich so nicht.
{qx(echo ~fhem)} gibt bei allen meinem Systemen /opt/fhem
Jede Aktion die ich relativ zu Pfaden mache beginnt immer in /opt/fhem

Also meines Wissen wird der user fhem mit dem FHEM Installationspfad als Homedir angelegt. Er wird ohne Anmeldung angelegt.
Eintrag in der passwd
fhem:x:999:20::/opt/fhem:/bin/false

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz