欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Sphinx语音识别

程序员文章站 2022-07-13 14:41:47
...

一、语音识别简介

Sphinx语音识别

    语音识别的一般框架一般包含几个部分:声学模型、语音模型、以及词典。语音信号(波形)经过前级处理(包括降噪,语音增强,人声检测等)后,提取特征,送入解码模块,进行解析得到识别结果。而解码模块则由 声学模型、语言模型映射、链接组成的网络。目前主流的语音模型一般采用 n-gram 语言模型,声学模型采样隐马尔科夫模型(HMM),这些模型都需要经过预先训练得到。

    上图框架中,发音字典是指系统所能处理的单词的集合,并标明了其发音。通过发音字典得到声学模型的建模单元和语言模型建模单元间的映射关系,从而把声学模型和语言模型连接起来,组成一个搜索的状态空间用于解码器进行解码工作。

二、语音识别开源项目

                                           Sphinx语音识别

    CMU Sphinix,显而易见,从它的名字就能看出来是卡内基梅隆大学的产物。它已经以某些形式存在了 20 年了,现在它在 Github(C (https://github.com/cmusphinx/pocketsphinx) 版本和 Java (https://github.com/cmusphinx/sphinx4) 版本)和 SourceForge (https://sourceforge.net/projects/cmusphinx/) 上都开源了,而且两个平台上都有活动。Github 上的 Java 版本和 C 版本都只有一个贡献者,但是这并不影响此项目的历史真实性(在 SourceForge repo 上有 9 个管理人员还有很多开发者)

    Kaldi 从 2009 年的研讨会起就有它的学术根基了,现在已经在 GitHub (https://github.com/kaldi-asr/kaldi) 上开源,有 121 名贡献者。HTK 始于 1989 年的剑桥大学,已经商用一段时间了,但是现在它的版权又回到了剑桥大学并且已经不是开源软件了。它的版本更新于 2015 年 12 月,先前发布于 2009 年。Julius (http://julius.osdn.jp/en_index.php) 起源于 1997 年,最后一个主要版本发布于 2016 年 9 月,有些活跃的 Github repo 包含三个贡献者,现在已经不大可能反应真实情况了。ISIP 是第一个型的开源语音识别系统,源于密西西比州立大学。它主要发展于 1996 到 1999 年间,最后版本发布于 2011 年,但是这个项目在 Github 出现前就已经不复存在了。

三、PocketSphinx编译运行

3.1.准备

操作系统:windows 7 64Bit SP1

编译器:Viual Studio 2013

pocketsphinx版本:5prealpha

在Sphinx官网下有如下几个下载目录:

  • Pocketsphinx — lightweight recognizer library written in C  (C语言开发的轻量级语音识别引擎)
  • Sphinxtrain — acoustic model training tools (声学模型训练工具)
  • Sphinxbase — support library required by Pocketsphinx and Sphinxtrain (Pocketsphinx和Sphinxtrain的基础类库 )
  • Sphinx4 — adjustable, modifiable recognizer written in Java (Java语言开发的可调节、可修改的语音识别引擎)

这里我们下载Pocketsphinx和Sphinxbase,下载地址:

   https://sourceforge.net/projects/cmusphinx/files/sphinxbase/5prealpha/

   https://sourceforge.net/projects/cmusphinx/files/pocketsphinx/5prealpha/

3.2.编译

1)pocketsphinx依赖于sphinxbase,因此需要先编译sphinxbase。

使用VS2013打开sphinxbase.sln,直接点击生成解决方案即可

Sphinx语音识别

 

输出结果

Sphinx语音识别

 

2)使用VS2013打开pocketsphinx.sln,直接点击生成解决方案,结果报错了。。。

Sphinx语音识别

Sphinx语音识别

 

将sphinxbase的头文件目录以及.lib文件目录加入工程中,看错误估计是路径不对,继续编译就通过了。

Sphinx语音识别

至此,pocketsphinx的编译工作结束了

 

3.3.运行

将sphinxbase.dll复制到pocketsphinx运行目录下,不然会报缺少DLL的错误。

Sphinx语音识别

 

如果有麦克风可以运行一下命令:

pocketsphinx_continuous.exe -inmic yes -hmm model\en-us\en-us -lm model\en-us\en-us.lm.bin -dict model\en-us\cmudict-en-us.dict

 

也可以用文件来运行:

pocketsphinx_continuous.exe -infile C:\Users\Administrator\Desktop\pocketsphinx-5prealpha-win32\pocketsphinx\test\data\speech61-70968-0017.wav  -backtrace yes -hmm C:\Users\Administrator\Desktop\pocketsphinx-5prealpha-win32\pocketsphinx\model\en-us\en-us -lm C:\Users\Administrator\Desktop\pocketsphinx-5prealpha-win32\pocketsphinx\model\en-us\en-us.lm.bin -dict C:\Users\Administrator\Desktop\pocketsphinx-5prealpha-win32\pocketsphinx\model\en-us\cmudict-en-us.dict

运行结果:

Sphinx语音识别

截图中倒数第7行,即为识别结果,输入音频文件的原句如下:

   I COULD NOT SEE MY BOY INJURED EXCELLENCE FOR BUT DOING HIS DUTY AS ONE OF CUMBERLAND'S SONS

四 、模型的获取

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

2、已经训练好的模型下载地址:https://sourceforge.net/projects/cmusphinx/files/Acoustic%20and%20Language%20Models/

  其中Mandarin为中文普通话,下载下来之后我们可以看到
  声学模型:zh_broadcastnews_16k_ptm256_8000.tar.bz2
  语言模型:zh_broadcastnews_64000_utf8.DMP
  拼音字典:zh_broadcastnews_utf8.dic


zh_broadcastnews_ptm256_8000目录结构
├── feat.params   //HMM模型的特征参数
├── mdef   //模型定义文件(为每个即将进行训练的HMM的每一状态定义一个独特的数字标识)
├── means  //混合高斯模型的均值
├── mixture_weights   //混合权重
├── noisedict    //噪声也就是非语音字典
├── sendump  //用来从声学模型中获取mixture_weights文件的?
├── transition_matrices  //HMM模型的状态转移矩阵
└── variances  //混合高斯模型的方差

其他的中文声学模型还有tdt_sc_8k,该模型可以在pocketsphinx-0.8-win32中找到。

相关标签: 语音识别