应长鸣 何志学
摘要:文章设计了一款发布于安卓平台上,致力服务盲人的手机App应用软件。为满足盲人的特殊需求,App特化了语音识别,主要的功能有:语音拨打电话、语音发送短信、语音播报时间日期、天气预报、定位、播放音乐六大项,可以有效地帮助盲人对智能手机基本功能的使用。
关键词:语音识别;盲人手机应用;手机导盲
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2022)09-0049-03
开放科学(资源服务)标识码(OSID):<E:\2022知网文件\8-9\9\3xs202109\Image\image1_7.jpeg>
隨着现代手机技术的发展,智能手机已经成为人们日常生活中不可取缔的一部分,但是对于盲人而言,普通的智能手机并不能使盲人很好地使用。教育心理学研究表明,人类通过不同感觉器官获取信息的比例其中83%来自视觉,11%来自听觉,剩余6%来自其他[1]。而盲人失去了视觉这一项,意味着他们从外界获取到的信息量会少非常多,根据最新调查显示,我国目前的盲人数量为700—800万,占世界盲人总数的18%,另外双眼低视力患者达1200万,陪伴他们的不应该只有盲道和盲杖[2-3]。基于这样的需求,笔者专门为盲人开发了一款盲人语音辅助软件,目的是让盲人也能像正常人一样享受智能手机的基础功能。
1 盲人手机App需求分析
1.1 开发背景
该项目主要是针对盲人视力障碍操作智能手机App不便的问题而提出的,在分析盲人操作特点的基础上,基于Android平台,设计并开发一款以语言、触摸为主要操作手段的手机软件App。为了更好地服务于用户,该软件需要综合考虑盲人用户的特点、手机操作系统、语音和触摸的反应、智能推荐等方面的问题。国外目前比较成熟的智能语音软件有三款:苹果公司开发的Siri、谷歌公司开发的Google Talk和微软的小冰[3]。但是这三款语音软件都有部分局限性,Siri只能在iPone4s以上版本的手机上运行;而Google Talk对中文的识别率不是很理想,至于微软小冰目前还没有推出专门针对盲人的功能。
1.2 功能模块
该App使用的技术有腾讯语音识别API,腾讯地图定位API,讯飞语音合成API,以及高德地图天气API,结合以上几家提供的技术,总共设计了六大项基本功能,用于沟通方面的语音拨打电话、发送短信,用于获取自身信息方面的语音播报时间日期、天气预报、位置,和用于娱乐方面的播放音乐。
2 软件关键功能介绍以及实现
2.1 语音识别功能
语音识别和语音合成是该软件的两大核心功能,其中语音识别借助了腾讯云智能AI的语音识别。首先创建腾讯云提供的AAIClient对象,由AAIClient来开启语音识别函数,分片识别成功之后调用onSliceSuccess( )函数,由于采用了边录边发送的实时识别方式,所以该方法会被多次调用并将不同分片识别的消息返回至一个Map来构筑出合成之后的总内容[4]。
public void onSliceSuccess(AudioRecognizeRequest request, AudioRecognizeResult result, int seq) {
if (dontHaveResult && !TextUtils.isEmpty(result.getText())) {
dontHaveResult = false;
Date date=new Date();
DateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
String time=format.format(date);
String message = String.format("voice flow order = %d, receive first response in %s, result is = %s", seq, time, result.getText());
Log.i(PERFORMANCE_TAG, message);
}
AAILogger.info(logger, "分片on slice success..");
AAILogger.info(logger, "分片slice seq = {}, voiceid = {}, result = {}", seq, result.getVoiceId(), result.getText());
resMap.put(String.valueOf(seq), result.getText());
final String msg = buildMessage(resMap);
AAILogger.info(logger, "分片slice msg="+msg);
handler.post(new Runnable() {
@Override
public void run() {
recognizeResult.setText(msg);
}
});
}
2.2 语音合成功能
实现本功能首先需要创建一个SpeechSynthesizer对象,然后再创建语音合成监听SynthesizerListener对象,最后传入要播报的内容以及监听对象至startSpeaking( )方法即可实现语音播报[5]。
private SpeechSynthesizer mTts = SpeechSynthesizer.createSynthesizer(MainActivity.this,
mTtsInitListener)
private SynthesizerListener mSynListener = new SynthesizerListener() {
// 会话结束回调接口,没有错误时,error为null
public void onCompleted(SpeechError error) {
if (error != null) {
Log.d("mySynthesiezer complete code:", error.getErrorCode()
+ "");
} else {
Log.d("mySynthesiezer complete code:", "0");
}
}
mTts.startSpeaking(texts, mSynListener);
2.3 語音拨打电话
当用户需要打电话时,在主界面按住屏幕说出“拨打电话”或“打电话”之后,松开屏幕即可调用腾讯ASR(语音识别)返回识别结果,若结果与软件内置字符串“拨打电话”或“打电话”相同时即可进入语音拨打电话功能。在开发时我们发现腾讯返回的字符串格式与软件内置的字符串格式不相同,需要进行转码比对。进入语音拨打界面之后,用户可以按住屏幕说出电话号码,之后会由AI进行播报确认电话号码是否输入有问题,确认之后即可进行拨打。
2.4 语音播报天气预报
天气查询技术主要使用的是高德开发平台下Web服务的天气查询API。天气查询是一个简单的HTTP接口,根据用户语音输入的城市名,查找到对应城市的城市编码(也就是邮政编码),查询目标区域当前/未来的天气情况。首先需要申请“web服务 API”密钥(Key),然后将申请的Key拼接至HTTP请求URL,最后接收HTTP请求返回的数据(JSON或XML格式),解析数据[6]。
URL url = new URL(methodUrl);
// 根据URL生成HttpURLConnection
connection = (HttpURLConnection) url.openConnection();
Log.d("Weather", "连接" + connection.toString());
// 默认GET请求
connection.setRequestMethod("GET");
connection.connect();// 建立TCP连接
Log.d("Weather", "if" + connection.getResponseCode());
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
// 发送http请求
reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
StringBuilder result = new StringBuilder();
// 循环读取流
while ((line = reader.readLine()) != null) {
result.append(line).append(System.getProperty("line.separator"));
}
// System.out.println(result.toString());
com.alibaba.fastjson.JSONObject mapTypes = JSON.parseObject(result.toString());
2.5 语音播报位置
App的定位技术使用的是腾讯地图中的定位API,在打开定位点展示开关前,用户必须配置为地图设置定位源LocationSource,定位源的作用就是为定位点提供要放置的位置。其中onLocationChanged( )是主要的方法,locationChangeListener 为 LocationSource.active 返回给用户的位置监听器,通过这个监听器就可以设置地图的定位点位置。用户在主界面说出“定位”命令之后,就会定位至手机的位置,然后借由语音合成播报出来。
public void onLocationChanged(TencentLocation tencentLocation, int i, String s) {
if(i == TencentLocation.ERROR_OK && locationChangedListener != null){
Location location = new Location(tencentLocation.getProvider());
//设置经纬度
location.setLatitude(tencentLocation.getLatitude());
location.setLongitude(tencentLocation.getLongitude());
//设置精度,这个值会被设置为定位点上表示精度的圆形半径
location.setAccuracy(tencentLocation.getAccuracy());
//设置定位标的旋转角度,注意 tencentLocation.getBearing() 只有在 gps 时才有可能获取
location.setBearing((float) tencentLocation.getBearing());
//将位置信息返回给地图
locationChangedListener.onLocationChanged(location);
}
}
2.6 音乐播放
考虑到音乐在播放时会对语音识别造成干扰,此功能采用了手势操作的方式,用户说出“音乐播放”命令之后即可进入该功能,在该功能界面下,软件首先会检索用户手机中所有的音乐,并将所有音乐列出一个表单,用户单机屏幕可以使表單中选中的歌曲播放/暂停,双击屏幕可以切换至下一首歌,当音乐表单播放完毕之后就会返回第一首歌进行循环播放,长按屏幕可以返回主界面。
手势检测部分用到了GestureDetector类下的SimpleOnGestureListener,借助这个手势监听器即可对屏幕的触摸事件进行重写覆盖。
3 部分界面展示
下述展示了主界面、定位界面以及音乐播放界面,如图2~图4所示。
4 结束语
4G、5G发展并广泛应用的背景下,智能手机及手机中的应用给人们的生活带了深刻的变化,方便了日常生活、办公;但对于盲人或者视力障碍人而言,因为眼睛视力的原因,不能够享受到手机、手机软件带来的便利。因为这部分人规模较小,很多软件公司出于盈利的考虑,没能开发出专门针对盲人的手机辅助软件App。通过该项目的研发,以Android平台为基础,为解决盲人手机应用短缺的问题,以语音、触摸为基础,方便盲人用户使用,对其出行、日常生活都有一定的帮助。
参考文献:
[1] 张雪梅,刘桂兰,黄素珍.浅析传统教学方式与现代教学手段在线性代数教学中的应用[J].职业时空,2010,6(11):88-90.
[2] 付靖玲,夏江.基于智能手机的盲人语言应用软件的设计与开发[J].电脑知识与技术,2016,12(7):209-211.
[3] Lebble.盲人手机[J].设计,2012(4):68-75.
[4] 腾讯科技有限公司.腾讯云文档[EB/OL].[2021-10-20]. https://cloud.tencent.com/document/product.
[5] 科大讯飞有限公司.科大讯飞MSC新手指南[EB/OL].[2021-10-20].https://max.book118.com/html/2018/1104/803001512 2001131.shtm.
[6] 泡泡糖@比巴卜.使用高德查询天气[EB/OL].[2021-10-20]. https://blog.csdn.net/qq_37967304/article/details/104784210.
【通联编辑:谢媛媛】