在线语音听写与识别的系统设计与实现.docx
《在线语音听写与识别的系统设计与实现.docx》由会员分享,可在线阅读,更多相关《在线语音听写与识别的系统设计与实现.docx(22页珍藏版)》请在冰豆网上搜索。
在线语音听写与识别的系统设计与实现
在线语音听写与识别的系统设计与实现
摘要:
在21世纪的今天,随着科学技术的逐渐进步,人类交流沟通的水平也迈向新的时代。
计算机为代表的机器逐渐进入人类的日常生活中就是最明显的标志。
计算机和人类的生活已经息息相关了。
语音技术逐渐走入人民群众的视野,不管是日常的语音识别还是语音合成都渗透进大家的生活中,语音交互日益成为趋势。
我们将了解语音技术的发展过程,以及该项目的一个开发背景。
了解我们为什么要去研究语音识别,它的意义在哪里?
全方位的对语音识别进行了解。
最后通过讯飞开放API进行功能的实现。
关键词:
语音技术;开发背景;识别;合成
Abstract:
Intwenty-firstCentury,Withthegradualprogressofscienceandtechnology,Thelevelofhumancommunicationandcommunicationisalsoheadingforanewera.Computersarethemostobvioussymbolofthegradualentryofmachinesintohumandailylife.Computersarecloselyrelatedtohumanlife.Voicetechnologyhasgraduallyenteredthevisionofthepeople,Whetherit'sdailyspeechrecognitionorphoneticChengduinfiltrateintoyourlife,Voiceinteractionisincreasinglybecomingatrend.Wewillunderstandthedevelopmentofspeechtechnology,Andadevelopmentbackgroundoftheproject.Understandwhywehavetostudyspeechrecognition,Whereisthemeaningofit?
Anomni-directionalunderstandingofspeechrecognition.Finally,therealizationofthefunctionoftheXunfeiopenAPI
Keywords:
Speechtechnology;Developmentbackground;Distinguish;Synthesis
1绪论
1.1课题背景
视觉和听觉是人类的重要沟通手段。
一个接收图像信息,一个接收声音信息。
而在声音信息中,语音又是最常规的交流形式。
随着科学技术的逐渐进步,人类交流沟通的水平也迈向新的时代。
计算机为代表的机器逐渐进入人类的日常生活中就是最明显的标志。
计算机和人类的生活已经息息相关了。
那么让人与计算机的沟通更加方便、快捷就具有了一定的重要意义。
如今,计算机技术的更新速度太快,层出不穷的新技术新工具以及人与机器的交互方式也日新月异。
但是目前来看,人们对机器的交流方式远不如人与人采用语言交流来的便利。
人们希望能出现简单便捷的操作方式。
由此可以看出,人机交互技术的未来方向必将是语音识别.
首先拉开研究序幕的事来自于贝尔实验室(AT&TBELL)的科学家们。
经过若干年的探索与研究之后,他们发表了世界上的第一个语音识别系统—Audry系统。
虽然Audry系统的识别能力十分局限,仅仅适用于实验范围内的是个数字内容的英文单词,但是它也确实是人们对声学、语言学探索之后的第一个真正意义上的识别作品。
卡内基·梅隆大学成功的在1988年推出了语音研发Sphinx系统。
此前,50年代的语音识别还是局限在孤立字和特定人的范畴。
但Sphinx系统的出现打破了这个局限,它把非特定人、大词汇量和连续语音这三大特性成功的集成一起,在实验数据范围内对连续语音进行识别的准确率能达到94.7%。
这一系列数据都彰显着语音交互技术的发展更加的深入[1]。
而语音交互技术进入热潮的节点则是正在2011年10月美国apple公司发布了一款带有“Siri”语音助手功能的iphone4s手机,之后一款Echo的音箱得到了热卖,让亚马逊赚得盆满钵满则是标志语音技术发展具有一个多么大的前景。
我国在语音识别方面的研究工作的展开时间同国际相比稍有落后,但研究成果依然丰富,尤其在汉语的语音识别领域较为突出。
早期中科院声学所利用频谱分析、模板匹配等方法,孤立词的语音识别系统也是中科院全力主持开发的。
而后,第一个汉语语音人机对话系统识别准确率达到90%以上的就是中科院的自动化所研制的。
在现目前,中国各大公司主流平台都在这一块取得了显著的成果[2]。
1.2研究目的及意义
伴随互联网技术发展的今天,语音交互技术进入飞速的发展期,渐渐都渗透进了大众的生活,人们可以在手机上进行语音搜索、语音导航、语音输入。
这些都代替了传统的人工交互,奠定了语音识别技术在人机交互研究发展中不可忽视的地位。
通过此次课题,通过开放的API来实现语音识别和合成的功能,来了解目前国内的一个语音交互技术达到了一个什么样的程度,对于语音识别的正确率有一个了解,从而判断能否广泛的应用于终端。
1.3研究内容
主要分析研究讯飞的开放API文件,以及如何调用这个API。
多多的了解目前语音交互在市场上的一个应用。
了解各大公司目前语音识别技术的成熟程度。
1.4可行性分析
1.4.1目标和方案的可行性
语音交互在现在这个时代是逐渐被重用,人们需要在日常生活中广泛运用,比如开车时的语音导航、文字的语音输入。
这些都大大方便了人们的日常生活。
1.4.2技术方面的可行性
现如今XX、讯飞等国内语音交互技术已经十分的成熟,我们只需要调用他的API就可以实现功能。
开发环境是在前端上,所以只需要js和CSS技术就能实现,然后把数据发送给后端,处理后再传回前端就行。
1.4.3经济方面的可行性
XX与讯飞都有免费的接口,所以成本很低,没有任何的开销。
1.5本章小结
本章对语音交互技术的“前世”与“今生”都进行了一个很好的介绍,了解语音交互技术是什么以及语音交互技术的发展现状。
并论述了本论文的研究内容。
简单的介绍了语音交互系统至今的一个发展过程还有就是语音交互系统在当下的一个应用环境。
2相关工作进展
2.1语音识别相关知识
2.1.1语音的特性
语音最明显的两个特性分别是:
时变性、非平稳性。
其中受诸多因素的影响而使语音在形成的过程中产生变化就是“时变性”,如声道、气流、气压等等。
这是语音信号随时间变化的根本原因;“非平稳性”是由“时变性”衍生出来的特性,一般用于说明语音信号的整体特性,这一特性决定了语音信号不能被直接处理,所以,需要将语音信号以帧为单位来进行处理。
通常,把10ms-30ms时长内的一段语音信号定义为一帧[3]。
2.1.2语音识别的基本步骤
语音识别基本上都是要包含以下这四个步骤的:
1)语音信号的预处理;2)对处理后的数据做端点检测;3)对检测出的语音段提取特征参数;4)利用提取出的特征序列与模板库做匹配。
预处理是要对输入的信号做一些简单的处理工作,方便后续操作,包括分帧加窗等等,其中语音识别中的第一个重要环节就是端点检测,它的目的是要找到包含真实有效语音段的语音信号,这一步骤如果检测失败,那后续的操作也就没有什么意义了。
检测出真实的语音段落后,提取随时间变化的特征参数,这个过程一般有若干的参数可供选择,并不唯一。
最后,就要利用得到的特征序列与模板库中的特征序列进行一一匹配,选定最佳的匹配结果为最终的识别结果。
当然声学模型与特征序列之间进行匹配,这也是很常见的匹配方法[4]。
因此,基本流程图一般如图2-1所示:
图2-1语音识别的基本流程
2.1.3预处理
预处理的前期处理模块中包含了预加重、信号数字化以及加窗分帧。
每一个环节都是重要环节,它们在每一个环节所起到的作用都是能够产生至关重要的影响;加窗分帧对信号进行分段处理,而预加重和信号数字化则是对信号进行滤波、分帧和A/D变化。
2.1.4端点检测
有效信号的开始和结束要靠什么来确定呢?
那就是端点检测了,它通过处理办法去除无效的没有意义的信号段,然后简化模块复杂度,大部分的匹配识别运算量得到了减少,整个系统的效率也就得到了提高。
首先,在采集到的语音样本中排除无效的语音信号时间段,排除掉之后,从中提取有效的语音信号上传给系统,所以系统的计算量就可以大大减少。
它是通过端点检测出信号的开始和结束然后确定各个段落,其具有两大明显优点:
1、排除了无效的语音段,让后续模块只识别有效的模块,减低了系统的计算量,提高了系统的识别效率
2、把语音识别中很重要的噪音干扰还有无声段排除了,识别的精度得到了提升,如果端点检测不正确,那么就肯定会导致不准确的语音识别,所以端点检测有着对后期处理至关重要的作用。
2.1.5特征参数提取
特征参数提取就是对原始语音信号运用一定的数字信号处理技术进行适当处理从中抽取能反映语音本质的特征参数,形成特征矢量序列。
特征参数提取是语音识别中关键的一环,提取到好的特征参数既方便了计算也能够很好的体现语音的特征,这对于系统的实现十分的重要,下面进行详细介绍:
1、时域参数:
短时平均过零率以及常用短时平均能量,这就是时域参数,同时还有常用在汉字声调区别和清浊音分类的基音周期(pitch);
2、频域参数:
频率参数主要有短时频谱、三个共振峰以及倒谱
2.1.6模板匹配
语音识别中最后一个环节是模板匹配,这个环节需要判断提取的特征参数与语音模板的特征参数相似性。
一般的常用方法有动态时间弯曲算法、基于隐马尔克夫模型的方法以及基于人工神经网络的方法
2.2语音合成相关知识
2.2.1基本概念
语音合成:
让智能设备有了嘴巴,将任意的文本合成为自然语言,然后模拟出人类的语音,再开口说出文本内容。
通过语音学规则、语义学规则以及词汇规则来提高语音合成的清晰度与自然度。
首先要进行文本转换,就是把输入的文本信息通过相应的规则变为音韵序列,然后转换为声音波形。
从中可以看出,文本信息与声音信息的转换可以分为两个阶段。
第一阶段,文本变成声音,这一部分涉及面比较广,除开其中的字音转换、分词等处理技术还要使用韵律的生成规则。
第二部分,语音波形的生成,语音流的清晰与自然,要依靠使用语义学、语音学等语言学规则算法。
所以,语音合成系统对于语言学也是有很深的涉及的[5]。
2.2.2语音合成的方法
语言合成技术的关键就是通过规则使文本信息能够变成声音信息,。
而其中参数合成法与波形拼接法是目前能够满足实际应用的语音合成技术,这是多年的研究所得。
两波形拼接法和参数合成的实现原理和基本思想如下。
1、基于波形拼接的语音合成技术
何谓波形拼接?
首先将合成语音的核心储存到语音库,然后按照文本合成的要求进行合成,再从语音库中把合成语音的核心读取出来进行波形的拼接和处理。
最后合成到所需要的语音,这就是波形拼接。
而目前波形拼接法有两种实现的形式。
第一个是波形编码的合成,跟语音编码中波形编解码十分的类似,具体就是把需要合成的语音的波形进行编码压缩,之后再在合成的时候解码组合输出。
第二个是波形编辑合成,波形编辑技术是通过在语音库中选择语音的合成单元的波形,然后波形编辑之后再输出。
但是波形拼接合成法只是目前一种十分简单的语音合成技术,所以目前大多数只用来合成有限词汇的语音段。
2、基于参数合成的语音合成系统
目前来看参数合成法是比较复杂的一种方法,首先就是要进行“训练”,也就是录用大量能够涵盖人发音过程中的所有读音。
通过预处理得来的语音参数使用HMM对参数进行建模,在融合为一个全面的音库。
而在发音的过程中,要根据需要发什么音再从音库中选择对应的声学参数,然后根据算法合成语音。
那么再来详细介绍一下参数合成法的优缺点[6]。
优点:
语音库数据规模一般比较小,而且标注的精度要求也相对降低,自然度高。
缺点:
目前参数合成技术的算法比较复杂参数也很多,合成时大量占用CPU的资源。
不仅合成的音质差并且还有一种合成器的风格。
2.3本章小结
本章着重的介绍了语音合成和语音识别的相关状况,并且给出了语音识别基本步骤的框架和语音合成目前使用的技术。
根据框架中的步骤重点普及了语音数据的预处理,语音端点检测的主流算法及相关原理,真实语音段的特征参数选取和基本的提取步骤,还有利用特征参数进行模板匹配时的相关算法与算法原理[7]。
还讲解了语音合成技术的实现流程和基本含义,详细介绍了参数合成法与波形拼接法是目前语音合成技术所主要使用的方法。
3基于XX、讯飞开放API的语音识别与合成的研究
3.1基于讯飞开放API的语音识别与合成的研究
3.1.1讯飞HTML5API介绍
基于HTML5标准实现的“网页语言”的语音接口目前支持语音合成、云端听写。
它采用了WEBSOCKET的通信协议,其后端又是基于NODEJS的开放框架。
通过JAVASCRIPT来实现云和端。
这个API封装了音量检测、音频压缩、WAV、MP3、端点检测等模块,支持语音合成、语音识别的实时回调[8]。
浏览器支持情况如表3-1所示
表3-1浏览器支持情况
浏览器类型
听写业务
合成业务
Firefox
PC支持/Android支持/IOS不支持
支持
Safari
待开放
支持
Chrome
PC支持/Android支持/IOS不支持
支持
IE9+
支持
支持
Android默认
待开放
支持
UC浏览器
PC支持/Android不支持/IOS不支持
支持
360浏览器
PC支持/Android不支持/IOS不支持
支持
微信浏览器
待开放
支持
3.1.1讯飞语音识别介绍
3.1.1.1听写开发接口说明
IFIyIatSession接口
□函数原型
FunctionIFlyIatSession(cfg)
□功能
主要是调用其他的听写接口,将“语音听写会话”进行初始化。
□参数
params[in]
JSON格式,会话时传入的参数的建立,其能设置的参数及其取值范围如表3-2所示。
表3-2听写会话参数列表
参数
参数说明
取值范围
url
连接的服务器地址
默认值:
compress
音频压缩算法
speex
reconnection
客户端是否支持断开重连
默认值为true(客户端支持断开重连)
reconnectionDelay
连接断开提示
取值范围(0~999999)
speex_path
speex.jx文件本地路径
无
Vad_path
vad.js文件本地路径
无
Recorder_path
recorderWorker.js文件本地路径
无
□说明
创建听写会话接口。
此接口在程序中只调用一次
□用法
/**
*初始化Session会话
*url连接的服务器地址(可选)
*reconnection客户端是否支持断开重连
*reconnectionDelay重连支持的延迟时间
*/
varsession=newIFlyIatSession({
'url':
':
80/',
'reconnection':
true,
'reconnectionDelay':
30000
});
Start接口
□函数原型
Functionstart(params,function(volume),function(err,result),function(message),
function(data))
□功能
“开始语音识别”接口,通过传入识别参数,进行麦克风录音,获得对应的识别结果和
音量回调。
□参数
1.params[in]
识别参数,为JSON格式,可以设置的参数及其取值范围如表3-3所示
表3-3听写业务可设置参数列表
参数
参数说明
取值范围
ptt
标点符号添加
值为1,返回结果含标点符号;
值为0,返回结果不含标点符号。
rst
识别结果格式
值为plain,直接返回识别结果;
值为json,返回JSON格式结果。
rse
结果编码格式
gb2312
utf8
Unicode
ent
引擎类型,不同类型的引擎提供不同的功能。
sms16k16K采样率中文
sms8k8K采样率中文
sms-en16k16K采样率英文
sms-en88K采样率英文
writeAudio
是否从外部写入录音数据
true从外部写入录音数据;
false内部实现录音
2.function(volume)[out]
返回音量的函数,第一个回调函数
3.function(err,result)[out]
结果回调的接口,第二个回调函数。
4.function(message)[out]
点明录音停止与启动的函数,第三个回调函数
5.function(data)[out]
实时返回的音频数据,第四个回调函数
□用法
/*可设置的参数及含义请参考《HTML5API可设置参数列表》*/
varssb_param={"grammar_list":
null,"params":
"aue=speex-wb;-1,usr=mkchen,ssm=1,sub=iat,
net_type=wifi,ent=sms16k,rst=plain,auf=audio/L16;rate=16000,vad_enable=1,vad_timeout=
5000,vad_speech_tail=500,compress=igzip,caller.appid=50287829,timestamp="+
date.toLocaleTimeString()+",expires=10000","signature":
"TESTSIGNATURE"};
session.start('iat',ssb_param,function(volume)
{
if(volume<6&&volume>0)
w.waveChange(volume);
if(volume<0)
console.log("麦克风启动失败");
},function(err,result){
if(err==null||err==undefined||err==0)
{
if(result==''||result==null)
displayText("没有获取到识别结果");
else
displayText(result);
}else{
displayText('errorcode:
'+err+",errordescription:
"+result);
}
},function(message)
{
if(message=='onStop')
{
console.log("录音停止");
}elseif(message=='onEnd')
{
console.log("会话结束");
}
},function(data)
{
console.log(data);
})
Stop接口
□函数原型
Functionstop()
□功能
停止录音并向服务器发起请求,然后得到语音识别结果
□用法
/*结束录音并获取识别结果*/
session.stop();
writeAudio接口
□函数原型
FunctionwriteAudio(data,state)
□功能
“写音频”接口,通过外部写入录音数据
□用法
/*结束录音并获取识别结果*/
if(byteArray.length>320)
{
window.setTimeout(writeAudioData,20);
vardata=byteArray.subarray(0,320);
byteArray=byteArray.subarray(320,byteArray.length);
/*写入音频数据*/
writeAudio(data,2);
}
Cancel接口
□函数原型
Functioncancel()
□功能
“取消会话”接口,取消本次识别会话
□用法
/*结束录音并取消本次识别会话*/
session.cancel();
3.1.1.2合成开发接口说明
IFLYTtsSession接口
□函数原型
FunctionIFlyTtsSession(cfg)
□功能
初始化,用于调用其它合成接口。
□参数
1.params[in]
可以设置的参数及其取值范围如下表3-4所示。
表3-4合成会话参数列表
参数
参数说明
取值范围
url
连接的服务器地址
默认值:
reconnection
客户端是否支持断开重连
默认值为true(客户端支持断开重连)
reconnectionDelay
连接断开提示
取值范围(0~999999)
□说明
本接口为创建合成会话接口。
接口在应用程序中只调用一次
□用法
/**
*初始化Session会话
*url连接的服务器地址(可选)
*reconnection客户端是否支持断开重连
*reconnectionDelay重连支持的延迟时间
*/
varsession=newIFlyTtsSession({
'url':
':
80/',
'reconnection':
true,
'reconnectionDelay':
30000
})
Start接口
□函数原型
Functionstart(params,content,function(err,obj),function(message))
□功能
依据合成参数与文本然后得到对应的合成音频。
□参数
1.params[in]
合成参数,为JSON格式,可以设置的参数及其取值范围见表3-5合成业务参数列表所示
表3-5合成业务可设置参数列表
参数
参数说明
取值范围
gat
是否以音频链接形式返回,若不设置该参数API会根据系统和浏览器支持情况自行选择是否返回mp3播放链接。
mp3(返回mp3音频播放链接)
wav(返回wav音频播放链接)
ven
合成发音人
Xiaoyan(青年女声,普通话)
Xiaoyu(青年男声,普通话)
Catherine(英文女声)
Henry(英文男声)
Vixy(小燕,普通话)
Vixm(小梅,粤语)
Vixl(小莉,台湾普通话)
Vixr(小