10

刚刚在我的树莓派上安装了pocketsphinx。认为我快疯了,但不确定我是否提供了正确的设备。

每当我跑步时:

src/programs/pocketsphinx_continuous -adcdev plughw:1,0 -nfft 2048 -samprate 48000

我得到以下信息:

root@scarlettpi:/usr/install/pocketsphinx-0.8# src/programs/pocketsphinx_continuous -adcdev plughw:1,0 -nfft 2048 -samprate 48000 信息:cmd_ln.c(691):解析命令行:/usr/install/pocketsphinx -0.8/src/programs/.libs/lt-pocketsphinx_continuous \ -adcdev plughw:1,0 \ -nfft 2048 \ -samprate 48000

当前配置:[NAME] [DEFLT] [VALUE] -adcdev plughw:1,0 -agc none none -agcthresh 2.0 2.000000e+00 -alpha 0.97 9.700000e-01 -argfile
-ascale 20.0 2.000000e+01 -aw 1 1 -backtrace 否 否 -beam 1e-48 1.000000e-48 -bestpath 是 是 -bestpathlw 9.5 9.500000e+00 -bghist 否 否 -ceplen 13 13 -cmn 当前电流 -cmninit 8.0 8.0 -compallsen 否 否 -debug 0 -dict
- dictcase 没有 没有 -dither 没有 没有 -doublebw 没有 没有 -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 是 是 -fsgusefiller 是 是 -fwdflat 是 是 -fwdflatbeam 1e-64 1.000000e-64 -fwdflatefwid 4 4 -fwdflatlw 8.5 8.500000e+00 -fwdflatsfwin 25 25 -fwdflattreewbeam 7e-29 7.0000000 是-wd嗯
-infile
-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 默认值 -logbase 1.0001 1.000100e+00 -logfn
-logspec 否 否 -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 -1 -maxnewoov 20 20 -maxwp -1 -mdef
-mean
-mfclogdir
-min_endfr 0 0 -mixw
-mixwfloor 0.0000001 1.000000e-07 -mllr
-mmap 是 是 -ncep 13 13 -nfft 512 2048 -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 否 否 -round_filters 是 是 -samprate 16000 4.800000e+04 -seed -1 -1 -sendump
-senlogdir
-senmgau
-silprob 0.005 5.000000e-03 -smoothspec 否 否 -svspec
-time 否 否 -tmat
-tmatfloor 0.0001 1.000000 e-04 -topn 4 4 -topn_beam 0 0 -toprule -transform
legacy legacy -unit_area 是 是 -upperf 6855.4976 6.855498e+03 -usewdphones 否 否 -uw 1.0 1.000000e+00 -var
-varfloor 0.0001 1.000000e-04 -varnorm不不 -verbose 不不 -warp_params
-warp_type inverse_linear inverse_linear -wbeam 7e-29 7.000000e-29 -wip 0.65 6.500000e-01 -wlen 0.025625 2.562500e-02

信息:cmd_ln.c(691):解析命令行:\ -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

