《电子技术应用》
您所在的位置:首页 > 通信与网络 > 设计应用 > 基于Arduino的语音识别与控制系统实现
基于Arduino的语音识别与控制系统实现
赵 璐,吴 蒙
(南京邮电大学 通信与信息工程学院,江苏 南京 210003)
摘要: 通过对Arduino开发板的研究,将声控技术引入到智能系统的设计当中,实现了一套基于Arduino的语音控制系统。本文首先确定了各硬件模块的选型,并在拟定了各模块之间的通信接口后对Arduino引脚资源进行整合、分配,搭建了系统的硬件平台。在软件设计部分,编写了监控程序、功能实现程序、中断服务程序,最终实现了对机械手的语音控制以及语音播报的功能。此外,系统还增设了登录口令验证和错误识别吸收功能,从安全、效率两个方面改进系统的性能。实际应用测试表明,在低噪或无噪条件下,该系统识别精度高,稳定性好,达到了预期要求。
Abstract:
Key words :

  摘  要: 通过对Arduino开发板的研究,将声控技术引入到智能系统的设计当中,实现了一套基于Arduino的语音控制系统。本文首先确定了各硬件模块的选型,并在拟定了各模块之间的通信接口后对Arduino引脚资源进行整合、分配,搭建了系统的硬件平台。在软件设计部分,编写了监控程序、功能实现程序、中断服务程序,最终实现了对机械手的语音控制以及语音播报的功能。此外,系统还增设了登录口令验证和错误识别吸收功能,从安全、效率两个方面改进系统的性能。实际应用测试表明,在低噪或无噪条件下,该系统识别精度高,稳定性好,达到了预期要求。

  关键词: Arduino;机械手;语音识别语音合成;声控

0 引言

  随着自动化控制技术和智能化技术的飞速发展,人们开始追求轻松、有序、高效的智能化生活方式,智能家居也应运而生。然而,触屏控制、鼠标控制等传统的控制方式,它们繁复的按键操作和菜单操作不符合智能化导向,并不适用于智能系统的设计。近年来,人们的焦点开始转移到语音技术及其应用上面,国内外企业积极地拓展语音市场。智能语音产业是通过语音识别技术和语音合成技术为使用者提供各种服务的产业。语音合成技术和语音识别技术实现了简单易行的人机接口,代表了更好的用户体验度,充分体现了人性化的产品设计理念[1]。本文主要采用意大利开源Arduino Uno开发板设计了一套声控智能系统,能完成针对非特定人、小词汇量语音识别。声控技术的引入摆脱了用双手控制机械的模式,实现了真正意义上的智能,设计成果可应用于智能家居系统,这一研究可帮助和简化人们的生活,有助于开拓智能家居的新市场。

1 语音识别工作原理

  语音识别技术是让机器通过识别和理解过程,把人类的语音信号转变为相应的文本或命令的技术,属于多维模式识别和智能计算机接口的范畴。模式匹配原理被目前大多数语音识别系统所采用,它将未知语音进行特征提取并与参考模式库中已知语音参考模式逐一地进行模式匹配,其中最佳匹配的参考模式被选为识别结果[2-3]。

  当前语音识别技术的主流算法,主要有基于动态时间规整(DTW)方法、基于非参数模型矢量量化(VQ)方法、基于参数模型的隐马尔可夫模型(HMM)方法和基于人工神经网络(ANN)等[4]。语音识别技术可以被划分为特定人语音识别和非特定人语音识别,根据所针对的发音人的不同,特定人语音识别技术只能识别某几个人的语音,后者则可用于任何人,技术实现相对复杂但更加符合实际需要。

  本系统设计选用了中文语音识别芯片LD3320,通过将待识别的内容设置成关键词列表,能实现不需要用户事先录音和训练的非特定人语音识别[5]。

2 系统设计

  2.1 系统硬件平台搭建

  本文设计的基于Arduino的语音识别及控制系统,是一个建立在语音识别技术基础上,并在Arduino核心处理器的控制下对输入的语音命令做出特定输出响应的系统[6]。系统包括四个部分:MCU模块、语音识别模块、语音合成模块、机械手模块。语音识别模块作为该系统的人机交互接口,用户的语音命令由此输入,其语音识别正确率决定了系统的运行质量;语音合成模块和机械手模块作为系统对外输出部分,在MCU的控制下,做出对语音输入的响应[7-8]:语音合成模块播报提示音提示系统当前状态,提供了更好的用户体验度,机械手模块则进行与命令对应的二维抓取运动。图1为系统硬件结构框图。

