云端AI与本地相结合的嵌入式语音识别系统

2019-06-11 09:07杨焕峥杨国华徐玲孙慧敏
宁波职业技术学院学报 2019年1期
关键词:嵌入式系统

杨焕峥 杨国华 徐玲 孙慧敏

摘  要: 综合利用了云端和本地语音识别算法,借助百度云端语音识别大数据库实现大量语音命令识别,和借助类似神经网络的深度学习算法使识别准确率提高,使语音特征数据库更新容易。结果表明,利用本地语音识别模组能准确响应特定词汇的语音识别,该方法方便快捷;并由STM32 MCU进行逻辑判断获取综合语音识别结果,提升了有效性和准确性。

关键词: 百度语音识别; SYN7318; STM32F103; 嵌入式系统; ESP32 WiFi

中图分类号: TN 912.34          文獻标志码: A          文章编号: 1671-2153(2019)01-0086-04

1  问题提出

嵌入式设备语音识别主要有两种,一种是在线自由交谈的云端AI语音识别,另一种是执行有限的控制命令词本地语音模块识别[1]。

云端语音识别的优点:借助大数据库可实现海量语音命令识别,借助复杂算法能使识别准确率提高,语音特征数据库更新容易,缺点:需要借助通信网络,响应速度慢。本地语音识别优点:无需借助网络,结构简单,响应速度快,缺点:只能实现有限语音命令识别,语音特征数据库更新麻烦。将云端和本地语音识别方式相结合,能实现:①在没有网络的时候使用本地语音识别,有网络的时候借助云端支持海量语音命令识别及提高识别准确率;②如果在本地语音识别的词语库内存在要识别的词语而且能较好识别,则使用本地识别结果实现快速响应;否则选取来自云端的识别结果;③在网络数据传输速度不稳定,或者发生丢包的时候,由MCU通过时间等阈值判断自适应选择合适的识别结果。本文研究了系统结构和工作流程,硬件电路设计和软件编程,完成了样机制作,对性能进行测试分析。相比物联网节点MQTT通信协议,研究了百度AI语音识别平台通过REST API方式给予的Http端口进行JSON数据流的传输。

2  系统功能结构和工作流程

基于云端AI和本地相结合的语音识别系统可以很好的识别人的语音,结构包括云端AI语音识别服务器和本地综合语音识别模组,两者利用WiFi通信方式进行数据交互,如图1所示。

本地综合语音识别模组主要由SYN7318模块、WM8978模块、ESP32 WiFi控制器、STM32 MCU控制器[2]等组成,云端语音识别服务器采用百度语音识别云平台。

系统工作过程包含以下6个步骤:①本地语音识别SYN7318模块获取人的语音信号进行识别,得到语音识别本地的结果,通过UART接口送入STM32 MCU控制器;②STM32 MCU控制器连接ESP32 WiFi控制器判断是否有WiFi网络,如果没有网络或网络信号较差,则直接使用SYN7318模块的本地语音识别结果并立即进入最后一步,如果有网络,则转到下一步执行;③WM8978模块将语音信号采集后送入ESP32 WiFi控制器,由该控制器通过WiFi通信发送语音信号至云端AI语音识别服务器,云端AI语音识别平台识别语音信号从而得到语音识别云端的结果;④云端AI语音识别服务器将云端语音识别结果通过WiFi传输反馈给ESP32 WiFi控制器,并发送给STM32 MCU控制器;⑤STM32 MCU控制器将收到的本地和云端语音识别结果进行逻辑判断以确定最终输出的语音识别结果;⑥将选取结果输出,最终输出语音指令。

3  本地语音识别功能实现

3.1  硬件电路设计

