android簡單接入訊飛語音識別

訊飛語音建立項目流程:

第一步:
註冊訊飛語音,這個無需多說,
第二步:
註冊成功後登陸:點開右上角的控制檯:就能夠看到本身的項目了:android

第二步
第三步:
在控制檯的左邊有能夠看到咱們的應用,若是沒有就新建一個:git

第三步

第四步:根據要求填寫相關內容 並提交便可:
第四步json

第五步:記住Appid,並開通相關服務網絡

第五步
第六步,開通相關服務
我這裏僅僅只開通了第一個語音聽寫而後就會跳轉到下面的頁面app

第六步

第七步:下載sdk:ide

這裏必定要選擇本身的項目,由於咱們下載的sdk是和前面的Appid相關的,
第七步gradle

sdk壓縮包

到如今,咱們的準備工做完成了:下面就是在項目中配置相關sdk,ui

在項目中配置訊飛語音的相關sdk,這裏使用最簡單的Ctrl+C 和Ctrl+V:

第一步:使用訊飛自帶UI接口,直接將assets下文件拷貝到項目中的相應位置;this

複製jar文件和.so文件

第二步,開始實現訊飛語音識別
首先,權限編碼

<!--鏈接網絡權限,用於執行雲端語音能力 -->
    <uses-permission android:name="android.permission.INTERNET"/>
    <!--獲取手機錄音機使用權限,聽寫、識別、語義理解須要用到此權限 -->
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <!--讀取網絡信息狀態 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <!--獲取當前wifi狀態 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <!--容許程序改變網絡鏈接狀態 -->
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
    <!--讀取手機信息權限 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <!--讀取聯繫人權限,上傳聯繫人須要用到此權限 -->
    <uses-permission android:name="android.permission.READ_CONTACTS"/>

其次,初始化:

// 初始化識別對象
        SpeechUtility.createUtility(this, SpeechConstant.APPID + "=58c93888");

這裏的APPID就是前面的建立應用時的appid

最後,調用訊飛的語音識別並監聽返回值:

//1.建立RecognizerDialog對象
        RecognizerDialog recognizerDialog = new RecognizerDialog(context, null);
        //2.設置accent、language等參數
        recognizerDialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn");//語種,這裏能夠有zh_cn和en_us
        recognizerDialog.setParameter(SpeechConstant.ACCENT, "mandarin");//設置口音,這裏設置的是漢語普通話 具體支持口音請查看訊飛文檔,
        recognizerDialog.setParameter(SpeechConstant.TEXT_ENCODING, "utf-8");//設置編碼類型

        //其餘設置請參考文檔http://www.xfyun.cn/doccenter/awd
        //3.設置訊飛識別語音後的回調監聽
        recognizerDialog.setListener(new RecognizerDialogListener() {
            @Override
            public void onResult(RecognizerResult recognizerResult, boolean b) {//返回結果
                if (!b) {
                    Log.i("訊飛識別的結果", recognizerResult.getResultString());
                }
            }

            @Override
            public void onError(SpeechError speechError) {//返回錯誤
                Log.e("返回的錯誤碼", speechError.getErrorCode() + "");
            }

        });
        //顯示訊飛語音識別視圖
        recognizerDialog.show();

語音識別的結果返回的是json各式,因此,若是須要獲得識別結果,須要解析json.。我這裏使用的是fastjson,須要在build.gradle配置:

compile 'com.alibaba:fastjson:1.2.8'

解析代碼:

JSONObject jsonObject = JSON.parseObject(resultString);
        JSONArray jsonArray = jsonObject.getJSONArray("ws");
        StringBuffer stringBuffer = new StringBuffer();
        for (int i = 0; i < jsonArray.size(); i++) {
            JSONObject jsonObject1 = jsonArray.getJSONObject(i);
            JSONArray jsonArray1 = jsonObject1.getJSONArray("cw");
            JSONObject jsonObject2 = jsonArray1.getJSONObject(0);
            String w = jsonObject2.getString("w");
            stringBuffer.append(w);
        }
        Log.i("識別結果", stringBuffer.toString());

最後的結果:

20006表示沒有開啓錄音權限

10118表示沒有說話

ok:到目前爲止,訊飛的簡單語音識別基本上實現,須要注意的是,下載的sdk必定要和本身的Appid匹配,否則就會出現下面的狀況:
用戶校驗失敗:

用戶校驗失敗
因此, 把別人下好的sdk複製到本身的項目中時,這中狀況是沒法使的。

總結:

接入訊飛語音識別的幾個要點:

  • 1.最重要的是:Appid必定要和本身下載的sdk相匹配
  • 2.記得要初始化: SpeechUtility.createUtility(this, SpeechConstant.APPID + "=58c93888");
  • 3.更多功能須要去閱讀訊飛的開發文檔http://www.xfyun.cn/doccenter/awd

項目源碼:
http://git.oschina.net/bcbbcc/myiflytek

相關文章
相關標籤/搜索