APP下载

语音控制计算器的设计与实现

2013-11-19严新华

商洛学院学报 2013年2期
关键词:运算符计算器引擎

严新华

(商洛学院 现代教育技术中心,陕西商洛 726000)

计算器是计算机上常用的工具软件,在日常工作和生活中带给人们极大的方便。Windows操作系统就自带了一款计算器,除了这款计算器之外,许多开发者也开发了各种不同的计算器。这些计算器都采用键盘和鼠标输入,用鼠标点击输入效率很低,而用键盘输入很繁琐,输入数据较多时手指容易疲劳,容易输错,用户体验很差。如果能用语音控制输入,只要说出需要计算的数值和运算就能看到相应的结果,就能使用户使用起来更加方便,使用户可以轻松愉快地完成运算工作。而语音识别技术经过多年的发展已经逐渐进入实用阶段[1],IBM、微软等公司都推出了自己的语音识别和合成引擎。本文就基于微软公司的Speech SDK 5.1研究和设计了一款语音控制的计算器,经测试输入准确率高,使用方便,能够给用户带来更加良好的使用体验。

1 Speech SDK 5.1简介

微软的Speech SDK 5.1是一套语音应用程序开发包,可以识别多种语言,包括英文、中文和日文等[2]。SDK里提供了语音识别与合成的引擎组件和应用程序层接口,还包括详细的技术资料和帮助文档[3]。它完全遵循COM标准,底层的协议都采用COM组件的形式,与应用程序层完全独立[4]。和语音相关的工作由COM组件完成,包括语音识别引擎(Speech Recognition,简称SR)和语音合成引擎(Text To Speech,简称TTS),分别管理语音的识别与合成[5]。这使得应用程序设计人员可以忽略复杂的语音技术,直接调用相关的语音应用程序接口(SAPI)来实现语音功能,从而专注于语音应用程序的开发。SAPI 5.1的体系结构如图1所示。

图1 SAPI 5.1的体系结构

2 语音控制计算器的结构模型

语音控制的计算器通过识别用户的语音,代替键盘输入相关的数字和运算符等,然后进行计算并显示结果,其结构模型如图2所示。

系统采用麦克风将语音信号输入给计算机,声卡以一定频率进行数据采样[6],然后进行A/D转换,将转换后的语音数据送给语音识别引擎。语音识别引擎通过中文语音包和控制命令库识别用户说的数字、运算符等于等,然后用程序加以区分,最后运算并显示结果。

图2 语音控制计算器的结构模型

3 应用Speech SDK的关键技术

语音控制计算器应用Speech SDK的语音识别引擎识别用户所说的数字和运算符等,其关键是提高输入的准确性和提供良好的交互性[7],其中的关键技术包括语法规则的选择,语言识别的方式和识别错误的处理。

3.1 语法规则的选择

SpeechSDK包括听写语法(Dictation Grammer)和命令控制语法(Command and Control Grammer)两种语法规则。听写语法用于连续语音识别,可以识别大段的话语,但准确率不高。命令控制语法用于识别用户在语法文件里自定义的一些特定词汇和句子,准确率相当高。在语音控制计算器中,进行的是非特定人有限词汇的语音识别[8],这正好符合命令控制语法的特点,所以采用命令控制语法,既符合语音控制计算器的特点,又能提高语音输入的准确性。

3.2 语音识别的方式

识别用户语音时通过识别运算符把用户语音分段,分别识别成数值和运算符等,对数值的识别每个字识别成一个命令,这其中正确有效的XML文件是识别的关键。在语法规则的XML文件中编写“加、减、乘、除”用来通过语音输入运算符,再在XML文件中编写“零、一、二、三、四、五、六、七、八、九”这些数字和“十、百、千、万”这些数量单位用来识别数值,比如用户语音“三百八十二”就可以识别为5个控制命令,并转换为382,“二十一万八千”就可识别为6个控制命令,并转换为218000。为了方便用户,也可读成数字串的形式,省略数量单位,比如“四五二三”可以识别为4523。还要在语法规则的XML文件中编写“等于”来实现结果的显示。除此之外,把数据清零时需要一个清零的命令,为了避免在噪声的干扰下语音识别引擎把“清零”识别成“零”,清零命令采用“清除”而不用“清零”。

3.3 识别错误处理

