2013-08-06 2 views
8

그래서 파이썬은 마이크에서 아무 것도들을 수없는 것처럼 행동합니다.파이썬에서 Gstreamer를 사용하여 USB 마이크에 액세스하는 데 문제가있어 라즈베리 파이의 Pocketsphinx에서 음성 인식을 수행합니다.

여기에 문제가 있습니다. G101er을 사용하여 내 마이크에 액세스하고 Pocketsphinx을 통해 음성 인식을 수행한다고 가정하는 Python (2.7) 스크립트가 있습니다. 펄스 오디오이고 내 장치는 라즈베리 파이입니다. 내 마이크는 Playstation 3 Eye입니다.

박쥐를 벗어났습니다. 이미 pocketsphinx_continuous를 올바르게 실행하여 .dict 및 .lm 파일에 정의한 단어를 인식했습니다. 몇 번의 시운전이 끝나면 정확도는 85-90 % 정도입니다. 그래서 박쥐에서 내 마이크가 pocketsphinx + pulse 오디오를 통해 정상적으로 소리를 들려오는 것을 압니다. 내가 같은 일을 시도하고있어 내 파이썬 코드에서

pocketsphinx_continuous -lm /home/pi/dev/scarlettPi/config/speech/lm/scarlett.lm -dict /home/pi/dev/scarlettPi/config/speech/dict/scarlett.dic -hmm /home/pi/dev/scarlettPi/config/speech/model/hmm/en_US/hub4wsj_sc_8k -silprob 0.1 -wip 1e-4 -bestpath 0 

,하지만 난 파이썬에서 마이크에 액세스 할 수있는 GStreamer를 사용하고 있습니다 :

는 참고로 나는 다음과 같은 달렸다.

import pi 
from pi.becore import ScarlettConfig 
from recorder import Recorder 
from brain import Brain 

import os 
import json 
import tempfile 
#import sys 

import pygtk 
pygtk.require('2.0') 
import gtk 
import gobject 
import pygst 
pygst.require('0.10') 
gobject.threads_init() 
import gst 

scarlett_config=ScarlettConfig() 

class Listener: 
    def __init__(self, gobject, gst): 
    self.failed = 0 

    self.pipeline = gst.parse_launch(' ! '.join(['pulsesrc', 
               'audioconvert', 
               'audioresample', 
               'vader name=vader auto-threshold=true', 
               'pocketsphinx lm=' + scarlett_config.get('LM') + ' dict=' + scarlett_config.get('DICT') + ' hmm=' + scarlett_config.get('HMM') + ' name=listener', 
               'fakesink'])) 
    listener = self.pipeline.get_by_name('listener') 
    listener.connect('result', self.__result__) 
    listener.set_property('configured', True) 
    print "KEYWORDS WE'RE LOOKING FOR: " + scarlett_config.get('ourkeywords') 

    bus = self.pipeline.get_bus() 
    bus.add_signal_watch() 
    bus.connect('message::application', self.__application_message__) 
    self.pipeline.set_state(gst.STATE_PLAYING) 

    def result(self, hyp, uttid): 
    if hyp in scarlett_config.get('ourkeywords'): 
     self.failed = 0 
     self.listen() 
    else: 
     self.failed += 1 
     if self.failed > 4: 
     pi.speak("" + scarlett_config.get('scarlett_owner') + ", if you need me, just say my name.") 
     self.failed = 0 

    def listen(self): 
    self.pipeline.set_state(gst.STATE_PAUSED) 
    pi.play('pi-listening') 
    Recorder(self) 

    def cancel_listening(self): 
    pi.play('pi-cancel') 
    self.pipeline.set_state(gst.STATE_PLAYING) 

    # question - sound recording 
    def answer(self, question): 
    pi.play('pi-cancel') 

    print " * Contacting Google" 
    destf = tempfile.mktemp(suffix='piresult') 
    os.system('wget --post-file %s --user-agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.77 Safari/535.7" --header="Content-Type: audio/x-flac; rate=16000" -O %s -q "https://www.google.com/speech-api/v1/recognize?client=chromium&lang=en-US"' % (question, destf)) 
    #os.system("speech2text %s > %s" % (question, destf)) 
    b = open(destf) 
    result = b.read() 
    b.close() 

    os.unlink(question) 
    os.unlink(destf) 

    if len(result) == 0: 
     print " * nop" 
     pi.play('pi-cancel') 
    else: 
     brain = Brain(json.loads(result)) 
     if brain.think() == False: 
     print " * nop2" 
     pi.play('pi-cancel') 

    self.pipeline.set_state(gst.STATE_PLAYING) 

    def __result__(self, listener, text, uttid): 
    struct = gst.Structure('result') 
    struct.set_value('hyp', text) 
    struct.set_value('uttid', uttid) 
    listener.post_message(gst.message_new_application(listener, struct)) 

    def __application_message__(self, bus, msg): 
    msgtype = msg.structure.get_name() 
    if msgtype == 'result': 
     self.result(msg.structure['hyp'], msg.structure['uttid']) 

