SEPIA-Framework / sepia-stt-server

SEPIA server to support open-source speech recognition via WebSocket connection.
MIT License
116 stars 21 forks source link

Sprache ändern #2

Closed mawoka-myblock closed 4 years ago

mawoka-myblock commented 4 years ago

Wie ändere ich die Sprache von dem STT Modul?

fquirin commented 4 years ago

Hi,

die Sprache wird über das Sprachmodell gewechselt. Für Deutsch muss dafür zunächst das Modell runtergeladen werden:

https://goofy.zamia.org/zamia-speech/asr-models/kaldi-generic-de-tdnn_f-r20190328.tar.xz

Das wird dann in einen Ordner entpackt, auf den der Server Zugriff hat. Beim Docker Container Beispiel wäre das: /home/[my user]/sepia-stt-share

Danach kann über den SEPIA Control HUB auf der Seite "Speech Recognition" (oder über das HTTP Interface des Servers) der Pfad zum neuen Modell angegeben werden.

mawoka-myblock commented 4 years ago

Ich habe es in den folgenden Ordner kopiert : /home/user/sepia-share-sst/kaldi-models Dann habe ich den Befehl docker run --rm --name=sepia_sst u.s.w ausgeführt. Docker sagt folgendes: docker: Error response from daemon: Conflict. The container name "/sepia_stt" is already in use by container "ddc3cbed9653e6e742f8eb67d346d706f85ff8ea0baaafd403724bca8136e922". You have to remove (or rename) that container to be able to reuse that name. See 'docker run --help'.

Sorry, dass ich so viel Frage aber mit docker und so kenne ich mich echt nicht aus nur mit Linux im Alltag

fquirin commented 4 years ago

Moin, Scheinbar läuft der Container noch, was aber ok ist. Falls der Container gestoppt wurde und sich nicht automatisch entfernt hat kannst du noch folgendes versuchen docker rm sepia_stt und danach den Container neustarten.

Wenn der Container läuft und du die Datei in den shared Ordner des Containers entpackt hast, kannst du direkt über den SEPIA Control HUB das Modell ändern. Hier ein Screenshot der Seite die ich meine (v2.4.1):

image

Bei dem Befehl:

docker run --rm --name=sepia_stt -d -p 9000:8080 -v /home/[my user]/sepia-stt-share:/apps/share sepia/stt-server:beta2.1

Sollte der Eintrag fürs Modell ungefähr so aussehen, abhängig von deinen genauen Ordner Namen: /apps/share/kaldi_models/kaldi-generic-de-tdnn_f...

Als Server zum Verbinden oben müsste etwa sowas stehen: http://[IP-des-PCs-mit-Docker]:9000/stt

Hilft das? :innocent: Ich verspreche dazu bald eine ordentliche Anleitung zu schreiben :-)

mawoka-myblock commented 4 years ago

IMG_20200604_093404 Er sagt mir jetzt, dass ich ein Auth Token brauche... Wo finde ich es?

Ach noch eine Frage... Startet der Docker container automatisch beim hochfahren?

fquirin commented 4 years ago

Er sagt mir jetzt, dass ich ein Auth Token brauche... Wo finde ich es?

Ah, vergessen, das Token ist einfach "test".

Ach noch eine Frage... Startet der Docker container automatisch beim hochfahren?

Beim Hochfahren deines PCs? Eigentlich nicht aber kommt vermutlich auf deine Docker Konfiguration an :thinking:

mawoka-myblock commented 4 years ago

Und wie mache ich das, dass der container startet? Einfach den Befehl in die Crontab?

mawoka-myblock commented 4 years ago

IMG_20200604_101558 Es funktioniert immer noch nicht... Er meint, dass ich den Pfad noch mal überpüfen soll...

fquirin commented 4 years ago

Ist das dein Linux Arbeitsrechner oder ein System, dass möglichst unbetreut im Hintergrund laufen soll?

Crontab wäre möglich, Docker selber hat aber auch eine restart policy. Ich habe damit auch noch nicht viel experimentiert, aber ein Container mit dem "--restart" Flag sollte starten sobald der Docker Daemon startet und für den Daemon gibt es glaube ich einen System Service.

mawoka-myblock commented 4 years ago

