MEMO:Sphinx学习笔记——安装与使用入门(+在ROS中的使用)

柳俊彦
2023-12-01

lz是用ros的,下面的笔记是学习期间用的,不是实际时候用的。

直接sudo apt-get install ros-hydro-pocketsphinx安装这个包,自动会生成一个节点,直接写一个client调用这个服务即可。服务调用的具体命令,请参见wiki中的pocketsphinx篇

ps:软件包下载下来之后有demo文件夹,可以拿来测试recognizer.py的功能






官方介绍:

http://cmusphinx.sourceforge.net/wiki/
一、 使用平台
Ubuntu13.04
(1) Soundrecorder 测试下能否使用
(2) sudo apt-get install libasound2-dev

二、 CMUSphinx语音识别工具包
Pocketsphinx — 用C语言编写的轻量级识别库
Sphinxbase — Pocketsphinx所需要的支持库
Sphinx3 — 为语音识别研究用C语言编写的解码器
CMUclmtk — 语言模型工具
Sphinxtrain — 声学模型训练工具
下载网址:http://sourceforge.net/projects/cmusphinx/files/
下载最新的版本就好了

三、 安装pocketsphinx
由于pocketsphinx依赖于另外一个库Sphinxbase,所以先需要安装Sphinxbase。
(1)安装Sphinxbase
sudo tar xzvf ~/Downloads/sphinxbase-0.8.tar.gz -C /opt
cd /opt/sphinxbase-0.8
sudo ./configure (这里遇见要求我装bison,sudo apt-get install bison就可以继续了)
sudo make
sudo make install
默认安装在/usr/local/bin下面,ls可查看。
(2)安装pocketsphinx
export LD_LIBRARY_PATH=/usr/local/lib
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
sudo tar xzvf ~/Downloads/pocketsphinx-0.8.tar.gz -C /opt
cd /opt/pocketsphinx-0.8
sudo ./configure
sudo make
sudo make install
完成安装,在/usr/local/bin下面可以看到三个新生成的文件,
cd /usr/local/bin
ls
pocketsphinx_batch
pocketsphinx_continuous
pocketsphinx_mdef_convert
测试下安装结果
pocketsphinx_continuous
若出现如下信息,说明安装成功。
INFO: cmd_ln.c(512): Parsing command line:
pocketsphinx_continuous
Current configuration:
[NAME] [DEFLT] [VALUE]
-adcdev
-agc none none
-agcthresh 2.0 2.000000e+00
-alpha 0.97 9.700000e-01
-argfile
-ascale 20.0 2.000000e+01
-backtrace no no
-beam 1e-48 1.000000e-48
-bestpath yes yes
-bestpathlw 9.5 9.500000e+00
-bghist no no
-ceplen 13 13
-cmn current current
-cmninit 8.0 8.0
………………………………….
…………………………………
………………………………….
INFO: ngram_search_fwdtree.c(333): after: 457 root, 13300 non-root channels, 26 single-phone words
INFO: ngram_search_fwdflat.c(153): fwdflat: min_ef_width = 4, max_sf_win = 25
Warning: Could not find Mic element
INFO: continuous.c(261): pocketsphinx_continuous COMPILED ON: Feb 21 2011, AT: 22:31:47
READY....