응용 프로그램은 키워드 "스칼렛"에 일치한다고 가정한다 : 여기

(이 지금까지 나를 점점 주셔서 감사합니다 요시프 Lisec) 내 코드입니다 : (주 파이썬에 약간 새로운 해요) 그 다음에 행동을 취하십시오. 내 응용 프로그램을 실행할 때

, 나는 다음과 같은 출력 얻을 :

[email protected] ~/dev/scarlettPi/scripts/pi/bin $ ./pi 
/usr/lib/python2.7/dist-packages/gtk-2.0/gtk/__init__.py:57: GtkWarning: could not open display 
    warnings.warn(str(e), _gtk.Warning) 
INFO: cmd_ln.c(691): Parsing command line: 
gst-pocketsphinx \ 
    -samprate 8000 \ 
    -cmn prior \ 
    -fwdflat no \ 
    -bestpath no \ 
    -maxhmmpf 2000 \ 
    -maxwpf 20 

Current configuration: 
[NAME]  [DEFLT]  [VALUE] 
-agc  none  none 
-agcthresh 2.0  2.000000e+00 
-alpha  0.97  9.700000e-01 
-ascale  20.0  2.000000e+01 
-aw  1  1 
-backtrace no  no 
-beam  1e-48  1.000000e-48 
-bestpath no  no 
-bestpathlw 9.5  9.500000e+00 
-bghist  no  no 
-ceplen  13  13 
-cmn  current  prior 
-cmninit 8.0  8.0 
-compallsen no  no 
-debug    0 
-dict    
-dictcase no  no 
-dither  no  no 
-doublebw no  no 
-ds  1  1 
-fdict    
-feat  1s_c_d_dd 1s_c_d_dd 
-featparams   
-fillprob 1e-8  1.000000e-08 
-frate  100  100 
-fsg     
-fsgusealtpron yes  yes 
-fsgusefiller yes  yes 
-fwdflat yes  no 
-fwdflatbeam 1e-64  1.000000e-64 
-fwdflatefwid 4  4 
-fwdflatlw 8.5  8.500000e+00 
-fwdflatsfwin 25  25 
-fwdflatwbeam 7e-29  7.000000e-29 
-fwdtree yes  yes 
-hmm     
-input_endian little  little 
-jsgf    
-kdmaxbbi -1  -1 
-kdmaxdepth 0  0 
-kdtree    
-latsize 5000  5000 
-lda     
-ldadim  0  0 
-lextreedump 0  0 
-lifter  0  0 
-lm    
-lmctl    
-lmname  default  default 
-logbase 1.0001  1.000100e+00 
-logfn    
-logspec no  no 
-lowerf  133.33334 1.333333e+02 
-lpbeam  1e-40  1.000000e-40 
-lponlybeam 7e-29  7.000000e-29 
-lw  6.5  6.500000e+00 
-maxhmmpf -1  2000 
-maxnewoov 20  20 
-maxwpf  -1  20 
-mdef    
-mean    
-mfclogdir   
-min_endfr 0  0 
-mixw    
-mixwfloor 0.0000001 1.000000e-07 
-mllr    
-mmap  yes  yes 
-ncep  13  13 
-nfft  512  512 
-nfilt  40  40 
-nwpen  1.0  1.000000e+00 
-pbeam  1e-48  1.000000e-48 
-pip  1.0  1.000000e+00 
-pl_beam 1e-10  1.000000e-10 
-pl_pbeam 1e-5  1.000000e-05 
-pl_window 0  0 
-rawlogdir   
-remove_dc no  no 
-round_filters yes  yes 
-samprate 16000  8.000000e+03 
-seed  -1  -1 
-sendump    
-senlogdir   
-senmgau    
-silprob 0.1  1.000000e-01 
-smoothspec no  no 
-svspec    
-tmat    
-tmatfloor 0.0001  1.000000e-04 
-topn  4  4 
-topn_beam 0  0 
-toprule    
-transform legacy  legacy 
-unit_area yes  yes 
-upperf  6855.4976 6.855498e+03 
-usewdphones no  no 
-uw  1.0  1.000000e+00 
-var     
-varfloor 0.0001  1.000000e-04 
-varnorm no  no 
-verbose no  no 
-warp_params    
-warp_type inverse_linear inverse_linear 
-wbeam  7e-29  7.000000e-29 
-wip  1e-4  1.000000e-04 
-wlen  0.025625 2.562500e-02 