综合语音识别模组的本地语音识别功能模块使用SYN7318模块,拥有最新语音唤醒算法,能够完成非特定人的语音识别,可以预定义1万条语音指令。SYN7318模块集成了音频输入和输出电路,以及语音唤醒、识别、合成、音乐播放电路和USART串行通信电路。将外接的麦克风输入的语音信号通过芯片37和38引脚经音频输入电路接收后进行语音识别,通过MP3播放电路通过27和28引脚音频输出外接功率放大器及喇叭将声音播放出来。本地语音识别SYN7318模组通过UART接口33和34引脚与STM32 F103 MCU控制器串口2的16和17引脚相连,由MCU发送控制命令给该模组并接收反馈的识别结果信息。

3.2  程序设计

本地语音识别程序设计范例如下:预先将“027 您好”通过软件烧录进SYN7318语音识别模组磁条,当用户发出语音命令给该模块后,需进行语音识别,此时由STM32F103 MCU发5个字节的语音识别命令给SYN7318语音识别模组,告知其所用的用户词典。如len=5,0xFD 0x00 0x02 0x10 0x03。MCU接收4个字节的SYN7318语音识别模组的反馈信息;如0xFC 0x00 0x01 0x41,并根据第4字节是否为0x41判断接收是否成功。MCU继续接收3个字节的语音识别命令回传结果,如:0xFC 0x00 0x06,根据帧头是否是0xFC判断,是的话进一步接收6个字节回传数据,如:0x01 0x64 0x00 0x1A 0x00 0x1B,并判断帧头是否是0x01,第6个字节0x1B对应的命令ID,即十进制数27,由此可以知道是“您好”这一词语。

4  云端语音识别功能实现

4.1  百度语音识别工作流程

百度语音识别技术使用和神经网络类似的深度学习算法,极大提高了识别效率[3]。利用REST

API给予一个标准的Http端口,允许识别整段录音文件,允许使用语音识别控件,但录音要满足PCM 8k或16k抽样率,单声道16位深等要求,支持未压缩的pcm、wav等,支持中英文和粤语[4]。

具体设计流程为:登陆百度语音识别平台,从管理控制台转入创建的应用,获取API、Secret密钥和应用ID,依据百度的权限方法得到Access_token。语音数据与其他参数经过标准JSON格式序列化POST上传,语音数据被放置到JSON数据流的“speech”数据段内,以base64形式编码,将语音数据的长度标注到“len”数据段内;或者直接在“url”数据段内给出语音获取地址,在“callback”数据段内放置识别结果的调用地址。假如可以识别,则在JSON数据流的“result”数据段内放置识别结果,并按UTF-8模式编码。

4.2  百度语音识别硬件电路

综合语音识别模组的云端语音识别功能选用集成2.4GHz WiFi的ESP32控制器,通过WiFi将需识别的采样语音信号传输给百度云服务器,ESP32控制器通过集成电路内置音频总线I2S和立体声多媒体数字信号编译码器WM8978进行数据传输,WM8978外接麦克风MIC和扬声器SPK,由WM8978对人的说话进行录音,播放语音识别结果。ESP32外接TF卡,可以存储网络文件、音乐等。ESP32通过RS-232串口和STM32F103 ARM相连,可以传输语音识别的结果,同时外接CP2104 USB转串口电平转换芯片,可用USB口进行调试和现象观察,如图3所示。

4.3  百度语音识别软件编程

在Windows系统电脑下,安装VMware虚拟PC软件,在该虚拟机下配置ubuntu-14.04 64位操作系统,安装代码编辑器Sublime Text软件编辑C程序,通过ubuntu命令终端窗口安装词法、语法分析工具,安装Linux平台的ESP32交叉编译器,设置编译路径等,将编写的C代码通过编译后,下载到ESP32 WiFi控制器里,程序流程如图4所示。

具体程序设计的逻辑为当检测到语音录入开始,将录音文件按wav格式写进SD卡存储,检测到语音录入结束后发送超文本传输http申请,一段段传输经base64编码后的数据。

