欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android基于訊飛語音SDK實現(xiàn)語音識別

 更新時間:2016年06月15日 09:06:40   投稿:hebedich  
本例子是一個調(diào)用訊飛語音識別SDK的例子源碼是一個最純凈的Demo比較容易看懂。實現(xiàn)的是點(diǎn)擊按鈕開始語音監(jiān)聽,手機(jī)需要聯(lián)網(wǎng),2/3G的均可,希望本文對大家學(xué)習(xí)Android有所幫助

一、準(zhǔn)備工作

1、你需要android手機(jī)應(yīng)用開發(fā)基礎(chǔ)

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

3、科大訊飛語音識別開發(fā)API文檔

4、android手機(jī)

關(guān)于科大訊飛SDK及API文檔,請到科大語音官網(wǎng)下載:http://www.xfyun.cn/

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

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

二、語音識別流程

1、創(chuàng)建識別控件

函數(shù)原型

Public RecognizerDialog(Context context,String params)

其中Context表示當(dāng)前上下文環(huán)境,傳this即可

Params有參數(shù)詳見API文檔

2、用Appid登錄到科大訊飛服務(wù)器(自動連接,需要聯(lián)網(wǎng))

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

其中g(shù)etUser()表示獲取用戶對象,可以實現(xiàn)用戶登錄,注銷等操作

Login函數(shù)原型

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

參數(shù)詳見API文檔

3、讀取語言識別語法

詳見API文檔

4、設(shè)置識別參數(shù)及識別監(jiān)聽器

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

函數(shù)原型

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

詳細(xì)的參數(shù)請參考API文檔

5、識別結(jié)果回調(diào)

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

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

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

String text 識別文本

Int confidence 識別可信度

2)public void onEnd(SpeechError error)

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

自己將文本進(jìn)行處理。

三、詳細(xì)開發(fā)過程

1、新建Android項目

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

Msc.jar及l(fā)ibmsc.so動態(tài)庫文件,項目lib截圖

2、布局

這里只進(jìn)行簡單的布局,只設(shè)置一個按鈕作為語言識別按鈕及一個文本組件用作顯示識別結(jié)果,布局文件如下:

<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="點(diǎn)擊開始說話" />
     
</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();
    }
  }

  // 語音識別用戶登錄監(jiān)聽器
  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();
      }
    }
  };

  // 識別結(jié)果回調(diào)
  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("識別結(jié)果為:" + text);
      mToast.show();
      result.setText("識別結(jié)果為:" + text);
    }

  };

}

4、需要的權(quán)限:

  <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、結(jié)果截圖:

 


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

相關(guān)文章

最新評論