嵌入式语音识别系统的测试方法研究
2019-07-23陈春玲李雯雯
陈春玲,李雯雯,余 瀚
(南京邮电大学 计算机学院,江苏 南京 210003)
0 引 言
语音识别系统一般是在PC机或嵌入式系统上实现的,虽然PC机的存储能力大、计算能力强、运算速度快,但是基于PC机的语音识别系统因为体积大、价格高、不方便携带等缺点不适合应用于实际产品中,而嵌入式系统具有体积小、功耗低、价格低、便携性好、可靠性高等优点[1],将语音识别系统应用到嵌入式系统将是新的发展趋势。如何有效地对嵌入式语音识别系统进行功能、性能和稳定性的测试已成为产品开发商、嵌入式操作系统提供商面临的一个重要问题。
目前,国内外对语音识别系统的测试主要还是基于传统的现场测试方法[2],利用特定人现场发音、人工统计分析测评结果,但是对于大规模的压力测试、场景测试、多次的系统回归测试,存在测试时间周期长、效率低、浪费人力等问题。为减少人力的投入,通过使用预记录的语音材料代替人工现场发音,但测试结果的比对仍需测试人员手工进行,依旧存在测试周期长、测试效率低等问题。近年来,自动化测试工具代替了部分繁杂而重复的手工测试劳动,有效避免了人为因素引入的错误,提高了测试质量,已成为嵌入式软件测试的有效解决方案。
流行的嵌入式软件测试平台,如德国Tech S. A. T GmbH和dev software GmbH共同开发完成的Avionics Development System 2nd Generation和北京航空航天大学开发的一套通用嵌入式软件仿真测试环境GESTE[3],已被证明是成功的嵌入式软件测试解决方案,但两者主要用于航空电子系统测试领域。在移动和无线领域,仅有部分产品开发商具备公司内部运转的自动化测试体系,如瑞典的爱立信公司[4]和国内的夏新公司等。通用的移动和无线测试系统更为少见,目前仅有美国的TestQuest,Inc公司推出的TestQuest ProTM提供了移动无线终端自动化测试的解决方法[5]。
基于以上分析,为保障测试的真实性,同时实现自动化测试,设计并实现了一套通用的嵌入式语音识别系统的测试方法。将语音识别系统部署到实际应用的嵌入式系统,通过自动化测试工具实现语音数据的输入、实时接收识别结果并校验,完成了非侵入式的闭环测试,有效提高测试效率,从而保证语音识别系统的质量。
1 测试方法与工作流程
1.1 嵌入式软件测试
嵌入式软件是一种比较特殊的软件,软件经过分析、设计、编码后只有烧入硬件环境中才可投入使用。一般来说,传统软件测试技术和方法都可以运用于嵌入式软件测试,但嵌入式系统有自身特点,如实时性、内存不丰富、I/O通道少、专用性强、与硬件紧密相关等,所以嵌入式软件测试与传统软件测试存在一定差异[6],区别主要表现在以下几点:
(1)嵌入式软件测试与硬件环境密不可分。在嵌入式测试过程中软件与硬件兼容性测试很重要。
(2)嵌入式软件对实时性要求严格,并保证嵌入式系统的可靠性和实时性。在测试时需要考虑系统实时性响应问题。
(3)嵌入式系统经常出现内存的问题,嵌入式软件测试需要对内存泄漏、内存碎片等问题进行充分测试。
1.2 嵌入式软件的测试方法
嵌入式软件与通用软件是不同的,嵌入式应用程序运行在软硬件资源相对缺乏的目标机上,开发环境被认为是宿主机平台,软件运行环境为目标平台。由于嵌入式软件的特殊性,目前嵌入式软件的测试主要有两种途径:在目标环境上测试和在宿主环境上测试。常见的测试策略是将与目标环境无关的测试在宿主机环境中完成测试,如逻辑测试、界面测试;在系统中与硬件密切相关的测试,如中断测试、实时性测试,尽量选择在目标环境中运行[7]。所以需要根据嵌入式软件的特点搭建测试环境,主要分为全数字仿真测试环境、半实物仿真测试环境、全实物仿真测试环境。
全数字仿真测试环境:仿真嵌入式硬件及外围的一套软件系统,提供一个精确的数字化硬件环境模型[8];半实物仿真测试环境:利用仿真模型来仿真与被测系统的交互关系,模拟真实环境的I/O关系及接口;全实物仿真测试环境:被测软件处在完全真实的运行环境中,直接将整个系统与其交互的物理设备建立真实的连接,形成闭环进行测试。
1.3 语音识别系统的整体工作流程
语音识别系统的识别过程通常分为两个过程:前端处理及后端识别。前端处理的主要作用是进行语音端点检测(voice activity detection,VAD),去除多余的静音及非关键字语音段、降噪、语音增强、特征提取、消除噪音和不同说话人的发音差异带来的影响,使处理后的信号能够更完整地体现语音信号的本质特征。后端识别将输入的语音信号特征与语音模板进行比较,根据一定的搜索和匹配策略,找出一系列最优的与输入语音匹配的模板,然后根据此模板的定义,通过查表给出识别结果,主要作用就是利用训练好的声学模型、语言模型、字典对用户说话的特征向量进行统计,得到其包含的文字意思[9]。
图1 语音识别系统工作流程
图1给出了语音识别系统的整体工作流程[10]。在有语音输入时,启用录音程序,录音程序将依据一定的采样率将音频信号变成符号化的脉冲列,再予以记录生成PCM信号输入到识别系统。首先经过前端处理,进行端点检测和降噪,生成包含关键字的单通道数据;然后智能语音模型对数据进行识别,输出识别结果,而后对识别结果进行校验;最后对批量结果进行统计分析。
1.4 嵌入式语音识别系统的测试方法
在语音识别系统的系统测试阶段,通常是根据需求说明模拟用户环境,或使用真实的用户环境来运行完整的软件系统,验证整个系统是否达到预定的目标,检验整个软件系统的稳定性、性能和故障恢复能力是否满足用户的要求[11]。为验证嵌入式语音识别系统与运行环境中其他部分的兼容情况,同时确保测试结果的真实性,将嵌入式语音识别系统移植到目标机进行系统测试,保障了测试过程中无须对被测目标机的嵌入式软件及其运行的硬件平台进行修改。
基于嵌入式操作系统存在的实时性、内存有限等自身特性,文中采用了交叉测试方式。将嵌入式语音识别系统运行在目标机上,然后将目标机的输入输出重定位为主机的输入输出设备,即可借助主机的资源完成对目标机的操作,同时,通过主机向目标机发送命令[12],可实现对目标机的内存资源使用情况等的测试。
嵌入式软件测试面临实时性、强壮性以及确定性能瓶颈的测试难题[13],手工测试的测试范围有限并且存在一定人工误差,借助自动化测试工具[14]解决目标机与宿主机无线通信的问题,模拟实际应用场景批量地测试语音识别的性能,统计识别耗时,总结分析系统瓶颈,避免人工统计误差,提高测试结果的可参考性,进而促进语音识别系统的开发工作。
2 嵌入式语音识别系统的测试
2.1 宿主机与目标机交叉测试
语音识别技术在嵌入式系统上的应用是当前的热点和难点,文中在全实物仿真测试环境下采取宿主机和目标机交叉测试的方法,研究实现了一套适用于嵌入式语音识别系统的自动化评测系统。将语音识别系统置于实际运行的物理设备中,通过将宿主机与目标设备建立通信后,在宿主机通过测试命令以及配置文件的方式控制目标设备上识别系统的运行这种方式,有效解决了主机对目标程序进行测试控制的情况,更便于提早发现问题。
在宿主机方,在测试开始前制定测试计划,设计测试用例,根据不同的测试目的选择相应的测试用例;在宿主机编写测试代码,然后下载到目标机通过测试脚本执行,同时在宿主机上通过自动化测试工具接收目标机上的测试脚本发送的测试结果,并显示测试结果,在测试用例执行完毕后测试工具还可以对测试结果进行统计分析。
在目标机方,测试脚本接收执行命令后调用被测实时嵌入式语音识别系统,识别系统在完成一条语音的识别任务后将结果发送给测试脚本,测试脚本将识别结果传输给宿主机上的测试工具。
2.2 体系结构设计
根据语音识别系统的工作流程,设计并实现了存储模块、语音输出模块、语音采集模块、比对模块、传输模块及统计模块。
图2给出了各模块的协作过程。存储模块用于指定包含测试序列的文本文件的本地路径,并指定在批量测试完成后生成的统计结果的表文件及标注文件的保存路径;语音输出模块包括噪声产生装置及语音播放设备,噪声产生装置用于产生测试环境的噪声,可用于在不同噪声干扰下的性能识别,语音播放设备可以是通用的扬声器或特殊的播放设备,如人工嘴;语音采集模块用于录音,依据一定采样率采集音频信号传入到语音识别前端处理;比对模块用于将语音识别系统返回的结果与待测试的语音文件进行比对; 传输模块用于将识别结果遵循自定义的传输协议输出到宿主机,自定义的协议可包括相关校验信息,比如VAD的开始和结束时间;统计模块用于对语音序列的批量识别结果进行统计,以判断语音识别系统的准确度。
图2 模块间的协作
通过各模块的配合完成交叉测试,测试流程首先是建立通信,将宿主机与目标机通过无线网络建立连接,使运行在宿主机的自动化测试工具和目标机上的测试脚本连接到同一网端,同时自定义传输协议,指定传输的数据包的逻辑。宿主机顺序读取测试用例中的语音序列,调用语音播放器播放,同时目标机的录音设备在采集到语音信号后,送至语音识别系统,语音识别系统对语音数据进行特征提取比对得到识别结果后,通过传输模块将识别结果传送给测试工具的对比模块,完成校验及统计、分析。
2.3 自动化测试
自动化测试从语音输入、结果输出、结果统计入手。通过配置序列文件[15],将测试集路径传入测试工具,可实现宿主机根据序列自动连续播放语音文件;通过与目标机建立TCP通信协议,实现实时接收识别结果同时输出到界面展示,并自动统计识别耗时,分析系统瓶颈;通过设置时钟,判断识别是否超时;将识别结果与序列文件对应的测试数据进行比对,实现自动校验识别结果;在测试集测试完成后,自动统计测试集的整体识别率;另外,通过主机放音次序及时间间隔,可自动生成测试集的标注文件。图3是运行中的自动化测试工具。
图3 自动化测试工具
3 实验及其结果分析
3.1 实验过程
结合具体实例,进一步阐明测试方案,流程如图4所示。
根据测试用例搭建测试场景,包括语音播放器、噪声产生装置与待测终端的位置关系及信噪比的控制等。
在测试计算机上运行测试工具,向待测终端的测试程序请求建立连接,测试程序确认连接。待测终端控制语音采集模块进入本地录音状态。
测试计算机输出一条预先设定的列表文件中对应的语音信息至语音播放器,播放语音。
待测终端的录音程序将录音文件传给语音前端,检测到语音后即传入识别模型进行识别。
待测终端收到识别结果后,即通过无线方式传给测试计算机,若测试计算机在设置的等待时长内没有收到结果,即判断为超时。
测试计算机接收到识别数据时即可与参考的列表文件中对应的文本进行比对。循环多次,直至预存的列表文件中的所有语音文件播放完毕,即可进行识别率的计算,进一步进行性能分析和评估。
图4 测试流程
3.2 结果分析
实验将语音识别系统应用在智能空调上,通过语音向空调发送常用指令,判断空调是否能够正确识别用户指令然后做出响应。选取常用的指令如开机、自动模式、制冷模式、二十四度作为测试集。借助自动化测试工具,只需二十五分钟就可完成1 200条用例的测试,同时记录每条用例的测试结果,对于测试失败的用例,可基本判断失败原因,比如图5中的语音词“开机”,其识别失败的原因可通过设定的时钟判定为识别超时,语音词“制热模式”,其识别失败的原因可通过将识别结果与放音序列比对不一致判定为识别错误;另外,通过自动化测试工具同时可以分别统计各个指令的识别率,查找对应语言模型网络存在的不足。通过该测试方案,可以更全面地分析系统,评估系统性能,极大提高了测试效率。另外,整个测试过程仅需1-2位测试人员,节省了大量人力,同时也避免了人工统计的误差,提高了结果的真实性。图5中统计的成功率可通过提高语音识别的算法提升识别率,与文中的测试方案无直接联系。
图5 单个场景下的部分识别结果
通过搭建测试环境,包括信噪比、噪音类型的控制,模拟语音系统实际应用场景,实现各个场景的覆盖测试,如图6,统计了不同场景下的识别率,在平稳噪音情况的识别率明显比非平稳噪音(如音乐、办公室)下的识别率略高,所以需要针对识别率较低的场景,分析前端信号处理能力,优化降噪算法。通过此测试方案,针对噪声类型及信噪比,可以辅助分析前端信号处理算法的不足,更准确地优化算法来提升系统性能。
实验表明,该测试方法可有效用于评测不同语音识别系统的性能和抗噪鲁棒性。与现有测试技术相比,该方法既保证了测试自动化简单易操作,又降低了测试成本,提高了测试效率,并使测试更准确、全面。同时可以设计一些小工具来对结果进行分析,对系统的输出加深了解,从而找出系统的不足。
图6 多个测试场景的测试结果
4 结束语
由于嵌入式软件技术的自动化程度高、软件代码小、反应速度快等特点及优势,基于嵌入式系统的语音识别系统在各行各业中正扩大应用范围。文中研究了一套对嵌入式语音识别系统的测试方法,可大面积覆盖语音识别系统可能的应用背景,最大程度还原用户体验场景,极大减少人力的参与,实现了自动化测试、自动化统计结果、自动化生成标注文件,加快了测试进度,进而加速了项目的研发进展。