android 語音識別 之 訊飛語音移植

轉載自:http://blog.csdn.net/chenshufei2/article/details/8496905

一、簡介

    語音識別現在應用越來越廣泛了 比如語音寫短信、語音搜索商品、語音搜索關鍵字等等,這遍我們就簡單的談談國內比較流行的訊飛語音在android平臺上的實現。

   筆者認爲:

           google語音識別並不是十分符合中國人的習慣,且google語音識別一個重要弊端的是,需要用戶手機上必須有google語音應用。

    一般的國行android手機並沒有,比如筆記手機小米就沒有。需要下載單獨google語音apk。所以用戶體現自然不如訊飛。

          但訊飛筆者認爲,也有一定風險。訊飛應用協議中,他們是具有任何時候,停掉你語音識別服務的權限的,而且還不用和你商量。

      一旦你的應用達到了百萬級了,那麼訊飛是要收取你一定的服務費的,所以一般大公司的項目基本上不會用訊飛語音或與訊飛語音合作比如小米,

      Android4.0以上版本語音小助手就有小米與訊飛語音合作開發出來的。

二、訊飛Android小示例

     先看看效果圖:

 

   嗯,看到效果圖後下面就談談如何去實現效果:

   2.1 到訊飛官網開發者專區中註冊用戶並獲取appid  地址:http://open.voicecloud.cn/developer.php

   2.2 新建android工程,並在清單文件中聲明好相應的權限

  

  1. <uses-permission android:name=“android.permission.RECORD_AUDIO” />  
  2. <uses-permission android:name=“android.permission.INTERNET” />  
  3. <uses-permission android:name=“android.permission.ACCESS_NETWORK_STATE” />  
  4. <uses-permission android:name=“android.permission.ACCESS_WIFI_STATE” />  
  5. <uses-permission android:name=“android.permission.CHANGE_NETWORK_STATE” />  
  6. <uses-permission android:name=“android.permission.READ_PHONE_STATE” />  
  7. <uses-permission android:name=“android.permission.WRITE_EXTERNAL_STORAGE” />  
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <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.WRITE_EXTERNAL_STORAGE" />
  2.3 下載libmsc.so與Msc.jar,並分別放在android工程的libs/armeabi與libs文件夾中,如圖
   

  3.4 使用示例如下,代碼中都帶有相應的註釋了:

  

  1. import java.util.ArrayList;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.util.Log;  
  6. import android.view.View;  
  7. import android.view.View.OnClickListener;  
  8. import android.widget.EditText;  
  9.   
  10. import com.iflytek.speech.RecognizerResult;  
  11. import com.iflytek.speech.SpeechConfig.RATE;  
  12. import com.iflytek.speech.SpeechError;  
  13. import com.iflytek.ui.RecognizerDialog;  
  14. import com.iflytek.ui.RecognizerDialogListener;  
  15.   
  16. /** 
  17.  * @author 陳淑飛 
  18.  * 2013-1-8 上午1:10:24 
  19.  */  
  20. public class HelloDemoActivity extends Activity implements OnClickListener {  
  21.     protected static final String TAG = “ThirdActivity”;  
  22.     private EditText txt_result;  
  23.     private RecognizerDialog rd;  
  24.   
  25.     @Override  
  26.     protected void onCreate(Bundle savedInstanceState) {  
  27.         super.onCreate(savedInstanceState);  
  28.         setContentView(R.layout.demo);  
  29.           
  30.         findView();  
  31.         //RecognizerDialog(Context context, String params); “appid=1234567,usr=test,pwd=12345”  usr、pwd不是必選的  
  32.         //創建語音識別dailog對象,appid到訊飛就註冊獲取  
  33.         rd = new RecognizerDialog(this ,“appid=50e1b967”);  
  34.     }  
  35.   
  36.     private void findView() {  
  37.         txt_result = (EditText) findViewById(R.id.txt_result);  
  38.         findViewById(R.id.bt_search).setOnClickListener(this);  
  39.     }  
  40.   
  41.     @Override  
  42.     public void onClick(View v) {  
  43.         switch (v.getId()) {  
  44.         case R.id.bt_search:  
  45.             showReconigizerDialog();  
  46.             break;  
  47.   
  48.         default:  
  49.             break;  
  50.         }  
  51.     }  
  52.   
  53.     private void showReconigizerDialog() {  
  54.         //setEngine(String engine,String params,String grammar);  
  55.         /** 
  56.          * 識別引擎選擇,目前支持以下五種 
  57.             “sms”:普通文本轉寫 
  58.             “poi”:地名搜索 
  59.             “vsearch”:熱詞搜索 
  60.             “vsearch”:熱詞搜索 
  61.             “video”:視頻音樂搜索 
  62.             “asr”:命令詞識別 
  63.              
  64.             params  引擎參數配置列表 
  65.             附加參數列表,每項中間以逗號分隔,如在地圖搜索時可指定搜索區域:“area=安徽省合肥市”,無附加參數傳null 
  66.          */  
  67.         rd.setEngine(”sms”nullnull);  
  68.           
  69.         //設置採樣頻率,默認是16k,android手機一般只支持8k、16k.爲了更好的識別,直接弄成16k即可。  
  70.         rd.setSampleRate(RATE.rate16k);  
  71.           
  72.         final StringBuilder sb = new StringBuilder();  
  73.         Log.i(TAG, ”識別準備開始………….”);  
  74.           
  75.         //設置識別後的回調結果  
  76.         rd.setListener(new RecognizerDialogListener() {  
  77.             @Override  
  78.             public void onResults(ArrayList<RecognizerResult> result, boolean isLast) {  
  79.                 for (RecognizerResult recognizerResult : result) {  
  80.                     sb.append(recognizerResult.text);  
  81.                     Log.i(TAG, ”識別一條結果爲::”+recognizerResult.text);  
  82.                 }  
  83.             }  
  84.             @Override  
  85.             public void onEnd(SpeechError error) {  
  86.                 Log.i(TAG, ”識別完成………….”);  
  87.                 txt_result.setText(sb.toString());  
  88.             }  
  89.         });  
  90.           
  91.         txt_result.setText(”“); //先設置爲空,等識別完成後設置內容  
  92.         rd.show();  
  93.     }  
  94.   
  95. }  
