版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/zpf8861/article/details/30229039

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

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

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

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

      

 1、注冊开放开放平台   

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

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

   

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVm9pY2VGYW5z/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" style="border:none;" />   

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVm9pY2VGYW5z/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" style="border:none;" />

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVm9pY2VGYW5z/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" style="border:none;" />

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

等待对接成功

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

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

首先将开发包中的lib中的库加入到project中

        声明权限

  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()方法就能够弹出对话框開始识别。识别结束后会在回调中得到识别结果。

  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

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

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

  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
  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); // 设置採样率,须要与外部音频一致  

然后启动识别

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

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

  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对象
  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在開始识别后。会启动录音、预处理、上传到server并获取识别结果。

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

取消语音识别

  1. mASREngine.stopVoiceRecognition();  

结束语音识别

  1. mRecognitionClient.speakFinish();  

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

  1. 百度AI开放平台,语音识别,语音合成以及短文本相似度

    百度AI开放平台:https://ai.baidu.com/ 语音合成 from aip import AipSpeech APP_ID=" #'你的 App ID' API_KEY=&qu ...

  2. 百度 LBS 开放平台,开发人员众測计划正式启动

    Hi各位亲爱滴开发人员:   你是否以前-- 期望第一时间率先接触到百度LBS开放平台的最新功能? 期望被邀请作为最最尊贵的首批试用志愿者感受志愿者的特权? 期望自己的意见被产品经理採纳.优化功能.从 ...

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

    百度AI开放平台- API实战调用 一.      前言 首先说一下项目需求. 两个用户,分别上传了两段不同的文字,要计算两段文字相似度有多少,匹配数据库中的符合条件的数据,初步估计列出来会有60-1 ...

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

    基于百度AI的人脸识别及语音合成课题 课题需求 (1)人脸识别 在Web界面上传人的照片,后台使用Java技术接收图片,然后对图片进行解码,调用云平台接口识别人脸特征,接收平台返回的人员年龄.性别.颜 ...

  5. 微信小程序,天气预报(百度地图开放平台API)

    小程序看似一种全新的东西,但好在基本上就是曾经HTML,CSS,JS的一个微变版本. 语法和之前一样.只是一些用法和名字(标签)发生了一些变化. 小程序主要就四种扩展名的文件:js,json,wxml ...

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

    百度LBS开放平台个性化地图  制作一款独一无二的地图 天天用百度地图的亲们是否已不再满足仅仅看例如以下的地图样式了呢? 默认百度地图样式 是否特别渴望看特别不一样的地图呢.如带京城81号气息的午夜蓝 ...

  7. selenium自动化 | 借助百度AI开放平台识别验证码登录职教云

    #通过借助百度AI开放平台识别验证码登录职教云 from PIL import Image from aip import AipOcr import unittest # driver.get(zj ...

  8. 同程旅游网开放平台SDK开发完成

    最近利用业余时间,使用了同程旅游网的开放平台,并对大部分的方法进行了调用,发现有很多不好用的地方,比如 1.同一个开放平台居然有几个调用地址,景区调用http://tcopenapi.17usoft. ...

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

    因为要做个天气应用.须要找个天气的API.上网上搜了下都是那几个,并且基本都过时了.百度有个天气API,只是貌似仅仅能提供当天的.网上提到的中国气象接口的文章,大都用的时旧API,有的被封了,有的永远 ...

随机推荐

  1. Tsinsen 1485 Catch The Penguins 抓企鹅 ——Bitset

    [题目分析] 刚开始想的是KD-Tree去暴力求解. 写了半天还没有暴力得的分数多(说好的nlogn呢) 直接按照四个维度排序. 然后扫一遍,用bitset去维护,然后对于四个维度小于一个询问的结果取 ...

  2. 刷题总结——奇怪的游戏(scoi2012)

    题目: 题目描述 Blinker 最近喜欢上一个奇怪的游戏.这个游戏在一个 N*M  的棋盘上玩,每个格子有一个数.每次 Blinker  会选择两个相邻的格子,并使这两个数都加上 1.现在 Blin ...

  3. POJ1635 树的最小表示法(判断同构)

    Some major cities have subway systems in the form of a tree, i.e. between any pair of stations, ther ...

  4. 查看Linux每个进程的流量和带宽

    原文:https://blog.csdn.net/monkeynote/article/details/45867803 作为一个系统管理员,有时候需要搞清楚一台机器上的哪个进程占用了较高的网络带宽. ...

  5. uva 11426 线性欧拉函数筛选+递推

    Problem J GCD Extreme (II) Input: Standard Input Output: Standard Output Given the value of N, you w ...

  6. 线段树练习5(codevs 4927)

    题目描述 Description 有n个数和5种操作 add a b c:把区间[a,b]内的所有数都增加c set a b c:把区间[a,b]内的所有数都设为c sum a b:查询区间[a,b] ...

  7. ZOJ - 4019 Schrödinger's Knapsack (背包,贪心,动态规划)

    [传送门]http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5747 [题目大意]:薛定谔的背包.薛定谔的猫是只有观测了才知道猫的死 ...

  8. Chrome查看DNS状态提示:DNS pre-resolution and TCP pre-connection is disabled.

    chrome://dns 别试了,在这个功能在旧版可以通过关闭预读可以实现,但是新版的不行. 但是可以通过这种方式替代: chrome://net-internals/#dns 这个方式更直观,可以看 ...

  9. Tomcat服务器解析“GET /JavaWebDemo1/1.jsp HTTP/1.1”

    (2)服务器收到http请求报文,返回http响应报文 Tomcat服务器解析“GET /JavaWebDemo1/1.jsp HTTP/1.1” Tomcat服务器解析“GET /JavaWebDe ...

  10. react+flask+antd

    待学习: 1.https://www.cnblogs.com/jlj9520/p/6625535.html 2.http://python.jobbole.com/87112/ 3.