2015-05-24 17:38:46 xiaoding133 阅读数 4278
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5926 人正在学习 去看看 杨波

              本文主要采用matlab和C语言设计并实现了一个鲁棒性语音识别实验系统,通过该系统验证各种抗噪语音特征在不同信噪比的噪声环境下的识别率,并详细介绍了系统的结构以及开发工具与平台,最后介绍了系统的功能、实验流程以及该系统的实现。

系统演示下载路径:http://pan.baidu.com/s/1o61Kaa2

一、系统结构

        本文研究的是非特定人鲁棒性语音识别,采用的是小词汇量孤立词语音。本系统使用了两种语音识别模型,分别为HMM模型和VQ模型。在系统中,利用HMM模型进行抗噪鲁棒性语音识别,采用VQ模型进行SLVQ算法的评估。通过语音库的训练得到识别模型,然后对待测试语音进行识别。其系统结构如图1-1。


图1-1系统结构图

在图1-1所示的结构图中,语音预处理与特征和模型训练器是整个系统的核心。特征提取是训练器的前提,同时也是识别器的前提。语音采集模块完成录音,可以作为语音库来训练识别模型。结果输出模块主要用于将中间识别结果以及系统其他状态信息显示出来。

二、开发工具与平台

本文的语音识别系统在PC上,采用Matlab(R2010b)作为开发工具。语音识别模型HMM采用PMT(Probabilistic Model Toolkit)[97]工具包进行二次开发。下面简单介绍下Matlab和PMT。

Matlab是一个功能强大的科学及工程计算工具,它将矩阵运算、数值分析、图形处理、编程技术等功能有机地结合在一起,被广泛应用于自动控制、系统仿真、图形图像分析、数字信号处理、人工智能、虚拟现实等领域。本系统采用Matlab的主要原因如下:

(1) 丰富的数学函数库;Matlab包含了大量的数学函数库,有求和、复数运算、矩阵运算以及傅里叶变换等函数,这些都为语音信号的处理带来了方便。

(2) 强大的图形功能;它提供了丰富的图形函数库,用一些简单的命令就可以完成多维数据的显示以及图像处理,也可以完成图形用户界面的设计,很方便地完成自己的运算和控制代码。

(3) 应用程序接口(API);它提供了应用程序接口函数库,允许用户使用C或C++语言编写程序与Matlab连接,本系统多处采用C语言编写的程序,采用MEX接口调用,弥补了Matlab速度慢的缺点。

PMT工具包是惠普开发公司提供的一个Matlab和C语言编写的概率模型包,它可以用来建立基本的静态和动态概率模型,目前支持的概率模型包括高斯混合、马尔可夫链、隐马尔可夫模型、线性动态系统等。对于每个概率模型都包括推理、学习的函数,采用最大似然估计来计算模型参数。由于工具包中很多核心函数是采用C语言编写的,提高了运行速度并且可以进行功能扩展。

2.1C-MEX技术

所谓MEX是Matlab Executable的缩写,即Matlab的可执行程序。在Windows操作系统中,它是以DLL为后缀名的文件。MEX文件是Matlab调用其他语言编写的程序算法接口。通过它,用户可以完成以下功能[98]

(1)代码重用

可以在Matlab系统中像调用Matlab的内在函数一样调用已经存在的用C语言或C++语言编写完成的算法,通过添加入口程序mexFunciton,而无须将这些函数重新编写为Matlab的M文件,从而使资源得到充分利用。

(2)速度提升

当需要进行大量的数据处理时,Matlab的执行效率往往比较低,这时可以使用其他高级编程语言进行算法的设计,然后在Matlab环境中调用,从而大幅度提高数据处理的速度。在Matlab中,可以把含有大量循环迭代的代码用C语言代替,然后编译为MEX文件。

(3)功能扩展

通过MEX文件,用户可以服Matlab对硬件访问功能不足的缺点直接对硬件进行编程,如A/D采集,D/A输出卡等,以用于数据采集或控制,进一步扩展Matlab的应用领域。

