Python hat Probleme beim Zugriff auf das USB-Mikrofon mit Gstreamer, um die Spracherkennung mit Pocksphinx auf einem Raspberry Pi durchzuführen

8

Python verhält sich also so, als würde er nichts von meinem Mikrofon hören.

Hier ist das Problem. Ich habe ein Skript Python (2.7), das mit Gstreamer auf mein Mikrofon zugreifen und Spracherkennung für mich über Pocksphinx durchführen soll. Ich verwende Pulse Audio und mein Gerät ist ein Raspberry Pi . Mein Mikrofon ist ein Playstation 3 Eye .

Jetzt habe ich bereits pocksphinx_continuous korrekt ausgeführt und erkenne die Wörter, die ich in meinen .dict und .lm Dateien definiert habe. Die Genauigkeit liegt nach ein paar Testläufen bei 85-90%. Ich weiß also, dass mein Mikrofon den Ton normalerweise über PocketSphinx + Pulse Audio aufnimmt.

Zu Ihrer Information: Ich habe Folgendes ausgeführt:

%Vor%

In meinem Python-Code versuche ich das Gleiche zu tun, aber ich benutze gstreamer, um auf das Mikrofon in Python zuzugreifen. (Anmerkung: Ich bin ein wenig neu in Python)

Hier ist mein Code (Danke Josip Lisec, dass er mich so weit gebracht hat):

%Vor%

Die Anwendung soll mit dem Keyword "Scarlett" übereinstimmen und danach eine Aktion ausführen.

Wenn ich meine Anwendung starte, bekomme ich folgende Ausgabe:

%Vor%

Aber es passt zu nichts. Ich glaube fast, dass Python nichts vom Mikrofon hören kann, es gibt überhaupt keine Versuche etwas zu erkennen. In pocketsphinx_continious druckt es normalerweise einen READY-Status aus, wenn es bereit ist, zuzuhören ... Ich erwarte dasselbe in Python?

Hier sind meine Python-Pakete:

%Vor%

Auch um zu bestätigen, dass puresphinx korrekt gegen die richtigen Bibliotheken ist:

%Vor%

Und wenn Sie Informationen über mein Mikrofon (ps3 Auge) sehen müssen:

Musste das in Pastebin werfen, in diesem Post ging kein Platz mehr.

Ссылка

Hat jemand irgendwelche Ideen, warum das nicht funktioniert? Bitte lassen Sie mich wissen, ob meine Frage eine Klärung erfordert oder ob ich weitere Informationen zur Verfügung stellen kann, um das Debugging zu erleichtern.

Danke.

    
Malcolm Jones 06.08.2013, 18:25
quelle

1 Antwort

4

Also habe ich endlich diesen Kerl zum arbeiten gebracht.

Paar wichtige Dinge, die ich realisieren musste:

1. Auch wenn Sie Pulseaudio auf Ihrem Raspberry Pi verwenden, solange Alsa noch installiert ist, können Sie es weiterhin verwenden. (Dies scheint für andere ein Klacks zu sein, aber ich wusste ehrlich nicht, dass ich immer noch beides gleichzeitig nutzen könnte) Hinweis via ( syb0rg ).

2. Wenn es darum geht, große Mengen von Rohaudio-Daten ( .wav -Format in meinem Fall) über Gstreamer an Pocksphinx zu senden, ( Warteschlangen ) sind deine Freunde.

Nachdem ich eine Weile mit gst-launch-0.10 auf der Kommandozeile herumgespielt habe, bin ich auf etwas gestoßen, das tatsächlich funktioniert hat:

%Vor%

Was passiert hier?

  • Gstreamer hört Gerät hw: 1 (Welches ist mein Ps3 Eye USB-Gerät). Dieses Gerät kann variieren, Sie können dies feststellen, indem Sie Folgendes ausführen:
%Vor%      

Kartenname="alsa_card.platform-bcm2835_AUD0.0" namereg_fail = false   tsched = yes fixed_latency_range = nein ignore_dB = no deferred_volume = yes   card_properties="module-udev-detect.discovered = 1"

%Vor%      

deferred_volume = yes card_properties="module-udev-detect.discovered = 1"

%Vor%

Die wichtige zu beachtende Zeile ist:

%Vor%

Das ist mein Playstation 3 Eye, und das ist auf device_id = 1. Daher hw: 1

  • Die vom ps3-Auge kommenden Audiodaten werden erneut abgetastet und einer gstreamer-Queue hinzugefügt und müssen ein ( vader ) bevor Sie zu pocketsphinx übergehen. Wenn Sie das Audio über das Vader-Element mit aktiviertem Schwellenwert auto-threshold = true senden, kann gstreamer den Hintergrundrauschpegel bestimmen. Dies kann wichtig sein, wenn Sie eine lausige Soundkarte oder ein Fernfeldmikrofon haben. Auf diese Weise weiß das Taschenphinx-Element, wann eine Äußerung beginnt und endet.

  • Fügen Sie der Pipeline, die wir bereits festgelegt haben, die regulären favesphix-Argumente hinzu ( hier ).

  • Gib alles in einen Fakesink, da wir im Moment nichts hören müssen, wir brauchen nur Taschensphinx, um alles zu hören. Das Flag dump = 1 liefert uns mehr Debugging-Informationen, um zu sehen, was verarbeitet wird / wenn Audio überhaupt akzeptiert wird.

** Nach dem erfolgreichen Start sieht der neue Python-Code wie folgt aus: **

%Vor%

Hoffe das hilft jemandem.

HINWEIS: Bitte entschuldigen Sie, wenn meine Gstreamer Pipline übermäßige Elemente verwendet. Ich bin ziemlich neu in Gstreamer, und ich bin offen für effizientere Möglichkeiten, dies zu tun.

    
Malcolm Jones 13.08.2013, 22:48
quelle