为了让用户能直观的看到语音输入的数值和运算,以便及时发现语音识别中的错误,此计算器不像普通计算器那样只显示当前数值,而是在系统识别出数字和运算符号等语音后在界面上显示数学运算公式[9],并在识别出“等于”后显示等号和最后的运算结果。在语法规则的XML文件中再编写一个“回退”命令,如果用户发现识别错误,说声“回退”就可以清除刚才输入的数值或运算符。

4 语音控制计算器的实现

此语音控制计算器基于Speech SDK 5.1,调用语音识别引擎的COM接口,采用VC++6.0实现,主要步骤如下:

1)编写语法规则的XML文件,定义数字、运算符、等于、清除、回退等命令。

2)在主程序的WinMain函数中,主消息循环开始之前,初始化COM组件。

3)在主程序的InitInstance函数中,建立各个语音接口的实例,创建一个语音识别引擎。

4)创建命令识别上下文,设置语音事件通知消息,并告知语音识别引擎,只对命令识别事件感兴趣。

5)从语法规则的XML文件中加载并激活语法规则,使识别引擎处于工作状态。

6)识别引擎监听用户输入的语音,如果有语音符合定义的命令,则按照语法规则识别出来,并向主程序发出通知消息。

7)在主程序的消息处理函数WndProc里,加入一条消息处理,使主程序接收到语音识别通知消息后,调用命令识别响应函数。

8)在命令识别响应函数里通过IspPhrase接口获取识别的结果,将识别的结果与预先加入规则库的命令相比较,区分是数字还是运算符等。

9)把识别出来的数值和运算符等显示到界面上并做好运算准备,接收到“清除”命令时把数值和数学公式清零,接收到“回退”命令时清除前一个数值或者运算符,接收到“等于”命令时计算并显示结果。

10)应用程序退出时,卸载COM组件。

5 语音控制计算器的测试

课题组抽取商洛学院某班级50个人,把此语音控制计算器分别在低噪音环境(安静的实验室)和中等噪音环境(公共计算机机房)进行了测试。在不使用“回退”命令的情况下,每人每环境语音输入运算20个,以检验此计算器的语音识别准确率,测试结果如表1所示。

表1 不同噪音环境下语音控制计算器的运算正确率

从表1可见,在不使用“回退”命令的情况下,在中等噪音环境和低噪音环境下此计算器语音识别的准确率都是比较高的,特别是在低噪音环境下,加上“回退”命令的使用可使此计算器达到实用程度。

6 结束语

与键盘和鼠标控制比较起来,语音控制显然轻松的多、方便的多,能够带来更加良好的用户体验。本文设计的语音控制计算器语音识别准确率高、方便实用,通过增加更多的命令可以扩展科学计算功能,使它功能更加强大。

[1]倪崇嘉,刘文举,徐 波.汉语大词汇量连续语音识别系统研究进展[J].中文信息学报,2009,23(1):112-123.

[2]李禹材,左友东,郑秀清,等.基于Speech SDK的语音控制应用程序的设计与实现[J].计算机应用,2004,24(6):114-116.

[3]吴 萍,胡瑞敏,艾浩军.火车票查询系统中语音识别的研究及实现[J].计算机工程与应用,2003,39(33):65-68.

[4]林鸣霄.基于Speech SDK的语音识别技术在三维仿真中的应用[J].计算机技术与发展,2011,21(11):160-162.

[5]陈兴文,王 刚,洪 鹰.语音响应及其应用系统的开发[J].制造业自动化,2002,24(10):77-79

[6]涂惠燕,陈一宁.基于语音识别和手机平台的英语口语发音学习系统[J].计算机应用与软件,2011,28(9):64-66.

[7]李兰芳,汪道辉,董海疆,等.语音识别在MP3播放器上的应用[J].电子技术应用,2006,32(12):5-6.

[8]黄子君,张 亮.语音识别技术及应用综述[J].江西教育学院学报,2010,31(3):44-46.

[9]梁 俊,杨燕翔,王 娟,等.基于DSP的语音识别计算器设计[J].电子设计工程,2010,18(5):135-138.

猜你喜欢

运算符计算器引擎
老祖传授基本运算符
[计算器不是万能的]
蓝谷: “涉蓝”新引擎
一个损坏的计算器
一个损坏的计算器
计算器游戏
无形的引擎
基于Cocos2d引擎的PuzzleGame开发
C++运算符重载剖析
表达式求值及符号推导