百度语音识别开放平台SDK使用方法


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

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

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

      

 

  点击管理控制台,选择


 

       



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


等待对接成功


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

 

        声明权限

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片

  1.  <uses-permission android:name= "android.permission.RECORD_AUDIO"  />  
  2. <uses-permission android:name= "android.permission.ACCESS_NETWORK_STATE"  />  
  3. <uses-permission android:name= "android.permission.WRITE_EXTERNAL_STORAGE"  />  
  4. <uses-permission android:name= "android.permission.INTERNET"  />  
  5. <uses-permission android:name= "android.permission.READ_PHONE_STATE"  />  
  6. <uses-permission android:name= "android.permission.WAKE_LOCK"  />  
  7. <uses-permission android:name= "android.permission.ACCESS_FINE_LOCATION"  />  
  8. <uses-permission android:name= "android.permission.ACCESS_COARSE_LOCATION"  />  
  9. <uses-permission android:name= "android.permission.ACCESS_WIFI_STATE"  /></span>  
    4、语音识别 

语音识别控件方式

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片

  1. if  (mDialog ==  null  || mCurrentTheme != Config.DIALOG_THEME) {  
  2.                     mCurrentTheme = Config.DIALOG_THEME;  
  3.                      if  (mDialog !=  null ) {  
  4.                         mDialog.dismiss();  
  5.                     }  
  6.                     Bundle params =  new  Bundle();  
  7.                     params.putString(BaiduASRDigitalDialog.PARAM_API_KEY, Constants.API_KEY);  
  8.                     params.putString(BaiduASRDigitalDialog.PARAM_SECRET_KEY, Constants.SECRET_KEY);  
  9.                     params.putInt(BaiduASRDigitalDialog.PARAM_DIALOG_THEME, Config.DIALOG_THEME);  
  10.                     mDialog =  new  BaiduASRDigitalDialog( this , params);  
  11.                     mDialog.setDialogRecognitionListener(mRecognitionListener);  
  12.                 }  
  13.                 mDialog.getParams().putInt(BaiduASRDigitalDialog.PARAM_PROP, Config.CURRENT_PROP);  
  14.                 mDialog.getParams().putString(BaiduASRDigitalDialog.PARAM_LANGUAGE,  
  15.                         Config.getCurrentLanguage());  
  16.                 mDialog.show();  

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

PARAM_API_KEY

string

 

开放平台认证 API_key

PARAM_SECRET_KEY

string

 

开放平台认证Secret_key

PARAM_LANGUAGE

string

LANGUAGE_CHINESE

语种,取值定义在VoiceRecognitionConfig类中前缀为LANGUAGE_的常量

PARAM_PARTIAL_RESULTS

boolean

true

连续上屏

PARAM_NLU_ENABLE

boolean

false

是否语义解析。Prop为输入时暂不支持语义,请显示指定为其它领域。

PARAM_NLU_PARAMS

string

 

预留语义解析参数

PARAM_PROP

int

PROP_INPUT

领域参数,定义在VoiceRecognitionConfig类中前缀为PROP_的常量

PARAM_PORMPT_TEXT

string

“请说话”

对话框提示语

PARAM_PROMPT_SOUND_ENABLE

boolean

true

提示音,需要集成SDK包Raw文件夹的资源

PARAM_DIALOG_THEME

int

THEME_BLUE_LIGHTBG

样式。定义在前缀为THEME_的常量中

PARAM_TIPS

String[]

 

引导语列表

PARAM_SHOW_TIPS_ON_START

boolean

false

对话框弹出时首先显示引导语列表

PARAM_SHOW_TIP

boolean

false

识别启动3秒未检测到语音,随机出现一条引导语

PARAM_SHOW_HELP_ON_SILENT

boolean

false

静音超时后将“取消”按钮替换为“帮助”

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

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片

  1. mRecognitionListener =  new  DialogRecognitionListener() {  
  2.   
  3.             @Override   
  4.             public   void  onResults(Bundle results) {  
  5.                ArrayList<String> rs = results !=  null  ? results  
  6.                        .getStringArrayList(RESULTS_RECOGNITION) :  null ;  
  7.                 if  (rs !=  null  && rs.size() >  0 ) {  
  8.                    mResult.setText(rs.get( 0 ));  
  9.                }  
  10.   
  11.            }  
  12.        };  
API方式

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

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片

  1. VoiceRecognitionConfig config =  new  VoiceRecognitionConfig();  
  2.                 config.setProp(Config.CURRENT_PROP);  
  3.                 config.setLanguage(Config.getCurrentLanguage());  
  4.                 config.enableVoicePower(Config.SHOW_VOL);  // 音量反馈。   
  5.                  if  (Config.PLAY_START_SOUND) {  
  6.                     config.enableBeginSoundEffect(R.raw.bdspeech_recognition_start);  // 设置识别开始提示音   
  7.                 }  
  8.                  if  (Config.PLAY_END_SOUND) {  
  9.                     config.enableEndSoundEffect(R.raw.bdspeech_speech_end);  // 设置识别结束提示音   
  10.                 }  
  11.                 config.setSampleRate(VoiceRecognitionConfig.SAMPLE_RATE_8K);  // 设置采样率,需要与外部音频一致   