INFO: cmd_ln.c(691): Parsing command line: 
\ 
    -nfilt 20 \ 
    -lowerf 1 \ 
    -upperf 4000 \ 
    -wlen 0.025 \ 
    -transform dct \ 
    -round_filters no \ 
    -remove_dc yes \ 
    -svspec 0-12/13-25/26-38 \ 
    -feat 1s_c_d_dd \ 
    -agc none \ 
    -cmn current \ 
    -cmninit 56,-3,1 \ 
    -varnorm no 

Current configuration: 
[NAME]  [DEFLT]  [VALUE] 
-agc  none  none 
-agcthresh 2.0  2.000000e+00 
-alpha  0.97  9.700000e-01 
-ceplen  13  13 
-cmn  current  current 
-cmninit 8.0  56,-3,1 
-dither  no  no 
-doublebw no  no 
-feat  1s_c_d_dd 1s_c_d_dd 
-frate  100  100 
-input_endian little  little 
-lda     
-ldadim  0  0 
-lifter  0  0 
-logspec no  no 
-lowerf  133.33334 1.000000e+00 
-ncep  13  13 
-nfft  512  512 
-nfilt  40  20 
-remove_dc no  yes 
-round_filters yes  no 
-samprate 16000  8.000000e+03 
-seed  -1  -1 
-smoothspec no  no 
-svspec    0-12/13-25/26-38 
-transform legacy  dct 
-unit_area yes  yes 
-upperf  6855.4976 4.000000e+03 
-varnorm no  no 
-verbose no  no 
-warp_params    
-warp_type inverse_linear inverse_linear 
-wlen  0.025625 2.500000e-02 