001.jpg

  2.1.1 Arduino开发板

  系统由源自意大利的开源、便捷灵活的开源电子原型平台Arduino Uno作为主控系统。Arduino Uno提供了丰富的引脚资源,包括14个数字I/O(DIGITAL 0~13),其中6个数字口,可提供PWM输出用于控制舵机,6个模拟I/O口(ANALOG 0~5)。其简单的开发方式利于缩短开发的周期,适合用于交互产品开发[9-10]。

  2.1.2 语音识别模块

  无线语音模块选用开源硬件厂商DFRobot生产的中文语音识别板DFR0177。DFR0177与Arduino之间通过同步串行外设接口(Serial Peripheral Interface,SPI)进行通信。模块的核心是LD3320中文语音识别芯片,当麦克风采集到语音信号时,LD3320发送低电平请求中断,MCU执行ASR识别流程序[11],其识别过程如图2。

002.jpg

  2.1.3 语音合成模块

  语音合成模块使用SYN6288芯片实现提示音合成,芯片提供一组全双工的异步串行通信(UART)接口实现与Arduino的数据传输。Arduino控制板将待合成语音的信息以命令帧的形式通过串口发送至SYN6288。芯片输出信号经过功率放大器和扬声器后完成语音合成[12]。

  2.1.4 机械手模块

  机械手由两个舵机和金属夹持器组装而成,每个舵机能控制机械手在一个维度上的运动,Arduino通过综合控制两个舵的旋转角度便能令机械手进行二自由度的活动,舵机的控制由PWM信号驱动实现[13-14]。由于舵机工作时可产生1~2 A电流,考虑到安全性和稳定性,机械手模块由外部5 V电源单独供电。

  2.2 系统功能设计

  本文设计了一套小型智能家居系统:基于Arduino的声控机械手,用户使用语音识别这一人机交互界面,对系统下达指令,机械手依据语音命令执行不同的操作,同时,系统能进行人性化的语音提示,播报系统当前运行的相关信息。除了实现基本的声控功能外,考虑到安全、识别正确率等因素,增加登录口令和垃圾错误吸收。

  2.2.1 登录口令

  为了保障系统的安全,防止授权用户以外人员的非法使用,须对系统设置相应的使用权限,如设置一条登录口令“芝麻开门”。任何使用者在进入系统前,须对系统的麦克风说出登录口令作为触发口令。若系统识别并确认了口令的正确性,则播报欢迎使用的提示音,并等待识别用户的操作命令;否则,则将该用户判定为非授权用户,进行下一轮的登录口令识别。

  2.2.2 吸收错误识别

  语音识别芯片的工作原理是把关键词列表中得分最高的关键词作为识别结果输出,如果用户说的关键词不在列表内必然会引起误识别,因此,可在设定好要识别的关键词列表中再添加一些额外的词汇用来吸收错误识别,从而进一步降低错误识别率。把这些待吸收的关键词语称之为“垃圾关键词语”,它的设置可以提高用户的主观使用体验。“垃圾关键词语”最好选择一些字数与关键词语相同的高频口语词,用来吸收可能发生的错误识别,比如“啊”,“哦”等。

  2.3 系统软件设计

  系统软件设计基于Arduino IDE软件开发环境,使用C/C++编程语言。Arduino有丰富的库文件以供使用,利用库文件简化了程序开发工作。软件设计时把整个系统程序分为三个模块:监控主程序、中断服务(ASR识别)子程序和功能实现子程序,对每个模块分别进行独立设计、编程,最后将各模块构建一个完整的工程。

  2.3.1 主监控程序

  监控程序作为程序的核心,主要负责芯片的初始启动工作以及调度其他程序模块,图3为系统主程序流程图。

003.jpg

  识别芯片在正式进入识别流程前,必须先进行初始化工作,包括完成软复位、时钟频率设定、模式设定和激活内部数据处理模块,同时还须将关键字列表写入LD3320芯片的内部寄存器。这些工作均在监控程序完成。

  若芯片启动失败达到一定的次数,提示启动失败并无法进行后续操作;若启动成功,系统将开始循环等待,期间如有用户下达语音命令,则进入中断并执行中断服务程序。监控程序依据中断服务程序的执行结果判断是否调度功能实现程序。

  2.3.2 中断服务程序

  中断服务程序在麦克风采集信号产生低电平中断后执行,主要实现一次ASR识别流,可调用LD3320库文件实现相关寄存器操作。最后将该统计学意义上最优的关键字作为最终识别结果输出,中断程序执行完后,回到中断点,继续执行监控程序[15]。

  2.3.3 功能实现程序

  功能实现程序用于完成一些实质性的功能,即在语音识别成功后控制舵机转动和语音播报。在中断服务程序得到正确的识别结果后,监控程序将会调用功能实现程序。功能实现程序的主体是基于switch选择语句,程序依据语音识别结果,执行不同的程序段,如发送PWM信号控制舵机转向以实现机械手左右转、张开、夹持动作,或向SYN6288发送带合成文字的GB2312编码。若识别的是垃圾关键词,系统将执行程序预设的default缺省操作。

