應(yīng)長鳴 何志學
摘要:文章設(shè)計了一款發(fā)布于安卓平臺上,致力服務(wù)盲人的手機App應(yīng)用軟件。為滿足盲人的特殊需求,App特化了語音識別,主要的功能有:語音撥打電話、語音發(fā)送短信、語音播報時間日期、天氣預(yù)報、定位、播放音樂六大項,可以有效地幫助盲人對智能手機基本功能的使用。
關(guān)鍵詞:語音識別;盲人手機應(yīng)用;手機導(dǎo)盲
中圖分類號:TP311? ? ? 文獻標識碼:A
文章編號:1009-3044(2022)09-0049-03
開放科學(資源服務(wù))標識碼(OSID):<E:\2022知網(wǎng)文件\8-9\9\3xs202109\Image\image1_7.jpeg>
隨著現(xiàn)代手機技術(shù)的發(fā)展,智能手機已經(jīng)成為人們?nèi)粘I钪胁豢扇【喌囊徊糠?,但是對于盲人而言,普通的智能手機并不能使盲人很好地使用。教育心理學研究表明,人類通過不同感覺器官獲取信息的比例其中83%來自視覺,11%來自聽覺,剩余6%來自其他[1]。而盲人失去了視覺這一項,意味著他們從外界獲取到的信息量會少非常多,根據(jù)最新調(diào)查顯示,我國目前的盲人數(shù)量為700—800萬,占世界盲人總數(shù)的18%,另外雙眼低視力患者達1200萬,陪伴他們的不應(yīng)該只有盲道和盲杖[2-3]?;谶@樣的需求,筆者專門為盲人開發(fā)了一款盲人語音輔助軟件,目的是讓盲人也能像正常人一樣享受智能手機的基礎(chǔ)功能。
1 盲人手機App需求分析
1.1 開發(fā)背景
該項目主要是針對盲人視力障礙操作智能手機App不便的問題而提出的,在分析盲人操作特點的基礎(chǔ)上,基于Android平臺,設(shè)計并開發(fā)一款以語言、觸摸為主要操作手段的手機軟件App。為了更好地服務(wù)于用戶,該軟件需要綜合考慮盲人用戶的特點、手機操作系統(tǒng)、語音和觸摸的反應(yīng)、智能推薦等方面的問題。國外目前比較成熟的智能語音軟件有三款:蘋果公司開發(fā)的Siri、谷歌公司開發(fā)的Google Talk和微軟的小冰[3]。但是這三款語音軟件都有部分局限性,Siri只能在iPone4s以上版本的手機上運行;而Google Talk對中文的識別率不是很理想,至于微軟小冰目前還沒有推出專門針對盲人的功能。
1.2 功能模塊
該App使用的技術(shù)有騰訊語音識別API,騰訊地圖定位API,訊飛語音合成API,以及高德地圖天氣API,結(jié)合以上幾家提供的技術(shù),總共設(shè)計了六大項基本功能,用于溝通方面的語音撥打電話、發(fā)送短信,用于獲取自身信息方面的語音播報時間日期、天氣預(yù)報、位置,和用于娛樂方面的播放音樂。
2 軟件關(guān)鍵功能介紹以及實現(xiàn)
2.1 語音識別功能
語音識別和語音合成是該軟件的兩大核心功能,其中語音識別借助了騰訊云智能AI的語音識別。首先創(chuàng)建騰訊云提供的AAIClient對象,由AAIClient來開啟語音識別函數(shù),分片識別成功之后調(diào)用onSliceSuccess( )函數(shù),由于采用了邊錄邊發(fā)送的實時識別方式,所以該方法會被多次調(diào)用并將不同分片識別的消息返回至一個Map來構(gòu)筑出合成之后的總內(nèi)容[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 語音合成功能
實現(xiàn)本功能首先需要創(chuàng)建一個SpeechSynthesizer對象,然后再創(chuàng)建語音合成監(jiān)聽SynthesizerListener對象,最后傳入要播報的內(nèi)容以及監(jiān)聽對象至startSpeaking( )方法即可實現(xiàn)語音播報[5]。
private SpeechSynthesizer mTts = SpeechSynthesizer.createSynthesizer(MainActivity.this,
mTtsInitListener)
private SynthesizerListener mSynListener = new SynthesizerListener() {
// 會話結(jié)束回調(diào)接口,沒有錯誤時,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 語音撥打電話
當用戶需要打電話時,在主界面按住屏幕說出“撥打電話”或“打電話”之后,松開屏幕即可調(diào)用騰訊ASR(語音識別)返回識別結(jié)果,若結(jié)果與軟件內(nèi)置字符串“撥打電話”或“打電話”相同時即可進入語音撥打電話功能。在開發(fā)時我們發(fā)現(xiàn)騰訊返回的字符串格式與軟件內(nèi)置的字符串格式不相同,需要進行轉(zhuǎn)碼比對。進入語音撥打界面之后,用戶可以按住屏幕說出電話號碼,之后會由AI進行播報確認電話號碼是否輸入有問題,確認之后即可進行撥打。
2.4 語音播報天氣預(yù)報
天氣查詢技術(shù)主要使用的是高德開發(fā)平臺下Web服務(wù)的天氣查詢API。天氣查詢是一個簡單的HTTP接口,根據(jù)用戶語音輸入的城市名,查找到對應(yīng)城市的城市編碼(也就是郵政編碼),查詢目標區(qū)域當前/未來的天氣情況。首先需要申請“web服務(wù) API”密鑰(Key),然后將申請的Key拼接至HTTP請求URL,最后接收HTTP請求返回的數(shù)據(jù)(JSON或XML格式),解析數(shù)據(jù)[6]。
URL url = new URL(methodUrl);
// 根據(jù)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) {
// 發(fā)送http請求
reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
StringBuilder result = new StringBuilder();
// 循環(huán)讀取流
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的定位技術(shù)使用的是騰訊地圖中的定位API,在打開定位點展示開關(guān)前,用戶必須配置為地圖設(shè)置定位源LocationSource,定位源的作用就是為定位點提供要放置的位置。其中onLocationChanged( )是主要的方法,locationChangeListener 為 LocationSource.active 返回給用戶的位置監(jiān)聽器,通過這個監(jiān)聽器就可以設(shè)置地圖的定位點位置。用戶在主界面說出“定位”命令之后,就會定位至手機的位置,然后借由語音合成播報出來。
public void onLocationChanged(TencentLocation tencentLocation, int i, String s) {
if(i == TencentLocation.ERROR_OK && locationChangedListener != null){
Location location = new Location(tencentLocation.getProvider());
//設(shè)置經(jīng)緯度
location.setLatitude(tencentLocation.getLatitude());
location.setLongitude(tencentLocation.getLongitude());
//設(shè)置精度,這個值會被設(shè)置為定位點上表示精度的圓形半徑
location.setAccuracy(tencentLocation.getAccuracy());
//設(shè)置定位標的旋轉(zhuǎn)角度,注意 tencentLocation.getBearing() 只有在 gps 時才有可能獲取
location.setBearing((float) tencentLocation.getBearing());
//將位置信息返回給地圖
locationChangedListener.onLocationChanged(location);
}
}
2.6 音樂播放
考慮到音樂在播放時會對語音識別造成干擾,此功能采用了手勢操作的方式,用戶說出“音樂播放”命令之后即可進入該功能,在該功能界面下,軟件首先會檢索用戶手機中所有的音樂,并將所有音樂列出一個表單,用戶單機屏幕可以使表單中選中的歌曲播放/暫停,雙擊屏幕可以切換至下一首歌,當音樂表單播放完畢之后就會返回第一首歌進行循環(huán)播放,長按屏幕可以返回主界面。
手勢檢測部分用到了GestureDetector類下的SimpleOnGestureListener,借助這個手勢監(jiān)聽器即可對屏幕的觸摸事件進行重寫覆蓋。
3 部分界面展示
下述展示了主界面、定位界面以及音樂播放界面,如圖2~圖4所示。
4 結(jié)束語
4G、5G發(fā)展并廣泛應(yīng)用的背景下,智能手機及手機中的應(yīng)用給人們的生活帶了深刻的變化,方便了日常生活、辦公;但對于盲人或者視力障礙人而言,因為眼睛視力的原因,不能夠享受到手機、手機軟件帶來的便利。因為這部分人規(guī)模較小,很多軟件公司出于盈利的考慮,沒能開發(fā)出專門針對盲人的手機輔助軟件App。通過該項目的研發(fā),以Android平臺為基礎(chǔ),為解決盲人手機應(yīng)用短缺的問題,以語音、觸摸為基礎(chǔ),方便盲人用戶使用,對其出行、日常生活都有一定的幫助。
參考文獻:
[1] 張雪梅,劉桂蘭,黃素珍.淺析傳統(tǒng)教學方式與現(xiàn)代教學手段在線性代數(shù)教學中的應(yīng)用[J].職業(yè)時空,2010,6(11):88-90.
[2] 付靖玲,夏江.基于智能手機的盲人語言應(yīng)用軟件的設(shè)計與開發(fā)[J].電腦知識與技術(shù),2016,12(7):209-211.
[3] Lebble.盲人手機[J].設(shè)計,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.
【通聯(lián)編輯:謝媛媛】