Android第三方服务(1):语音识别(1)
App开发中为了让软件功能更加强大,经常会引用许多的第三方框架或服务,其中可能会碰到这样一种场景,让用户语音输入,App接受用户的输入信息,做出相应的相应,这就是所谓的语音识别,当然这也是最基础最简单的语音识别,还有什么语音听写、在线语音合成、开发语义、人脸识别、声纹识别、语音唤醒等等。
关于Android的语音识别,首先是大多模拟器没法模拟,需要用真机来测试。
Android原生系统自带有语音识别模块,不过由于后台是访问Google云服务器数据,基于中国的国情,是没法真正的使用的。因此寻找一种替代是自然而然的事情,现在提供语音识别的平台有很多,在此提供两种解决方案,百度语音识别(百度语音官网:http://yuyin.baidu.com/)和讯飞语音识别(讯飞开发平台官网:http://www.xfyun.cn/),以下简单介绍基于它们平台的语音识别开发。
一、基于百度语音SDK的语音识别功能开发
第一步:在官网http://yuyin.baidu.com/注册帐号(必须),成为开发者。
第二步: 在官网创建一个应用(获取相应的APP key,Secret Key),开通服务(语音识别必须开通).
第三步:下载SDK,解压。
上图为SDK解压后得到的文件,其中docs文件夹为可参考的文档,libs是自己创建语音识别工程必须导入的包,
res是可能在语音识别需要的一些语音文件,最下面是一个Demo。其实以上三步算起来是一步,不过是为了获取SDK和相应
的key.
第四步:本地创建Android标准工程,导入SDK中的libs文件夹下所有的文件。
第五步:工程配置和功能代码实现。
权限:
1 <!-- 语音识别--> 2 <uses-permission android:name="android.permission.INTERNET" /> 3 <uses-permission android:name="android.permission.RECORD_AUDIO"/> 4 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 5 <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 6 7 <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> 8 <uses-permission android:name="android.permission.BROADCAST_STICKY"/> 9 <uses-permission android:name="android.permission.BLUETOOTH"/>
核心代码:
1 public void btnVoice(View view) { 2 Bundle params = new Bundle(); 3 4 //设置开放平台 API Key 5 params.putString(BaiduASRDigitalDialog.PARAM_API_KEY, "3xMq8l8AtQw8WeZjqMaLyd4f"); 6 //设置开放平台 Secret Key 7 params.putString(BaiduASRDigitalDialog.PARAM_SECRET_KEY, "48b2df134266594bd39b375b40d04e1f"); 8 //设置识别领域:搜索、输入、地图、音乐……,可选。默认为输入。 9 params.putInt(BaiduASRDigitalDialog.PARAM_PROP, VoiceRecognitionConfig.PROP_INPUT); 10 //设置语种类型:中文普通话,中文粤语,英文,可选。默认为中文普通话 11 params.putString(BaiduASRDigitalDialog.PARAM_LANGUAGE, VoiceRecognitionConfig.LANGUAGE_CHINESE); 12 //如果需要语义解析,设置下方参数。领域为输入不支持 13 params.putBoolean(BaiduASRDigitalDialog.PARAM_NLU_ENABLE, true); 14 // 设置对话框主题,可选。BaiduASRDigitalDialog 提供了蓝、暗、红、绿、橙四中颜色,每种颜色又分亮、暗两种色调。 15 // 共 8 种主题,开发者可以按需选择,取值参考 BaiduASRDigitalDialog 中前缀为 THEME_的常量。默认为亮蓝色 16 params.putInt(BaiduASRDigitalDialog.PARAM_DIALOG_THEME, BaiduASRDigitalDialog.THEME_RED_DEEPBG); 17 18 voiceDialog = new BaiduASRDigitalDialog(this, params); 19 voiceDialog.setDialogRecognitionListener(new DialogRecognitionListener() { 20 @Override 21 public void onResults(Bundle results) { 22 // 在Results中获取Key 为DialogRecognitionListener .RESULTS_RECOGNITION的StringArrayList, 23 // 可能为空。获取到识别结果后执行相应的业务逻辑即可,此回调会在主线程调用。 24 ArrayList<String> rs = results != null ? results 25 .getStringArrayList(RESULTS_RECOGNITION) : null; 26 if (rs != null) { 27 //此处处理识别结果,识别结果可能有多个,按置信度从高到低排列,第一个元素是置信度最高的结果。 28 29 Toast.makeText(MainActivity.this,rs.get(0),Toast.LENGTH_LONG).show(); 30 } 31 } 32 }); 33 34 voiceDialog.show(); 35 }
这里是当点击按钮时,开启语音识别功能。
第5行和第7行分别要传入两个参数APP key/Secret key,其中需要注意的是这两个key要和你下载的SDK是一一对应的,也就是说不同的SDK对于的key是不相同的,否则可能没法实现
语音识别。
详情请见以下网站:
http://www.cnblogs.com/enjoy-coding/p/4940752.html