INFO: acmod.c(246): Parsed model-specific feature parameters from /usr/local/share/pocketsphinx/model/hmm/en_US/hub4wsj_sc_8k/feat.params 
INFO: feat.c(713): Initializing feature stream to type: '1s_c_d_dd', ceplen=13, CMN='current', VARNORM='no', AGC='none' 
INFO: cmn.c(142): mean[0]= 12.00, mean[1..12]= 0.0 
INFO: acmod.c(167): Using subvector specification 0-12/13-25/26-38 
INFO: mdef.c(517): Reading model definition: /usr/local/share/pocketsphinx/model/hmm/en_US/hub4wsj_sc_8k/mdef 
INFO: mdef.c(528): Found byte-order mark BMDF, assuming this is a binary mdef file 
INFO: bin_mdef.c(336): Reading binary model definition: /usr/local/share/pocketsphinx/model/hmm/en_US/hub4wsj_sc_8k/mdef 
INFO: bin_mdef.c(513): 50 CI-phone, 143047 CD-phone, 3 emitstate/phone, 150 CI-sen, 5150 Sen, 27135 Sen-Seq 
INFO: tmat.c(205): Reading HMM transition probability matrices: /usr/local/share/pocketsphinx/model/hmm/en_US/hub4wsj_sc_8k/transition_matrices 
INFO: acmod.c(121): Attempting to use SCHMM computation module 
INFO: ms_gauden.c(198): Reading mixture gaussian parameter: /usr/local/share/pocketsphinx/model/hmm/en_US/hub4wsj_sc_8k/means 
INFO: ms_gauden.c(292): 1 codebook, 3 feature, size: 
INFO: ms_gauden.c(294): 256x13 
INFO: ms_gauden.c(294): 256x13 
INFO: ms_gauden.c(294): 256x13 
INFO: ms_gauden.c(198): Reading mixture gaussian parameter: /usr/local/share/pocketsphinx/model/hmm/en_US/hub4wsj_sc_8k/variances 
INFO: ms_gauden.c(292): 1 codebook, 3 feature, size: 
INFO: ms_gauden.c(294): 256x13 
INFO: ms_gauden.c(294): 256x13 
INFO: ms_gauden.c(294): 256x13 
INFO: ms_gauden.c(354): 0 variance values floored 
INFO: s2_semi_mgau.c(903): Loading senones from dump file /usr/local/share/pocketsphinx/model/hmm/en_US/hub4wsj_sc_8k/sendump 
INFO: s2_semi_mgau.c(927): BEGIN FILE FORMAT DESCRIPTION 
INFO: s2_semi_mgau.c(1022): Using memory-mapped I/O for senones 
INFO: s2_semi_mgau.c(1296): Maximum top-N: 4 Top-N beams: 0 0 0 
INFO: dict.c(317): Allocating 4120 * 20 bytes (80 KiB) for word entries 
INFO: dict.c(332): Reading main dictionary: /home/pi/dev/scarlettPi/config/speech/dict/scarlett.dic 
INFO: dict.c(211): Allocated 0 KiB for strings, 0 KiB for phones 
INFO: dict.c(335): 13 words read 
INFO: dict.c(341): Reading filler dictionary: /usr/local/share/pocketsphinx/model/hmm/en_US/hub4wsj_sc_8k/noisedict 
INFO: dict.c(211): Allocated 0 KiB for strings, 0 KiB for phones 
INFO: dict.c(344): 11 words read 
INFO: dict2pid.c(396): Building PID tables for dictionary 
INFO: dict2pid.c(404): Allocating 50^3 * 2 bytes (244 KiB) for word-initial triphones 
INFO: dict2pid.c(131): Allocated 30200 bytes (29 KiB) for word-final triphones 
INFO: dict2pid.c(195): Allocated 30200 bytes (29 KiB) for single-phone word triphones 
INFO: ngram_model_arpa.c(477): ngrams 1=12, 2=18, 3=17 
INFO: ngram_model_arpa.c(135): Reading unigrams 
INFO: ngram_model_arpa.c(516):  12 = #unigrams created 
INFO: ngram_model_arpa.c(195): Reading bigrams 
INFO: ngram_model_arpa.c(533):  18 = #bigrams created 
INFO: ngram_model_arpa.c(534):  3 = #prob2 entries 
INFO: ngram_model_arpa.c(542):  3 = #bo_wt2 entries 
INFO: ngram_model_arpa.c(292): Reading trigrams 
INFO: ngram_model_arpa.c(555):  17 = #trigrams created 
INFO: ngram_model_arpa.c(556):  2 = #prob3 entries 
INFO: ngram_search_fwdtree.c(99): 12 unique initial diphones 
INFO: ngram_search_fwdtree.c(147): 0 root, 0 non-root channels, 12 single-phone words 
INFO: ngram_search_fwdtree.c(186): Creating search tree 
INFO: ngram_search_fwdtree.c(191): before: 0 root, 0 non-root channels, 12 single-phone words 
INFO: ngram_search_fwdtree.c(326): after: max nonroot chan increased to 152 
INFO: ngram_search_fwdtree.c(338): after: 12 root, 24 non-root channels, 11 single-phone words 
KEYWORDS WE'RE LOOKING FOR: [ 'scarlett', 'SCARLETT' ]  

을하지만 아무것도 일치하지 못합니다. 나는 파이썬이 마이크에서 아무 것도들을 수 없다고 거의 생각한다. 아무것도 인식하지 못한다. 에서 pocketsphinx_continuious 그것은 보통 듣기 시작할 준비가되었을 때 READY 상태를 출력합니다 ... 나는 파이썬에서 같은 것을 기대합니까?

