罗鹏 冯镜吾 冷晓晗 曾肖鸿弋 叶谈 孙晗 常昊 李策
摘要:基于Android移动平台开发的手机语音报警系统APP,结合Android开发技术、语音端点检测技术、语音特征提取技术、语音识别技术、GPS定位技术、移动终端和服务器终端信息交互技术,以实现实时检测、采集外界语音的输入信号,并实时处理语音信号,得到语音识别结果的功能。然后利用语音识别结果判断系统是否启动与自动报警,真正达到用户能在手机端利用语音进行语音报警的目的。
关键词:Android;端点检测;语音特征提取;语音识别;GPS定位
中图分类号:TN912.34 文献标识码:A
文章编号:1009-3044(2019)21-0082-05
开放科学(资源服务)标识码(OSID):
Abstract: The development of this APP is based on android mobile platform, combine with android development technology, VAD (Voice Activity Detection) technology, Speech Feature Extraction technology, Speech Recognition technology, GPS Positioning technology and Information Interaction between mobile device and Net-based server,thereby enabling real time monitoring, collect external voice input signal and handle voice signal in real time to get voice recognition result. Then use this result to judge whether to call the police or not, so it can achieve the final purpose of call the police with voice in mobile device.
Key words: Android; VAD (Voice Activity Detection); Speech Feature Extraction; Speech Recognition; GPS Positioning
1 背景
近年来,随着图像处理、语音识别、人脸识别等新技术逐步从实验室走向实际应用的过程中,Android手机结合各种新技术的应用程序越来越多,而各种应用程序的出现也极大丰富了用户的体验。但目前市场上的智能手机,并没有应用程序在手机端实现语音的报警功能,而仅仅是实现手机端的一键报警功能;然而当前的语音识别技术可以将费时,费力的机器操作变得简单有趣,使用语音控制手机也是高端智能手机的必备功能之一,比如手机语音助手,语音输入法等功能的实现就让人们的生活更加便捷有趣。
基于创新和实用的观点,本文结合Android应用开发技术和语音处理技术,提出基于Android手机语音报警系统的设计与实现方案,并结合实际应用场景开发一款基于用户在危险情况下可以使用语音在手机端进行报警的APP。该系统具有广泛的应用用途,用户可在银行、图书馆、商场、居室等场合遇到危险、紧急情况时使用该系统进行自动报警,以达到快速、准确报警的目的。当用户在遇到紧急危险情况时,比如用户在商店、回家路上遭遇盗抢等受害者已经被控制的突发情况下,用户可以不用长按power电源键、home键或者音量键,而仅仅需要用户说一句口令,就可以实现报警;报警系统快速响应并向亲戚、朋友等预先设定的报警信息接收人进行求救。由于考虑到实际应用场景,本系统要求在用户无法使用手指进行手机唤醒时,要求系统一直保持监听状态,一旦从外界监听到语音活动段,就开始进行相应的语音处理、识别、匹配,当系统监听、匹配到用户口令,就唤醒系统,自动进行报警。
2 系统总体设计及功能
本系统应用软件实现包括用户注册登录、语音数据实时采集、语音活动检测、口令识别、GPS定位和报警信息发送六大功能模块。系统功能结构如图1如下:
1) 用户注册登录:该功能模块完成用户身份信息注册,并将注册信息上传服务器终端进行保存,用户登录时发出http登录请求,由服务器对请求进行登录验证,如果登录信息正确,则服务器同意其登录请求。
2)语音数据的实时采集:该功能模块实现语音的实时监控和采集,并将采集的语音数据存储在数据缓冲区中。
3) 语音端点检测:该模块通过多线程技术实现语音数据缓冲区的监控,当缓冲区中语音数据达到设定的门限值,此时取出语音数据进行端点检测,去除语音数据中非语音数据段,以减少系统资源、功率的消耗。
4) 语音识别服务:该模块负责接收客户端经端点检测后上传的语音数据,并对数据进行预加重、分帧、加窗等预处理,进而提取语音数据的特征参数;将特征参数作为输入传入口令识别模型库进行解码与搜索匹配,输出匹配结果并将结果返回客户端。
5) GPS定位:該模块包括定位信息获取和定位信息处理两个子模块,其中GPS定位信息获取子模块通过轮询的方式获取设备的地理位置信息,而定位信息处理子模块将获取的地理位置信息处理为短信、文字等形式。
6) 求救信息处理、发送模块:求救信息处理模块主要完成求救信息的设置、文字信息的处理,系统允许用户预先设置求救文字信息内容和求救信息接收人;在求救者进行求救行为时,求救信息发送子模块自动向求救信息接收人发送用户预先设置的求救文字信息,并完成报警动作。
3 系统实现及关键模块
3.1 手机客服端功能实现
3.1.1 语音实时采集模块
该模块实现包括音频的实时监听和实时输入,音频编码、解码功能以及音频存储功能。系统通过多线程技术[1]一直监听麦克风状态,实时获得外界模拟声信号的输入,并对输入的声音信号进行滤波、采样、量化、编码处理后,输出声音信号的数字码流[2],并将处理得到的数字码流输出到语音数据缓冲区中进行存储,为后期数据预处理和语音识别功能模块提供数据。音频数据采集过程流程图如图2所示。
本文通过双缓冲机制[3]和Audio Record接口[4]实现音频的实时录制功能,通过实例化Audio Record,结合相关场景设置、实时采集Audio Record接口需要的参数信息,并调用相关接口方法根据提供的参数信息完成音频的实时录制、存储等功能,Audio Record参数信息如表1所示,相关接口方法信息如表2所示。
3.1.2 语音端点检测模块
在本系统中,语音的端点检测[5]是关键技术之一。语音的端点检测技术主要完成语音数据段的起始点和终止点的判断,进而将语音数据中非语音部分进行丢弃,减少后期数据的传输量和处理量,提高系统的运行效率,降低系统的消耗。系统在接收设备输入信号后,进行相应的预处理。预处理的第一步主要是进行分帧操作,即是将输入语音信号分段,第二步主要完成对声学参数的特征提取,声学特征用于区分有效的语音帧,端点检测的主要任务就是完成对端点的检测判断,进而提取有效的语音帧,最后一步是进行语音数据的平滑处理,得到一个清晰的语音信号。语音端点检测基本原理流程如图3所示。
本系统基于WebRTC[6]的VAD检测模块实现端点检测功能,VAD检测模块通过一个子线程间隔性监听语音数据缓冲区,当语音数据缓冲区达到设置的阈值时,VAD检测模块立刻从语音数据缓冲区获取语音数据,并调用WebRTC相关接口函数进行相应的预处理和参数提取,完成语音数据的端点检测。其中WebRTC相关接口及属性如表3所示。
3.1.3 GPS定位模块
全球定位系统GPS(Global Positioning System),全称为导航卫星定时和测距系统[7],是一种基于卫星的无线导航系统,是由美国国防部设计和运行的、旨在为军事和民用领域提供精确的授时、定位服务。基于GPS全球性覆盖,持续、全天候提供服务、定位精度高等优点,本文结合Android开发技术和百度地图服务实现手机端的GPS定位功能。Android GPS定位开发流程主要如下:
1) 向百度地图申请服务,得到一个API Key,作为接入百度地图的密钥,并完成相关环境配置。
2) 获取StringBuilder类对象currentPosition。currentPosition用于产生所有与定位相关的服务和对象。通过调用 getCountry()、getProvince()等方法来实现获取。
3) 设置LocationClientOption类。LocationClientOption对象的设置可以帮助系统获取到更精确的Context定位信息。LocationClientOption对象option的主要属性如表4所示。
4) 創建LocationClient实例。通过新建一个LBSwithBaidu活动,并调用onCreate()方法创建LocationClient实例。
5) 注册定位监听器。通过LocationCliet实例调用getApplocationContext()方法获取全局的Context属性参数,并调用LocationClient实例的registerLocationListener()方法完成监听器的注册。
6) 获取用户当前地理位置信息。通过调用requestLocation()方法开始进行当前位置信息获取,设置参数为前文提到的全局参数Context。
7) 地理位置的经纬度解析。通过调用bdLocation的getLatitude()、getLongitude()、getAltitude()方法来获取当前位置经度、纬度和海拔的值,进而得到用户经度和纬度信息。
8) 地理位置信息更新与显示。通过创建LocationClientOption对象调用setScanSpan()方法设置10秒为一个时间间隔更新当前位置信息,并通过调用ActivityCompt类的requestPermissions()方法申请相关权限,并在配置文件中加入MAPVIEW控件实现地图的显示。
3.1.4 求救信息的处理与发送
求救信息处理子模块主要完成接收从后端服务器通过语音识别服务得到的识别结果,并将识别结果与用户口令进行比对,如果识别结果与口令比对成功,则启动求救信息发送子模块,将用户位置信息和预先设置的报警文字发送给求救人,达到快速报警的目的。
求救信息发送主要流程如下:
1)接收服务器返回的信息,并检测isRescue属性。
2)若isResecue属性为真,则向服务器请求存在用户数据库该用户的HelpText属性和HelpTelephone属性,并通过相应变量接收、存储。
3)设置一个SmsManager实例sms。利用库中封装的sendTextMessage函数发送求救信息,其中destinationAddress参数用HelpTelephone变量赋值,Text参数用HelpText变量赋值,sendIntent和deliveryIntent分别使用SentPI和DeliverPI赋值。
4)监控SentPI和DeliverPI参数。其中sentPI参数用于检测运营商是否成功发送求救信息,deliverPI参数用于检测运营商成功发送求救信息后,对方是否接收成功。若发生发送、接收出错,则进行相关的错误处理,若发送、接收成功,则调用Toast.show()函数显示结果。
3.2 服务器终端功能实现
3.2.1 语音识别服务
语音识别是将用户输入的语音转换成计算机能够处理的字符序列的一种技术,处理的大致过程可分为如下过程,第一步主要是完成数字语音信号相应的预处理,包括语音的预加重、分帧、加窗、端点检测等,第二步是对输入的语音信号进行分析,提取语音信号的MFCC特征参数[8],并通过相应训练得到语音识别的模型库,第三步是计算机根据提供的语音识别模型库,将需要识别的语音数据的特征参数与模型库通过相关的解码、搜索算法进行对比,找出模型库中与输入语音信号最优匹配的模板,最后输出识别结果,语音识别的基本原理流程图如图4所示。其中语音识别的主要过程可分为模型训练和语音识别判断。
1)模型训练。训练的根本就是构造声学模型,再输入数据集训练。本项目使用Keras、TensorFlow基于深度卷积神经网络和长短时记忆神经网络、注意力机制以及CTC实现。定义CNN/LSTM/CTC模型,使用函数式模型。CNN[9](卷积神经网络)模型分为输入层、隐藏层和输出层,输入层由上一步语音初步处理后的向量序列组成;隐藏层由卷积层、池化层和全连接层组成,卷积函数运用Conv2D()函数,将语音向量组与卷积核相乘,提取更高层次的特征,池化层运用MaxPooling2D()函数,减小数据处理量同时保留有用信息,全连接层对经过多次卷积层和多次池化层所得出来的高级特征进行全连接,算出預测值;输出层主要由softmax作为激发函数,将所得的特征预测值进行分类处理,最后通过全连接层输出预测值。本项目将神经元运用的为LSTM(长短时记忆单元)神经元[10],其基本思想是利用不同类型的门控制输出的信息流,意在长时间保存信息的复杂并能精巧运用。CTC层在lambda层中实现,实现连接性时序及输出。模型定义成功后,将本项目所采集的数据集经处理后进行长时间训练,通过对比loss的函数图像和准确率的结果,最后获得模型进行运用。
2)语音识别判断。根据马尔可夫假设[11],假设每一个词出现的概率仅考虑与前一个词有关,统计每一个词的概率与前一个词到这一个词的转移概率,选取普通人说话的场景下的语料库,生成一个带有词频标识的中文词典。通过声学模型得到语音特征向量,结合中文词典,使用维特比算法[12]进行解码运算,构成语言模型。解码过程中不断剔除掉概率过低的路径,解码完成后得到一个概率最大的路径,即概率最大的一个句子,然后输出相应的文本。
3.3 客户终端与服务器终端的交互
客服终端与服务器终端的交互主要包括数据发送子模块和数据接收子模块,主要实现客服终端向后端服务器的语音识别服务子模块发送语音数据,并请求提供相应语音识别服务。其中数据发送子模块主要负责发送HTTP协议的POST请求[13],请求将客户终端采集的语音数据上传后台的语音识别服务子模块,并进行语音识别服务;数据接收子模块接收客服终端上传的语音数据,等待语音识别子模块输出口令结果,将识别口令结果或是错误信息以JSON[13]格式字符串形式返回给客户终端的服务请求者。
该模块通过Java JDK提供的JSONArry和JSONObject类实现轻量级数据交换格式的设置,并调用相关参数和方法获取需要的数据。通过HttpURLConnection类及其父类URLConnection实现数据的发送和接收功能,HttpURLConnection类的相关函数如表6所示。
4 系统应用实例展示
4.1 用户注册、登录界面展示
用户通过输入账号和密码进行注册,注册界面如图5所示;用户注册成功后,软件将用户账号和密码输出到后台文件mrsoft.xml中进行保存,保存结果如图6所示;用户登录时查看mrsoft.xml文件,检查用户是否注册并验证其登录密码是否正确。用户登录界面如图7所示。
4.2 用户主界面及其功能展示
用户登录成功后,软件跳转进入用户主界面,用户主界面主要包括报警消息提醒、个人信息设置、用户定位、紧急联系人设置功能,用户可点击“按钮”查看相关信息,用户主界面如图8所示。其中消息提醒功能实现系统和用户的交流,发送用户报警消息的通知;发送消息结果如图9所示;个人信息功能用于用户信息的完善和更改;用户定位功能实现用户位置信息的获取,定位结果如图10所示。紧急联系人设置实现用户报警联系人信息的输入,并将输入数据输出到后台文件savelxr.xml中保存。报警联系人信息输入界面如图11所示,保存数据如图12所示。
5 总结与展望
本文主要基于移动终端设备并结合当前热门的语音识别技术提出手机端实现语音报警功能的设计及其实现方案,实现手机端一键报警功能的替代。该系统具有广泛的应用用途,用户可在银行、图书馆、商场、居室等场合遇到危险、紧急情况时使用该系统进行自动报警,以达到快速、准确报警的目的。虽然该系统已基本实现,但要实现一个稳定性优良、可移植性优良、功耗低、成本低、语音识别率准确度高、实际运用度强的语音报警系统,还有很多问题需要进一步的探索和完善,比如解决强噪声干扰问题,收集更全面语音数据优化语音识别模型问题,解决语音实时检测时的手机功耗问题等都需要我们的完善和优化。
参考文献:
[1] 李鑫, 廖正赟. 多线程技术在Android手机开发中的运用[J]. 通讯世界, 2016(10): 105.
[2] 何佳若. 室内语音报警词识别系统设计[C]//安声学学会、 上海市声学学会.第二届西安-上海两地声学学术会议论文集. 西安声学学会、上海市声学学会:《声学技术》编辑部, 2011: 4.
[3] 文明. 基于双缓冲技术的音频数据实时采集与播放[J]. 声学与电子工程, 2016(2): 36-37.
[4] 朱元波. Android传感器开发与智能设备案例实战[M]. 北京: 人民邮电出版社, 2016(5).
[5] 刘华平, 李昕, 徐柏龄, 等. 语音信号端点检测方法综述及展望[J]. 计算机应用研究, 2008(8): 2278-2283.
[6] 周卫斌, 姚列健, 倪慧珍, 等. 基于WebRTC的Android数字楼宇对讲系统回声消除[J]. 电声技术, 2016, 40(2): 52-55.
[7] 葛昌利. 高精度GPS定位方法及其在无人机定位系统中应用的研究[D]. 南京: 南京邮电大学, 2018.
[8] 高铭, 孙仁诚. 基于改进MFCC的说话人特征参数提取算法[J]. 青岛大学学报: 自然科学版, 2019, 32(1): 61-65, 73.
[9] 梅俊杰. 基于卷积神经网络的语音识别研究[D]. 北京: 北京交通大学, 2017.
[10] 俞栋, 邓力. 解析深度学习语音识别实践[M]. 北京: 电子工业出版社, 2016(7).
[11] VASEHGI S V. State duration modelling in hidden Markov models[J]. Journal of Signal Processing, 2014, 41(1): 31-41.
[12] FOMEY G D. The Viterbi Algorithm[J]. Proceedings of the IEEE, 1973, 461(3): 266-278.
[13] 刘宪涛. 基于Android平台的手机语音识别服务客户端系统的设计与实现[D]. 北京: 北京邮电大学, 2013.
【通联编辑:谢媛媛】