Ich möchte mit Raspberry Pi eine Sprachverarbeitung durchführen, um bestimmte Personen zu erkennen (so etwas wie eine eindeutige Identifizierung).
Ich würde es vorziehen, nur den Bordprozessor zu verwenden, man könnte davon ausgehen, dass das Internet nicht zugänglich ist.
Was sind die Einschränkungen, wenn der Raspberry Pi die Sprachverarbeitung durchführt? Wie gehe ich vor, wenn ich diesen als automatischen Anwesenheitsautomaten verwenden möchte?
audio
home-automation
input-device
speech-recognition
speech-synthesis
Ruthvik Vaila
quelle
quelle
Antworten:
Dies ist das Hauptprojekt, dem mein Raspberry Pi momentan gewidmet ist, also kann ich meine zwei Cent hinzufügen. Denken Sie daran, dass an diesem Projekt noch sehr viel gearbeitet wird.
Ich habe mich entschieden, die Programmiersprache C für dieses Projekt ausschließlich auf dem Raspbian-Betriebssystem zu verwenden, und dies hat möglicherweise einige meiner Entscheidungen und Anweisungen beeinflusst. Ich werde nur freie und Open-Source-Software auflisten , da das alles ist, was ich benutze.
Für die Installationsanleitung gehe ich davon aus, dass Sie über ein vollständig aktuelles System verfügen .
Spracherkennung
Hier sind einige Optionen für Spracherkennungs- Engines:
Pocketsphinx - Eine Version von Sphinx, die in eingebetteten Systemen verwendet werden kann (z. B. basierend auf einem ARM-Prozessor).
Vorteile : In aktiver Entwicklung und beinhaltet Funktionen wie Festkomma-Arithmetik und effiziente Algorithmen für die GMM- Berechnung. Die gesamte Verarbeitung findet auf dem Raspberry Pi statt, sodass er offline verwendet werden kann. Es unterstützt die Spracherkennung in Echtzeit
Nachteile : Für Anfänger ist es kompliziert einzurichten und zu verstehen. Für mich war es zu ungenau für meine Bewerbung. Die gesamte Verarbeitung findet auf dem Raspberry Pi statt, was ihn etwas langsamer macht.
Installationsanleitung :
Laden Sie die neuesten stabilen Versionen von Sphinxbase und Pocketsphinx herunter :
Extrahieren Sie die heruntergeladenen Dateien:
Um diese Pakete zu kompilieren, müssen Sie Bison und die ALSA-Entwicklungs-Header installieren .
HINWEIS : Es ist wichtig, dass die ALSA-Header installiert sind, bevor Sie Sphinxbase erstellen. Andernfalls wird ALSA von Sphinxbase nicht verwendet. Es scheint auch, dass ALSA nicht verwendet wird, wenn PulseAudio installiert ist (eine schlechte Sache für Entwickler wie mich).
cd
in das Sphinxbase-Verzeichnis und geben Sie die folgenden Befehle ein:cd
in das Pocketsphinx-Verzeichnis und geben Sie die folgenden Befehle ein:Testen Sie Pocketsphinx mit:
Wenn Sie es optimieren möchten, empfehle ich Ihnen, einige Informationen im CMUSphinx-Wiki zu lesen .
libsprec - Eine Spracherkennungsbibliothek, die von H2CO3 entwickelt wurde(mit wenigen Beiträgen von mir, meistens Fehlerbehebungen).
Vorteile : Es verwendet die Google Speech API , wodurch es genauer wird. Der Code ist meiner Meinung nach einfacher zu verstehen.
Nachteile : Es hat Abhängigkeiten von anderen Bibliotheken, die H2CO3 entwickelt hat (wie zum Beispiel libjsonz ). Die Entwicklung ist fleckig. Es verwendet die Google Speech API, dh, die Verarbeitung findet nicht auf dem Raspberry Pi selbst statt und erfordert eine Internetverbindung. Vor dem Kompilieren ist eine kleine Änderung des Quellcodes erforderlich, damit der Raspberry Pi ordnungsgemäß funktioniert.
Installationsanleitung :
Installieren Sie libflac , libogg und libcurl :
Laden Sie die neueste Version von libsprec herunter
Entpacke das heruntergeladene Paket:
Sie sollten jetzt einen Ordner
libsprec-master
in Ihrem aktuellen Verzeichnis haben.Laden Sie die neueste Version von libjsonz herunter :
Entpacke das heruntergeladene Paket:
Sie sollten jetzt einen Ordner
libjsonz-master
in Ihrem aktuellen Verzeichnis haben.cd
in daslibjsonz-master
Verzeichnis kompilieren und installieren:cd
aus demlibjsonz-master
Verzeichnis und in daslibsprec-master/src
Verzeichnis. Zeile 227 bearbeiten:Wir müssen folgendes sagen:
Dies ist so, dass das Programm ALSA verwendet, um auf das USB-Mikrofon zu zeigen.
Kompilieren und installieren Sie:
Sie können die Bibliothek jetzt in Ihren eigenen Anwendungen verwenden. Schauen Sie in den Beispielordner
libsprec-master
für Beispiele.Julius - Eine leistungsstarke LVCSR- Decodersoftware( Large Vocabulary Continuous Speech Recognition) mitzwei Durchgängen für sprachbezogene Forscher und Entwickler.
Vorteile : Es kann auf dem Raspberry Pi selbst fast in Echtzeit Spracherkennung durchführen. Standardformate für Sprachmodelle werden übernommen, um mit anderen kostenlosen Modellierungs-Toolkits fertig zu werden.
Nachteile : Fleckige Entwicklung mit dem letzten Update vor über einem Jahr. Die Erkennung ist auch zu ungenau und zu langsam für meine Verwendung. Lange Installationszeit
Installationsanleitung :
Es gibt einige Pakete, die wir installieren müssen, damit das System ordnungsgemäß funktioniert:
Laden Sie Julius von der CVS-Quelle herunter:
Setzen Sie die Compiler-Flags durch die Umgebungsvariablen:
cd
in den Ordnerjulius4
und geben Sie die folgenden Befehle einJulius benötigt eine Umgebungsvariable, die aufgerufen wird,
ALSADEV
um anzugeben, welches Gerät für ein Mikrofon verwendet werden soll:Laden Sie ein kostenloses Akustikmodell für Julius herunter . Sobald Sie es heruntergeladen haben, gehen Sie
cd
in das Verzeichnis und führen Sie Folgendes aus:Danach sollten Sie in der Lage sein, mit der Spracheingabe zu beginnen.
Eigene Bibliothek rollen - Für mein spezielles Projekt baue ich eine eigene Spracherkennungsbibliothek auf, die Audio von einem USB-Mikrofon mit ALSA über PortAudio aufzeichnet , es über libsndfile in einer FLAC- Datei speichert und zur Verarbeitung an Google sendet es. Sie schicken mir dann eine schön gepackte JSON- Datei, die ich dann verarbeite, um das zu bekommen, was ich zu meinem Raspberry Pi gesagt habe.
Vorteile : Ich kontrolliere alles (was ich mag). Ich lerne viel (was mir gefällt).
Nachteile : Es ist viel Arbeit. Einige Leute behaupten möglicherweise auch, dass ich mit dieser Spracherkennungsbibliothek keine Verarbeitung auf dem Raspberry Pi durchführe. Ich weiß das . Google kann meine Daten viel genauer verarbeiten, als ich es derzeit kann. Ich arbeite daran, eine genaue Offline-Spracherkennungsoption zu erstellen.
Sprachsynthese
Hier sind einige Optionen für Sprachsynthese- Engines:
Tritium - Eine kostenlose Sprachsynthese-Engine in Premium-Qualität, die vollständig in C geschrieben und von Ihnen entwickelt wurde.
Vorteile: Extrem portabel (keine Abhängigkeiten außer CMake ), extrem klein (kleinste, die ich finden konnte), einfach zu bauen.
Nachteile: Die Sprachausgabe selbst kann manchmal ungenau sein. Die Unterstützung für eine Vielzahl von Sprachen fehlt, da ich momentan der einzige Entwickler mit wenig Freizeit bin, aber dies ist eines der zukünftigen Ziele des Projekts. Außerdem wird ab sofort nur eine Bibliothek beim Kompilieren ausgegeben und keine verwendbare / testbare ausführbare Datei.
eSpeak - Ein kompakter Open-Source-Software-Sprachsynthesizer für Linux, Windows und andere Plattformen.
Vorteile : Es wird eine Formantsynthesemethode verwendet, die viele gesprochene Sprachen in geringer Größe bereitstellt. Es ist auch sehr genau und leicht zu verstehen. Ich habe das ursprünglich in meinem Projekt verwendet, musste aber wegen der Nachteile auf eine andere Sprachsynthese-Engine umsteigen.
Nachteile : Es gibt einige seltsame Abhängigkeiten zu X11 , die manchmal zum Stottern führen. Die Bibliothek ist im Vergleich zu anderen auch beträchtlich groß.
Installationsanleitung :
Installieren Sie die eSpeak-Software:
Um zu sagen, was Sie in eSpeak wollen:
So lesen Sie aus einer Datei in eSpeak:
Festival - Ein allgemeines mehrsprachiges Sprachsynthesesystem.
Vorteile : Es wurde entwickelt, um mehrere gesprochene Sprachen zu unterstützen. Es kann das Festvox-Projekt verwenden, das darauf abzielt, die Erstellung neuer synthetischer Stimmen systematischer und besser dokumentiert zu gestalten, sodass jeder eine neue Stimme erstellen kann.
Nachteile : Es ist in C ++ geschrieben (für mich eher ein Nachteil ). Es hat auch eine größere Codebasis, so dass es für mich schwierig ist, den Code zu verstehen und zu portieren.
Installationsanleitung :
Installieren Sie die Festival-Software:
Um Festival zu starten, füge den Text oder die Datei ein, die du lesen möchtest:
Flite - Eine kleine Laufzeit-Sprachsynthese-Engine, die von Festival und dem Festvox-Projekt abgeleitet ist.
Vorteile : In ständiger Weiterentwicklung an der Carnegie Mellon University. Sehr kleiner Motor im Vergleich zu anderen. Es hat auch eine kleinere Codebasis, so dass es einfacher zu durchlaufen ist. Es hat fast keine Abhängigkeiten (ein großer Vorteil für mich und ein weiterer Grund, warum ich mich für diese Engine in meinem Projekt entschieden habe).
Nachteile : Die Sprachausgabe selbst ist nicht immer genau. Die Sprache hat einen sehr metallischen, nicht menschlichen Klang (mehr als die anderen Motoren). Es werden nicht sehr viele Sprachen unterstützt.
Installationsanleitung :
Installieren Sie die Flite-Software:
So führen Sie Flite aus:
Antworten auf Ihre spezifischen Fragen :
Programmierer haben keine Grenzen.
:P
Im Ernst, der Raspberry Pi verfügt über zahlreiche Ressourcen für die Sprachverarbeitung. Solange die Person, die die Sprachverarbeitung durchführt, weiß, was sie tut, sollte der Raspberry Pi damit klar kommen.
Keines dieser Option ist genau genug , um den Unterschied zwischen bestimmt Leuten zu sagen , noch . Daran arbeite ich in meinem Projekt (und das wird wahrscheinlich eine Weile dauern). Wenn Sie nach einer besseren Option für die automatische Anwesenheit suchen, würde ich die Gesichtserkennung untersuchen . Die Gesichtserkennung für den Raspberry Pi unterliegt jedoch weiteren Einschränkungen. Denken Sie daran.
quelle
Ich ging mit pocketsphinx_continuous und einer 4 $ Soundkarte .
Um die Tatsache zu bewältigen, dass es bei Verwendung von Sprachsynthese nicht mehr zuhören muss, habe ich amixer verwendet, um die Lautstärke des Mikrofons zu regeln.
Mit einem passenden Befehl zum Stummschalten des Abhörens, wenn der Sprachsynth abgespielt wird
Um die richtigen Zeiten für die Stummschaltung zu berechnen, starte ich soxi einfach über lua und setze die Datei unmute.sh (gegenüber der Datei mute.sh) auf "x" Sekunden nach dem Start. Es gibt zweifellos viele Möglichkeiten, damit umzugehen. Ich bin mit den Ergebnissen dieser Methode zufrieden.
LUA SNIPPET:
Um tatsächlich die Stimme auf dem Pi zu erfassen, benutze ich:
Auch hier gibt es andere Möglichkeiten, aber ich mag meine Ausgabe auf diese Weise.
Für den Synthesizer habe ich Cepstrals pi-Lösung verwendet, aber es ist nicht online verfügbar. Sie müssen sich direkt an sie wenden, um den Kauf zu arrangieren, und der Kaufpreis liegt bei etwa 30 US-Dollar. Die Ergebnisse sind akzeptabel, aber die Rede erzeugt einige unangenehme Klicks und Knackgeräusche. Das Unternehmen hat geantwortet, dass sie keinen RaspPi mehr haben und nicht bereit sind, das Produkt zu verbessern. YMMV
Die Spracherkennung liegt im Leerlauf bei etwa 12% der CPU und bei einem Erkennungsblock bei einem kurzen Spitzenwert.
Die Stimmenerzeugung erreicht beim Rendern einen Spitzenwert von etwa 50-80%.
Das Play / Sox ist ziemlich schwer, aber ich wende Echtzeiteffekte auf die gerenderten Stimmen an, während ich sie spiele;)
Der pi wird stark reduziert, wenn ich alle Anleitungen verwende, die ich finden kann, um nicht benötigte Dienste zu stoppen, und wird im vollständigen CLI-Modus ausgeführt. 800 MHz übertaktet (kleinste).
scaling_governor gesetzt auf: performance
Bei vollem Betrieb: Bei direkter Sonneneinstrahlung ca. 50 ° C, im Schatten 38 ° C. Ich habe Kühlkörper eingebaut.
Letzter Punkt: Ich stelle die gesamte Ausrüstung als nettes Extra auf "internetgetriebene" KI.
Das pi erledigt all dies nahtlos und spielt jedes vernetzte Audio in Echtzeit ab und überträgt es vollständig an jede andere Unix-Box. usw.
Um die hohe Belastung der Sprach-CPU zu bewältigen, habe ich ein md5sum-basiertes Caching-System implementiert, damit dieselben Äußerungen nicht zweimal gerendert werden. (ca. 1000 Dateien bei insgesamt 220 MB decken 70% der Äußerungen ab, die ich im Allgemeinen von der KI erhalte.) Dies trägt wirklich dazu bei, die Gesamt-CPU-Auslastung insgesamt zu senken.
In précis ist das alles völlig machbar. Die Spracherkennung ist jedoch nur so gut wie die Qualität Ihrer Mikrofone, Ihr Sprachmodell, die Nähe Ihrer Motivstimmen zum ursprünglich vorgesehenen Publikum (ich verwende ein en_US-Modell für en_UK-Kinder, nicht perfekt) und andere Details dass man mit mühe ein anständiges ergebnis erzielen kann.
Und fürs Protokoll, ich habe das alles schon einmal auf einem Kindle gemacht (und das hat auch mit Cmu Sphinx und Flite funktioniert). Hoffe das hilft.
quelle
Ja. Verwenden Sie PocketSphinx für die Spracherkennung, Festvox für Text-to-Speech (TTS) und etwas USB-Audio mit Line-In (oder eine alte unterstützte Webcam mit Line-In).
Google sucht nach diesen Softwarepaketen und "Raspberry Pi" bietet viele Beispiele und Tutorials, um dies einzurichten.
quelle
Wie Lenik betont hat, müssen Sie Audio aufnehmen oder möglicherweise Audiodateien an den Raspberry Pi senden, damit sie irgendwie dekodiert werden.
quelle
Raspberry Pi hat weder einen eingebauten ADC noch einen Mikrofoneingang. Wenn Sie kein externes USB-Mikrofon verwenden möchten, können Sie Ihren Audiostream grundsätzlich nicht auf das Gerät übertragen. Abgesehen davon gibt es keine ernsthaften Einschränkungen. Die CPU ist leistungsfähig genug für jede Soundverarbeitung, die Sie möglicherweise implementieren möchten.
quelle
Zunächst sollten Sie eine Reihe von Wörtern für den Klassifizierungsprozess auswählen. Danach sollten Sie die Daten von Benutzern / Probanden sammeln. Es wird ein nichtstationäres Signal sein. Sie müssen Ihre Daten reduzieren, um die Rechenkosten zu senken und die Erfolgsquote mit Feature-Extraktionsmethoden zu verbessern. Suchen Sie daher nach geeigneten Feature-Extraktionsmethoden für Ihre Anwendung. Mit diesen Methoden können Sie einen Merkmalsvektor erhalten (mittlerer Absolutwert, Effektivwert, Wellenformlänge, Nulldurchgang, integrierter Absolutwert, AR-Koeffizienten, Mittelfrequenz, Mittelfrequenz usw.). Dann sollten Sie eine Klassifizierungsmethode wie knn, neuronale Netze usw. verwenden, um Ihre Daten zu klassifizieren. Zuletzt muss die Richtigkeit überprüft werden. Um zusammenzufassen:
Ich habe Videobearbeitungsprojekte mit RPi im Internet gesehen, damit es gelingt, diese Klassifizierung durchzuführen.
Sie können den NI 6009 USB DAQ (der RPi unterstützt) zum Sammeln von analogen Daten verwenden, diese sind jedoch etwas teuer.
quelle
Dies kann für Sie zur Erkennung von Sprechern nützlich sein:
https://code.google.com/p/voiceid/
quelle