理论教育 机器人语音识别实现方法探析

机器人语音识别实现方法探析

时间:2023-06-17 理论教育 版权反馈
【摘要】:机器人语音识别功能模块利用Pattek ASR SDK在Visual C++6.0环境下进行开发。机器人语音识别功能模块的程序流程图如图8-17所示。语音识别系统对语音进行识别,通过回调函数获取回调通知,利用Asr_GetNBestResult()获得识别结果。

机器人语音识别实现方法探析

机器人语音识别功能模块利用Pattek ASR SDK在Visual C++6.0环境下进行开发。Pat-tek ASR具有易用性强、识别率高的特点,用户无需进行训练,引擎的设计已经保证了非特定人这一重要特点;API提供的管理工具可以使得用户自如地定义自己所需的词表和语法,以便应付不同的应用需求。机器人语音识别功能模块的程序流程图如图8-17所示。

语音识别的初始化过程如下:在程序的开始,首先要利用SDK提供的Asr_SetSystemDir()函数设置识别引擎工作的系统目录,主要是指定声学模型所在的目录,然后利用Asr_SysInit()初始化语音识别系统。如果语音识别系统初始化成功,则可以利用Asr_LineInit(ResultProc)函数来创建一个识别引擎hLine,并指定该引擎识别结果出来时的回调函数及用户定义数据。

在本节中,把回调函数定义为

DWORD ResultProc(HASRLINE hLine,const PASR_NOTIFY pNotify,DWORD dwUserData)

其中,pNotify是回调通知,它的结构体如下:

978-7-111-57267-1-Chapter08-20.jpg

978-7-111-57267-1-Chapter08-21.jpg

图8-17 语音识别流程图

这个结构,在回调函数中,返回与语音及识别结果相关的数据,其中NotifyType为通知类型,包括:

NOTIFY_RESULT 1 //识别结果

NOTIFY_VOICE_LEVEL 2 //声音大小

NOTIFY_UTT_BEGIN 3 //一句话开始

NOTIFY_UTT_END 4 //一句话结束(www.daowen.com)

data:当NotifyType为NOTIFY_VOICE_LEVEL时,表示当前录音的大小。NotifyType:为其他值时无意义。

dwReserve:保留,无意义。

成功创建一个识别引擎后,利用Asr_GrammarLoad()函数来导入语法规则文件中的语法规则,并对语法规则进行设置。语法规则文件可以由用户按照语法规则的要求依据需要自己进行编写,语音识别所需要用到的语法规则,遵循ABNF(Augmented Backus-Naur Form扩展巴克斯-诺尔范式),兼容W3C(World Wide Web Consortium万维网联盟)语法定义。语法规则的结构体如下所示:

978-7-111-57267-1-Chapter08-22.jpg

可以使用该结构来设置、切换、关闭识别引擎所对应的语法规则。其中:

nNum:是语法规则的数量。

szRuleName:是语法规则的名字,一个语音识别引擎可以设置多个语法规则。

成功导入语法规则后,利用Asr_GrammarActivate()函数来激活语法规则,设置Asr_RecSetAutoWork(true)由引擎内部自动采集语音数据,调用Asr_SetParam()设置录音及引擎相关的参数,调用Asr_RecStartX(hLine)函数开始自动识别。

1.识别并调用回调函数

当端点检测到语音大于系统设置的起始话音音量时,进行录音;当语音小于设置的结束音量时,停止录音。语音识别系统对语音进行识别,通过回调函数获取回调通知,利用Asr_GetNBestResult()获得识别结果。

2.释放系统资源

如果不再需要语音识别,利用Asr_RecStopX(hLine)函数停止由Asr_RecStartX函数开启的识别任务,利用Asr_LineRelease(hLine)关闭hLine语音识别引擎,并且释放其相关的资源,利用Asr_SysRelease()推出系统,清除识别系统申请的资源。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