CMU Sphinx 语音识别学习笔记(1)

为了快速入门,环境先用windows系统。

第一步,到 http://cmusphinx.sourceforge.net/wiki/download/ 直接下载编译好的程序,先把sphinxbase 、pocketsphinx 、sphinxtrain、、beta6 sphinx4 、cmuclmtk 和 https://sourceforge.net/projects/cmusphinx/files/Acoustic%20and%20Language%20Models/ 里面的中文普通话语言模型全下载下来。

在等文件下载完的时候可以先理解一下语音识别的工作方式,对之后自己调整语音识别准确度很有帮助。语音库有3种类型的库,第一个就是 hmm Hidden Markov Model隐马尔可夫模型 模型训练算法,可以理解为声音到音标的库;第二个是dict 词典,可以理解为音标到词(文字)的库;最后一个是lm language model 语言模型,可以理解为各个词的使用频率,这个词和另一个词同时出现的几率。语音识别的过程是先把声音转成音标(通过 hmm Hidden Markov Model隐马尔可夫模型),然后把音标转成词(通过 dict 词典),由于语音的不确定性(同音字、语音不清晰、语音不标准等原因)会识别出来多重可能结果,然后根据 lm language model 语言模型 选择可能性最高的一个作为结果返回,这就完成了语音的识别过程。

第二步,在下载过程中先检查一下麦克风,用windows自带的录音程序录一下音,看看各个距离麦克风的效果,一般的麦克风距离稍微远些声音就很小了,如果想做远距离的声音识别就需要换成监控上面拾音器了。拾音器需要接到音源输入(电脑声卡的蓝色接口)上面,不是接麦克风(声卡的粉色接口)的那个插口。

第三步,把各个文件全部解压出来。为了使用方便,把 pocketsphinx-0.8-win32\pocketsphinx-0.8-win32\bin\Release 路径加到PATH环境变量里面。

第四步,找到之前解压出来的 zh_broadcastnews_ptm256_8000(这是一个目录,里面有 feat.params、 mdef、 means、 mixture_weights 等文件) 、zh_broadcastnews_64000_utf8.DMP 和 zh_broadcastnews_utf8.dic ,把它们放到一个目录里面去,然后执行pocketsphinx_continuous -hmm zh_broadcastnews_ptm256_8000 -lm zh_broadcastnews_64000_utf8.DMP -dict zh_broadcastnews_utf8.dic 就可以测试语音识别效果了。

我没试这个,从网上看其他人的说是效果很不好。我做这个语音识别的目的是为了识别特定命令,所以直接自己生成的语言模型。可以在这里 http://www.speech.cs.cmu.edu/tools/lmtool-new.html 上传文本文件来提供语料资料,然后根据文本内容自动生成词频和用到的词的音标词典。不过这个不支持中文分词和中文音标,需要上传前用空格手工分词,然后打开生成的 *.dic 音标词典文件,自己根据 zh_broadcastnews_utf8.dic 里面的音标手工添加音标。之后执行 pocketsphinx_continuous -hmm zh_broadcastnews_ptm256_8000(或tdt_sc_8k) -lm 你的lm文件 -dict 你的dic文件 就可以测试了。

我的语料文件:

 
打开 浏览器
打开 音乐
打开 记事本
关闭 窗口
关闭 音乐

生成的1675.dic文件内容

 
窗口 ch uang k ou
打开 d a k ai
关闭 g uan b i
记事本 j i sh ib b en
浏览器 l iu l an q i
音乐 y in uxs uxe

生成的1675.lm文件内容

 
Language model created by QuickLM on Wed Nov 20 04:05:27 EST 2013
Copyright (c) 1996-2010 Carnegie Mellon University and Alexander I. Rudnicky

The model is in standard ARPA format, designed by Doug Paul while he was at MITRE.

The code that was used to produce this language model is available in Open Source.
Please visit http://www.speech.cs.cmu.edu/tools/ for more information

The (fixed) discount mass is 0.5. The backoffs are computed using the ratio method.
This model based on a corpus of 5 sentences and 8 words

\data\
ngram 1=8
ngram 2=11
ngram 3=10

\1-grams:
-0.9031  -0.3010
-0.9031  -0.2430
-1.6021 窗口 -0.2430
-1.1249 打开 -0.2553
-1.3010 关闭 -0.2672
-1.6021 记事本 -0.2430
-1.3010 音乐 -0.2430
-1.6021 浏览器 -0.2430

\2-grams:
-0.5229  打开 0.0000
-0.6990  关闭 0.0000
-0.3010 窗口  -0.3010
-0.7782 打开 记事本 0.0000
-0.7782 打开 音乐 0.0000
-0.7782 打开 浏览器 0.0000
-0.6021 关闭 窗口 0.0000
-0.6021 关闭 音乐 0.0000
-0.3010 记事本  -0.3010
-0.3010 音乐  -0.3010
-0.3010 浏览器  -0.3010

\3-grams:
-0.7782  打开 记事本
-0.7782  打开 音乐
-0.7782  打开 浏览器
-0.6021  关闭 窗口
-0.6021  关闭 音乐
-0.3010 打开 记事本 
-0.3010 打开 音乐 
-0.3010 打开 浏览器 
-0.3010 关闭 窗口 
-0.3010 关闭 音乐 

\end\

另附一点资料:
hmm Hidden Markov Model隐马尔可夫模型 模型训练算法
个人理解为声音和音标的关联
中文的有 tdt_sc_8k 和 zh_broadcastnews_ptm256_8000 ,是一个目录。

lm language model
lm模型是统计语料得到的模型,lm模型里存的是语料的组合概率。个人理解为这个是存放的那个词比较常用,那个词在另一个词后面的几率更高。
zh_broadcastnews_64000_utf8.DMP 是从网下下的语言模型,在线生成的语言模型的扩展名是 lm 。

dict 词典
音标和词之间的关联。
zh_broadcastnews_utf8.dic 是从网上下的词典。在线生成的扩展名也是 dic 。

Pocketsphinx — 用C语言编写的轻量级识别库
Sphinxbase — Pocketsphinx所需要的支持库
Sphinx3 — 为语音识别研究用C语言编写的解码器
CMUclmtk — 语言模型工具
Sphinxtrain — 声学模型训练工具

附一下在线生成语言模型和词典的工具 http://www.speech.cs.cmu.edu/tools/lmtool-new.html

本文参考了 http://www.cnblogs.com/huanghuang/archive/2011/07/14/2106579.html 和 http://www.cnblogs.com/yin52133/archive/2012/06/21/2557219.html 写的,如果有不明白的地方建议翻一下上面两个博文系列。

  WordPress › 错误