OK aber es klappt immer noch nicht mit dem Sprachmodell ändern...

mawoka-myblock commented 4 years ago

sollte der Befehl den Container starten: docker run --rm --name=sepia_stt -d -p 9000:8080 -v /home/[my user]/sepia-stt-share:/apps/share sepia/stt-server:beta2.1 ? wen ja, er tut es nicht... nur der Befehl startet den Container: docker run --rm --name=sepia_stt -d -p 9000:8080 sepia/stt-server:beta2.1

fquirin commented 4 years ago

Der Teil -v /home/[my user]/sepia-stt-share:/apps/share macht Probleme? Gibt es eine Fehlermeldung?

Ein paar Erläuterungen dazu:

mawoka-myblock commented 4 years ago

Docker gibt keinen Fehler aus nur SEPIA sagt, dass der Pfad falsch ist

fquirin commented 4 years ago

Wie lautet denn dein Ordner wohin du das deutsche Sprachmodell entpackt hast?

mawoka-myblock commented 4 years ago

/home/minecraft/sepia-stt-share/kaldi_models/

mawoka-myblock commented 4 years ago

minecraft ist der user

fquirin commented 4 years ago

Und dein Sprachmodell liegt in: /home/minecraft/sepia-stt-share/kaldi_models/kaldi-generic-de-tdnn_f-r20190328 ?

Dann wäre das Docker Kommando: docker run --rm --name=sepia_stt -d -p 9000:8080 -v /home/minecraft/sepia-stt-share:/apps/share sepia/stt-server:beta2.1

Und der Eintrag im HUB: /apps/share/kaldi_models/kaldi-generic-de-tdnn_f-r20190328

mawoka-myblock commented 4 years ago

ja

mawoka-myblock commented 4 years ago

docker run --rm --name=sepia_stt -d -p 9000:8080 -v /home/minecraft/sepia-stt-share:/apps/share sepia/stt-server:beta2.1 Danach ist der STT Server nicht erreichbar, nachdem ich diesen Befehl ausgeführt habe...

fquirin commented 4 years ago

Hattest du den Teil mit der 'share-folder.zip' aus der STT Server README schon ausgeführt? Alles was nach ...

To change the server settings, add your own ASR models, do language model customization or to capture your recordings for later you can use the internal 'share' folder like this: ...

... kommt. Vielleicht fehlt dem Container was im shared folder. In der sepia_stt_server/app.conf kann man den Model Pfad dann auch permanent festzulegen.

Du kannst auch den Container mal testweise ohne den -d Parameter starten, dann kommt der Log direkt in die Konsole. Stoppen dann mit CTRL+C.

mawoka-myblock commented 4 years ago

docker: Error response from daemon: OCI runtime create failed: container_linux.go:344: starting container process caused "exec: \"-d\": executable file not found in $PATH": unknown.

Der Log ist überschaubar ;)

fquirin commented 4 years ago

docker: Error response from daemon: OCI runtime create failed: container_linux.go:344: starting container process caused "exec: "-d": executable file not found in $PATH": unknown.

Uh, das sagt mir jetzt spontan nix O_o

mawoka-myblock commented 4 years ago

Das habe ich in die app.conf eingetragen: kaldi_model_path=/opt/kaldi/model/kaldi-generic-de-tdnn_f-r20190328

fquirin commented 4 years ago

Kommt das mit diesem Befeh? docker run --rm --name=sepia_stt -p 9000:8080 -v /home/minecraft/sepia-stt-share:/apps/share sepia/stt-server:beta2.1

fquirin commented 4 years ago

Das habe ich in die app.conf eingetragen: kaldi_model_path=/opt/kaldi/model/kaldi-generic-de-tdnn_f-r20190328

/opt/kaldi/model sollte /apps/share/kaldi_models sein, es liegt ja im shared

mawoka-myblock commented 4 years ago

Das kommt bei dem Befehl:

