python学习人工智能/模式识别/机器学习精华专题

sphinx语音识别(1)-基本介绍

2017-08-04  本文已影响504人  西风酹江月

语音数据的特征


语音是一个连续的音频流,它是由大部分的稳定态和部分动态改变的状态混合构成。

image.png image.png

语音识别系统本质上属于模式识别系统的范畴,都包含有特征提取和模板识别.
机器在识别匹配过程中,将输入语音信号的特征与模板库中的特征参数进行对比,根据所选建模方式,找出与之最为相近的模板参数,最终得到识别结果。优化的结果与特征的选择、声学模型的好坏、模板的准确性都有直接的关系。

image.png

Sphinx语音识别开源工具


Sphinx是由美国卡内基梅隆大学开发的大词汇量、非特定人、连续英语语音识别系统。项目网址:
https://cmusphinx.github.io/
Sphinx家族全家福:

image.png

下载目录:

image.png

pocketSphinx-python是sphinx的python版本.在github页面下(https://github.com/cmusphinx/pocketsphinx-python)

Pocketsphinx的安装:

Pocketsphinx现在最新的版本是 5prealpha.下载安装文件后,解压.进入文件夹.

./autogen.sh
./configure
Make clean all
Make check
Sudo make install

如果需要gstreamer支持,那么首先需要安装gstreamer, 然后再安装pocketsphinx.
https://cmusphinx.github.io/wiki/gstreamer/
网站上给出了一个非常棒的demo: livedemo.py. 可以实现实时录音和识别. 下面是demo运行时的界面:

image.png

Pocketsphinx-python安装

也可以安装pocketsphinx的python支持版本.首先下载所有的文件,包括sphinxbase和pocketsphinx.在安装时候需要首先安装上sphinxbase, pocketsphinx, 然后在pocketSphinx-python路径下输入:
sudo python setup.py install

pocketsphinx的使用

支持的文件格式:wav
音频文件的解码要求: 16KHz, 单声道

config.set_string('-hmm', os.path.join(MODELDIR, 'en-us/en-us')) # 计算模型
config.set_string('-lm', os.path.join(MODELDIR, 'en-us/en-us.lm.bin')) #语言模型
config.set_string('-dict', os.path.join(MODELDIR, 'en-us/cmudict-en-us.dict')) # 词典模型

Sphinx有两种模式:
一种是detect模式(设置见上), 一种是keyphrase模式.
以下是keyphrase模式的设置:

config.set_string('-keyphrase', 'forward')
config.set_float('-kws_threshold', 1e+20)

识别率不佳时的改进

通常,特别是针对指定词典库(.dic)和语言模型(lm)时,识别率通常都非常高. 对于识别率不高的情况, 可以从以下几方面改进:
1 采样率和声道. 音频解码时候的声道与录音时候的采样率和声道数不一致.
2 声学模型不一致.
3 语言模型不一致.语言模型应该就是lm模型.
4 词典和词语发音不一致. 也就是phonetic字典.
https://cmusphinx.github.io/wiki/tutorialtuning/
Lmtool: 语言模型库工具
创建解码器所必须的语言模型和词典模型. 当前的lmtool只能用于美式英语.
首先,创建一个Corpus.txt文件(名字可以任意). 在文件中放进需要语料信息(短语, 短句子, 词汇).
然后在这个网站里: http://www.speech.cs.cmu.edu/tools/lmtool-new.html
点击Choose file, 上传txt文件.

image.png

点击Compile knowle base网站会自动生成.dic和语言.lm模型文件等一系列文件.下载其中的.tgz文件,并解压. 假设新生成的语言模型文件名为new_lm.lm, new_dic, 将这两个文件保存到 在代码中修改词典模型和语言模型, 如下, 就可以实现模型的更新. 更新后识别率确实提高了不少.

config.set_string('-lm', os.path.join(MODELDIR, 'en-us/new_lm.lm')) #语言模型
config.set_string('-dict', os.path.join(MODELDIR, 'en-us/new_dic.dic')) # 词典模型

参考文献及资源


王一蒙, 语音识别关键技术研究[D], 北京邮电大学
训练自己语料库的方法:
http://blog.csdn.net/x_r_su/article/details/53034371
[*]这篇博客很有借鉴意义:
http://blog.csdn.net/x_r_su/article/details/53032589
IRST LM Toolkit planning 构建大型语料库的工具
A toolkit for language modeling.
https://sourceforge.net/projects/irstlm/?source=typ_redirect
Cmusphinx bug讨论大汇总:
https://sourceforge.net/p/cmusphinx/bugs/

上一篇下一篇

猜你喜欢

热点阅读