将百度语音识别网站注册后得到的API Key和Secret Key填入百度提供的oauth的http链接,得到access_token,将该token添加在程序stream_head字段中。stream_head="{\"format\":\"wav\",\"cuid\":\"witsrc_test\",\"token\":\"24.ce5f2e56975a06c172abd07f71eef516.2592000.1523604181.282335-10887800\",\"rate\":8000,\"channel\":1,\"speech\":\"";//","len":0,}",将真实的语音采样数据插入在中间发送。

5  性能测试结果样例分析

目前,对该系统主要的识别响应速度、准确性和稳定性等性能分别进行了测试,得到了测试结果。采用ESP32 WiFi控制器等模块构成的云端识别功能电路,将语音信号通过WiFi路由器,经20M速率Internet宽带网络发送给云端,到微处理器得到语音识别反馈结果输出给用户,平均耗时大约2~3 s,采用SYN7318等模块构成的本地识别功能电路进行语音识别,平均耗时大约1 s以内,得到识别结果速度要更快。

测试者拥有国内二级甲等普通话水平测试合格证书,在环境基本无干扰和有微弱干扰的情况下,对5个中文单词、1个英文单词和1个数字进行了3次发音,有1个中文单词未烧写在本地语音识别模组磁条内,测试后得到了表1相应的识别结果。

本测试云端和本地语音识别电路具体耗时和识别准确性等原因有待对该系统软硬件及测试方法等做进一步分析,并不针对所使用的企业产品模块或识别算法等。

本地语音识别模组磁条内已有的中文单词,识别准确率很高,如果发音准确,识别准确率能接近100%,对英文和数字识别困难,而磁条内没有的中文单词,识别不出来,使用时需要有较强的针对性,云端识别模组可以对海量语音命令识别,准确率较高,有延时,使用时不需较强的针对性。所以,该系统结合了这两种情况,使用STM32 MCU进行逻辑判断获取语音综合识别结果,使得语音识别维持较高准确率的同时增强了适用性,另外,该系统多次持续运行3 h左右,暂未发现语音识别过程中有系统崩溃、死机等问题,可靠性和稳定性较强。

6  结束语

一种云端AI与本地相结合的嵌入式语音识别系统综合了云端和本地语音识别方式,提升了语音识别有效性、可靠性和时滞性等。可以借助百度云端语音识别大数据库实现海量语音命令识别,借助类似神经网络的深度学习算法使识别准确率提高,同时语音特征数据库更新容易[5]。也可以利用本地语音识别模组快速响应语音识别,控制简单。

据此思路和结构,未来,综合语音识别模组可以考虑使用人工智能AI芯片作为MCU控制器,结合云端海量语音识别大数据库,进行自我学习和网络在线、离线的语音识别结果评分判断,时延判断等,综合应对各种情况,进一步提升系统性能。

参考文献:

[1] 郝雯超,冯月芹,李春光,等. 基于嵌入式平台的实用语音识别研究[J]. 电子器件,2018,41(1):110-114.

[2] 任玲,陈宽政,袁书恒,等. 基于STM32的联合收割机脱粒滚筒监控系统[J]. 宁波职业技术学院学报,2018(3):93-95.

[3] End-to-end attention-based large vocabulary speech recognition[A]. Bahdanau D,Chorowski J,Serdyuk D,et al. International Conference on Acoustics,Speech and Signal Processing[C]. 2016.

[4] 楊晨,李勇,金德鹏. 基于REST-API的SDN控制器故障恢复机制[J]. 计算机工程,2015,41(9):131-134.

[5] 张仕良.基于深度神经网络的语音识别模型研究[D]. 合肥:中国科学技术大学,2017.

猜你喜欢
嵌入式系统
办公自动化系统的设计
基于物联网项目驱动的嵌入式系统教学改革的研究与实践
嵌入式系统课程“中断、异常与事件”教学实践及启示
面向实践创新人才培养的嵌入式系统教学研究