또한
[email protected] ~/dev/scarlettPi/scripts/pi/bin $ dpkg -l | grep -i python 
ii idle         2.7.3-4        all   IDE for Python using Tkinter (default version) 
ii idle-python2.7      2.7.3-6        all   IDE for Python (v2.7) using Tkinter 
rc idle3         3.2.3-6        all   IDE for Python using Tkinter (default version) 
ii libpyside1.1:armhf     1.1.1-3        armhf  Python bindings for Qt 4 (base files) 
ii libpython2.6       2.6.8-1.1       armhf  Shared Python runtime library (version 2.6) 
ii libpython2.7       2.7.3-6        armhf  Shared Python runtime library (version 2.7) 
ii libshiboken1.1:armhf     1.1.1-1        armhf  CPython bindings generator for C++ libraries - shared library 
ii python        2.7.3-4        all   interactive high-level object-oriented language (default version) 
ii python-alsaaudio      0.5+svn36-1       armhf  Alsa bindings for Python 
ii python-cairo       1.8.8-1        armhf  Python bindings for the Cairo vector graphics library 
ii python-dbg       2.7.3-4        all   debug build of the Python Interpreter (version 2.7) 
ii python-dbus       1.1.1-1        armhf  simple interprocess messaging system (Python interface) 
ii python-dbus-dev      1.1.1-1        all   main loop integration development files for python-dbus 
ii python-dev       2.7.3-4        all   header files and a static library for Python (default) 
ii python-gi        3.2.2-2        armhf  Python 2.x bindings for gobject-introspection libraries 
ii python-gi-dbg       3.2.2-2        armhf  Python bindings for the GObject library (debug extension) 
ii python-gi-dev       3.2.2-2        all   development headers for GObject Python bindings 
ii python-gobject      3.2.2-2        all   Python 2.x bindings for GObject - transitional package 
ii python-gobject-2      2.28.6-10       armhf  deprecated static Python bindings for the GObject library 
ii python-gobject-2-dbg     2.28.6-10       armhf  deprecated static Python bindings for the GObject library (debug extension) 
ii python-gobject-2-dev     2.28.6-10       all   development headers for the static GObject Python bindings 
ii python-gobject-dbg     3.2.2-2        all   Python 2.x debugging modules for GObject - transitional package 
ii python-gobject-dev     3.2.2-2        all   Python 2.x development headers for GObject - transitional package 
ii python-gst0.10      0.10.22-3       armhf  generic media-playing framework (Python bindings) 
ii python-gst0.10-dbg     0.10.22-3       armhf  generic media-playing framework (Python debug bindings) 
ii python-gst0.10-dev     0.10.22-3       armhf  generic media-playing framework (Python bindings) 
ii python-gst0.10-rtsp     0.10.8-3        armhf  GStreamer RTSP server plugin (Python bindings) 
ii python-gtk2       2.24.0-3        armhf  Python bindings for the GTK+ widget set 
ii python-iplib       1.1-3        all   Python library to convert amongst many different IPv4 notations 
ii python-libxml2      2.8.0+dfsg1-7+nmu1     armhf  Python bindings for the GNOME XML library 
ii python-minimal      2.7.3-4        all   minimal subset of the Python language (default version) 
ii python-numpy       1:1.6.2-1.2       armhf  Numerical Python adds a fast array facility to the Python language 
ii python-pexpect      2.4-1        all   Python module for automating interactive applications 
ii python-pip       1.1-3        all   alternative Python package installer 
ii python-pkg-resources     0.6.24-1        all   Package Discovery and Resource Access using pkg_resources 
ii python-pyalsa       1.0.25-1        armhf  Official ALSA Python binding library 
ii python-pyside       1.1.1-3        all   Python bindings for Qt4 (big metapackage) 
ii python-pyside.phonon     1.1.1-3        armhf  Qt 4 Phonon module - Python bindings 
ii python-pyside.qtcore     1.1.1-3        armhf  Qt 4 core module - Python bindings 
ii python-pyside.qtdeclarative   1.1.1-3        armhf  Qt 4 Declarative module - Python bindings 
ii python-pyside.qtgui     1.1.1-3        armhf  Qt 4 GUI module - Python bindings 
ii python-pyside.qthelp     1.1.1-3        armhf  Qt 4 help module - Python bindings 
ii python-pyside.qtnetwork    1.1.1-3        armhf  Qt 4 network module - Python bindings 
ii python-pyside.qtopengl    1.1.1-3        armhf  Qt 4 OpenGL module - Python bindings 
ii python-pyside.qtscript    1.1.1-3        armhf  Qt 4 script module - Python bindings 
ii python-pyside.qtsql     1.1.1-3        armhf  Qt 4 SQL module - Python bindings 
ii python-pyside.qtsvg     1.1.1-3        armhf  Qt 4 SVG module - Python bindings 
ii python-pyside.qttest     1.1.1-3        armhf  Qt 4 test module - Python bindings 
ii python-pyside.qtuitools    1.1.1-3        armhf  Qt 4 UI tools module - Python bindings 
ii python-pyside.qtwebkit    1.1.1-3        armhf  Qt 4 WebKit module - Python bindings 
ii python-pyside.qtxml     1.1.1-3        armhf  Qt 4 XML module - Python bindings 
ii python-rpi.gpio      0.5.3a-1        armhf  Python GPIO module for Raspberry Pi 
ii python-setuptools      0.6.24-1        all   Python Distutils Enhancements (setuptools compatibility) 
ii python-simplejson      2.5.2-1        armhf  simple, fast, extensible JSON encoder/decoder for Python 
ii python-support      1.0.15        all   automated rebuilding support for Python modules 
ii python-tk        2.7.3-1        armhf  Tkinter - Writing Tk applications with Python 
ii python-yaml       3.10-4        armhf  YAML parser and emitter for Python 
ii python-yaml-dbg      3.10-4        armhf  YAML parser and emitter for Python (debug build) 
ii python2.6        2.6.8-1.1       armhf  Interactive high-level object-oriented language (version 2.6) 
ii python2.6-minimal      2.6.8-1.1       armhf  Minimal subset of the Python language (version 2.6) 
ii python2.7        2.7.3-6        armhf  Interactive high-level object-oriented language (version 2.7) 
ii python2.7-dbg       2.7.3-6        armhf  Debug Build of the Python Interpreter (version 2.7) 
ii python2.7-dev       2.7.3-6        armhf  Header files and a static library for Python (v2.7) 
ii python2.7-minimal      2.7.3-6        armhf  Minimal subset of the Python language (version 2.7) 
[email protected] ~/dev/scarlettPi/scripts/pi/bin $ 