当前配置:[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没有 -doublebw 没有 没有 -feat 1s_c_d_dd 1s_c_d_dd -frate 100 100 -input_endian little little -lda
-ldadim 0 0 -lifter 0 0 -logspec 否 否 -lowerf 133.33334 1.000000e+00 -ncep 13 13 -nfft 512 2048 -nfilt 40 20 -remove_dc 否 是 -round_filters 是 否 -samprate 16000 4.800000e+04 -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

信息:acmod.c(246):从 /usr/local/share/pocketsphinx/model/hmm/en_US/hub4wsj_sc_8k/feat.params 解析模型特定的特征参数信息:feat.c(713):初始化特征流以输入: '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 信息:acmod.c(167):使用子向量规范 0-12/13-25/26-38 信息:mdef.c(517):读取模型定义:/usr/local/share/pocketsphinx/model/hmm/ en_US/hub4wsj_sc_8k/mdef 信息:mdef.c(528):找到字节顺序标记 BMDF,假设这是一个二进制 mdef 文件信息:bin_mdef.c(336):读取二进制模型定义:/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 信息:tmat.c(205):读取 HMM 转换概率矩阵:/usr/local/share/pocketsphinx/model/hmm/en_US/hub4wsj_sc_8k/transition_matrices 信息:acmod.c(121):尝试使用 SCHMM 计算模块信息:ms_gauden。 c(198): 读取混合高斯参数: /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):读取混合高斯参数:/usr/local/share/pocketsphinx/model/ hmm/en_US/hub4wsj_sc_8k/variances 信息:ms_gauden.c(292):1 个码本,3 个特征,大小:信息:ms_gauden.c(294):256x13 信息:ms_gauden.c(294):256x13 信息:ms_gauden.c( 294):256x13 信息:ms_gauden.c(354):0 方差值下限信息:s2_semi_mgau。c(903):从转储文件 /usr/local/share/pocketsphinx/model/hmm/en_US/hub4wsj_sc_8k/sendump 加载 senones 信息:s2_semi_mgau.c(927):开始文件格式描述信息:s2_semi_mgau.c(1022):将内存映射 I/O 用于 senones INFO:s2_semi_mgau.c(1296):最大 top-N:4 Top-N 光束:0 0 0 INFO:dict.c(317):分配 137543 * 20 字节 (2686 KiB)对于单词条目信息:dict.c(332):读取主字典:/usr/local/share/pocketsphinx/model/lm/en_US/cmu07a.dic 信息:dict.c(211):为字符串分配 1010 KiB,1664电话的 KiB 信息:dict.c(335):133436 字阅读信息:dict.c(341):阅读填充字典:/usr/local/share/pocketsphinx/model/hmm/en_US/hub4wsj_sc_8k/noisedict 信息:dict. c(211):为字符串分配 0 KiB,为电话分配 0 KiB 信息:dict.c(344):读取 11 个字信息:dict2pid.c(396):为字典 INFO 构建 PID 表:dict2pid.c(404):为单词开头的三音素分配 50^3 * 2 个字节 (244 KiB) 信息:dict2pid.c(131):为单词结尾分配 30200 个字节 (29 KiB)三音素信息:dict2pid.c(195):为单音素词三音素分配 30200 字节 (29 KiB) 信息:ngram_model_arpa.c(77):LM 文件中没有 \data\ 标记信息:ngram_model_dmp.c(142):将对 LM 文件使用内存映射 I/O 信息:ngram_model_dmp.c(196): ngrams 1=5001, 2=436879, 3=418286 信息: ngram_model_dmp.c(242): 5001 = LM.unigrams(+trailer) 读取信息:ngram_model_dmp.c(288):436879 = LM.bigrams(+预告片)读取信息:ngram_model_dmp.c(314):418286 = LM.trigrams读取信息:ngram_model_dmp.c(339):37293 = LM.prob2条目读取信息:ngram_model_dmp.c(359):14370 = LM.bo_wt2 条目读取信息:ngram_model_dmp.c(379):36094 = LM.prob3 条目读取 INFO:ngram_model_dmp.c(407):854 = LM.tseg_base 条目读取 INFO:ngram_model_dmp.c(463):5001 = ascii 字串读取 INFO:ngram_search_fwdtree.c(99):788 唯一初始diphones INFO: ngram_search_fwdtree.c(147): 0 root, 0 non-root channels, 60 single-phone words INFO: ngram_search_fwdtree.c(186): Creating search tree INFO: ngram_search_fwdtree.c(191): before: 0 root, 0 个非根频道,60 个单音词信息:ngram_search_fwdtree.c(326):之后:最大非根频道增加到 13428 信息:ngram_search_fwdtree.c(338):之后:457 个根频道,13300 个非根频道,26 个单字-phone words INFO: ngram_search_fwdflat.c(156): fwdflat: min_ef_width = 4, max_sf_win = 25 INFO: Continuous.c(371): /usr/install/pocketsphinx-0.8/src/programs/.libs/lt-pocketsphinx_continuous COMPILED上:2013 年 7 月 21 日,时间:14:34:06

混音器加载失败:无效参数 FATAL_ERROR:“continuous.c”,第 246 行:无法打开音频设备

我目前正在使用 ps3eye。如果我做一个简单的:

arecord -D plughw:1,0 -d 5 -q -f cd -t wav ~/test.wav

一切正常(通过 HDMI 将 Raspberrypi 连接到电视并运行 aplay ~/test.wav 来验证这一点)

我做错了什么伙计们?

您可能需要的信息(基于我看过的其他帖子):

root@scarlettpi:/usr/install/pocketsphinx-0.8# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7
root@scarlettpi:/usr/install/pocketsphinx-0.8# 
root@scarlettpi:/usr/install/pocketsphinx-0.8# aplay -L
null
    Discard all samples (playback) or generate zero samples (capture)
pulse
    PulseAudio Sound Server
sysdefault:CARD=ALSA
    bcm2835 ALSA, bcm2835 ALSA
    Default Audio Device
root@scarlettpi:/usr/install/pocketsphinx-0.8#



root@scarlettpi:/usr/install/pocketsphinx-0.8# dpkg -l | grep "alsa"
ii  alsa-base                             1.0.25+3~deb7u1                      all          ALSA driver configuration files
ii  alsa-firmware-loaders                 1.0.25-2                             armhf        ALSA software loaders for specific hardware
ii  alsa-oss                              1.0.25-1                             armhf        ALSA wrapper for OSS applications
ii  alsa-tools                            1.0.25-2                             armhf        Console based ALSA utilities for specific hardware
ii  alsa-utils                            1.0.25-4                             armhf        Utilities for configuring and using ALSA
ii  alsaplayer-alsa                       0.99.80-5.1                          armhf        PCM player designed for ALSA (ALSA output module)
ii  alsaplayer-common                     0.99.80-5.1                          armhf        PCM player designed for ALSA (common files)
ii  alsaplayer-gtk                        0.99.80-5.1                          armhf        PCM player designed for ALSA (GTK+ version)
ii  gstreamer0.10-alsa:armhf              0.10.36-1.1                          armhf        GStreamer plugin for ALSA
ii  libsox-fmt-alsa                       14.4.0-3                             armhf        SoX alsa format I/O library
root@scarlettpi:/usr/install/pocketsphinx-0.8#



root@scarlettpi:/usr/install/pocketsphinx-0.8# dpkg -l | grep pulseaudio
ii  gstreamer0.10-pulseaudio:armhf        0.10.31-3+nmu1                       armhf        GStreamer plugin for PulseAudio
root@scarlettpi:/usr/install/pocketsphinx-0.8# 

同样在安装袖珍狮身人面像方面,我做了以下事情:

# uninstall pulse audio if its already installed 
apt-get remove pulseaudio -y 
aptitude purge pulseaudio -y

# sphinxbase install
apt-get install bison -y
cd /usr/install
wget  http://downloads.sourceforge.net/project/cmusphinx/sphinxbase/0.8/sphinxbase-0.8.tar.gz
tar -xvf sphinxbase-0.8.tar.gz
cd sphinxbase-0.8
./configure
make
make install
cd -

# pocketsphinx installwget http://sourceforge.net/projects/cmusphinx/files/pocketsphinx/0.8/pocketsphinx-0.8.tar.gz
tar -xvf pocketsphinx-0.8.tar.gz
cd pocketsphinx-0.8
./configure
make
make install

任何朝着正确方向的想法或建议都会非常有帮助。

谢谢,

马尔科姆·琼斯

编辑:

忘记包含此信息:

root@scarlettpi:/usr/install/pocketsphinx-0.8# arecord -L
null
    Discard all samples (playback) or generate zero samples (capture)
pulse
    PulseAudio Sound Server
sysdefault:CARD=CameraB409241
    USB Camera-B4.09.24.1, USB Audio
    Default Audio Device
front:CARD=CameraB409241,DEV=0
    USB Camera-B4.09.24.1, USB Audio
    Front speakers
surround40:CARD=CameraB409241,DEV=0
    USB Camera-B4.09.24.1, USB Audio
    4.0 Surround output to Front and Rear speakers
surround41:CARD=CameraB409241,DEV=0
    USB Camera-B4.09.24.1, USB Audio
    4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=CameraB409241,DEV=0
    USB Camera-B4.09.24.1, USB Audio
    5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=CameraB409241,DEV=0
    USB Camera-B4.09.24.1, USB Audio
    5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=CameraB409241,DEV=0
    USB Camera-B4.09.24.1, USB Audio
    7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
iec958:CARD=CameraB409241,DEV=0
    USB Camera-B4.09.24.1, USB Audio
    IEC958 (S/PDIF) Digital Audio Output
root@scarlettpi:/usr/install/pocketsphinx-0.8# 
4

3 回答 3

20

花了我一段时间,在几个来源的帮助下(他们将在我的答案中列出)和来自nikolay-shmyrev 的一些有用的提示,我终于想出了一个对我有用的答案。

关键假设:

  1. 以 pi 用户身份运行这些命令(以前我以 root 身份运行它们,这是不正确的)

  2. 我正在使用持续识别,我只是在寻找“唤醒”我的树莓派的能力。唤醒它后,我对它应该如何交互有其他计划。

我的设置:

  1. Canakit 树莓派

  2. HDMI 线连接到我的东芝电视

  3. USB wifi 加密狗

  4. 用于语音识别的 Playstation 3 Eye

向前进。我在我的 RaspberryPi 上运行了以下命令,让 PulseAudio + pocketsphinx 与我的 Playstation 3 Eye 一起工作。(如果您发现任何改进的地方,请告诉我)

安装脉冲音频/开发包

sudo apt-get install gstreamer0.10-pulseaudio libao4 libasound2-plugins libgconfmm-2.6-1c2 libglademm-2.4-1c2a libpulse-dev libpulse-mainloop-glib0 libpulse-mainloop-glib0-dbg libpulse0 libpulse0-dbg libsox-fmt-pulse paman paprefs pavucontrol pavumeter pulseaudio pulseaudio-dbg pulseaudio-esound-compat pulseaudio-esound-compat-dbg pulseaudio-module-bluetooth pulseaudio-module-gconf pulseaudio-module-jack pulseaudio-module-lirc pulseaudio-module-lirc-dbg pulseaudio-module-x11 pulseaudio-module-zeroconf pulseaudio-module-zeroconf-dbg pulseaudio-utils oss-compat -y

设置 ALSA

根据http://forums.debian.net/viewtopic.php?f=16&t=12497的说明

sudo \cp -pf /etc/asound.conf /etc/asound.conf.ORIG 
echo 'pcm.pulse {
    type pulse
}

