基于微软语音引擎的语音识别设计

2017-10-21 01:31刘欢
电脑知识与技术 2017年20期
关键词:语音识别

刘欢

摘要:本设计是利用微软语音软件开发包Speech SDK,在vc++6.0的MFC平台下实现计算机语音识别的过程。通过对微软语音开发理论的学习与探索,了解MFC平台的开发与应用,掌握Microsoft Speech SDK(SAPI)在VC++6.0下的加载运行,设计出的在Windows系统下的人机交互语音识别系统。系统总体设计包含上位机设计和下位机设计,以上位机软件设计为主体设计部分,下位机部分作为功能扩展部分,其中下位机设计使用STC89C51单片机作为主控芯片。整个系统设计旨在为人们日常生活提供更多的便利。

关键词:语音识别:Speech SDK;MFC

语音识别技术的产生与不断发展的过程已经有六十多年的历史,在计算机与现代通信技术的不断进步,语音识别技术的进步及其扩大的应用领域也得以体现。目前,一些基于语音识别技术的产品如语音拨号电话,智能语音搜索引擎等在国内外都相继得到了开发与使用。最早利用计算机技术实现语音识别技术的有IBM、APPLE、GOOGLE等公司,在目前的Win-dows、Android等智能移动设备中都相继得到了开发。语音识别技术是语音领域的重要组成部分,同时在计算机科学领域中发挥着不可或缺的作用。在应用领域中语音识别是人机交互方式的一个重要应用,伴随着语音技术、通信技术、智能物联网技术的发展,语音识别技术将在远程智能控制、教育培训、电子商务管理等各个新型领域中发挥着更大的作用。本设计利用微软语音开发包Microsoft Speech SDK 5.1开发设计出具有语音识别功能的软件。该软件的使用是在Windows操作系统下运行的,识别相关语音命令来加载运行所指定的功能。

1系统上位机设计

1.1语音识别的过程

语音识别的编程离不开由上所述的几种语音识别引擎接口即以下四个语音引擎RecoGrammar_ISP,Recognizer_ISP,ISpPhrase以及CRInstanceCreat_ISP它们都遵循COM组件的工作原理和Windows应用程序的工作原理即消息驱动机制,在实现过程中首先需要构造出操作语音识别的类即CSpeechRecog-nition,接下来即可通过CSpeechRecognition类来实现一个语音识别程序。语音识别系统执行所需的各个引擎接口都在CSpeechRecognition类中封装好了,它们分别是m_cpRecoEn-gine,m_cpRecoCotxt和m_cpDictationGrammars,使用这些接口的目的在于它们使语音识别过程得到了简洁方便。

1.1.1初始化COM库

COM库存在于DLL中,其在OLE32.DLL与OLE32.LIB中,定义了一些常用的函数,因此对COM的调用必须先用函数CoInitialize(Null)来对其进行初始化。

1.1.2对语音识别对象的创建

在对语音识别对象的创建过程中需要以特定的顺序定义各个语音接口的对象,语音识别对象的识别事件可以对计算机用户发出的声音做出响应,判断用户朗读的词汇并执行相应的操作。语音识别对象Recognizer Object是实现语音识别引擎的方法。

1.1.3上下文语音识别命令的创建

上下文语音识别命令(Recognition Context)的创建是为系统在语音识别过程中,对语音识别的命令请求起到通知作用并驱动语法规则对象的创建,使每个语音识别上下文对象正好与相应的消息处理函数对应。

1.1.4对识别消息和感兴趣事件的设置

此处需调用SetNotifyWindowMessage函数,为了将识别消息送给windows,让windows辨别具体需要进行处理的识别消息。在对语音响应时间的确定时需要通过函数中定义的消息WMSrenent来计量,此时在初始化函数的响应窗口中会得到通知。接下来需要对感兴趣事件进行设置。

1.1.5语法和规则的装载

语音识别引擎需要有一套特定的语法,APP需要首先初始化的步骤是语法的装载,而且需要对RecoGrammar_ISP接口进行执行激活处理。当存在的语法规则被RecoGrammar_ISP接口识别,ISpRecogContext对象会向APP发出语音识别消息,接下来就会对识别消息响应函数进行调用;在编辑消息函数中,获取识别的结果是通过ISpPhraser接口实现的。在语法规则还没有被终止,这一步可以一直循环下去。根据实际应用的情况确定在此次程序设计采用听说式语法规则,由于它具有相当大的语言词汇量,适合汉语普通话的录入识别。

1.1.6响应各种事件