2.2MEX文件结构与执行流程

MEX文件由两个部分组成,一部分是对mex.h头文件进行包含,该文件定义了矩阵的相关操作,另一部分是入口子程序,其构成形式如下:

void  mexFunciton(int nlhs,mxArray *plhs[],intnrhs,const mxArray *prhs[]);

该函数包括四个参数,从右往左分别为一个mxArray结构体类型的指针数组prhs,该数组指向所有的输入参数;整数类型的nrhs,表示输入参数的个数;一个mxArray类型的指针数组plhs,它指向所有的输出参数;nlhs标明了输出参数的个数,为整数类型。这些参数是用来传递Matlab启动MEX文件的参数。

在该入口函数中,用户主要完成两个方面的任务。一方面,从输入的mxArray结构体中获取计算完毕的数据,然后在用户子程序中利用。另一方面,用户可以将计算完毕的结果返回给一个用于输出的mxArray的结构体,这样Matlab系统就能够识别从用户计算子程序返回的结果。

 MEX文件的执行流程图如下:


图2-2 MEX文件执行流程图

三、系统实现

系统的运行主界面如图3-3所示。从运行主界面图可以看到,系统分为四个部分:数据集区、参数设置区、结果输出区和识别控制区。下面分别介绍这四个部分。

1、数据集区:它包括新增词汇、删除词汇及语音、语音录制以及载入训练集。新增词汇和删除词汇主要为训练语音库和测试语音库增加和删除新的类别。录制语音主要为各词汇采集语音文件,用于训练和识别。录制语音界面如图3-4。

2、参数设置区:它包括特征提取参数设置、端点检测参数设置、识别器参数设置。在特征参数类型中可选择并实现了的参数有MFCC、DAS-MFCC、RASTA-PLP、PNCC、APNSCC等。端点检测参数设置主要包括是否使用端点检测以及检查方法,本系统暂不考虑端点检测给识别结果带来的影响。识别器参数设置包括识别方法的选择(VQ 、HMM)及它们的参数设置(如HMM状态个数、高斯分量数)。

图3-3 系统主界面图


图3-4 声音录制界面

3、结果输出区:主要用于输出系统操作状态信息以及识别结果信息等。

4、识别控制区:主要用于选择识别方式,主要分为测试语音数据识别、训练语音数据识别、单文件语音数据识别、批量语音数据识别、和实时语音识别(包含噪声语音识别)。测试语音数据和训练语音数据识别选项分别表示对所选数据库中的测试语音集合和训练语音集合进行识别,然后在输出模块输出该数据集的正确识别率。单语音识别对单个语音文件进行识别,给出识别结果。批量语音识别对多个语音进行识别,然后输出正确识别率(前提是这些语音文件已经加标签分类)。实时语音识别界面如图3-5所示:


图3-5 实时语音识别界面

在图3-5中,开始按钮用于实时声音采集,然后将识别结果显示在输出框,单击停止按钮,中断信号的采集。除此之外,也可以采用单文件语音识别,选择要识别的语音文件,然后单击确定按钮就可以将识别结果输出在下面。实时语音识别和单文件语音识别都可以选择是否加噪,并且可以选择不同信噪比的多种噪声类型。由于实时声音采集识别速度比较慢并且不好控制环境噪声,这里实验采用事先录制好的单文件语音识别,然后加入各种不同的噪声。

系统的流程图如图3-6所示:


图3-6 系统流程图

从图3-6可以看到,本系统的流程大致分为两部分:第一部分是直接利用现有数据库进行训练识别模型进行实验,然后保存识别模型;第二部分是载入已经保存的模型来进行实验。通过该系统可以很方便地进行鲁棒性的语音识别实验。


系统实验演示见http://pan.baidu.com/s/1o61Kaa2

四、本系统提出的一种改进的抗噪语音特征参数APNSCC提取流程



