苟鹏程 宗 群
(天津大学电气与自动化工程学院 天津 300072)
车载语音识别及控制系统的设计与实现
苟鹏程 宗 群
(天津大学电气与自动化工程学院 天津 300072)
针对传统的封闭式手动操作的车载系统,设计了基于Android系统的车载语音识别与控制系统。该车载系统采用ARM架构完成硬件搭建,设计并实现了基于网络和LD3320语音芯片的在线离线多模态语音识别功能,并在此基础上实现了语音控制导航、蓝牙电话及音乐播放功能。该系统支持导航软件应用的自助升级和维护,打破了传统车载系统升级的垄断。实验结果表明,该多模态语音识别与控制车载系统成本低、效率高,功能强大、界面友好操作简便,真正意义上释放了驾驶员的双手,具有广阔的市场前景。
车载 语音控制 导航 蓝牙 LD3320
驾车出行改善了人们的生活品质,但汽车数量的不断增加,也带来了严重的社会问题,如道路阻塞,交通事故等。科技进步推动了汽车电子技术的发展,而辅助驾驶的智能车载系统尤其被人们看重。因此,推出更加安全化和人性化的智能车载产品成为了社会各界的期望[1]。目前市场上的车载系统,绝大多数是封闭和手动操作的,受自身软件和硬件的限制,这类系统无法完全满足驾驶员对车载系统的快捷化、安全化及个性化的操作需求。此外,由于交通网络信息的快速发展和繁杂,这类车载系统如果不能及时更新导航地图,操作可能导致严重后果。再加上更新手段垄断,价格昂贵,这些都是传统车载系统的局限性[2-3]。
在已有车载语音识别及控制系统的相关研发工作中,文献[4]设计了一款基于CSRS368的车载语音控制娱乐系统,实现了音乐播放、拨打电话的功能,但没有开发语音控制导航功能,导致整体系统应用价值偏低。文献[5-6]基于系统模式匹配算法开发了语音识别系统,考虑了抗噪,但没有实现具体的控制功能。此外,以上研发工作都是依赖庞大的模式匹配数据库,识别算法占用CPU过多资源,系统运行时容易出现卡死现象。
针对以上存在的问题,本文设计一款基于Android的车载语音识别与控制系统。系统实现了基于网络和LD3320语音芯片的在线离线多模态语音识别功能,将语音识别任务交给其他模块处理,ARM主控器只接收识别结果,降低对ARM硬件的依赖。并在此基础上实现了语音控制车载导航、蓝牙电话、歌曲播放的功能,功能丰富且系统运行流畅。其中语音控制导航包括语音搜索目的地、目的地列表自动推荐、目的地直接定位等功能;语音控制蓝牙电话包括呼叫姓名、呼叫电话号码以及重播等功能;语音控制歌曲播放功能包括上下首歌曲切换,控制播放指定音乐家的歌曲和控制播放指定歌曲等功能。导航应用可以在有网络的环境下自助升级和维护。该系统摒弃了传统的、繁杂的手动操作的累赘,改善了驾驶员在驾驶车辆时的安全性和舒适性。
系统总体架构如图1所示。软件采用开源的Android操作系统。硬件架构包括:ARM主控器、LCD触摸屏及硬件驱动电路、离线语音识别单元和外围硬件模块。其中,车载主控器ARM采用三星的四核处理器,基于Cortex-A9架构的Exynos4412,搭配1 GB DDR3 运行内存,最高运行主频为2 GHz[7]。Exynos4412处理器搭载高性能数据处理引擎,为车辆数据信号的收集和处理提供了有利条件。
系统采用型号为AT070TN92的可触控LCD显示屏,支持多点触控,分辨率是800×480,响应迅速。显示屏和主控器采用45 pin接口直接相连,该可控制行场扫描信号、背光控制信号和使能信号等。
图1 系统结构
离线语音识别单元由微控器STM32F103控制LD3320专业语音识别芯片实现。LD3320是由ICRoute公司设计制造的一款专业、快速且稳定的语音识别芯片,优点是效率高、成本低、无需外围辅助元器件如内存和闪存等、无需驾驶员事前语音训练等,即可实现准确率>95%的单芯片语音识别。此外,可以动态编辑LD3320识别语句,这就为车载环境下语音识别提供了强有力的条件[8]。
STM32F103是采用Cortex-M3架构的32位微控器,时钟频率为72 MHz,指令执行效率高,响应速度快[9],成本低。STM32F103通过SPI串行通信控制LD3320,以配置LD3320内部寄存器的方式,传入识别关键字,从而实现识别列表的动态编辑。STM32F103采集LD3320识别结果,通过串口发送到车载主控器,架构如图2所示。
图2 离线语音识别架构
STM32F103不直接提供SPI接口,需要配置相关GPIO口复用功能来实现[10]。具体的硬件连接采用STM32F103的PA5(复用SCK,时钟信号)、PA6(复用MISO,接LD3320的MOSI)和PA7(复用MOSI,接LD3320的MISO)三个GPIO复用,实现LD3320和STM32F103的SPI通信。使用STM32F103的PC15,PA4分别控制LD3320的复位信号和片选信号;中断信号由LD3320的IRQ发出,配置STM32F103的PC14引脚为接受外部触发中断。
以上工作完成之后,接下来针对车载环境编写在线、离线语音识别程序、语音指令执行程序和LCD显示以及效果响应等程序。
在通常的语音识别中,用户无法针对特定环境(如车载环境)自行设计安排识别目的。此外,还需要将采集到的音频数据经过强大的DSP处理器进行数据处理,再依据特定的算法,建立庞大的数据匹配库,交给核心处理器进行提取、匹配和识别。这需要更高性能的处理器,软件的设计要求会更高,成本会更高。这样势必会占用过多的CPU资源,使其他软件(如导航、音频播放等)卡死。
针对上述问题,提出将语音识别分为在线和离线模态,其中在线识别的优势在于硬件要求低,可以识别更广泛的语音信号,如驾驶员使用语音控制导航,在线识别驾驶员所指定的目的地,驾驶员自由选择目的地进行自主导航,方便快捷,更加体现语音控制车载系统的人性化;离线模态语音识别是由LD3320专业语音识别芯片通过对比离线数据存储库,得到最佳语音识别结果。在线和离线模态的结合,将语音识别这一大环节交给其他模块处理,车载核心处理器只接收识别结果,降低对硬件的依赖,将CPU主要资源放在其他软件诸如导航、音频播放等,保证系统性能,以最低的成本达到最佳的、最智能的用户体验。
2.1 在线语音识别设计实现
在线语音识别采用类神经网络的辨识算法,以Http模式请求,缩短了开发周期,降低成本。本文以接入百度语音API实现在线语音识别。
该功能实现主要是软件编程,选择Java语言,IDE为Eclipse。考虑整个识别过程是耗时性操作,为了不影响其他事件的运行,设计采用多线程工作模式,实现流程如图3所示。
图3 在线语音识别设计流程
首先是初始化过程,包括主控器和外围电子器件的初始化。主要任务是Android系统的初始配置、LCD显示屏幕的初始配置与网络通信系统的初始配置以及麦克风的使用配置。
其次,开启UI更新主线程、语音识别子线程,数据处理子线程。其中,语音识别线程需要连接网络,数据处理相对耗时,但产生的数据都需要发送到UI主线程进行界面更新,从而与驾驶员进行交流。在Android操作系统中,UI界面的更新只能在UI主线程里面,其他耗时操作和线程不能阻塞UI线程[11]。因此建立三个线程以数据交互为基础,分工运行,使数据交流高效,系统运行流畅。系统启动时,自动启动UI主线程,加载UI界面,在UI界面上对语音识别的功能进行的描述,方便驾驶员更好地操作系统,然后等待来自其他子线程的数据,更新UI界面。UI主视图部分内容仅涉及Android界面编程这里不再详述。下面介绍语音识别子线程实现。
语音识别线程的主要任务包括语音识别的实现和识别数据结果的分析。语音识别的实现主要依靠百度语音API中的SpeechRecognitionClient,SpeechRecognitionConfig和SpeechClientStatusChangeListener三个重要的类。其中SpeechRecognitionClient实现了对语音识别流程的整体掌控,该类的三个方法startSpeechRecognition()、speakFinish()、stopSpeechRecognition()分别用来实现语音过程的开始、结束和终止;SpeechRecognitionConfig类用来对语音识别进行参数请求配置,包括采样频率,语言种类等。针对车载环境,采样频率配置为8 kHz,以节省成本,语言种类设置为LANGUAGE_CHINESE;SpeechClientStatusChangeListener类的实现,用来掌控具体语音识别过程以及识别结果的反馈。在线语音识别实现效果如图4所示。
图4 在线语音识别实现效果
提取出来的识别结果是直译文字信息,使系统以识别的文字结果为命令,就必须对识别结果文字信息进行语义解析。考虑到车载环境,语音命令都是祈使句命令,比如“播放周杰伦的音乐”、“拨打王某某的电话”、“导航去天津站”等。使用正则表达式进行语法分析,采用的语法结构为基础语法结构:谓语+间接宾语+直接宾语、谓语+宾语、谓语+宾语+补语;同时将“的”作为句子理解的断点。整个句子结构采用上述语法分析之后将拆分后的数据封装在Json数据结构中,其中谓语是语音命令的核心,它指导动作的方向,宾语是具体的动作。例如,“播放周杰伦的音乐”进行语义解析之后,拆封得到的数据:“播放”(是指向音乐播放器的命令),“周杰伦”和“音乐”(是具体到播放的最终目的)。
最后,语义解析完成之后,将结果数据发送到UI主线程,更新UI界面,提示驾驶员识别的结果。同时,将解析结果数据交给数据处理子线程,数据处理子线程根据具体的信息,进行软硬件响应。各线程以数据为基础分工明确,节约成本,降低功耗,实际操作中识别流畅,用户体验良好。
2.2 离线语音识别设计实现
其他任一类型语音识别,都是以中文文本库为匹配对象,语音识别出来的结果是同音字,但不一定是正确识别结果。例如呼叫“王鹏”,就可能识别为“王朋”或“王彭”,这样就可能导致识别失效或者打错电话的尴尬。故采用离线语音识别控制蓝牙电话,将通讯录里联系人的名字设定为离线语音识别匹配库,这样匹配到的结果就是要找的联系人,识别快速准确。
LD3320语音识别芯片是通过和写入芯片的关键词对比实现语音识别的[12]。将需要识别的关键词以拼音字符串的形式,写入到微控器的运行内存ROM内部。LD3320进行语音识别时,将语音信号进行分析和特征提取,与关键词列表中的信息进行匹配,相似度最高的即最佳识别结果。
考虑到车载语音环境的特性,设计时采用触发识别,即微控器接收到一个外部触发命令(设计为驾驶员的按键命令)时,才会开放LD3320的识别条件,即一次触发进行一个语音识别过程。此外,采用LED灯光提示,提示驾驶员语音识别环境准备就绪,避免驾驶员随性的语音导致识别率降低,会进一步提高语音识别效率,增强驾驶安全性。有语音识别结果时,LED自动熄灭。触发识别还是一种低功耗模式,在驾驶员不操作语音识别时,微控器不控制LD3320工作,以达到省电降耗的功效。
LD3320语音识别设计流程如图5所示,具体软件驱动编写如下:
(1) 初始化:对芯片各个寄存器按照序列进行设置。
(2) 写入所要识别的词条:待识别的词条按照键值对的形式传入,形成词库。词库的法则:一条识别词条对应一个特定值,不同的待识别词条可以对应同一特定值。系统内部传递的是词条对应的特定值,根据特定值,即可确定语义。
(3) 等待识别过程:设置全局控制变量,指示当前状态是否具备完备的识别条件。
(4) 响应中断:当语音按键被按下,麦克风采集语音命令,LD3320产生中断,读取BA寄存器的数值,根据数值判断识别是否正确。
(5) 结果输出:检测到识别正确,且读取到特定值,将结果通过串口发送到主控器。STM32F103与主控器的串口通信配置为:115 200波特率,8位数据传输,1位停止位,无奇偶校验。
图5 离线语音识别设计流程
离线软件驱动编写完成之后,在电脑上通过串口调试助手调试测试,识别迅速,体验效果良好,如图6所示。
图6 离线语音识别实现效果
对安装在车载系统车上的任一种导航软件的语音控制,是通过提取驾驶员语音信息进行目的地搜索,再采用Android系统提供的Intent机制,将带有目的地经纬度信息Intent对象发送到第三方导航软件,从而实现语音对导航的通信和控制。导航软件在接收到目的地信息后自动启动并跳转到目的地导航页面,这样在保证识别效率和正确操作的前提下,真正释放驾驶员双手,保证安全驾驶。语音控制导航设计流程如图7所示。
图7 语音控制导航设计流程
首先是UI主线程接收来自语音识别线程的识别结果,同时UI主线程更新界面,告知驾驶员识别结果。同时启动数据处理子线程,接收处理完成的语音数据,为保证安全驾驶,数据处理子线程再次对语音命令进行解析。
当解析结果是正确导航命令时,从Json数据结构中提取目的地信息,再启动搜索线程,进行对目的地的搜索。目的地的搜索有三个重要的变量PoiSearch初始化检索对象,PoiCitySearchOption对检索对象进行参数配置,OnGetPoiSearchResultListener是一个监听类,用来监听是否存在有效的搜索结果[13]。通过onGetPoiResult方法得到结果数据PoiResult, PoiResult包含所有搜索结果的地址信息、统一标识符ID及经纬度等信息。将搜索到的每个结果信息打包处理成hashmap数据结构,所有的hashmap数据构成一个LIST链表。将LIST链表封装好后发送到UI线程,UI线程启动后,提取LIST链表中的数据,界面上形成目的地推荐列表AlertDialog。实现效果如图8所示,可以清楚地看到语音识别后目的地推荐列表。
图8 目的地推荐列表效果图
Intent是Android不同应用之间数据交流的桥梁。使用带有经纬度参数的Intent通过startActivity启动导航,其中配置数据采用Uri。
驾驶员选择AlertDialog列表中的目的地,会触发一个带有经纬度数据Intent对象传递到第三方导航应用,将导航信息显示在LCD显示器上,最终实现语音控制导航。实现效果如图9所示。
图9 语音控制导航实现效果
用户可以根据自身需要和喜好自行安装导航软件,升级方法同样操作简单,像操作Android手机一样,可以采用SD卡下载安装包升级,可以采用网络手段升级,打破了传统车载导航升级的垄断。
车载环境下,音乐播放器处于后台播放状态,程序在后台运行而不影响其它程序的正常运转,这是基于Android系统的重要组件——服务Service。所以应当设计语音控制后台音乐播放Service,这样就要用到Android的广播(Broadcast)机制。该功能的设计流程图如图10所示。
图10 语音控制歌曲设计流程
Android操作系统提供了MediaStore类,使用内容解析器ContentResolver提供Cursor的query查询方法来调取MediaStore类所提供的数据表格。包括歌曲名称TITLE、歌曲专辑名ALBUM、歌手名字ARTIST等。从UI主线程提取到语音识别有效控制信息时,如“播放周杰伦的音乐”,在ARTIST中匹配“周杰伦”,得到文件位置。将文件位置信息搭载到Intent对象,主线程通过Broadcast将Intent发送到音乐播放器Service,接受命令从而播放歌曲。
语音控制蓝牙电话,主要是通过语音来控制主控器操作蓝牙模块:主控器通过串口向蓝牙模块发送AT命令,实现对驾驶员手机的语音控制。不同的语音命令触发不同的AT命令,从而实现接听、重拨、呼叫某人及呼叫电话号码等功能[14]。该功能的设计流程如图11所示。
图11 语音控制蓝牙电话设计流程
首先是UI主线程接收来自语音识别线程的识别结果,这部分同语音控制导航,这里不再赘述。从Json数据结构里面提取控制电话信息,如检测是呼叫电话号码数字命令或是直接的控制命令(如重拨、拒绝接听等),将控制信息直接形成蓝牙AT命令。
同样,如果检测到控制命令是呼叫某某人,将姓名提取出来,从通讯录中提取电话号码信息,再转化为蓝牙AT命令。 根据姓名查找电话号码,使用Android内容提供者(ContentProvider)和内容解析器(ContentResolver)。Android通讯录作为ContentProvider负责将数据(根据姓名匹配到的电话号码信息)传递给ContentResolver(蓝牙串口线程),形成AT命令,继而控制蓝牙电话。
本文从底层硬件架构设计到Android操作系统上层控制应用等各个方面对该车载语音识别与控制系统的开发进行详细论述。设计并实现了在线离线多模态语音识别功能,又在充分考虑安全驾驶和节约能耗的基础上,实现了语音控制车载导航、蓝牙电话及歌曲播放的功能。整体系统功能丰富,操作简单且具有很好的控制效果和稳定性。在实验室条件下模拟车内环境对该系统进行了测试,结果表明,系统整体运行流畅,识别率在95%以上。此外,本系统可以自助升级导航应用,摆脱了传统系统升级受垄断的限制。
本系统还可以在软硬件控制方面进行拓展,例如对空调系统的控制、限行语音提示以及天气情况语音提示等,可继续拓展功能,使该系统成为集语音和服务于一体的智能化车载系统。此外,随着科技不断发展,Android系统的不断渗透,该系统必当会在各个类型汽车中盛行,具有广阔的未来市场和广泛的应用前景。
[1] 孙康慧. 中国汽车电子产业创新体系构建研究[D]. 吉林大学, 2011.
[2] 李永钧. 中国汽车导航业面临的机遇与挑战[J]. 汽车工业研究, 2012(10):22-24.
[3] 胡刚, 金振伟, 司小平,等. 车载导航技术现状及其发展趋势[J]. 系统工程, 2006, 24(1):41-47.
[4] 李彦奇. 基于语音控制的车载娱乐系统的研究[D]. 吉林大学, 2015.
[5] 欧阳丹. 基于ARM的车载语音识别系统的设计[D]. 湖北大学, 2014.
[6] 刘林峰. 基于智能化车载交互的语音识别系统的建立与实现[D]. 中国地质大学, 2013.
[7] 黄智伟. ARM9嵌入式系统设计基础教程[M]. 北京航空航天大学出版社, 2013.
[8] LD3320开发手册[EB/OL].[ 2011-10-13]. http://www.icroute.com/doc/LD3320.pdf.
[9] 孙书鹰, 陈志佳, 寇超. 新一代嵌入式微处理器STM32F103开发与应用[J]. 网络新媒体技术, 2010, 31(12):59-63.
[10] 李宁. 基于MDK的STM32处理器开发应用[M]. 北京航空航天大学出版社, 2008.
[11] 周兵. Android中UI线程与后台线程交互的探讨[J]. 郧阳师范高等专科学校学报, 2013, 33(3):14-16.
[12] 钟晨帆. 基于LD3320芯片的语音识别系统设计与开发[D]. 南京大学, 2015.
[13] 百度地图Android SDK [EB/OL].[2014-11-14]. http://blog.csdn.net/callmesen/article/details/41121667.
[14] 赵虎成. 基于Android平台的蓝牙电话应用设计及实现[D]. 东南大学, 2013.
DESIGN AND REALIZATION OF VEHICLE SPEECH RECOGNITION AND CONTROL SYSTEM
Gou Pengcheng Zong Qun
(SchoolofAutomationandElectricalEngineering,TianjinUniversity,Tianjin300072,China)
Aimed at the traditional enclosed manual operation of the vehicle system, a car speech recognition and control system based on Android system is designed. The vehicle system uses ARM architecture to complete the hardware structures,the on-line and off-line multi-mode speech recognition based on the network and LD3320 voice chip is designed and implemented. On this basis, voice control navigation, Bluetooth phone and music playing function are realized. The system supports self-service upgrade and maintenance of navigation software, breaking the monopoly of traditional vehicle system upgrade. The experimental results show that the multi-mode speech recognition and control vehicle system has low cost, high efficiency, powerful function, friendly interface and easy operation. It realizes releasing the driver’s hands and has broad market prospect.
In-car Speech control Navigation Bluetooth LD3320
2016-04-18。国家自然科学基金项目(91016018);天津市基础研究重点项目(11JCZDJC25100)。苟鹏程,硕士生,主研领域:嵌入式开发。宗群,教授。
TP368.1
A
10.3969/j.issn.1000-386x.2017.05.023