百度语音识别开放平台SDK用法
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主同意不得轉(zhuǎn)載。 https://blog.csdn.net/zpf8861/article/details/30229039
百度Android語音識別SDK分在線與離線兩種。這篇文章介紹在線SDK的用法。
? ? ?在線SDK是以JAR包和動態(tài)鏈接庫形式公布和使用。能夠從百度開放云平臺站點(diǎn)中下載SDK及使用說明文檔。
http://developer.baidu.com/wiki/index.php?title=docs/cplat/media/voice
? ? ?完畢語音SDK的集成分下面幾步。本文將一步步介紹SDK集成方法。
? ? ??
?1、注冊開放開放平臺 ??
?點(diǎn)擊管理控制臺。選擇移動應(yīng)用管理
?選擇創(chuàng)建應(yīng)用,填寫應(yīng)用名稱
? ?<img src="https://img-blog.csdn.net/20140529141311875?
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVm9pY2VGYW5z/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />???
<img src="https://img-blog.csdn.net/20140529141506890?
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVm9pY2VGYW5z/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
能夠看到右上角有ID、API KEY、Secret KEY。點(diǎn)擊能夠復(fù)制其內(nèi)容,保存這些字符串,在使用語音SDK時(shí)會用到。
<img src="https://img-blog.csdn.net/20140529141527468?
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVm9pY2VGYW5z/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
2、申請開啟語音識別服務(wù) 。選擇媒體云---語音識別,點(diǎn)擊申請開啟服務(wù),填寫理由。
等待對接成功
3、使用語音識別SDK前的準(zhǔn)備
之前準(zhǔn)備了SDK開發(fā)包以及ID、API KEY、Secret KEY。
首先將開發(fā)包中的lib中的庫加入到project中
? ? ? ? 聲明權(quán)限
[java]?view
plaincopy
?<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有兩種實(shí)現(xiàn)語音識別的方式,一種是直接使用SDK中的語音識別控件。一種是使用SDK中的語音識別服務(wù)。
語音識別控件方式
語音識別控件BaiduASRDigitalDialog。提供了整套語音交互、提示音、音量反饋、動效反饋。開發(fā)人員初始化一個(gè)BaiduASRDigitalDialog對象,并設(shè)置相關(guān)參數(shù)及結(jié)果回調(diào),調(diào)用Show()方法就能夠彈出對話框開始識別。識別結(jié)束后會在回調(diào)中得到識別結(jié)果。
[java]?view
plaincopy
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();??
識別對話框支持的參數(shù)定義在BaiduASRDigitalDialog中以PARAM_前綴的常量。列表例如以下:
|
PARAM_API_KEY |
string |
? |
開放平臺認(rèn)證API_key |
|
PARAM_SECRET_KEY |
string |
? |
開放平臺認(rèn)證Secret_key |
|
PARAM_LANGUAGE |
string |
LANGUAGE_CHINESE |
語種,取值定義在VoiceRecognitionConfig類中前綴為LANGUAGE_的常量 |
|
PARAM_PARTIAL_RESULTS |
boolean |
true |
連續(xù)上屏 |
|
PARAM_NLU_ENABLE |
boolean |
false |
是否語義解析。 Prop為輸入時(shí)暫不支持語義,請顯示指定為其他領(lǐng)域。 |
|
PARAM_NLU_PARAMS |
string |
? |
預(yù)留語義解析參數(shù) |
|
PARAM_PROP |
int |
PROP_INPUT |
領(lǐng)域參數(shù)。定義在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[] |
? |
引導(dǎo)語列表 |
|
PARAM_SHOW_TIPS_ON_START |
boolean |
false |
對話框彈出時(shí)首先顯示引導(dǎo)語列表 |
|
PARAM_SHOW_TIP |
boolean |
false |
識別啟動3秒未檢測到語音,隨機(jī)出現(xiàn)一條引導(dǎo)語 |
|
PARAM_SHOW_HELP_ON_SILENT |
boolean |
false |
靜音超時(shí)后將“取消”button替換為“幫助” |
設(shè)置回調(diào)方法。處理返回的結(jié)果
[java]?view
plaincopy
mRecognitionListener?=?new?DialogRecognitionListener()?{??
??
???????????@Override??
???????????public?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的參數(shù)VoiceRecognitionConfig
[java]?view
plaincopy
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);?//?設(shè)置識別開始提示音??
????????????????}??
????????????????if?(Config.PLAY_END_SOUND)?{??
????????????????????config.enableEndSoundEffect(R.raw.bdspeech_speech_end);?//?設(shè)置識別結(jié)束提示音??
????????????????}??
????????????????config.setSampleRate(VoiceRecognitionConfig.SAMPLE_RATE_8K);?//?設(shè)置採樣率,須要與外部音頻一致??
然后啟動識別
[java]?view
plaincopy
int?code?=?mASREngine.startVoiceRecognition(mListener,?config);??
當(dāng)中mListener是識別過程的回調(diào),須要對當(dāng)中的方法進(jìn)行實(shí)現(xiàn)
[java]?view
plaincopy
/**?
????*?重寫用于處理語音識別回調(diào)的監(jiān)聽器?
????*/??
???class?MyVoiceRecogListener?implements?VoiceClientStatusChangeListener?{??
??
???????@Override??
???????public?void?onClientStatusChange(int?status,?Object?obj)?{??
???????????switch?(status)?{??
???????????//?語音識別實(shí)際開始,這是真正開始識別的時(shí)間點(diǎn)。需在界面提示用戶說話。??
???????????????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:?//?檢測到語音起點(diǎn)??
???????????????????mControlPanel.statusChange(ControlPanelFragment.STATUS_SPEECH_START);??
???????????????????break;??
???????????????//?已經(jīng)檢測到語音終點(diǎn),等待網(wǎng)絡(luò)返回??
???????????????case?VoiceRecognitionClient.CLIENT_STATUS_SPEECH_END:??
???????????????????mControlPanel.statusChange(ControlPanelFragment.STATUS_SPEECH_END);??
???????????????????break;??
???????????????//?語音識別完畢,顯示obj中的結(jié)果??
???????????????case?VoiceRecognitionClient.CLIENT_STATUS_FINISH:??
???????????????????mControlPanel.statusChange(ControlPanelFragment.STATUS_FINISH);??
???????????????????isRecognition?=?false;??
???????????????????updateRecognitionResult(obj);??
???????????????????break;??
???????????????//?處理連續(xù)上屏??
???????????????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;??
???????????}??
??
???????}??
??
???????@Override??
???????public?void?onError(int?errorType,?int?errorCode)?{??
???????????isRecognition?=?false;??
???????????mResult.setText(getString(R.string.error_occur,?Integer.toHexString(errorCode)));??
???????????mControlPanel.statusChange(ControlPanelFragment.STATUS_FINISH);??
???????}??
??
???????@Override??
???????public?void?onNetworkStatusChange(int?status,?Object?obj)?{??
???????????//?這里不做不論什么操作不影響簡單識別??
???????}??
???}??
獲得識別BDVRClient對象
[java]?view
plaincopy
mASREngine?=?VoiceRecognitionClient.getInstance(this);??
????????mASREngine.setTokenApis(Constants.API_KEY,?Constants.SECRET_KEY);??
請求參數(shù)設(shè)置
每次識別須要通過通過VoiceRecognitionConfig設(shè)置參數(shù),當(dāng)中一些方法在API中有說明
|
方法 |
參數(shù) |
描寫敘述 |
|
enableBeginSoundEffect |
int?soundResourceId 啟動提示音資源Id |
設(shè)置開始提示音,soundResourceId為放置在Raw目錄的資源Id。 ? |
|
enableEndSoundEffect |
int?soundResourceId 說話結(jié)束提示音資源Id |
檢測到用戶說話結(jié)束播報(bào)的提示音,非識別結(jié)束 |
|
setSampleRate |
int?rate 採樣率 |
設(shè)置音頻採樣率, 通常建議開發(fā)人員不指定採樣頻率。由BDVRClient自己主動依據(jù)當(dāng)前網(wǎng)絡(luò)環(huán)境選擇採樣頻率。WiFi環(huán)境下將使用16kHz採樣。移動網(wǎng)絡(luò)下將使用8kHz採樣,來節(jié)省流量。 參考常量定義 SAMPLE_RATE_8K 8K採樣率 SAMPLE_RATE_16K 16K採樣率 |
|
setProp |
int?prop |
開發(fā)人員能夠通過指定垂直分類來獲取更精準(zhǔn)的語音識別結(jié)果。 注:垂直分類眼下支持地圖,音樂。視頻。APP。網(wǎng)址,開發(fā)人員須要注意設(shè)定採樣頻率時(shí)僅僅能在這五種垂直分類中選擇。 若指定其他分類,可能會影響識別結(jié)果的精度。 參考PROP_前綴的常量定義。 |
|
setUseDefaultAudioSource |
boolean?useDefaultSource |
設(shè)置是否使用缺省的錄音。 假設(shè)不使用,用戶須要調(diào)用VoiceRecognitionClient對象的feedAudioBuffer方法為識別器提供語音數(shù)據(jù) |
|
enableNLU |
? |
啟用語義解析,僅僅在搜索模式起作用 |
|
getSampleRate |
? |
獲取當(dāng)前識別採樣率 |
|
setLanguage |
String Language |
設(shè)置語種。 眼下支持的語種有中文普通話(LANGUAGE_CHINESE)、中文粵語(LANGUAGE_CANTONSE)、英文(LANGUAGE_ENGLISH)。 |
開始語音識別,BDVRClient在開始識別后。會啟動錄音、預(yù)處理、上傳到server并獲取識別結(jié)果。
[java]?view
plaincopy
int?code?=?mASREngine.startVoiceRecognition(mListener,?config);??
???????????????if?(code?!=?VoiceRecognitionClient.START_WORK_RESULT_WORKING)?{??
???????????????????mResult.setText(getString(R.string.error_start,?code));??
???????????????}???
取消語音識別
[java]?view
plaincopy
mASREngine.stopVoiceRecognition();??
結(jié)束語音識別
[java]?view
plaincopy
mRecognitionClient.speakFinish();??
總結(jié)
以上是生活随笔為你收集整理的百度语音识别开放平台SDK用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网页上预览pdf文件的几种方案
- 下一篇: SPSS 24下载与安装+授权码