四、 建立一个简单的语言模型(还没试过,直接做五)
(1)创建一个语料库
vi corpus.txt
输入如下内容:
stop
forward
backward
turn right
turn left
保存退出
(2)利用在线工具LMTool建立语言模型
进入网址:http://www.speech.cs.cmu.edu/tools/lmtool.html
点击Browse按钮,选择之前创建的corpus.txt, 最后点击COMPILE KNOWLEDGE BASE 。
生成TAR2916.tar.gz
tar xzf TAR2916.tar.gz
2916.corpus 2916.lm 2916.sent.arpabo 2916.vocab
2916.dic 2916.sent 2916.token
真正有用的是.dic、.lm 的文件
(3)测试结果
pocketsphinx_continuous -lm 2916.lm -dict 2916.dic
INFO: ngram_search_fwdflat.c(295): Utterance vocabulary contains 1 words
INFO: ngram_search_fwdflat.c(912): 97 words recognized (2/fr)
INFO: ngram_search_fwdflat.c(914): 2342 senones evaluated (38/fr)
INFO: ngram_search_fwdflat.c(916): 1011 channels searched (16/fr)
INFO: ngram_search_fwdflat.c(918): 167 words searched (2/fr)
INFO: ngram_search_fwdflat.c(920): 47 word transitions (0/fr)
WARNING: "ngram_search.c", line 1087: not found in last frame, using instead
INFO: ngram_search.c(1137): lattice start node .0 end node .56
INFO: ps_lattice.c(1228): Normalizer P(O) = alpha(:56:60) = -341653
INFO: ps_lattice.c(1266): Joint P(O,S) = -341653 P(S|O) = 0
000000000: STOP (-6531224)
READY....
Listening...
Stopped listening, please wait...
INFO: cmn_prior.c(121): cmn_prior_update: from < 37.45 -1.28 -0.16 -0.71 0.19 -0.19 -0.07 0.34 0.13 -0.07 -0.03 -0.42 0.19 >
INFO: cmn_prior.c(139): cmn_prior_update: to < 42.22 -0.51 -0.35 -0.28 -0.24 -0.37 0.02 0.38 0.03 -0.05 0.10 -0.32 0.05 >
INFO: ngram_search_fwdtree.c(1513): 847 words recognized (9/fr)
INFO: ngram_search_fwdtree.c(1515): 11452 senones evaluated (123/fr)
INFO: ngram_search_fwdtree.c(1517): 4963 channels searched (53/fr), 534 1st, 3470 last
INFO: ngram_search_fwdtree.c(1521): 1094 words for which last channels evaluated (11/fr)
INFO: ngram_search_fwdtree.c(1524): 203 candidate words for entering last phone (2/fr)
INFO: ngram_search_fwdflat.c(295): Utterance vocabulary contains 2 words
INFO: ngram_search_fwdflat.c(912): 225 words recognized (2/fr)
INFO: ngram_search_fwdflat.c(914): 10189 senones evaluated (110/fr)
INFO: ngram_search_fwdflat.c(916): 5206 channels searched (55/fr)
INFO: ngram_search_fwdflat.c(918): 329 words searched (3/fr)
INFO: ngram_search_fwdflat.c(920): 164 word transitions (1/fr)
WARNING: "ngram_search.c", line 1087: not found in last frame, using RIGHT instead
INFO: ngram_search.c(1137): lattice start node .0 end node RIGHT.48
INFO: ps_lattice.c(1228): Normalizer P(O) = alpha(RIGHT:48:91) = -647142
INFO: ps_lattice.c(1266): Joint P(O,S) = -647271 P(S|O) = -129
000000001: TURN RIGHT (-12643528)
READY....

注意:此方法不可用于中文命令词建立语言模型
五、 利用现有的语言模型和声学模型
(1)下载Mandarin language and acoustic model
下载网址:http://sourceforge.net/projects/cmusphinx/files/Acoustic and Language Models/

Mandarin language model : zh_broadcastnews_64000_utf8.DMP、zh_broadcastnews_utf8.dic
Mandarin Broadcast News acoustic models : zh_broadcastnews_16k_ptm256_8000.tar.bz2

sudo tar xjf zh_broadcastnews_16k_ptm256_8000.tar.bz2 -C /usr/local/bin/
cd /usr/local/bin/zh_broadcastnews_16k_ptm256_8000
ls
feat.params means noisedict transition_matrices
mdef mixture_weights sendump variances

上面这些文件为声学模型中所拥有的文件。

把 zh_broadcastnews_64000_utf8.DMP、zh_broadcastnews_utf8.dic、 zh_broadcastnews_16k_ptm256_8000、pocketsphinx_continuous放在同一个目录下面,然后就可以使 用模型了。
注意使用前配置环境变量:
export LD_LIBRARY_PATH=/usr/local/lib
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
测试:
pocketsphinx_continuous -hmm zh_broadcastnews_ptm256_8000 -lm zh_broadcastnews_64000_utf8.DMP -dict zh_broadcastnews_utf8.dic

到这里你就可以对她喊话让它识别了。对着麦克风讲话结束后在屏幕上以文字形式显示识别结果。在麦克风输入时,两者的最长语音时间为5秒,前者是通过说话人的正常语句停顿作为断句的分割点,并将停顿之前的语音信号作为一个处理段。

亲测这个模型的识别结果好差...而且过短的词语不能识别的样子,大概还是需要自己做声学模型


参考教程:Sphinx武林秘籍(上)――使用现有的语言模型与声学模型 http://www.cnblogs.com/huanghuang/archive/2011/07/14/2106579.html
PocketSphinx语音识别系统的编译、安装和使用
http://blog.csdn.net/zouxy09/article/details/7942784
CMU Sphinx 语音识别学习笔记(1)http://www.chenwang.net/2013/11/21/cmu-sphinx-语音识别学习笔记(1)/
 类似资料: