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

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

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

http://developer.baidu.com/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中的库添加到工程中

声明权限

[java] view
plain
copy

  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、语音识别

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

语音识别控件方式

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

[java] view
plain
copy

  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

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

API方式

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

[java] view
plain
copy

  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

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

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

[java] view
plain
copy

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

获得识别BDVRClient对象

[java] view
plain
copy

  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

  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. }

取消语音识别

[java] view
plain
copy

  1. mASREngine.stopVoiceRecognition();

结束语音识别

[java] view
plain
copy

  1. mRecognitionClient.speakFinish();

百度语音识别开放平台SDK使用方法,布布扣,bubuko.com

时间: 2024-12-20 08:57:01

百度语音识别开放平台SDK使用方法的相关文章

百度AI开放平台,共建AI生态

2016年,百度开始把积累多年的人工智能技术全面对外开放,从底端智能云,中间百度大脑,到顶层的DuerOS,百度打造整体人工智能开放生态,旨在帮助企业.业界能够更快速的使用.应用人工智能的技术去发展,为人类带来更好的生活.在此背景下,为了更加全面的了解百度AI开放平台及AI生态,将由百度AI技术生态部产品负责人刘倩为大家介绍百度在人工智能开放平台与开放生态方面的思考.进展以及沉淀. 以下为刘倩老师演讲实录 百度AI开放生态战略的中流砥柱---百度大脑 百度AI开放生态是从底端智能云,中间百度大脑

百度LBS开放平台个性化地图 制作一款独一无二的地图

百度LBS开放平台个性化地图  制作一款独一无二的地图 天天用百度地图的亲们是否已不再满足只看如下的地图样式了呢? 默认百度地图样式 是否特别渴望看特别不一样的地图呢,如带京城81号气息的午夜蓝风格.绿灯侠风格的青春绿地图及红色警戒风格的地图? 午夜蓝地图风格 青春绿风格地图 警戒红地图风格 如果你以为上述酷炫的地图只是PS出来的,那么你就out了,因为百度LBS开放平台已经对广大的开发者提供了定制如上个性化样式的地图功能啦~ 开发者可以从http://developer.baidu.com/m

百度 LBS 开放平台,开发者众测计划正式启动

Hi各位亲爱滴开发者:   你是否曾经-- 期望第一时间领先接触到百度LBS开放平台的最新功能? 期望被邀请作为最最尊贵的首批试用志愿者感受志愿者的特权? 期望自己的意见被产品经理采纳,优化功能,从而影响数以万计的开发者? 期望自己的才华被百度看见,加入百度大学,和我们一起打造互联网最牛逼的产品? 加入LBS开放平台众测计划,成为使用志愿者,以上期望将不仅仅止于期望.   通过众测计划,我们将-- 1.在每一个平台重大功能正式面世前,筛选部分符合条件的志愿者,抢鲜试用功能,自由地探索平台新产品新

基于百度AI开放平台的人脸识别及语音合成

基于百度AI的人脸识别及语音合成课题 课题需求 (1)人脸识别 在Web界面上传人的照片,后台使用Java技术接收图片,然后对图片进行解码,调用云平台接口识别人脸特征,接收平台返回的人员年龄.性别.颜值等信息,将信息返回到Web界面进行显示. (2)人脸比对 在Web界面上传两张人的照片,后台使用Java技术接收图片,然后对图片进行解码,调用云平台接口比对照片信息,返回相似度. (3)语音识别 在Web页面上传语音文件,判断语音文件格式,如果不是wav格式进行转码处理,然后调用平台接口进行识别,

百度AI开放平台- API实战调用

百度AI开放平台- API实战调用 一.      前言 首先说一下项目需求. 两个用户,分别上传了两段不同的文字,要计算两段文字相似度有多少,匹配数据库中的符合条件的数据,初步估计列出来会有60-100条左右,不会更多,只会更少.最终的需求是:从这些匹配结果中找到相似度较高的那些条目. 自己编写算法来实现是一个很大的工程,涉及到自然语言处理的一些方面,比较复杂.于是上网搜了搜,发现百度开放平台的自然语言处理可以免费调用,而且每天有10W的调用次数,对我的小项目来说正好满足.但是,在往下翻的时候

中国气象网 气象数据开放平台 API使用方法 (Android)

由于要做个天气应用,需要找个天气的API.上网上搜了下都是那几个,而且基本都过时了.百度有个天气API,不过貌似只能提供当天的.网上提到的中国气象接口的文章,大都用的时旧API,有的被封了,有的永远停到了2014年3月24不更新了. 后来找到了中国天气的新接口,已经升级成气象数据开放平台了http://openweather.weather.com.cn/.没有开发者社区或论坛什么的,只能自己琢磨他的文档了(感觉没人维护..). 经过几个疑难点卡住后,总算调通了.现分享给大家. 1.申请keys

云极知客开放平台接口调用方法(C#)

云极知客为企业提供基于SAAS的智能问答服务.支持企业个性化知识库的快速导入,借助语义模型的理解和分析,使企业客户立即就拥有本行业的24小时客服小专家.其SAAS模式实现零成本投入下的实时客服数据的可视化,优化企业业务流程,指导企业决策. 说白了,其实就是一个智能客服机器人,你可以和他聊天,也可以和他扯淡,但重要的是,你可以用他为客服,教他东西,解放自己.OK,广告到此,下面看看接口相关的东西. 云极知客的接口文档请点击这里. 以下使用C#.NET介绍两个接口的调用方法,平台接口均设置为POST

百度预测开放平台股票预测测试

立即开始 2015年3月3日,星期二,上午10点左右.用predict  API工具针对几种股票的收盘数据创建了四个预测任务: predict new -n "stock_1A0001_prevision_20150303" -f ../history/1A0001.txt -k "股票","上证指数","股指","大盘" predict new -n "stock_300076_previsio

百度AI开放平台 UNIT平台开发在线客服 借助百度的人工智能如何开发一个在线客服系统

这段时间在研究一些人工智能的产品,对比了国内几家做人工智能在线客服的,有些接口是要收费的,有些是免费的,但是做了很多限制,比如每天调用的接口次数限制是100次.后来就找到了百度的AI,大家也知道,目前国内做AI的,应该就算百度比较超前了. 于是就开始研究吧. 百度AI的网址http://ai.baidu.com/    然后就看百度的UNIT的文档    地址参见 https://ai.baidu.com/docs#/UNIT-v2-download/top UNIT机器人对话API文档.里面的