3 实验结果及分析

  搭建硬件平台并将编写的声控程序编译、烧写至开发板。对系统进行声控测试:进入系统前,若对系统的麦克风正确说出预先设置的登录口令,如“芝麻开门”,系统识别并确认了口令后播报“欢迎使用智能声控系统”的提示音,并等待识别用户后续的操作命令;如果给出错误的登录口令,系统将继续等待口令而不被触发。进入系统后,对系统分别使用“左转”、“右转”、“张开”、“夹持”、“复位”等语音命令进行多次测试,系统的识别率接近90%,各硬件模块在Arduino程序的控制下协同工作,其中机械手和语音合成模块作为系统的输出模块,也做出了预期的响应,实现了对机械手的控制以及语音播报的功能。

  测试表明,该系统在无噪或低噪环境下运行良好,识别精度较高,能实现智能声控的要求。

4 结论

  本文主要对基于Arduino的智能语音控制系统的设计与实现进行阐述。系统的设计工作主要包括系统硬件平台搭建以及依据功能对程序结构进行制定,编写了监控程序、中断服务程序、功能实现程序。最后经过测试,该系统运行状况良好。

  在本次设计中,除了实现基本的智能声控功能外,还从安全、效率、器材选型三个方面做出创新,提高了系统的性能:(1)考虑到安全因素增设了触发口令;(2)设计垃圾关键词语达到降低误识别率的目的;(3)设计选用了当前热门的Arduino开放源代码平台作为系统的核心,Arduino以其开放性、易用性、丰富的第三方资源等优势得到了广泛注目。同时,本声控系统不需要用户事先训练和录音,属于可被任何人使用的非特定人语音识别系统,更加符合实际需要。

  本智能声控系统具有体积小、功耗低和通用性好的特点,可应用于智能家居系统的设计,引入声控作为人机交互界面方便了用户的使用,实现了真正意义上的智能,具有一定的实用价值。

  参考文献

  [1] 刘露.智能语音时代来临[J].课外语文,2014(5):11-12,17.

  [2] 詹新明,黄南山,杨灿.语音识别技术研究进展[J].现代计算机(专业版),2008(9):43-45.

  [3] 王敏妲.语音识别技术的研究与发展[J].微型机与应用,2009,28(23):1-2,6.

  [4] 马志欣,王宏,李鑫.语音识别技术综述[J].昌吉学院学报,2006(3):93-97.

  [5] 洪家平.LD3320的嵌入式语音识别系统的应用[J].单片机与嵌入式系统应用,2012,12(2):47-53.

  [6] 杨继志,郭敬.Arduino的互动产品平台创新设计[J].单片机与嵌入式系统应用,2012,12(4):39-41.

  [7] 程晨.Arduino开发实战指南[M].北京:机械工业出版社,2012.

  [8] 孙俊荣,吴明展,卢聪勇.Arduino一试就上手[M].北京:科学出版社,2012.

  [9] ICRouter.LD332x数据手册[EB/OL].(2010-10-11)[2015-04-02]http://www.icroute.com/web_cn/DownLoad.html#LD332X-DataSheet.

  [10] 语音天下.SYN6288中文语音合成芯片数据手册[EB/OL].(2011-09-06)[2015-04-27]http://www.tts168.com.cn/bao/SYN6288--Manual.pdf.

  [11] 蔡睿妍.基于Arduino的舵机控制系统设计[J].电脑知识与技术,2012,8(15):3719-3721.

  [12] 孙兵.基于单片机的机械手声控系统设计[J].机械工程与自动化,2007(6):113-114,117.

  [13] ADRIANSYAH A, DANI A W. Design of small smart home system based on Arduino[J]. Electrical Power, Electronics, Communications, Controls and Informatics Seminar (EECCIS), 2014(10):121-125.

  [14] KANG B, LIU F, YUN Z, et al. Design of an Internet of Things-based smart home system[C]. Harbin: Lligent Control and Information Processing(ICICIP), 2011:921-924.

  [15] 金鑫,田犇,阙大顺.基于LD3320的语音控制系统设计实现[J].电脑与信息技术,2011,19(6):22-25.


此内容为AET网站原创,未经授权禁止转载。