您的位置:首页 > 移动开发 > Android开发

Android开发学习之使用百度语音识别SDK实现语音识别(上)

2014-01-05 09:26 886 查看
作为移动互联网杀手级的交互方式,语音识别从问世以来就一直备受人们的关注,从IOS的Siri到国内的讯飞语音,语音识别技术在移动开发领域是最为充满前景和希望的技术。Android作为一个移动操作系统,其本身就继承了Google天生的搜索基因,因此Android对于语音识别和语音合成本身是具有较好的支持的。然而由于种种原因,在我天朝上国,Android的大量特性只能沦为纸上谈兵。而作为未来人机交互的新模式,中文语音识别技术本身门槛相对较高,这不禁令许多开发者望而却步。不过,目前国内已经出现了一些提供语音识别相关技术服务的厂商,通过了解目前国内语音识别技术的现状,可以帮助我们在开发语音识别相关应用的过程中选择一个较为合适的方向。那么目前国内较为著名的两家提供语音识别技术的厂商分别是科大讯飞和百度,并且两家厂商都开放了相应的API接口,通过API接口我们可以轻松地在自己的应用中实现语音识别。科大讯飞提供了从文本合成到语音识别等一系列的解决方案,而百度则仅提供了语音识别的相关解决方案。具体的情况大家可以从下面的地址了解:

科大讯飞:http://open.voicecloud.cn/index.php/default/index

百度语音:http://developer.baidu.com/wiki/index.php?title=docs/cplat/media/voice

那么,今天我们就来一起学习通过百度语音识别的API来实现语音识别吧(我会告诉你我是百度粉吗?),在使用百度的相关API时,必须要有百度开发者账号,并取得相关的应用授权参数,剩下的事情就是免费使用百度语音识别的服务啦,具体的情况大家可以查看官方的SDK文档:

http://developer.baidu.com/wiki/index.php?title=docs/cplat/media/voice/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为基础来实现自己的语音识别界面,感谢大家关注!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: