android源碼-智能語音輸入查詢天氣app

轉載請標明出處 http://blog.csdn.net/zhangxy0605/article/details/71601604

現在智能家居越來越普及,智能語音輸入也成爲一項很方便的工具,可以告別傳統的文字輸入,可以根據輸入的內容,完成相應的對話及功能。OLAMI 人工智能開放平臺讓你只需通過幾個簡單的步驟和代碼,就能讓你的應用程序或設備更加智能更加人性化,並提供趨近完美的用戶體驗(OLAMI介紹)。本文章就是介紹怎麼使用 OLAMI 人工智能開放平臺(以下簡稱爲OLAMI開放平臺)及sdk開發出一個簡單的智能語音輸入天氣app。天氣功能及畫面參考開源項目https://git.oschina.net/way/WayHoo 的代碼,不詳細介紹。

1. 下載sdk:

文件夾結構
要使用OLAMI人工智能開發平臺首先需要下載相應的sdk,如圖將下載下來的voicesdk.jar 放在jniLibs下,將libspeex.so放在jniLibs下的armeabi下。Voicesdk.jar 是用來語音錄音,識別語音結果,然後發送給OLAMI平臺進行解析,返回相應的json 格式結果,供用戶解析。

2. 文件結構
imain 文件夾爲主要的語音實現功能和主界面,其他文件目錄爲獲取天氣相關數據的和顯示相關card的文件夾。

3. 代碼詳解
WeatherMainActivity.java 主要初始化頁面及各個變量,創建Handler 以進行消息傳遞。創建Task 查詢天氣並刷新界面顯示。

VoiceSdkService.java初始化智能語音識別相關參數 ,詳細可參考https://cn.olami.ai/wiki/?mp=sdk&content=sdk/android/reference.html

mViaVoiceRecognizer = new OlamiVoiceRecognizer(VoiceSdkService.this); 
//創建OlamiVoiceRecognizer 對象
TelephonyManager telephonyManager = (TelephonyManager) this.getSystemService(this.getBaseContext().TELEPHONY_SERVICE);
String imei = telephonyManager.getDeviceId();
mViaVoiceRecognizer.init(imei); //設置用戶號,用於區分用戶,一般設置爲iemi號

mViaVoiceRecognizer.setListener(mViaVoiceRecognizerListener); //設置語音設備listener,監聽語音識別開始,結束,結果,及各種出錯。
mViaVoiceRecognizer.setLocalization(OlamiVoiceRecognizer.LANGUAGE_SIMPLIFIED_CHINESE);// 設置返回結果語言類型,目前支持簡體和繁體
mViaVoiceRecognizer.setAuthorization("0fabfbd3db2546a0b48628a4354801f8", "asr", "0a714958eef844869175f9507a074c17", "nli");

// 第一個參數爲在OLAMI開放平臺上創建的應用的App Key ,第三個參數爲App Secret,其他兩個值固定。
mViaVoiceRecognizer.setVADTailTimeout(3000);
// 設置錄音結束時間 ,即3分鐘沒有輸入認爲錄音結束。

mViaVoiceRecognizer.setLatitudeAndLongitude(31.155364678184498, 121.34882432933009);
// 設置默認位置。

應用Key

@Override
public void onResult(String result, int type) {
    Log.d(TAG, "onResult ,result=" + result);
    //{"data":{"asr":{"result":"上海的天氣","speech_status":0,"final":true,"status":0},"nli":[{"desc_obj":{"status":0},"semantic":[{"app":"sample","input":"上海的天氣","slots":[{"name":"city","value":"上海"}],"modifier":["chacitytianqi"],"customer":"58df54a484ae11f0bb7b488b"}],"type":"sample"}]},"status":"ok"}
    getValidData(result);
}

onResult 函數爲OLAMI開放平臺結合用戶編寫的grammar返回的json結果,可以根據實際需求進行解析和顯示。

如:本app 中用戶語音輸入 “上海的天氣”,對應的在OLAMI開發品臺上的Grammar 爲:
編寫grammar

返回的json結果爲
返回json 數據

3.1 modifier:chacitytianqi 對應grammar 中 這裏寫圖片描述表示這句語法被匹配上後要送出去的意圖。同一應用中每個grammar 的modifier 應該都是唯一的不同的,已變用戶區分輸入的語句。

3.2 Type: sample 對應OLAMI開發平臺上對應的模塊名。

3.3 slots: 這裏寫圖片描述 表示現在輸入的是上海,
當查詢“北京的天氣”時,value值爲“北京”,
slots根據編寫的grammar,可以有多個json成員。如: 這裏寫圖片描述
3.4 status:ok 表示正常返回Json數據。

如何創建grammar 及 grammar 中用的slots 和rule詳細解析可參考https://cn.olami.ai/wiki/?mp=nli&content=nli2.html

4. 該app 目前支持的查詢範圍
查看各個城市的天氣 ,如:上海的天氣,北京的天氣,顯示所有天氣數據
查看空氣質量,如:空氣質量,上海的空氣質量,等。畫面只顯示空氣質量數據card。
查看一週天氣,如: 明天的天氣 , 一週的天氣, 一週北京的天氣,等。畫面只顯示預報一週的card。
查看今天的天氣,如 :今天的天氣,今天上海的天氣。 畫面只顯示一天天氣的card
查看指數, 如: 穿衣指數, 空氣指數、 天氣指數 。 畫面只顯示指數card

詳細源碼地址: https://github.com/farinaZhang/open_weather

首次進入app 語音輸入上海的天氣

語音輸入今天的天氣 語音輸入一週的天氣

語音輸入空氣質量 語音輸入穿衣指數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章