百度語音識別cordova外掛

weixin_33782386發表於2018-02-01

前言

  1. 這是一個百度語音識別的cordova外掛。為什麼使用百度語音識別,因為是免費的,識別的準確度也還挺不錯的。
  2. 這個外掛只包含語音識別功能,不包含其他的比如喚醒、長語音功能。
  3. 百度語音開發文件 http://ai.baidu.com/docs#/ASR-API/top

支援平臺

  1. Android
  2. iOS

安裝

  1. 線上npm安裝
    cordova plugin add cordova-plugin-bdasr --variable APIKEY=[your apikey] --variable SECRETKEY=[your secretkey] --variable APPID=[your appid]

  2. 線上url安裝
    cordova plugin add https://github.com/hhjjj1010/cordova-plugin-bdasr.git --variable APIKEY=[your apikey] --variable SECRETKEY=[your secretkey] --variable APPID=[your appid]

  3. 本地安裝
    cordova plugin add /your localpath --variable APIKEY=[your apikey] --variable SECRETKEY=[your secretkey] --variable APPID=[your appid]

API使用

 // 開啟語音識別
 cordova.plugins.bdasr.startSpeechRecognize();

// 語音識別事件監聽
 cordova.plugins.bdasr.addEventListener(function (res) {
    // res引數都帶有一個type
    if (!res) {
      return;
    }

    switch (res.type) {
      case "asrReady": {
        // 識別工作開始,開始採集及處理資料
        $scope.$apply(function () {
          // TODO
        });
        break;
      }

      case "asrBegin": {
        // 檢測到使用者開始說話
        $scope.$apply(function () {
          // TODO
        });
        break;
      }

      case "asrEnd": {
        // 本地聲音採集結束,等待識別結果返回並結束錄音
        $scope.$apply(function () {
          // TODO
        });
        break;
      }

      case "asrText": {
        // 語音識別結果
        $scope.$apply(function () {
          var message = angular.fromJson(res.message);
          var results = message["results_recognition"];
        });
        break;
      }

      case "asrFinish": {
        // 語音識別功能完成
        $scope.$apply(function () {
          // TODO
        });
        break;
      }

      case "asrCancel": {
        // 語音識別取消
        $scope.$apply(function () {
          // TODO
        });
        break;
      }

      default:
        break;
    }

  }, function (err) {
     alert("語音識別錯誤");
  });

// 主動結束語音識別
cordova.plugins.bdasr.closeSpeechRecognize();

// 主動取消語音識別
cordova.plugins.bdasr.cancelSpeechRecognize();

寫在最後

因為對android開發並不是很熟悉,所以特此記錄在開發外掛的android端時遇到的一些問題

  1. 載入so庫,對應不同的平臺,需要新增不同平臺的.so檔案

     <source-file src="src/android/libs/armeabi/libBaiduSpeechSDK.so" target-dir="libs/armeabi"/>
     <source-file src="src/android/libs/armeabi/libvad.dnn.so" target-dir="libs/armeabi"/>
    
     <source-file src="src/android/libs/x86_64/libBaiduSpeechSDK.so" target-dir="libs/x86_64"/>
     <source-file src="src/android/libs/x86_64/libvad.dnn.so" target-dir="libs/x86_64"/>
    
     <source-file src="src/android/libs/x86/libBaiduSpeechSDK.so" target-dir="libs/x86"/>
     <source-file src="src/android/libs/x86/libvad.dnn.so" target-dir="libs/x86"/>
    
     <source-file src="src/android/libs/arm64-v8a/libBaiduSpeechSDK.so" target-dir="libs/arm64-v8a"/>
     <source-file src="src/android/libs/arm64-v8a/libvad.dnn.so" target-dir="libs/arm64-v8a"/>
    
     <source-file src="src/android/libs/armeabi-v7a/libBaiduSpeechSDK.so" target-dir="libs/armeabi-v7a"/>
     <source-file src="src/android/libs/armeabi-v7a/libvad.dnn.so" target-dir="libs/armeabi-v7a"/>
    
  2. PermissionHelper.requestPermission()方法封裝了動態獲取許可權的程式碼
    動態獲取許可權的回撥方法:public void onRequestPermissionResult(int requestCode, String[] permissions, int[] grantResults) throws JSONException {})

相關文章