天天看點

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

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

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

1. 下載下傳sdk:

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

要使用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();
// 設定錄音結束時間 ,即分鐘沒有輸入認為錄音結束。

mViaVoiceRecognizer.setLatitudeAndLongitude(, );
// 設定預設位置。
           
android源碼-智能語音輸入查詢天氣app
@Override
public void onResult(String result, int type) {
    Log.d(TAG, "onResult ,result=" + result);
    //{"data":{"asr":{"result":"上海的天氣","speech_status":,"final":true,"status":},"nli":[{"desc_obj":{"status":},"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 為:

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

傳回的json結果為

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

3.1 modifier:chacitytianqi 對應grammar 中

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

表示這句文法被比對上後要送出去的意圖。同一應用中每個grammar 的modifier 應該都是唯一的不同的,已變使用者區分輸入的語句。

3.2 Type: sample 對應OLAMI開發平台上對應的子產品名。

3.3 slots:

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

表示現在輸入的是上海,

當查詢“北京的天氣”時,value值為“北京”,

slots根據編寫的grammar,可以有多個json成員。如:

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

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

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

繼續閱讀