그냥 pocketsphinx을 확인하기 오른쪽 libaries에 대해 제대로 준수되고 : 여기

내 파이썬 패키지입니다

[email protected] ~ $ ldd /usr/local/bin/pocketsphinx_continuous 
    /usr/lib/arm-linux-gnueabihf/libcofi_rpi.so (0xb6f9b000) 
    libpocketsphinx.so.1 => /usr/local/lib/libpocketsphinx.so.1 (0xb6f5a000) 
    libsphinxad.so.0 => /usr/local/lib/libsphinxad.so.0 (0xb6f4e000) 
    libsphinxbase.so.1 => /usr/local/lib/libsphinxbase.so.1 (0xb6f07000) 
    libpulse.so.0 => /usr/lib/arm-linux-gnueabihf/libpulse.so.0 (0xb6ea8000) 
    libpulse-simple.so.0 => /usr/lib/arm-linux-gnueabihf/libpulse-simple.so.0 (0xb6e9c000) 
    libpthread.so.0 => /lib/arm-linux-gnueabihf/libpthread.so.0 (0xb6e7d000) 
    libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0xb6e0c000) 
    libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6cdd000) 
    libjson.so.0 => /lib/arm-linux-gnueabihf/libjson.so.0 (0xb6ccd000) 
    libpulsecommon-2.0.so => /usr/lib/arm-linux-gnueabihf/pulseaudio/libpulsecommon-2.0.so (0xb6c6b000) 
    libdbus-1.so.3 => /lib/arm-linux-gnueabihf/libdbus-1.so.3 (0xb6c29000) 
    libcap.so.2 => /lib/arm-linux-gnueabihf/libcap.so.2 (0xb6c1e000) 
    librt.so.1 => /lib/arm-linux-gnueabihf/librt.so.1 (0xb6c0f000) 
    libdl.so.2 => /lib/arm-linux-gnueabihf/libdl.so.2 (0xb6c04000) 
    libgcc_s.so.1 => /lib/arm-linux-gnueabihf/libgcc_s.so.1 (0xb6bdb000) 
    /lib/ld-linux-armhf.so.3 (0xb6fa8000) 
    libX11-xcb.so.1 => /usr/lib/arm-linux-gnueabihf/libX11-xcb.so.1 (0xb6bd2000) 
    libX11.so.6 => /usr/lib/arm-linux-gnueabihf/libX11.so.6 (0xb6abe000) 
    libxcb.so.1 => /usr/lib/arm-linux-gnueabihf/libxcb.so.1 (0xb6a9f000) 
    libICE.so.6 => /usr/lib/arm-linux-gnueabihf/libICE.so.6 (0xb6a82000) 
    libSM.so.6 => /usr/lib/arm-linux-gnueabihf/libSM.so.6 (0xb6a73000) 
    libXtst.so.6 => /usr/lib/arm-linux-gnueabihf/libXtst.so.6 (0xb6a67000) 
    libwrap.so.0 => /lib/arm-linux-gnueabihf/libwrap.so.0 (0xb6a57000) 
    libsndfile.so.1 => /usr/lib/arm-linux-gnueabihf/libsndfile.so.1 (0xb69ee000) 
    libasyncns.so.0 => /usr/lib/arm-linux-gnueabihf/libasyncns.so.0 (0xb69e2000) 
    libattr.so.1 => /lib/arm-linux-gnueabihf/libattr.so.1 (0xb69d4000) 
    libXau.so.6 => /usr/lib/arm-linux-gnueabihf/libXau.so.6 (0xb69ca000) 
    libXdmcp.so.6 => /usr/lib/arm-linux-gnueabihf/libXdmcp.so.6 (0xb69be000) 
    libuuid.so.1 => /lib/arm-linux-gnueabihf/libuuid.so.1 (0xb69b1000) 
    libXext.so.6 => /usr/lib/arm-linux-gnueabihf/libXext.so.6 (0xb699b000) 
    libXi.so.6 => /usr/lib/arm-linux-gnueabihf/libXi.so.6 (0xb6986000) 
    libnsl.so.1 => /lib/arm-linux-gnueabihf/libnsl.so.1 (0xb696a000) 
    libFLAC.so.8 => /usr/lib/arm-linux-gnueabihf/libFLAC.so.8 (0xb691f000) 
    libvorbisenc.so.2 => /usr/lib/arm-linux-gnueabihf/libvorbisenc.so.2 (0xb67b2000) 
    libvorbis.so.0 => /usr/lib/arm-linux-gnueabihf/libvorbis.so.0 (0xb6782000) 
    libogg.so.0 => /usr/lib/arm-linux-gnueabihf/libogg.so.0 (0xb6775000) 
    libresolv.so.2 => /lib/arm-linux-gnueabihf/libresolv.so.2 (0xb6761000) 