import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;

import com.iflytek.speech.RecognizerResult;
import com.iflytek.speech.SpeechConfig.RATE;
import com.iflytek.speech.SpeechError;
import com.iflytek.ui.RecognizerDialog;
import com.iflytek.ui.RecognizerDialogListener;

/**
 * @author 陳淑飛
 * 2013-1-8 上午1:10:24
 */
public class HelloDemoActivity extends Activity implements OnClickListener {
    protected static final String TAG = "ThirdActivity";
    private EditText txt_result;
    private RecognizerDialog rd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.demo);

        findView();
        //RecognizerDialog(Context context, String params); "appid=1234567,usr=test,pwd=12345"  usr、pwd不是必選的
        //創建語音識別dailog對象,appid到訊飛就註冊獲取
        rd = new RecognizerDialog(this ,"appid=50e1b967");
    }

    private void findView() {
        txt_result = (EditText) findViewById(R.id.txt_result);
        findViewById(R.id.bt_search).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.bt_search:
            showReconigizerDialog();
            break;

        default:
            break;
        }
    }

    private void showReconigizerDialog() {
        //setEngine(String engine,String params,String grammar);
        /**
         * 識別引擎選擇,目前支持以下五種
            “sms”:普通文本轉寫
            “poi”:地名搜索
            “vsearch”:熱詞搜索
            “vsearch”:熱詞搜索
            “video”:視頻音樂搜索
            “asr”:命令詞識別

            params  引擎參數配置列表
            附加參數列表,每項中間以逗號分隔,如在地圖搜索時可指定搜索區域:“area=安徽省合肥市”,無附加參數傳null
         */
        rd.setEngine("sms", null, null);

        //設置採樣頻率,默認是16k,android手機一般只支持8k、16k.爲了更好的識別,直接弄成16k即可。
        rd.setSampleRate(RATE.rate16k);

        final StringBuilder sb = new StringBuilder();
        Log.i(TAG, "識別準備開始.............");

        //設置識別後的回調結果
        rd.setListener(new RecognizerDialogListener() {
            @Override
            public void onResults(ArrayList<RecognizerResult> result, boolean isLast) {
                for (RecognizerResult recognizerResult : result) {
                    sb.append(recognizerResult.text);
                    Log.i(TAG, "識別一條結果爲::"+recognizerResult.text);
                }
            }
            @Override
            public void onEnd(SpeechError error) {
                Log.i(TAG, "識別完成.............");
                txt_result.setText(sb.toString());
            }
        });

        txt_result.setText(""); //先設置爲空,等識別完成後設置內容
        rd.show();
    }

}

筆者注:呵呵請大家轉載時,注下來源唄,也幫我弄弄人氣撒。

另:工程示例domo,已上傳到csdn中(免積分哦),地址:http://download.csdn.net/detail/chenshufei2/4989030

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