ctl.pulse {
    type pulse
}

pcm.!default {
    type pulse
}

ctl.!default {
    type pulse
}' | sudo tee /etc/asound.conf

确保您的相机设备在启动时加载

_DEVICE_LOAD_ON_START=$(grep "snd.bcm2835" /etc/modules | wc -l)
if [[ "${_DEVICE_LOAD_ON_START}" = "0" ]]; then

  sudo \cp -pf /etc/modules /etc/modules.ORIG
  echo "snd-bcm2835" | tee -a /etc/modules

fi

# Disallow module loading after startup. This is a security feature since it disallows additional module loading during runtime and on user request.
_DISALLOW_MODULE_LOADING=$(grep "DISALLOW_MODULE_LOADING=1" /etc/default/pulseaudio | wc -l)
if [[ "${_DISALLOW_MODULE_LOADING}" = "0" ]]; then

  sudo \cp -pf /etc/default/pulseaudio /etc/default/pulseaudio.ORIG
  sudo sed -i "s,DISALLOW_MODULE_LOADING=1,DISALLOW_MODULE_LOADING=0,g" /etc/default/pulseaudio

fi

为网络连接设置 PulseAudio 守护程序

# allow other clients on the network to connect to pulseaudio daemon ( only add auth-anonymous=1 if you know EVERY machine on your LAN ... this could be a security risk otherwise )
sudo \cp -fvp /etc/pulse/system.pa /etc/pulse/system.pa.ORIG
echo "
# ScarlettPi ADDED THIS
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/24 auth-anonymous=1
load-module module-zeroconf-publish" | sudo tee -a /etc/pulse/system.pa

