1. 程式人生 > >Android開發學習之使用百度語音識別SDK實現語音識別(上)

Android開發學習之使用百度語音識別SDK實現語音識別(上)

        作為移動網際網路殺手級的互動方式,語音識別從問世以來就一直備受人們的關注,從IOS的Siri到國內的訊飛語音,語音識別技術在移動開發領域是最為充滿前景和希望的技術。Android作為一個移動作業系統,其本身就繼承了Google天生的搜尋基因,因此Android對於語音識別和語音合成本身是具有較好的支援的。然而由於種種原因,在我天朝上國,Android的大量特性只能淪為紙上談兵。而作為未來人機互動的新模式,中文語音識別技術本身門檻相對較高,這不禁令許多開發者望而卻步。不過,目前國內已經出現了一些提供語音識別相關技術服務的廠商,通過了解目前國內語音識別技術的現狀,可以幫助我們在開發語音識別相關應用的過程中選擇一個較為合適的方向。那麼目前國內較為著名的兩家提供語音識別技術的廠商分別是科大訊飛和百度,並且兩家廠商都開放了相應的API介面,通過API介面我們可以輕鬆地在自己的應用中實現語音識別。科大訊飛提供了從文字合成到語音識別等一系列的解決方案,而百度則僅提供了語音識別的相關解決方案。具體的情況大家可以從下面的地址瞭解:

       那麼,今天我們就來一起學習通過百度語音識別的API來實現語音識別吧(我會告訴你我是百度粉嗎?),在使用百度的相關API時,必須要有百度開發者賬號,並取得相關的應用授權引數,剩下的事情就是免費使用百度語音識別的服務啦,具體的情況大家可以檢視官方的SDK文件:

      做好前面的準備工作後,我們就可以開始今天的學習了。首先讓我們來建立一個Android專案,並在專案中引入百度語音的jar庫檔案:VoiceRecognition-1.2.jar,然後在AndroidManifest.xml檔案中加入下面的許可權:

    <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.READ_PHONE_STATE"/>
      然後我們做一個簡單的佈局,一個Button按鈕,一個文字框:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
    <EditText
        android:id="@+id/InputBox"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="text" >
        <requestFocus />
    </EditText>
    <Button
        android:id="@+id/BtnStart"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/BtnStart" />
</LinearLayout>
        在這篇文章中我們只是對百度語音做一個初步的瞭解,因此我們今天採取的方式是直接呼叫百度為我們封裝好的一個語音識別對話方塊類BaiduASRDigitalDialog,我們一起來看程式碼:
package com.Android.BaiduVoice;

import java.util.ArrayList;

import com.baidu.voicerecognition.android.ui.BaiduASRDigitalDialog;
import com.baidu.voicerecognition.android.ui.DialogRecognitionListener;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {
    
	//開始按鈕 
	private Button BtnStart;
	//文字框
	private EditText InputBox;
	//百度語音識別對話方塊
	private BaiduASRDigitalDialog mDialog=null;
	private DialogRecognitionListener mDialogListener=null;
	//應用授權資訊 ,這裡使用了官方SDK中的引數,如果需要,請自行申請,並修改為自己的授權資訊
    private String API_KEY="8MAxI5o7VjKSZOKeBzS4XtxO";
	private String SECRET_KEY="Ge5GXVdGQpaxOmLzc8fOM8309ATCz9Ha";
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		    if (mDialog == null) {
                if (mDialog != null) {
                mDialog.dismiss();
            }
            Bundle params = new Bundle();
            //設定API_KEY, SECRET_KEY
            params.putString(BaiduASRDigitalDialog.PARAM_API_KEY, API_KEY);
            params.putString(BaiduASRDigitalDialog.PARAM_SECRET_KEY, SECRET_KEY);
            //設定語音識別對話方塊為藍色高亮主題
            params.putInt(BaiduASRDigitalDialog.PARAM_DIALOG_THEME, BaiduASRDigitalDialog.THEME_BLUE_LIGHTBG);
            //例項化百度語音識別對話方塊
            mDialog = new BaiduASRDigitalDialog(this, params);
            //設定百度語音識別回撥介面
            mDialogListener=new DialogRecognitionListener()
            {

				@Override
				public void onResults(Bundle mResults) 
				{
					ArrayList<String> rs = mResults != null ? mResults.getStringArrayList(RESULTS_RECOGNITION) : null;    
	                if (rs != null && rs.size() > 0) {
	                    InputBox.setText(rs.get(0));
	                }
					
				}
            	
            };
            mDialog.setDialogRecognitionListener(mDialogListener);
        }
		//設定語音識別模式為輸入模式
        mDialog.setSpeechMode(BaiduASRDigitalDialog.SPEECH_MODE_INPUT);
        //禁用語義識別
        mDialog.getParams().putBoolean(BaiduASRDigitalDialog.PARAM_NLU_ENABLE, false);
        
        //介面元素
		BtnStart=(Button)findViewById(R.id.BtnStart);
		InputBox=(EditText)findViewById(R.id.InputBox);
		BtnStart.setOnClickListener(new OnClickListener()
		{
			@Override
			public void onClick(View v) 
			{
		        mDialog.show();
			}
		});
	}
}
       這樣,我們就實現了在我們的應用中實現語音識別的目的,感覺還是蠻簡單的啊,呵呵,下面給出程式執行示意圖:


       通過這種方式呼叫百度語音十分地簡單,但是難以滿足個性化定製的需求,官方預設為我們提供過了8種配色方案,如果這8種配色方案還不能滿足我們實際需求的話,那麼就需要我們以百度語音提供的API自行定製,具體的內容大家可以繼續關注我的部落格,在下一篇文章中,我們將以百度語音API為基礎來實現自己的語音識別介面,感謝大家關注!