在以上五个步骤都依次执行完毕时,即已经完成了语音识别的初始化过程,接下来就能对每个程序事件进行直接响应。当应用程序退出时,卸载COM平台。

1.2上位机程序设计过程

上位机设计总体过程包括语法规则文件即“微软语音识别CmdCtrl.xml”文件的编写、程序初始化即语音识别初始化和串口通信初始化以及消息函数的实现过程。其中XML文件采用记事本进行编辑,将需要录入的语音信息写人文件中。程序设计需要首先安装微软Speech SDK 5.1,vc++6.0中建立MFC工程,在工程设计中加入串口通信、Flash控件。文件配置中添加语音引擎sapi的头文件和库文件。

1.2.1编写语法规则文件

XML文件是一种可以用来作为扩展标记的语言文件,其主要作用是定义数据类型,使系统文件更具有结构化的特点。在实际应用当中,XML文件需要由用户自己编写,来实现源语言的文件标记,XML文件在Web信息的交换中起到了主要的作用。XML文件的编写有一套统一的约束规则,而HAXML文件在对系统主程序结构的描述和交换提供了独立的方法。在本上位机设计中需要装载XLM文件,在对语音识别信息语音信号录入的关键词依次写入XML语法规则文件中。在这些由用户录入的特定的語句,需要命令控制约束进行对其识别,程序中编写的“微软语音识别CmdCtrl.xml”文件需要在语法规则RecoGrammar_ISP接口中装载并被激活。endprint

1.2.2上位机系统初始化

程序初始化过程中需要对语音识别进行初始化,在这里语音识别初始化即COM口初始化、语音识别对象的创建、上下文语音识别命令的创建、识别消息和感兴趣事件的设置、语法和规则的装载六个底层驱动过程。接着是对串口进行初始化,串口初始化的目的是为了与下位机进行通信,串口初始化过程中需要进行的操作有串口端口号的设定、输入模式设定为二进制模式、收到一个字节引发OnComm事件、串口参数的设置其中波特率9600bit/s,无奇偶校验。

1.2.3消息函数实现

在以上语音识别引擎和串口初始化完毕,系统初始化完成,接下来是对程序消息函数的实现过程。在MFC程序运行过程中,程序需要由事件驱动。系统维护是维护窗口例行过程中主要的维护机制,对在传人系统的消息时消息处理函数会对其进行处理。在建立一个窗口前,为了让消息处理函数与窗口建立联系,消息处理函数必须先写,当系统检测到消息时就会调用消息处理函数。消息函数中包含的消息事件是在程序流程中依次被取出,在程序执行实现,将实现结果依次发送到特定的窗口中。整个消息响应过程是一个程序轮询的过程。在程序轮询中按照取出消息,派发消息的循环过程,直到退出循环,程序终止。本程序在对消息响应函数的设计过程中,在语法规则被识别引擎CRInstanceCreat_ISP识别之后,应用程序需要由ISpRecoContext对象发出语音识别消息,并调用识别消息的各个响应函数。

2系统下位机设计

为了实现更多的扩展应用,使人机互动过程更加灵活多样,系统方案中加人了PC与MCU的通信部分。系统下位机设计的硬件部分包括51单片机最小系统,电平转换电路,语音播报模块。系统下位机软件设计采用C语言在Keil下编程,将生成的.hex文件通过串口烧写到单片机-制。

2.1下位机主要硬件设计

这里使用STC89C51单片机作为下位机MCU,整个下位机电路系统包括语音模块电路,单片机最小系统电路以及串口通信电平转换电路。

2.1.1语音控制模块及流水灯电路设计

语音播报控制芯片选用WTV020-SD语音模块,该模块控制方式多样,这里选用该模块的三线串口控制方式,三线串口控制方式具有对存储在SD卡中的任意一个.AD4格式文件进行语音播报的功能。

3结论

在MFC加载编译,执行程序后,生成的可执行文件即最终的应用软件。启动应用软件后,系统立即进人语音识别状态,由用户对着PC的麦克风发出相关语音请求指令,系统会对发出的语音请求信号进行识别与判断,如果与预期设定的语音请求指令相一致,那么就可以获得有效的识别结果,在函数调用中加载相应的功能指令。系统实现调用Windows系统应用程序、打开网站、播放Flash動画与下位机进行通信并实现相应功能等。如图1所示为系统功能流程。endprint

猜你喜欢
语音识别
空管陆空通话英语发音模板设计与应用
通话中的语音识别技术
基于LD3320的非特定人识别声控灯系统设计
航天三维可视化系统中语音控制技术的研究与应用