echo "
# ScarlettPi added this
#load-module module-native-protocol-tcp
#load-module module-zeroconf-publish
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/24 auth-anonymous=1
load-module module-zeroconf-publish" | sudo tee -a /etc/pulse/default.pa

# check to make sure it looks okay
cat /etc/pulse/default.pa

将默认声音驱动程序从 alsa 更改为 pulseaudio

sudo \cp -fvp /etc/libao.conf /etc/libao.conf.ORIG
sudo sed -i "s,default_driver=alsa,default_driver=pulse,g" /etc/libao.conf 

# daemon settings according to Pi-Musicbox ( https://github.com/woutervanwijk/Pi-MusicBox )
sudo \cp -fvp /etc/pulse/daemon.conf /etc/pulse/daemon.conf.ORIG

echo "
# ScarlettPi added this
high-priority = yes
nice-level = 5
exit-idle-time = -1
resample-method = src-sinc-medium-quality
default-sample-format = s16le
default-sample-rate = 48000
default-sample-channels = 2" | sudo tee -a /etc/pulse/daemon.conf

pi用户添加到脉冲访问组

sudo adduser pi pulse-access

# shut down the machine to make sure all the settings we just made are loaded correctly
sudo shutdown -r now

确保添加/usr/local/lib到库路径

export LD_LIBRARY_PATH=/usr/local/lib
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