然后启动识别

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片

  1. int  code = mASREngine.startVoiceRecognition(mListener, config);  
其中mListener是识别过程的回调,需要对其中的方法进行实现

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片

  1. /**  
  2.     * 重写用于处理语音识别回调的监听器  
  3.     */   
  4.     class  MyVoiceRecogListener  implements  VoiceClientStatusChangeListener {  
  5.   
  6.         @Override   
  7.         public   void  onClientStatusChange( int  status, Object obj) {  
  8.             switch  (status) {  
  9.             // 语音识别实际开始,这是真正开始识别的时间点,需在界面提示用户说话。   
  10.                 case  VoiceRecognitionClient.CLIENT_STATUS_START_RECORDING:  
  11.                    isRecognition =  true ;  
  12.                    mHandler.removeCallbacks(mUpdateVolume);  
  13.                    mHandler.postDelayed(mUpdateVolume, POWER_UPDATE_INTERVAL);  
  14.                    mControlPanel.statusChange(ControlPanelFragment.STATUS_RECORDING_START);  
  15.                     break ;  
  16.                 case  VoiceRecognitionClient.CLIENT_STATUS_SPEECH_START:  // 检测到语音起点   
  17.                    mControlPanel.statusChange(ControlPanelFragment.STATUS_SPEECH_START);  
  18.                     break ;  
  19.                 // 已经检测到语音终点,等待网络返回   
  20.                 case  VoiceRecognitionClient.CLIENT_STATUS_SPEECH_END:  
  21.                    mControlPanel.statusChange(ControlPanelFragment.STATUS_SPEECH_END);  
  22.                     break ;  
  23.                 // 语音识别完成,显示obj中的结果   
  24.                 case  VoiceRecognitionClient.CLIENT_STATUS_FINISH:  
  25.                    mControlPanel.statusChange(ControlPanelFragment.STATUS_FINISH);  
  26.                    isRecognition =  false ;  
  27.                    updateRecognitionResult(obj);  
  28.                     break ;  
  29.                 // 处理连续上屏   
  30.                 case  VoiceRecognitionClient.CLIENT_STATUS_UPDATE_RESULTS:  
  31.                    updateRecognitionResult(obj);  
  32.                     break ;  
  33.                 // 用户取消   
  34.                 case  VoiceRecognitionClient.CLIENT_STATUS_USER_CANCELED:  
  35.                    mControlPanel.statusChange(ControlPanelFragment.STATUS_FINISH);  
  36.                    isRecognition =  false ;  
  37.                     break ;  
  38.                 default :  
  39.                     break ;  
  40.            }  
  41.   
  42.        }  
  43.   
  44.         @Override   
  45.         public   void  onError( int  errorType,  int  errorCode) {  
  46.            isRecognition =  false ;  
  47.            mResult.setText(getString(R.string.error_occur, Integer.toHexString(errorCode)));  
  48.            mControlPanel.statusChange(ControlPanelFragment.STATUS_FINISH);  
  49.        }  
  50.   
  51.         @Override   
  52.         public   void  onNetworkStatusChange( int  status, Object obj) {  
  53.             // 这里不做任何操作不影响简单识别   
  54.        }  
  55.    }  

获得识别BDVRClient对象

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片

  1. mASREngine = VoiceRecognitionClient.getInstance( this );  
  2.         mASREngine.setTokenApis(Constants.API_KEY, Constants.SECRET_KEY);  
请求参数设置

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

方法

参数

描述

enableBeginSoundEffect

int  soundResourceId 启动提示音资源Id

设置开始提示音,soundResourceId为放置在Raw文件夹的资源Id。

enableEndSoundEffect

int  soundResourceId 说话结束提示音资源Id

检测到用户说话结束播报的提示音,非识别结束

setSampleRate

int  rate 采样率 

设置音频采样率,

通常建议开发者 不指定 采样频率,由BDVRClient自动根据当前网络环境选择采样频率。WiFi环境下将使用16kHz采样,移动网络下将使用8kHz采样,来节省流量。参考常量定义

SAMPLE_RATE_8K 8K采样率

SAMPLE_RATE_16K 16K采样率

setProp

int  prop

开发者可以通过指定垂直分类来获取更精准的语音识别结果。

注: 垂直分类目前支持地图,音乐,视频,APP,网址,开发者需要注意设定采样频率时只能在这五种垂直分类中选择。若指定其他分类,可能会影响识别结果的精度。参考PROP_前缀的常量定义。

setUseDefaultAudioSource

boolean useDefaultSource 

设置是否使用缺省的录音。 如果不使用,用户需要调用VoiceRecognitionClient对象的feedAudioBuffer方法为识别器提供语音数据

enableNLU

 

启用语义解析,只在搜索模式起作用

getSampleRate

 

获取当前识别采样率

setLanguage

String Language

设置语种。目前支持的语种有中文普通话(LANGUAGE_CHINESE)、中文粤语(LANGUAGE_CANTONSE)、英文(LANGUAGE_ENGLISH)。

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

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片

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

取消语音识别
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值