国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

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

2019-12-12 06:12:06
字體:
來源:轉載
供稿:網友

一、準備工作

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、結果截圖:

 


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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 陆河县| 阳城县| 平邑县| 大宁县| 龙里县| 连城县| 贡嘎县| 定西市| 连云港市| 巴林左旗| 荣昌县| 东乌珠穆沁旗| 阿坝| 沂南县| 金寨县| 长葛市| 邵阳市| 唐河县| 锡林浩特市| 昌吉市| 晋中市| 巴彦县| 阳泉市| 达孜县| 连平县| 商都县| 织金县| 阜宁县| 尖扎县| 海宁市| 罗江县| 沿河| 玉树县| 宽城| 手机| 东乡族自治县| 阿巴嘎旗| 赤水市| 庆元县| 邻水| 昭通市|