sudo docker run --rm --name=sepia_stt -p 9000:8080 -v /home/minecraft/sepia-stt-share:/apps/share sepia/stt-server:beta2.1 Starting nginx: nginx. INFO Config name: SEPIA-Custom INFO Loading Kalid model /opt/kaldi/model/kaldi-generic-de-tdnn_f-r20190328 ... Traceback (most recent call last): File "sepia_stt_server.py", line 390, in main() File "sepia_stt_server.py", line 370, in main set_default_decoder(Decoder(config.kaldi_model_path)) File "sepia_stt_server.py", line 144, in init self.kaldi_model = KaldiNNet3OnlineModel(self.model_dir, acoustic_scale=1.0, beam=7.0, frame_subsampling_factor=3) File "kaldiasr/nnet3.pyx", line 106, in kaldiasr.nnet3.KaldiNNet3OnlineModel.cinit (kaldiasr/nnet3.cpp:2528) Exception: /opt/kaldi/model/kaldi-generic-de-tdnn_f-r20190328/conf/mfcc_hires.conf not found.

mawoka-myblock commented 4 years ago

Habe das Problem gelöst... Ich bin einfach zu inkompetent... in der app.conf stand: kaldi_model_path=/opt/kaldi/model/kaldi-generic-de-tdnn_f-r20190328

Habe es jetzt in folgenden Pfad geändert: /apps/share/kaldi_models/kaldi-generic-de-tdnn_f-r20190328

Und jetzt funktioniert es... Aber ich habe das hintere teil nur geändert, nicht das /opt/...

fquirin commented 4 years ago

/opt/kaldi/model sollte /apps/share/kaldi_models sein, es liegt ja im shared

Mir is auch gerade noch eingefallen, um den Container zu stoppen geht nicht CTRL+C sonder man muss in einer zweiten Session sudo docker stop sepia_stt eingeben

mawoka-myblock commented 4 years ago

Ich muss dir noch eine Sache sagen: Das was du da geleistet hast, das ist der Hammer! Das Interface sieht gut aus, es funktioniert alles relativ gut und dass du auch noch so schnell und gut hilfst... Du machst das wirklich gut! Danke, für dieses tolle Projekt!

fquirin commented 4 years ago

Danke! :smiley: Beim STT Server gibt es noch einiges zu verbessern aber mit dem Rest bin ich auch schon ganz zufrieden ;-)

mawoka-myblock commented 4 years ago

Wenn man ihn endlich richtig eingerichtet hat, funktioniert er aber auch gut!

mawoka-myblock commented 4 years ago

eine frage noch, kann ich auch wörter wie zum beispiel "timer" oder "to-do" hinzufügen?

fquirin commented 4 years ago

Ja, es gibt die Möglichkeit das komplette Sprachmodell anzupassen, das ist allerdings einer der Punkte, die ich meinte mit "es noch einiges zu verbessern", da es etwas komplizierter ist und komplett undokumentiert bisher :see_no_evil: . Richtig gemacht kann es allerdings die Erkennungsrate enorm verbessern (auf Kosten eines kleinere Vokabulars).

Ich versuche mal kurz eine grobe Übersicht zu geben:

Soweit die Theorie ^^. Ich fürchte allerdings in der 2.1 Beta von STT Server ist ein Bug drin, den man vorher beheben muss, denn er sucht bei der Model Adaptation im Ordner "/opt/kaldi/model/kaldi-generic-[LANG_CODE]-tdnn" der neue Ordner ist aber "/opt/kaldi/model/kaldi-generic-[LANG_CODE]-tdnn_f" :-/ Dazu muss man den Container im Terminal Modus starten und die Datei /apps/sepia-stt-server/lm_adapt/adapt_build_move_clean.sh bearbeiten. Wie das genau geht ist wieder ein neues Tutorial :see_no_evil:

mawoka-myblock commented 4 years ago

OK ich glaube, ich lasse die Finger mal davon, bevor ich ein neuen "Issue" öffnen muss weil ich das Programm "zerstört" habe :laughing::laughing:

fquirin commented 4 years ago

:-p In Zukunft wird es hoffentlich deutlich einfacher ;-)

mawoka-myblock commented 11 months ago

3 Jahre später lese ich mir das ganze hier nochmal durch: Wenn ich an deiner Stelle gewesen wäre, hätte ich den Issue hier einfach geschlossen und wirklich keinen Bock gehabt, so Fragen zu beantworten, die Google auch innerhalb von 2 Minuten hätte beantworten können. Deswegen: Respekt, dass du so ausführlich und freundlich auf noch so unnötige Fragen geantwortet hast.