失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 百度Android语音识别SDK使用方法

百度Android语音识别SDK使用方法

时间:2019-02-24 01:26:43

相关推荐

百度Android语音识别SDK使用方法

百度Android语音识别SDK分在线与离线两种,这篇文章介绍在线SDK的使用方法。

在线SDK是以JAR包和动态链接库形式发布和使用,可以从百度开放云平台网站中下载SDK及使用说明文档。

/wiki/index.php?title=docs/cplat/media/voice

完成语音SDK的集成分以下几步,本文将一步步介绍SDK集成方法。

1、注册开放开放平台

点击管理控制台,选择移动应用管理

选择创建应用,填写应用名称

可以看到右上角有ID、API KEY、Secret KEY,点击可以复制其内容,保存这些字符串,在使用语音SDK时会用到。

2、申请开启语音识别服务 ,选择媒体云---语音识别,点击申请开启服务,填写理由。

等待对接成功

3、使用语音识别SDK前的准备

之前准备了SDK开发包以及ID、API KEY、Secret KEY。

首先将开发包中的lib中的库添加到工程中

声明权限

<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.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" /></span>

4、语音识别

SDK有两种实现语音识别的方式,一种是直接使用SDK中的语音识别控件,一种是使用SDK中的语音识别服务。

语音识别控件方式

语音识别控件BaiduASRDigitalDialog,提供了整套语音交互、提示音、音量反馈、动效反馈。开发者初始化一个BaiduASRDigitalDialog对象,并设置相关参数及结果回调,调用Show()方法就可以弹出对话框开始识别,识别结束后会在回调中得到识别结果。

if (mDialog == null || mCurrentTheme != Config.DIALOG_THEME) {mCurrentTheme = Config.DIALOG_THEME;if (mDialog != null) {mDialog.dismiss();}Bundle params = new Bundle();params.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.show();

识别对话框支持的参数定义在BaiduASRDigitalDialog中以PARAM_前缀的常量。列表如下:

设置回调方法,处理返回的结果

mRecognitionListener = new DialogRecognitionListener() {@Overridepublic void onResults(Bundle results) {ArrayList<String> rs = results != null ? results.getStringArrayList(RESULTS_RECOGNITION) : null;if (rs != null && rs.size() > 0) {mResult.setText(rs.get(0));}}};

API方式 首先需要配置语音识别引擎ASREngine的参数VoiceRecognitionConfig

VoiceRecognitionConfig config = new VoiceRecognitionConfig();config.setProp(Config.CURRENT_PROP);config.setLanguage(Config.getCurrentLanguage());config.enableVoicePower(Config.SHOW_VOL); // 音量反馈。if (Config.PLAY_START_SOUND) {config.enableBeginSoundEffect(R.raw.bdspeech_recognition_start); // 设置识别开始提示音}if (Config.PLAY_END_SOUND) {config.enableEndSoundEffect(R.raw.bdspeech_speech_end); // 设置识别结束提示音}config.setSampleRate(VoiceRecognitionConfig.SAMPLE_RATE_8K); // 设置采样率,需要与外部音频一致

然后启动识别

int code = mASREngine.startVoiceRecognition(mListener, config);

其中mListener是识别过程的回调,需要对其中的方法进行实现

/*** 重写用于处理语音识别回调的监听器*/class MyVoiceRecogListener implements VoiceClientStatusChangeListener {@Overridepublic void onClientStatusChange(int status, Object obj) {switch (status) {// 语音识别实际开始,这是真正开始识别的时间点,需在界面提示用户说话。case VoiceRecognitionClient.CLIENT_STATUS_START_RECORDING:isRecognition = true;mHandler.removeCallbacks(mUpdateVolume);mHandler.postDelayed(mUpdateVolume, POWER_UPDATE_INTERVAL);mControlPanel.statusChange(ControlPanelFragment.STATUS_RECORDING_START);break;case VoiceRecognitionClient.CLIENT_STATUS_SPEECH_START: // 检测到语音起点mControlPanel.statusChange(ControlPanelFragment.STATUS_SPEECH_START);break;// 已经检测到语音终点,等待网络返回case VoiceRecognitionClient.CLIENT_STATUS_SPEECH_END:mControlPanel.statusChange(ControlPanelFragment.STATUS_SPEECH_END);break;// 语音识别完成,显示obj中的结果case VoiceRecognitionClient.CLIENT_STATUS_FINISH:mControlPanel.statusChange(ControlPanelFragment.STATUS_FINISH);isRecognition = false;updateRecognitionResult(obj);break;// 处理连续上屏case VoiceRecognitionClient.CLIENT_STATUS_UPDATE_RESULTS:updateRecognitionResult(obj);break;// 用户取消case VoiceRecognitionClient.CLIENT_STATUS_USER_CANCELED:mControlPanel.statusChange(ControlPanelFragment.STATUS_FINISH);isRecognition = false;break;default:break;}}@Overridepublic void onError(int errorType, int errorCode) {isRecognition = false;mResult.setText(getString(R.string.error_occur, Integer.toHexString(errorCode)));mControlPanel.statusChange(ControlPanelFragment.STATUS_FINISH);}@Overridepublic void onNetworkStatusChange(int status, Object obj) {// 这里不做任何操作不影响简单识别}}

获得识别BDVRClient对象

mASREngine = VoiceRecognitionClient.getInstance(this);mASREngine.setTokenApis(Constants.API_KEY, Constants.SECRET_KEY);

请求参数设置 每次识别需要通过通过VoiceRecognitionConfig设置参数,其中一些方法在API中有说明

开始语音识别,BDVRClient在开始识别后,会启动录音、预处理、上传到服务器并获取识别结果。

int code = mASREngine.startVoiceRecognition(mListener, config);if (code != VoiceRecognitionClient.START_WORK_RESULT_WORKING) {mResult.setText(getString(R.string.error_start, code));}

取消语音识别

mASREngine.stopVoiceRecognition();

结束语音识别

mRecognitionClient.speakFinish();

读者可以结合着SDK文档与demo源代码一起来学习百度语音识别SDK的使用。

语音识别的demo下载: /detail/voicefans/7451441

小伙伴注意: 需要按照文章开头的去申请api key和secret key, 修改Constant.java,填上自己的key就ok了。VoiceRecognitionDemoActivity.java 展示了如何使用Dialog方式识别

如果遇到问题欢迎留言交流。

如果觉得《百度Android语音识别SDK使用方法》对你有帮助,请点赞、收藏,并留下你的观点哦!

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