# also add these to your .bashrc so they get set once you login 
echo "
# scarlettPi added this
export LD_LIBRARY_PATH=/usr/local/lib
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig" | tee -a ~/.bashrc

安装基础 PocketSphinx

# install python dev packages
sudo apt-get install python2.7-dev -y

# sphinxbase install ( required to install pocketsphinx )
sudo apt-get install bison -y
cd ~pi/
wget  http://downloads.sourceforge.net/project/cmusphinx/sphinxbase/0.8/sphinxbase-0.8.tar.gz
tar -xvf sphinxbase-0.8.tar.gz
cd sphinxbase-0.8
./configure
make
sudo make install
cd -

# pocketsphinx install
# set this: LD_LIBRARY_PATH=/path/to/pocketsphinxlibs /usr/local/bin/pocketsphinx_continuous
# http://www.voxforge.org/home/forums/message-boards/speech-recognition-engines/howto-use-pocketsphinx
wget http://sourceforge.net/projects/cmusphinx/files/pocketsphinx/0.8/pocketsphinx-0.8.tar.gz
tar -xvf pocketsphinx-0.8.tar.gz
cd pocketsphinx-0.8
./configure
make
sudo make install
cd -

# install sphinxtrain
wget http://sourceforge.net/projects/cmusphinx/files/sphinxtrain/1.0.8/sphinxtrain-1.0.8.tar.gz
tar -xvf sphinxtrain-1.0.8
cd sphinxtrain-1.0.8
./configure
make
sudo make install
cd -

检查脉冲守护进程是否正在运行

ps aux | grep pulse

# If it isn't, start it up yourself ( need to figure out the best way to make this run on boot...init.d script maybe? )
/usr/bin/pulseaudio --start --log-target=syslog --system=false

最后,运行 Sphinx

重要提示 您必须是用户 PI 并且 PULSEAUDIO 服务器需要运行

假设现有的语料库文件、.jsgf 文件、.dic 和 .lm 文件(使用lmtool

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

参考:

我计划在我写的关于我的家庭自动化项目的博客文章中添加更多详细信息,以说明为什么我使用某些设置和配置,但我想,我会分享我迄今为止所做的事情,以防其他人像我一样被卡住并且想继续他们正在做的事情。希望这可以帮助某人。谢谢各位的建议。

于 2013-07-24T01:44:28.270 回答
2

apt-get remove pulseaudio -y aptitude purge pulseaudio -y

如果您不知道如何配置 alsa,您最好使用 pulseaudio,而且它是在您的系统上配置的。您应该更好地编译带有 pulseaudio 支持的 sphinxbase。有关更多信息,请阅读常见问题解答:

http://cmusphinx.sourceforge.net/wiki/faq#qfailed_to_open_audio_device_dev_dsp_no_such_file_or_directory

混合器加载失败:参数无效

这是一条关键信息,它表示您的 alsa 配置不支持电平混合器。如果您不知道如何在 alsa 配置中添加混音器,请使用 pulseaudio

./configure --enable-fixed

这也是一个坏主意,它会降低设备的速度和准确性。你的处理器有 FPU,所以你不应该使用定点模式。

于 2013-07-22T04:14:32.817 回答
1

我有同样的问题,无法打开音频设备。

http://cmusphinx.sourceforge.net/wiki/faq#qfailed_to_open_audio_device_dev_dsp_no_such_file_or_directory

我修复它购买安装 libpulse-dev 包然后重新安装 sphinxbase , pocketsphinx。

于 2014-04-15T07:28:33.760 回答