[email protected] ~ $ 

을 그리고 당신은 내 마이크에 대한 정보를 (참조해야하는 경우 ps3 eye) :

이 것을 페이스트빈에 버리면,이 게시물의 방에서 뛰쳐 나왔습니다.

http://pastebin.com/gSDZwRHc

사람이 작동하지 않는 이유는 어떤 아이디어가 있습니까? 제 질문에 설명이 필요하거나 디버깅을 돕기 위해 더 많은 정보를 제공 할 수 있는지 알려주십시오.

감사합니다.

+0

GStreamer 파이프 라인을 디버깅 할 때 파이프 라인을 가능한 작게 만들려면 항상 이점이 있습니다. 그러니 퍽 싱크에서 덤프 = 1로만 펄스 크럭을 가짜 링크에 연결하십시오. (같은 방법으로 name = vader를 vader 요소에 설정합니다). 소리가 들리면, 말할 때마다 많은 아스키 비행이 보일 것입니다. –

+0

이것은 어리석은 것처럼 보일 수 있지만, Raspberry Pi의 Alsa는 역사적으로 깨졌습니다. 어쨌든 마이크에서 오디오 데이터를 가져오고 있습니까? 'arecord'는 어떻게됩니까? – ldrumm

+0

@Harvard Graff : 의견을 주셔서 감사합니다. ascii 디버깅을 보려는 코드에이 행을 추가 했으므로 많은 도움이되었습니다. 내가 깨닫지 못했던 한 가지는 펄스 + 알사를 동시에 사용할 수 있다는 것입니다. 나는 alsasrc device = hw : 1로 바꿨다. 이제는 다음 문제는 키워드가 인식 된 후 다음 들어오는 소리를 녹음하고 텍스트를 번역하기 위해 Google로 전송하는 것입니다. 녹음이 시작되지만 장치가 이미 사용 중이라고 생각하는 소리가 들리지 않습니까? 이견있는 사람? 자세한 내용은 여기를 참조하십시오 : http://blacktonystark.tumblr.com/starkjournal –

답변

4

그래서 나는이 사람을 일하게 만들었습니다.내가 실현하기 위해 필요한

커플 주요 사항 :

1. 한 ALSA는 여전히 당신을 설치되어, 당신의 라즈베리 파이에 펄스 오디오를 사용하는 경우에도 여전히 사용할 수있게되었습니다. (이것은 다른 사람들에게 아무 생각할 줄 모르는 것처럼 보일지 모르지만, 나는 솔직히 내가 동시에 이것들을 사용할 수 있다는 것을 깨닫지 못했다.) 힌트 (syb0rg).

2.이 gstreamer를 통해 Pocketsphinx 원시 오디오 많은 양의 데이터 (내 경우에는 .WAV 형식) 전송에 관해서, (queues는) 당신의 친구입니다.

gst-launch-0.10 alsasrc device=hw:1 ! queue ! audioconvert ! audioresample ! queue ! vader name=vader auto-threshold=true ! pocketsphinx lm=/home/pi/dev/scarlettPi/config/speech/lm/scarlett.lm dict=/home/pi/dev/scarlettPi/config/speech/dict/scarlett.dic hmm=/usr/local/share/pocketsphinx/model/hmm/en_US/hub4wsj_sc_8k name=listener ! fakesink dump=1 

그래서 여기에 무슨 일이 일어나고 있는지 : 실제로 일 GST-출시 - 0.10 뭔가 건너 온 잠시 동안 명령 줄에서 만지작 후

?

  • Gstreamer는 장치 hw : 1 (내 Ps3 Eye USB 장치 임)을 듣고 있습니다. 다를 수 있습니다이 장치는, 다음을 실행하여이 문제를 확인할 수 있습니다
[email protected] ~ $ pacmd dump 
Welcome to PulseAudio! Use "help" for usage information. 

