Pocketsphinx语音识别
PocketSphinx是一个计算量和体积都很小的嵌入式语音识别引擎。在Sphinx-2的基础上针对嵌入式系统的需求修改、优化而来,是第一个开源面向嵌入式的中等词汇量连续语音识别项目。识别精度和Sphinx-2差不多。Sphinx-3是CMU高水平的大词汇量语音识别系统,采用连续隐含马尔可夫模型CHMM建模。支持多种模式操作,高精度模式扁平译码器,由Sphinx3的最初版本优化而来;快速搜索模式树译码器。目前将这两种译码器融合在一起使用。
Sphinx-4是由JAVA语言编写的大词汇量语音识别系统,采用连续的隐含马尔可夫模型建模,和以前的版本相比,它在模块化、灵活性和算法方面做了改进,采用新的搜索策略,支持各种不同的语法和语言模型、听觉模型和特征流,创新的算法允许多种信息源合并成一种更符合实际语义的优雅的知识规则。由于完全采用JAVA语言开发,具有高度的可移植性,允许多线程技术和高度灵活的多线程接口。
以上介绍为转载,下文部分内容也为转载。
一、平台
Ubuntu12.04
还需要安装的包:
#sudoapt-getinstalllibasound2-devbison
二、CMUSphinx语音识别工具包下载
Pocketsphinx—用C语言编写的轻量级识别库,主要是进行识别的。
Sphinxbase—Pocketsphinx所需要的支持库,主要完成的是语音信号的特征提取;
Sphinx3—为语音识别研究用C语言编写的解码器
Sphinx4—为语音识别研究用JAVA语言编写的解码器
CMUclmtk—语言模型训练工具
Sphinxtrain—声学模型训练工具
下载网址:http://sourceforge.net/projects/cmusphinx/files/
我们只需要下载以下四个工具包即可:
sphinxbase-0.7、pocketsphinx-0.7、sphinxtrain-1.0.7、cmuclmtk-0.7;
三、安装工具包
在/usr/local/下创建sphinx文件夹,并将上面的下载好的四个工具包拷贝过来:
例,拷贝“下载”文件夹下的sphinxbase-0.7.jar到/usr/local/CMUsphinx/文件夹下:
#sudocp-a/home/主机名/下载/sphinxbase-0.7.jar /usr/local/CMUsphinx/
其他三个包的拷贝,跟上面命令一样,改下名称即可。
由于pocketsphinx依赖于另外一个库Sphinxbase。所以先需要安装Sphinxbase。
(1)安装Sphinxbase
#cd/usr/local/CMUsphinx //跳转到/usr/local/CMUsphinx目录下
#sudochmod777/usr/local/CMUsphinx //赋予CMUsphinx文件夹读写权限
#tar-xzfsphinxbase-0.7.tar.gz
然后在文件管理器里在CMUsphinx目录下重命名sphinxbase-0.7文件夹为sphinxbase(若上部没执行chmod,则无权限重命名)
#cdsphinxbase
#./configure
#make
#sudomakeinstall
注意:./configure将会检查你的系统是否具有其编译所需要的所有包,如果没有的话,它会提示缺少什么包,例如缺少“bison”,那么我们需要对它进行安装:
#sudoapt-getinstallbison
安装完缺少的包后,继续执行./configure,以后遇到类似情况同样处理。
包默认安装在/usr/local/bin下面,ls可查看。可以在配置时用–prefix指定自定义的安装路径,但最好使用默认的安装路径,否则的话得自己添加这些库的路径进环境变量中。
(2)安装pocketsphinx
得先把Sphinxbase的库的路径进环境变量中。
exportLD_LIBRARY_PATH=/usr/local/lib //这个一般系统都已经加进去了
exportPKG_CONFIG_PATH=/usr/local/lib/pkgconfig //这个PKG_CONFIG_PATH主要指明Sphinxbase的.pc文件的所在路径,这样pkg-config工具就可以根据.pc文件的内容动态生成编译和连接选项,比如cflags(编译用的头文件)和libs(连接用的库),至于说pkg-config的具体细节?百度下就知道了,了解这个工具非常有用。
通过:
#sudogedit~/.bashrc
打开后,在新的一行添加(每一个路径一行):
exportLD_LIBRARY_PATH=/usr/local/lib
exportPKG_CONFIG_PATH=/usr/local/lib/pkgconfig
然后保存退出,执行:
#source~/.bashrc
进行测试,上述添加环境变量是否成功
#$LD_LIBRARY_PATH //执行这句命令,将会在终端显示“/usr/local/lib是一个目录”
然后开始编译安装:
#tar-xzfpocketsphinx-0.7.tar.gz
在文件管理器上,重命名pocketsphinx-0.7文件夹为pocketsphinx
#cdpocketsphinx
#./configure
#make
#sudomakeinstall
默认安装在/usr/local/bin下。
测试下安装结果:
#pocketsphinx_continuous
若出现如下信息,说明安装成功。
INFO:cmd_ln.c(512):Parsingcommandline:
pocketsphinx_continuous
Currentconfiguration:
[NAME][DEFLT][VALUE]
-adcdev
………………………………….
…………………………………
………………………………….
Warning:CouldnotfindMicelement
INFO:continuous.c(261):pocketsphinx_continuousCOMPILEDON:Feb212011,AT:22:31:47
READY....
则成功安装pocketsphinx
(3)安装语言模型训练工具CMUCLMTK
#tar-xzfcmuclmtk-0.7.tar.gz
重命名cmuclmtk-0.7文件夹为cmuclmtk
#cdcmuclmtk
#./configure
#make
#sudomakeinstall
默认安装在/usr/local/bin下面,可以看到下面这些生成文件
idngram2lm idngram2stats mergeidngram text2idngram
text2wfreq text2wngram wfreq2vocab
(4)安装声学模型训练工具sphinxtrain
#tar-xzfsphinxtrain-1.0.7.tar.gz
重命名sphinxtrain-1.0.7文件夹为sphinxtrain
#cdsphinxtrain
#./configure
#make
这里没有makeinstall的安装过程,因为sphinxtrain只是包含了用来训练声学模型的Perl和Python脚本,还有一些工具命令。
ubuntu已自带perl与python,运行如下命令,看是否安装有perl和python:
#perl -v //如果已成功安装,终端显示Thisisperl5,version14,subversion2(v5.14.2)....................
#python //如果已成功安装,终端将显示python版本号,GCC版本号。Ctrl+d退出pytohn。
如果未装有perl或python,执行下面命令进行安装:
#sudoapt-getinstallperl
#sudoapt-getinstallpython
四、获得语言模型和声学模型
语言模型和声学模型的来源有以下三个方面:我们这里主要讲中文的。
源代码自带的:
pocketsphinx/model/hmm/zh/tdt_sc_8k目录下是中文的声学模型
pocketsphinx/model/lm/zh_CN目录下是中文的语言模型
这些模型已经被安装(拷贝)到了/usr/local/share/pocketsphinx/model目录下:
(hmm表示隐马尔可夫声学模型,lm表示languagemodel语言模型)
.
├──hmm
│├──en
││└──tidigits
││├──feat.params
││├──mdef
││├──means
││├──sendump
││├──transition_matrices
││└──variances
│├──en_US
││└──hub4wsj_sc_8k
││├──feat.params
││├──mdef
││├──means
││├──noisedict
││├──sendump
││├──transition_matrices
││└──variances
│└──zh
│└──tdt_sc_8k
│├──feat.params
│├──mdef
│├──means
│├──noisedict
│├──sendump
│├──transition_matrices
│└──variances
└──lm
├──en
│├──tidigits.dic
│├──tidigits.DMP
│├──tidigits.fsg
│├──turtle.dic
│└──turtle.DMP
├──en_US
│├──cmu07a.dic
│├──hub4.5000.DMP
│└──wsj0vp.5000.DMP
├──zh_CN
│├──gigatdt.5000.DMP
│└──mandarin_notone.dic
└──zh_TW
├──gigatdt.5000.DMP
└──mandarin_notone.dic
五、使用语言模型和声学模型
运行pocketsphinx进行语音识别需要指定三个文件:声学模型、语言模型和字典文件。我们以源代码自带(pocketsphinx/model下)的三个文件为例子说明如何使用他们进行语音识别。
声学模型:pocketsphinx/model/hmm/zh/tdt_sc_8k
语言模型:pocketsphinx/model/lm/zh_CN/gigatdt.5000.DMP
字典文件:pocketsphinx/model/lm/zh_CN/mandarin_notone.dic
pocketsphinx/model/hmm/zh/tdt_sc_8k/包含了
├──feat.params //HMM模型的特征参数
├──mdef //模型定义文件(为每个即将进行训练的HMM的每一状态定义一个独特的数字标识)
├──means //混合高斯模型的均值
├──mixture_weights //混合权重(不一定有)
├──noisedict //噪声也就是非语音字典
├──sendump //用来从声学模型中获取mixture_weights文件的??
├──transition_matrices //HMM模型的状态转移矩阵
└──variances //混合高斯模型的方差
然后我们执行:
#cd/usr/local/CMUsphinx/pocketsphinx/model
#pocketsphinx_continuous-hmmhmm/zh/tdt_sc_8k/-lmlm/zh_CN/gigatdt.5000.DMP
-dictlm/zh_CN/mandarin_notone.dic
-hmm选项指定声学模型文件夹–lm选项指定语言模型–dict选项指定字典文件;
pocketsphinx会分析你传入的文件取得模型和识别的参数,然后显示出来,再有很多信息,等到显示:
Warning:CouldnotfindMicelement
READY....
到这里你就可以对她喊话让它识别了。