900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Android语音识别——谷歌语音识别与百度语音识别

Android语音识别——谷歌语音识别与百度语音识别

时间:2023-10-07 19:21:59

相关推荐

Android语音识别——谷歌语音识别与百度语音识别

Android语音识别,简单的理解就是把语音转化为文字。

在日常中,语音识别,车载导航、语音输入等,虽然不一定准确,但用途广泛。

这里就介绍下谷歌原生的语音识别与百度的语音识别

谷歌语音识别

谷歌语音识别做法很简单

1、首先检测本地是否有语音识别工具,比如谷歌语音搜索,如果没有就结束;

2、用intent意图表示语音识别;

3、发送这个intent,并等待返回;

4、显示返回的内容;

具体的代码如下:

package com.example.speak_csdn;import java.util.ArrayList;import java.util.List;import android.os.Bundle;import android.speech.RecognizerIntent;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;import android.app.Activity;import android.content.Intent;import android.content.pm.PackageManager;import android.content.pm.ResolveInfo;public class MainActivity extends Activity {final int RESPONCERESULT=99;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button btnButton=(Button)findViewById(R.id.mybtn);btnButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubspeak();}});}public void speak(){try{ //通过Intent传递语音识别的模式,开启语音 Intent intent=new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); //语言模式和自由模式的语音识别 intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); //提示语音开始 intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "开始语音"); //开始语音识别 startActivityForResult(intent, RESPONCERESULT); }catch (Exception e) { // TODO: handle exception e.printStackTrace(); Toast.makeText(getApplicationContext(), "找不到语音设备", 1).show(); } }@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stub//回调获取从谷歌得到的数据 if(requestCode==RESPONCERESULT && resultCode==RESULT_OK){ //取得语音的字符 ArrayList<String> results=data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); //谷歌可能有许多语音类似的返回,越往上优先级越高,这里列出所有的返回并拼接成字符串 String resultString=""; for(int i=0;i<results.size();i++){ resultString+=results.get(i); } Toast.makeText(this, resultString, 1).show(); } super.onActivityResult(requestCode, resultCode, data);}}

代码完成了,注意要加上网络访问权限,因为这个是在线语音识读,代码关键的语句在以下几句:

//通过Intent传递语音识别的模式,开启语音 Intent intent=new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); //语言模式和自由模式的语音识别 intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); //提示语音开始 intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "开始语音"); //开始语音识别 startActivityForResult(intent, RESPONCERESULT);

对应这个的布局语句很简单,只有一个button按钮。给这个按钮绑定事件,点击运行...

这和我们预料的不同啊,网络没有问题,测试了WIFI和GPRS都是同样的结果。最终这只能归结为谷歌后台服务无法连接,你或者可以通过翻墙来看到效果。

悲伤。

那现在我们看看中国本地的语音识别,百度语音。

百度语音识别

百度语音识别,应用的是百度提供的SDK来实现。这个在百度的开放平台上可以看到很详细的说明。 应用它的步骤如下: 1、下载jar包; 2、添加权限; 3、在代码中,用给定的API来做语音识别; 4、显示返回内容;

jar包、so文件下载

以下是从百度开放平台上下载的jar包以及so文件,用于后续的开发使用

权限添加

AndroidManifest.xml中添加需要的权限,如下:

<uses-permission android:name="android.permission.RECORD_AUDIO" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_SETTINGS" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.WAKE_LOCK" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><!-- 蓝牙录音 --><uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /><!-- 某些手机启动SCO音频连接需要此权限 --><uses-permission android:name="android.permission.BROADCAST_STICKY" /><!-- 蓝牙录音检测耳机状态 --><uses-permission android:name="android.permission.BLUETOOTH" />

代码中使用API

这个就是使用API的过程,如下代码:

package com.example.baiduspeak_csdn;import java.util.ArrayList;import com.baidu.voicerecognition.android.ui.BaiduASRDigitalDialog;import com.baidu.voicerecognition.android.ui.DialogRecognitionListener;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;import android.app.Activity;public class MainActivity extends Activity {//百度自定义对话框private BaiduASRDigitalDialog mDialog = null;//对话框监听private DialogRecognitionListener mRecognitionListener;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button btnButton=(Button)findViewById(R.id.mybtn);btnButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubspeak_Baidu();}});mRecognitionListener = new DialogRecognitionListener() {@Overridepublic void onResults(Bundle results) {ArrayList<String> rs = results != null ? results.getStringArrayList(RESULTS_RECOGNITION) : null;if (rs != null && rs.size() > 0) {Toast.makeText(MainActivity.this, rs.get(0), 1).show();}}};}//百度语音识别public void speak_Baidu(){if (mDialog != null) {mDialog.dismiss();}Bundle params = new Bundle();//设置注册百度开放平台得到的值 API_KEY,SECRET_KEYparams.putString(BaiduASRDigitalDialog.PARAM_API_KEY, Constants.API_KEY);params.putString(BaiduASRDigitalDialog.PARAM_SECRET_KEY, Constants.SECRET_KEY);//设置对话框模式params.putInt(BaiduASRDigitalDialog.PARAM_DIALOG_THEME, Config.DIALOG_THEME);//根据设置新建对话框mDialog = new BaiduASRDigitalDialog(this, params);//设置对话框的监听mDialog.setDialogRecognitionListener(mRecognitionListener);//对话框设置mDialog.getParams().putInt(BaiduASRDigitalDialog.PARAM_PROP, Config.CURRENT_PROP);mDialog.getParams().putString(BaiduASRDigitalDialog.PARAM_LANGUAGE, Config.getCurrentLanguage());mDialog.getParams().putBoolean(BaiduASRDigitalDialog.PARAM_START_TONE_ENABLE, Config.PLAY_START_SOUND);mDialog.getParams().putBoolean(BaiduASRDigitalDialog.PARAM_END_TONE_ENABLE, Config.PLAY_END_SOUND);mDialog.getParams().putBoolean(BaiduASRDigitalDialog.PARAM_TIPS_TONE_ENABLE, Config.DIALOG_TIPS_SOUND);mDialog.show();}@Overrideprotected void onDestroy() {if (mDialog != null) {mDialog.dismiss();}super.onDestroy();}}

代码也只是简单的定义一个按钮,按钮绑定一个事件。 事件发起时,我们设定了挺多参数,重要的有平台分配的APP_KEY,SECRET_KEY,PROP,语言的选择等。 根据这些,百度对我们发出的声音,在服务端,得到匹配的内容并返回前端。 效果如下:

这个效果我们是能看到的。简单的用法就是这样的。类似谷歌语音,一个请求即可。

源码

源码包括以上的谷歌和百度语音识别,可供下载: /detail/yangzhaomuma/9329547

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。