当前位置:   article > 正文

【Android】科大讯飞——语音识别_recognizerlistener

recognizerlistener

 

目录

一、准备工作

二、项目集成

三、项目实战

四、项目演练

五、参考文档

六、案例源码


因为最近项目需要,需要集成语音识别的功能,这里记录下科大讯飞语音识别的集成和使用,也方便其它小伙伴参考,如果哪里有问题,可以提出来以便改正。

一、准备工作

1、注册一个讯飞开放平台账号,官网https://www.xfyun.cn/

2、登陆账号之后,在首页进入“控制台”。

讯飞首页

 

3、 进入控制台后,选择“创建新应用”,填写相关信息后,提交。

讯飞-创建新应用

 讯飞-填写应用信息

 4、应用创建成功之后,去下载你的应用需要的SDK,因为此项目是语音识别的,所以就选择“语音听写”这个SDK。

讯飞-SDK下载

 5、语音识别Android SDK下载完成之后,解压出来如图所示。因为本案例只使用没有UI的识别,所以,我们只需要libs目录下的文件。

 

讯飞-已下载SDK

6、找到你刚刚创建的应用,保存下APP ID,这个到后面项目代码中会用到。

讯飞-APP ID

二、项目集成

1、新建一个工程项目,将下载下来的SDK包中,libs目录下的Msc.jar包复制到项目的libs目录下,并添加为项目的依赖。

讯飞-msc.jar

1

yilai

2、项目src/main/目录下,新建  jniLibs文件夹。

jni folde

 jniLibs

3、将SDK包中,libs目录下的arm64-v8a、armeabi-v7a两个文件夹,复制到项目的jniLibs目录下。

so库

 jniLibs-so

三、项目实战

1、添加用户权限(官方文档提供的权限,实际应用中根据实际项目需要进行删减)

注意:Android 6.0以后,一些危险权限需要动态申请。

  1. <!--连接网络权限,用于执行云端语音能力 -->
  2. <uses-permission android:name="android.permission.INTERNET"/>
  3. <!--获取手机录音机使用权限,听写、识别、语义理解需要用到此权限 -->
  4. <uses-permission android:name="android.permission.RECORD_AUDIO"/>
  5. <!--读取网络信息状态 -->
  6. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  7. <!--获取当前wifi状态 -->
  8. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
  9. <!--允许程序改变网络连接状态 -->
  10. <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
  11. <!--读取手机信息权限 -->
  12. <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
  13. <!--读取联系人权限,上传联系人需要用到此权限 -->
  14. <uses-permission android:name="android.permission.READ_CONTACTS"/>
  15. <!--外存储写权限,构建语法需要用到此权限 -->
  16. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  17. <!--外存储读权限,构建语法需要用到此权限 -->
  18. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
  19. <!--配置权限,用来记录应用配置信息 -->
  20. <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
  21. <!--手机定位信息,用来为语义等功能提供定位,提供更精准的服务-->
  22. <!--定位信息是敏感信息,可通过Setting.setLocationEnable(false)关闭定位请求 -->
  23. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
  24. <!--如需使用人脸识别,还要添加:摄相头权限,拍照需要用到 -->
  25. <uses-permission android:name="android.permission.CAMERA" />

2、初始化即创建语音配置对象,只有初始化后才可以使用MSC的各项服务。建议将初始化放在程序入口处(如Application、Activity的onCreate方法)。此处将初始化工作放在新建的BaseApplication.java 中,并且在AndroidManifest.xml文件中使用该BaseApplication。

  1. public class BaseApplication extends Application {
  2. @Override
  3. public void onCreate() {
  4. // 将“12345678”替换成您申请的APPID,申请地址:http://www.xfyun.cn
  5. // 请勿在“=”与appid之间添加任何空字符或者转义符
  6. SpeechUtility.createUtility(this, SpeechConstant.APPID +"=12345678");
  7. super.onCreate();
  8. }
  9. }

baseApplication

3、 初始化语音识别对象SpeechRecognizer,并初始化InitListener监听,获取初始化状态。