APNSCC特征参数提取主要代码,分为六步
wave2APNSCC (data)
{data为语音信号;
1.语音信号预处理
yPreEmp = filter([1, -FP.preEmCoef], 1, data);预加重
[framedY,Nframe]= buffer2(yPreEmp, FP.frameSize, FP.overlap);分帧
2.计算自相关序列
for k=1:Nframe
     [c,lags]=xcorr(framedY(:,k),lag, 'unbiased');计算无偏自相关序列
     Rp(:,k)=c(lag+1:end);
end
3.自相关序列滤波与Gammatone功率谱计算
Rp1=Rp; L=2; 滤波器长度 
for i=L+1:Nframe-L
    Rp1(:,i)=(-2*Rp(:,i-2)-Rp(:,i-1)+Rp(:,i+1)+2*Rp(:,i+2))/10;
end
aad_H=ComputeFilterResponse(iNumFilts,iFFTSize,dLowFreq,dHighFreq,dSampRate);
aad_H = abs(NormalizeGammaGain(aad_H, dSampRate));  计算Gammatone滤波器响应
adSpec=fft(Rp,iFFTSize,1);
 ad_X=abs(adSpec);
 fftMag=ad_X(1:iFFTSize/2,:);
for j = 1 : iNumFilts
aad_P(:, j)  = sum((fftMag.* repmat(aad_H(:, j),1,Nframe)) .^ 2)'; 
end
4.非对称滤波
aad_PBias = aad_Q* 0.9; 按照公式(4.15)进行滤波
for j=1:Nframe
   for i = 1 : iNumFilts,   
    if (aad_Q(j,i) > aad_PBias(j,i))
aad_PBias(j,i) = FP.dLamda * aad_PBias(j,i)  + (1 - FP.dLamda) * aad_Q(j,i);
    else
   aad_PBias(j,i) = FP.dLamdb * aad_PBias(j,i) + (1 - FP.dLamdb) * aad_Q(j,i);
    end
   end
end
aad_QS=aad_Q - aad_PBias; 
5.计算倒谱及频谱差分
aadSpec = aad_QHR .^1/ 15
 aadDCT= dct(aadSpec')';计算倒谱系数
[Cdelta,Cddelta] = specD(aad_QHR', deltaWindow, FP.ApnsccNum); 计算频谱差分
6.计算Gammatone谱熵
 H=ComputeEntroy(aad_P',1);  H= heq1(H);直方图均衡化


2016-11-21 16:04:53 sheshou199 阅读数 2238
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5926 人正在学习 去看看 杨波
最近在看kaldi,搜集了一些资料,列下来以供后续参考。
语音识别原理部分:
1、https://www.zhihu.com/question/20398418
知乎上比较火的原理解释。
2、http://blog.csdn.net/abcjennifer/article/details/27346787?utm_source=tuicool
GMM-HMM语音识别模型 原理篇

3、http://blog.csdn.net/wbgxx333/article/details/39006885

语音识别基本原理介绍--gmm-hmm中训练的完整版

关于kaldi部分的:

1、https://github.com/kaldi-asr/kaldi 一个开源的kaldi资料

2、http://blog.csdn.net/xiaoding133/article/details/8842945 上面是别人总结的语音识别方向比较全面的资料来源,非常全面

3、http://blog.csdn.net/lijin6249/article/details/51838936  基于kaldi的在线中文识别,online的操作介绍

4、http://blog.csdn.net/wbgxx333  一个研究语音的大神博客。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2016-01-25 14:43:16 xiaocao9903 阅读数 2647
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5926 人正在学习 去看看 杨波

MATLAB与音视频技术(卓越工程师教育培养计划配套教材——电气工程系列)

作者:王永琦 编著 出版社:清华大学出版社 出版时间:2013年11月 



2019-07-16 22:20:52 weixin_41213648 阅读数 126
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5926 人正在学习 去看看 杨波

概述

虽然现在的语音识别中,DL已经应用的非常广泛了,但是语音识别终究还是有一些领域知识的,将之归类为DL或者ML,似乎都不妥当。特形成本系列文章,用以描述automatic speech recognition的领域知识和传统方法。

说起来还是要感谢DL,不然按照传统的行业划分,几乎不会有人同时研究CV和ASR。DL的出现,实际上大大降低了算法的领域迁移成本,领域知识的重要性相对下降了。

历史

早在电子计算机出现之前,人们就有了让机器识别语音的梦想。1920年生产的“Radio Rex”玩具狗可能是世界上最早的语音识别器,当有人喊“Rex”的时候,这只狗能够从底座上弹出来。

但实际上它所用到的技术并不是真正的语音识别,而是通过一个弹簧,这个弹簧在接收到500赫兹的声音时会自动释放,而500赫兹恰好是人们喊出“Rex”中元音的第一个共振峰。

学校

SR领域最牛的高校主要是美国的CMU、Johns Hopkins University、英国的Cambridge University和日本的东京大学。

书籍

《Speech and Language Processing: An introduction to natural language processing, computational linguistics, and speech recognition》,Daniel Jurafsky & James H. Martin著。

Daniel Jurafsky,1962年生,UCB本科(1983)+博士(1992)。斯坦福大学教授。 
个人主页: 
https://web.stanford.edu/~jurafsky/

James H. Martin,哥伦比亚大学本科+UCB博士。University of Colorado Boulder教授。 
个人主页: 
http://www.cs.colorado.edu/~martin/

这本书比较老了(1999年),但毕竟是本1000页左右的书,传统方法该说的基本都说了。主要问题在于NLP和语义学的内容较多,相对来说ASR的内容就少了些。

这本书在2008年出了第2版(改动较小),如今第3版也在酝酿中,草稿可在如下网页获得:

https://web.stanford.edu/~jurafsky/slp3/

新版大幅增加了深度学习的内容。

《Spoken Language Processing-A Guide to Theory, Algorithm and System Development》,黄学东等著。

这本书基本上是ASR传统方法的大全了,无论理论还是工程实践都有相当大的篇幅,但也有些老了(2001年)。

《解析深度学习:语音识别实践》,俞栋、邓力著。

这本书算是中文写的比较好的教程了,而且DL的篇幅很大,内容非常新。(2016年)

教程

http://tts.speech.cs.cmu.edu/courses/11492/schedule.html

Speech Processing。CMU的这个教程主要包含ASR(Automatic Speech Recognition)、TTS(Text To Speech)和SDS(Spoken Dialog Systems)等三方面的内容。

Alan W Black,苏格兰计算机科学家。Coventry University本科(1984)+University of Edinburgh硕博(1984,1993)。CMU教授。语音处理专家。 
个人主页: 
http://www.cs.cmu.edu/~awb/ 
他的主页上有好多Speech、NLP方面的教程。他本人长得太像Java之父James Gosling了。

http://web.stanford.edu/class/cs224s/index.html

CS224S / LINGUIST285 - Spoken Language Processing。Stanford的教程相对比较新,DL涉及的比较多。

http://www.inf.ed.ac.uk/teaching/courses/asr/index.html

Automatic Speech Recognition。这个课程至少从2012年就开始了,每年都有更新。

http://speech.ee.ntu.edu.tw/DSP2018Spring/

国立台湾大学李琳山教授的课程。

李琳山,国立台湾大学本科(1974)+Stanford博士(1977)。国立台湾大学教授。

http://www.cs.cmu.edu/afs/cs/user/bhiksha/WWW/courses/11-756.asr/spring2014/

Theory and practice of speech recognition systems。CMU的Bhiksha Raj教授的课程,只有ASR的内容。

顺便说一句,Bhiksha Raj的主页上还有好多其他课程。

https://cs.nyu.edu/~eugenew/asr13/

这是MIT博士Eugene Weinstein在NYU当助教的时候(2013年)开的课程。

http://berlin.csie.ntnu.edu.tw/Courses/Speech%20Processing/Speech%20Processing_Main_2016S.htm

Speech Processing。国立台湾师范大学的陈柏琳教授的课程。陈教授教学多年,主页上还有好多其他课程。

https://www.isip.piconepress.com/courses/msstate/ece_8463/lectures/current/index.html

Mississippi State University:ECE 8463: fundamentals of speech recognition

https://www.isip.piconepress.com/courses/msstate/ece_7000_speech/index.html

ECE 8000: special topics in speech recognition

https://www.isip.piconepress.com/courses/msstate/ece_8990_info/index.html

ECE 8990: Information Theory。这门课偏重数学理论,包括Entropy、Markov Processes、Kolmogorov Complexity等内容,适合用于补数学基础。

http://courses.cs.tamu.edu/rgutier/csce630_f14/

CSCE 630: Speech Processing

http://courses.cs.tamu.edu/rgutier/cpsc689_s07/

CPSC 689-604: Special topics in Speech and Face Recognition

https://mp.weixin.qq.com/s/oaOkla9gnUKr2C6PSjE2BA

语音识别中的End-to-End模型教程(附178页PDF全文下载)

https://mp.weixin.qq.com/s/i7JaDoU2L7uRYsw8FTR3jA

语音研究进阶指南

blog

http://www.cnblogs.com/welen/

https://blog.csdn.net/weiqiwu1986

上面两个都是welen的blog,而且内容貌似还不重复。。。

http://blog.csdn.net/xmdxcsj

一个语音识别的blog

https://blog.csdn.net/shichaog

一个语音识别+Kaldi的blog

https://blog.csdn.net/quhediegooo/

一个语音识别的blog

https://blog.csdn.net/dearwind153/article/category/6506891

这哥们的blog很杂,这是语音相关的专栏

http://www.cnblogs.com/JarvanWang/

一个语音识别+Kaldi的blog

https://www.zhihu.com/question/65516424

语音识别kaldi该如何学习?

http://vsooda.github.io/archive/

一个语音识别+DL的blog

https://zhuanlan.zhihu.com/codingmath

一个语音识别的blog

https://blog.csdn.net/jojozhangju

一个Kaldi+声源定位的blog

项目

https://en.wikipedia.org/wiki/List_of_speech_recognition_software

List of speech recognition software

https://mp.weixin.qq.com/s/LsVhMaHrh8JgfpDra6KSPw

横向对比5大开源语音识别工具包

https://github.com/lingochamp/kaldi-ctc

英语流利说开源的kaldi-ctc

https://zhuanlan.zhihu.com/p/23177950

kaldi-ctc: CTC End-to-End ASR

https://mp.weixin.qq.com/s/VkKFQ0fOOHJw0p7Z4EDugQ

绝佳的ASR学习方案:这是一套开源的中文语音识别系统

HTK

Hidden Markov Model Toolkit是Cambridge University开发的语音识别的工具包。它是GMM-HMM时代最为流行的语音识别工具,但近来流行度不如Kaldi。

官网:

http://htk.eng.cam.ac.uk/

HTK Book不仅是使用手册,也是一本介绍原理的书。

http://speech.ee.ntu.edu.tw/homework/DSP_HW2-1/htkbook.pdf

CMU Sphinx

CMU Sphinx是李开复的博士课题项目,后来成为了CMU的长期项目。洪小文、黄学东也先后参与过。该项目比较早的将HMM应用于语音识别,这在当时算是一个重大创新。

李开复,1961年生,Columbia University本科(1983)+CMU博士(1988)。先后供职于Apple、SGI、Microsoft、Google。现为创新工场董事长。

洪小文,1963年生,台湾大学本科+CMU博士。先后供职于Apple、Microsoft,现为微软亚洲研究院院长。

黄学东,1962年生,湖南大学本科(1982)+清华大学硕士(1984)+University of Edinburgh博士(1989)。现为微软首席语音科学家。

Raj Reddy,1937年生,印度裔美国计算机科学家。印度University of Madras本科(1958)+澳大利亚University of New South Wales硕士(1960)+Stanford University博士。CMU教授,首位亚裔图灵奖得主(1994)。 
他还是印度Rajiv Gandhi University of Knowledge Technologies创始人和International Institute of Information Technology, Hyderabad主席。 
他是李开复、洪小文的博士导师,黄学东的博士后导师。

官网:

https://cmusphinx.github.io/

注意:还有一个类似Elasticsearch的文本搜索引擎也叫Sphinx。它的官网是:

http://sphinxsearch.com/

SPTK

The Speech Signal Processing Toolkit是日本的几个科学家开发的语音识别工具库。

官网:

http://sp-tk.sourceforge.net/

Julius

Julius是另一个日本人开发的语音识别工具库。

官网:

http://julius.osdn.jp/en_index.php

HTS

HMM/DNN-based Speech Synthesis System也是日本人开发的工具库,主要用于语音合成。

官网:

http://hts.sp.nitech.ac.jp

Praat

Praat是一款跨平台的多功能语音学专业软件,由University of Amsterdam的Paul Boersma和David Weenink开发。主要用于对数字化的语音信号进行分析、标注、处理及合成等实验,同时生成各种语图和文字报表。

官网:

http://www.fon.hum.uva.nl/praat/

公司

http://www.aispeech.com/

思必驰

http://www.soundai.com/

声智科技。偏重于语音信号处理。

https://zhuanlan.zhihu.com/chenxl

声智科技创始人陈孝良的专栏

数据集

http://www.speech.cs.cmu.edu/databases/an4/

The CMU Audio Databases。这个数据集非常老了(1991年),只有64M。

http://download.tensorflow.org/data/speech_commands_v0.01.tar.gz

TensorFlow提供的Speech Commands Datasets

还有相关的工具:

https://github.com/petewarden/extract_loudest_section

抽取一段wav文件中声音最大的那部分

https://www.kaggle.com/davids1992/speech-representation-and-data-exploration/notebook

包含对Speech Commands Datasets的数据处理过程的blog

https://catalog.ldc.upenn.edu/LDC93S1

TIMIT数据集(收费)

https://mp.weixin.qq.com/s/w9_D1_VVhk9md4RANaipDg

Mozilla开源语音识别模型和世界第二大语音数据集

http://www.voxforge.org/

VoxForge是一个非常活跃的众包语音识别数据库和经过训练的模型库

http://pan.baidu.com/s/1dEhUghz

清华大学语音和语言技术研究中心(CSLT)公开的数据集。这个数据集除了包含thchs30之外,还包含了其他几个小语种的数据集。

http://cn-mirror.openslr.org/18/

单独的thchs30数据集

http://blog.csdn.net/sut_wj/article/details/70662181

THCHS-30:一个免费的中文语料库

http://cn-mirror.openslr.org/33/

AISHELL数据库是THCHS-30之后,目前中文语音数据开源最大的数据库。

它是由北京希尔贝壳科技有限公司(http://www.aishelltech.com)录制的中文普通话数据。由400名来自不同方言区的发音人录制,男女比例均衡。按照设计好的文本,在相对安静环境中使用手机(Android和IOS系统)录制格式为16kHz、16bit单声道数据和高保真麦克风录制格式为44.1kHz、16bit单声道数据同时采集。

http://www.aishelltech.com/aishell_2

AISHELL-2的数据规模达到1000小时和更优秀的系统级recipe。数据目前以硬盘和网盘形式免费开放给高校科研教育机构。商用似乎还是要钱的。



另外本人还开设了个人公众号:JiandaoStudio ,会在公众号内定期发布行业信息,以及各类免费代码、书籍、大师课程资源。

 

                                            

扫码关注本人微信公众号,有惊喜奥!公众号每天定时发送精致文章!回复关键词可获得海量各类编程开发学习资料!

例如:想获得Python入门至精通学习资料,请回复关键词Python即可。

2018-08-21 21:08:24 zh515858237 阅读数 3229
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5926 人正在学习 去看看 杨波

Computational Models of Speech Pattern Processing

在这里插入图片描述
语音识别书籍和网络教程汇总:
https://antkillerfarm.github.io/speech/2018/04/16/speech.html

没有更多推荐了,返回首页