.... 

load-module module-alsa-card device_id="0" name="platform-bcm2835_AUD0.0" 

CARD_NAME = "alsa_card.platform-bcm2835_AUD0.0"namereg_fail을 = false를 tsched = 예 fixed_latency_range = 아니오 ignore_dB = 아니오 deferred_volume = 예 card_properties = "모듈 udev에-detect.discovered = 1"

load-module module-udev-detect 

load-module module-bluetooth-discover 

load-module module-esound-protocol-unix 

load-module module-native-protocol-unix 

load-module module-gconf 

load-module module-default-device-restore 

load-module module-rescue-streams 

load-module module-always-sink 

load-module module-intended-roles 

load-module module-console-kit 

load-module module-systemd-login 

load-module module-position-event-sounds 

load-module module-role-cork 

load-module module-filter-heuristics 

load-module module-filter-apply 

load-module module-dbus-protocol 

load-module module-switch-on-port-available 

load-module module-cli-protocol-unix 

load-module module-alsa-card device_id="1" name="usb-OmniVision_Technologies__Inc._USB_Camera-B4.09.24.1-01-CameraB409241" card_name="alsa_card.usb-OmniVision_Technologies__Inc._USB_Camera-B4.09.24.1-01-CameraB409241" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no 

deferred_volume = YES card_properties = "모듈 udev에-detect.discovered = 1"

주목해야 할
.... 

중요한 라인은 다음과 같습니다 내 플레이 스테이션 3 눈 그게

load-module module-alsa-card device_id="1" name="usb-OmniVision_Technologies__Inc._USB_Camera-B4.09.24.1-01-CameraB409241" card_name="alsa_card.usb-OmniVision_Technologies__Inc._USB_Camera-B4.09.24.1-01-CameraB409241" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes card_properties="module-udev-detect.discovered=1" 

및 DEVICE_ID = 1 이잖아. 따라서 HW : 1 PS3 눈에서 들어오는 음성 데이터를 리샘플링하고 gstreamer를 큐에 추가하고 pocketsphinx로 이동하기 전에 (vader) 소자를 통과하는 도착

  • . 자동 임계 값 = true 플래그가 설정된 vader 요소를 통해 오디오를 전달하면 gstreamer가 배경 잡음 레벨을 결정할 수 있습니다.이 잡음 레벨은 치명적인 사운드 카드 또는 원거리 마이크가있는 경우 중요 할 수 있습니다. 이것은 pocketsphinx 요소가 발화의 시작과 끝을 알 수있는 방법입니다.

  • 우리가 이미 결정한 파이프 라인에 정규 pocketsphix 인수를 추가하십시오 (here).

  • 우리는 지금 아무 소리도 들릴 필요가 없기 때문에 모든 것을 가짜로 만들 수 있습니다. 우리는 모든 것을 듣기 위해서 pocketsphinx 만 있으면됩니다. dump = 1 플래그는 오디오가 전혀 받아 들여지지 않을 경우/처리중인 것을보기 위해 더 많은 디버깅 정보를 제공합니다.그 점점 성공적으로 실행 한 후

는 **, 새로운 파이썬 코드는 다음과 같습니다 : **이 누군가를하는 데 도움이

self.pipeline = gst.parse_launch(' ! '.join(['alsasrc device=' + scarlett_config.gimmie('audio_input_device'), 
              'queue', 
              'audioconvert', 
              'audioresample', 
              'queue', 
              'vader name=vader auto-threshold=true', 
              'pocketsphinx lm=' + scarlett_config.gimmie('LM') + ' dict=' + scarlett_config.gimmie('DICT') + ' hmm=' + scarlett_config.gimmie('HMM') + ' name=listener', 
              'fakesink dump=1'])) 

희망을.

참고 : Gstreamer pipline이 과도한 요소를 사용하고 있다면 실례합니다. 저는 Gstreamer를 처음 사용하기에 새롭습니다. 그리고 저는이 작업을보다 효율적으로 수행 할 수있는 방법을 모색 중입니다.

+0

아마도 pulseaudio가 시스템에 잘못 설정되어있어 펄스 src를 제대로 사용할 수 없습니다. –

+0

@NikolayShmyrev 안녕 Nikolay, 내가 만든 다음 게시물에 대한 당신의 생각에 대해 정말 궁금해서, 나는 cmusphinx 태그에주의를 기울인다. 생각이 있다면 궁금해하니? http://stackoverflow.com/questions/18220129/pocketsphinx-gstreamer-race-condition-pocketsphinx-cant-listen-to-audio-re –