此处的setParameter()是根据自己需求加的,如果你需要添加其它参数,可以查看SDK 文档。

  1. /**
  2. * 初始化语音识别对象
  3. */
  4. private void initVoiceRecognize() {
  5. //获取系统默认语言
  6. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
  7. locale = LocaleList.getDefault().get(0);
  8. } else {
  9. locale = Locale.getDefault();
  10. }
  11. language = locale.getLanguage() + "-" + locale.getCountry();
  12. Log.d(TAG, "系统默认language:"+language);
  13. // 初始化识别无UI识别对象
  14. //使用SpeechRecognizer对象,可根据回调消息自定义界面;
  15. speechRecognizer = SpeechRecognizer.createRecognizer(MainActivity.this, initListener);
  16. if(speechRecognizer != null) {
  17. //设置返回结果格式,目前支持json,xml以及plain 三种格式,其中plain为纯听写文本内容
  18. speechRecognizer.setParameter(SpeechConstant.RESULT_TYPE, "plain");
  19. // 设置语音前端点:静音超时时间,单位ms,即用户多长时间不说话则当做超时处理
  20. //取值范围{1000~10000}
  21. speechRecognizer.setParameter(SpeechConstant.VAD_BOS, "4000");
  22. //设置语音后端点:后端点静音检测时间,单位ms,即用户停止说话多长时间内即认为不再输入,
  23. //自动停止录音,范围{0~10000}
  24. speechRecognizer.setParameter(SpeechConstant.VAD_EOS, "1000");
  25. //设置语音输入语言,zh_cn为简体中文,en_us为美式英文
  26. if (language.equalsIgnoreCase("zh-CN")) {
  27. // 设置语言
  28. speechRecognizer.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
  29. } else {
  30. // 设置语言
  31. speechRecognizer.setParameter(SpeechConstant.LANGUAGE, "en_us");
  32. }
  33. Log.d(TAG, "语音识别对象完成初始化");
  34. }else{
  35. Log.d(TAG, "语音识别对象 == null");
  36. }
  37. }
  1. //初始化对象时,通过此回调接口,获取初始化状态。
  2. private InitListener initListener = new InitListener() {
  3. @Override
  4. public void onInit(int i) {
  5. Log.d(TAG, "SpeechRecognizer initListener() code = " + i);
  6. if (i != ErrorCode.SUCCESS) {
  7. Log.e(TAG, "语音识别初始化失败,错误码:" + i);
  8. }else{
  9. Log.w(TAG, "语音识别初始化成功,错误码:" + i);
  10. }
  11. }
  12. };

4、初始化识别监听RecognizerListener,用于startListening()开启监听。

  1. //设置识别监听器,开始监听
  2. speechRecognizer.startListening(recognizerListener);
  1. //初始化识别监听器
  2. private RecognizerListener recognizerListener = new RecognizerListener() {
  3. @Override
  4. public void onVolumeChanged(int i, byte[] bytes) { //音量变化
  5. }
  6. @Override
  7. public void onBeginOfSpeech() { //开始说话
  8. }
  9. @Override
  10. public void onEndOfSpeech() { //结束说话
  11. //继续识别,并设置监听器
  12. speechRecognizer.startListening(recognizerListener);
  13. }
  14. @Override
  15. public void onResult(RecognizerResult recognizerResult, boolean b) { //返回结果 返回的结果可能为null,请增加判断处理。
  16. if(recognizerResult == null){
  17. Log.d(TAG, "识别出来 onResult:" + b + " recognizerResult == null");
  18. }else {
  19. Log.d(TAG, "识别出来 onResult:" + b + " content:" + recognizerResult.getResultString());
  20. tvRecognizeResult.setText(recognizerResult.getResultString());
  21. }
  22. }
  23. @Override
  24. public void onError(SpeechError speechError) { //错误回调
  25. if(isRecognizing) {
  26. Log.e(TAG, "语音识别出错 onError()");
  27. }
  28. }
  29. @Override
  30. public void onEvent(int i, int i1, int i2, Bundle bundle) { //扩展接口
  31. }
  32. };

四、项目演练

注意:因为是在线语音识别,所以项目需要在真机,且有网络的情况下运行,demo代码中没有对网络状态进行判断,小伙伴们可以自行添加。

语音识别演示

五、参考文档

语音听写 Android SDK 文档 https://www.xfyun.cn/doc/asr/voicedictation/Android-SDK.html

MSC Android API 文档:http://mscdoc.xfyun.cn/android/api/

六、案例源码

码云:https://gitee.com/lilium_foliage/XFVoiceRecognize

csdn:https://download.csdn.net/download/qq_38950819/12005144

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/356316?site
推荐阅读
相关标签
  

闽ICP备14008679号