Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android基於訊飛語音SDK實現語音識別

Android基於訊飛語音SDK實現語音識別

編輯:關於Android編程

一、准備工作

1、你需要android手機應用開發基礎

2、科大訊飛語音識別SDK android版

3、科大訊飛語音識別開發API文檔

4、android手機

關於科大訊飛SDK及API文檔,請到科大語音官網下載:http://www.xfyun.cn/

當然SDK和API有多個版本可選,按照你的需要下載,其次,下載需要填寫資料申請注冊,申請通過或可獲得Appid

如下圖,申請一個APPID,就可以了。

二、語音識別流程

1、創建識別控件

函數原型

Public RecognizerDialog(Context context,String params)

其中Context表示當前上下文環境,傳this即可

Params有參數詳見API文檔

2、用Appid登錄到科大訊飛服務器(自動連接,需要聯網)

主要用到SpeechUser(com.iflytek.speech包下)類下的getUser().login()函數

其中getUser()表示獲取用戶對象,可以實現用戶登錄,注銷等操作

Login函數原型

Public boolean login(Context context,String usr,String pwd,String

參數詳見API文檔

3、讀取語言識別語法

詳見API文檔

4、設置識別參數及識別監聽器

通過RecognizerDialog下的setEngine()方法設置參數

函數原型

public void setEngine(String engine,String params,String grammar)

詳細的參數請參考API文檔

5、識別結果回調

需要實現RecognizerDialogListener接口,其中有兩個方法需要重寫,分別是

1)public void onResults(ArrayList<RecognizerResult> results,boolean isLast)

其中result是RecognizerResult對象的集合,RecognizerResult的屬性有

String text 識別文本

Int confidence 識別可信度

2)public void onEnd(SpeechError error)

6、識別結果處理(自行處理)

自己將文本進行處理。

三、詳細開發過程

1、新建Android項目

和普通的android項目一樣,只是需要加入科大訊飛語言SDK包,主要包括

Msc.jar及libmsc.so動態庫文件,項目lib截圖

2、布局

這裡只進行簡單的布局,只設置一個按鈕作為語言識別按鈕及一個文本組件用作顯示識別結果,布局文件如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical"
  tools:context="${relativePackage}.${activityClass}" >

  <EditText
    android:id="@+id/editText"
    android:layout_width="fill_parent"
    android:layout_height="300dp"
    android:gravity="top"
    android:inputType="textMultiLine" >
    
    <requestFocus />
   </EditText>
   <Button
     android:id="@+id/button_start"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="點擊開始說話" />
     
</LinearLayout>

3、Main.java代碼如下:

public class Main extends Activity {

  // 組件
  private Button button = null;
  private TextView result = null;
  private Toast mToast = null;

  // 語音識別
  private final String APP_ID = "這裡改成自己的APP_ID";
  private RecognizerDialog recognizerDialog = null;

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

    button = (Button) super.findViewById(R.id.button_start);
    result = (TextView) super.findViewById(R.id.editText);

    // 初始化識別
    mToast = Toast.makeText(this, "", Toast.LENGTH_SHORT);
    mToast.setMargin(0f, 0.2f);
    recognizerDialog = new RecognizerDialog(this, "appid=" + APP_ID);
    SpeechUser.getUser().login(this, null, null, "appid=" + APP_ID, loginListener);

    this.button.setOnClickListener(new Btn());

  }

  private class Btn implements OnClickListener {

    @Override
    public void onClick(View v) {

      //MainActivity.this.voice.setImageResource(R.drawable.voicelight);
      recognizerDialog.setListener(mRecoListener);
      recognizerDialog.setEngine(null, "grammar_type=abnf", grammarText);
      recognizerDialog.show();
    }
  }

  // 語音識別用戶登錄監聽器
  private SpeechListener loginListener = new SpeechListener() {

    @Override
    public void onData(byte[] arg0) {
    }

    @Override
    public void onEvent(int arg0, Bundle arg1) {
    }

    @Override
    public void onEnd(SpeechError arg0) {
      // TODO Auto-generated method stub
      if (arg0 != null) {
        mToast.setText("登錄失敗");
        mToast.show();
      } else {
        mToast.setText("登錄成功");
        mToast.show();
      }
    }
  };

  // 識別結果回調
  private RecognizerDialogListener mRecoListener = new RecognizerDialogListener() {

    @Override
    public void onEnd(SpeechError error) {
      //MainActivity.this.voice.setImageResource(R.drawable.voice);
    }

    @Override
    public void onResults(ArrayList<RecognizerResult> results, boolean isLast) {
      // TODO Auto-generated method stub
      String text = "";
      text = results.get(0).text;
      mToast.setText("識別結果為:" + text);
      mToast.show();
      result.setText("識別結果為:" + text);
    }

  };

}

4、需要的權限:

  <uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="android.permission.RECORD_AUDIO"/>
  <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"/>

5、結果截圖:

 


以上就是本文的全部內容了,希望小伙伴們能夠喜歡。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved