Android做二次开发,识别率达到科大讯飞语音输入水平

2023-05-0612:32:24APP与小程序开发Comments794 views字数 2887阅读模式
Android做二次开发,识别率达到科大讯飞语音输入水平

随着目前用户需求的精细化和智能化,很多时候我们需要在App内集成语音输入模块,为用户提供语音输入的功能。而科大讯飞语音作为行业内翘楚,识别结果相对准确,且讯飞自带一套识别动画,适合快速搭建模块,废话不多说,先看下效果图。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

Android做二次开发,识别率达到科大讯飞语音输入水平
Android做二次开发,识别率达到科大讯飞语音输入水平
Android做二次开发,识别率达到科大讯飞语音输入水平

下面开始具体步骤文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

Android做二次开发,识别率达到科大讯飞语音输入水平

申请key文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

百度搜索讯飞开放平台,注册账号并实名认证,然后在产品中找到语音听写,可以领取90天试用包,商用需付费。接着打开控制台,添加你需要使用讯飞SDK的应用,注意保存这里的APPID,这个就是之后需要配置到APP中。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

Android做二次开发,识别率达到科大讯飞语音输入水平
Android做二次开发,识别率达到科大讯飞语音输入水平
Android做二次开发,识别率达到科大讯飞语音输入水平

下载SDK文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

在官网中找到资料库,选择你刚才添加的应用,下载在线语音识别SDK文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

Android做二次开发,识别率达到科大讯飞语音输入水平
Android做二次开发,识别率达到科大讯飞语音输入水平

将加压所得文件夹中libs下的Msc.jar文件复制到项目中的libs下文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

如果没有就新建一个,复制完成后,右击Msc.jar文件,选择add as library,这里后面获取语音识别结果需要解析json,由于我使用的是gson,所以一并导入了;接着将下载下来的文件夹libs下两个文件夹复制到你项目目录的src/main/jniLibs,如果没有该文件夹就新建一个;最后在你项目app目录下新建assets文件夹,将下载下来的文件夹中assets中文件夹复制进去,至此,文件全部导入完成,放个整体项目文件结构图。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

Android做二次开发,识别率达到科大讯飞语音输入水平
Android做二次开发,识别率达到科大讯飞语音输入水平

为语音听写添加权限文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

在mainfest.xml添加即可,注意Android6.0以上,读取麦克风和获取手机识别码权限需要动态申请。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

1 <uses-permission android:name="android.permission.INTERNET" />文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

2文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

3 <uses-permission android:name="android.permission.RECORD_AUDIO" />文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

4文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

5 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

6文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

7 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

8文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

9 <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

10文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

11 <uses-permission android:name="android.permission.READ_PHONE_STATE" />文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

Android做二次开发,识别率达到科大讯飞语音输入水平

配置APPID文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

在APP的Application的onCreate()配置如下代码,如果没有application,也可以在需要用到这个功能的Activity的onCreate()添加,注意“=”不能少文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

1 public class MyApplication extends Application{文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

2文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

3 @Override文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

4 public void onCreate() {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

5 super.onCreate();文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

6 //注意这里的“=”不能少文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

7 SpeechUtility.createUtility(getApplicationContext();, SpeechConstant.APPID + "=你的APPID");文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

8文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

9 }文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

10文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

11}文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

Android做二次开发,识别率达到科大讯飞语音输入水平

在启动语音识别模块添加代码文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

这里的result就是语音转换的结果字符串,可以通过iatDialog.setParameter()配置语言,间隔时间(即多长时间不说话时视为结束)等,具体可参考官网文档。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

1private void changeIntoText() {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

2文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

3 // ②初始化有交互动画的语音识别器文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

4 iatDialog = new RecognizerDialog(SearchMusicActivity.this, mInitListener);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

5 //③设置监听,实现听写结果的回调文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

6 int a = 1+2;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

7文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

8 iatDialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn");文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

9 iatDialog.setParameter(SpeechConstant.ACCENT, "mandarin");文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

10文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

11 iatDialog.setListener(new RecognizerDialogListener() {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

12 String resultJson = "[";//放置在外边做类的变量则报错,会造成json格式不对(?)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

13文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

14 @Override文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

15 public void onResult(RecognizerResult recognizerResult, boolean isLast) {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

16 System.out.println("----------------- onResult -----------------");文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

17 if (!isLast) {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

18 resultJson += recognizerResult.getResultString() + ",";文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

19 } else {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

20 resultJson += recognizerResult.getResultString() + "]";文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

21 }文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

22文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

23 if (isLast) {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

24 //解析语音识别后返回的json格式的结果文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

25 Gson gson = new Gson();文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

26 List resultList = gson.fromJson(resultJson,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

27 new TypeToken >() {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

28 }.getType());文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

29 String result = "";文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

30 for ( int i = 0; i < resultList.size() - 1; i++) {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

31 result += resultList.get(i).toString();文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

32 }文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

33文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

34 et_content.setText(result);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

35 //获取焦点文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

36 et_content.requestFocus();文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

37 //将光标定位到文字最后,以便修改文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

38 et_content.setSelection(result.length());文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

39 }文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

40 }文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

41文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

42 @Override文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

43 public void onError(SpeechError speechError) {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

44 //自动生成的方法存根文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

45 speechError.getPlainDescription( true);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

46 }文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

47 });文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

48 //开始听写,需将sdk中的assets文件下的文件夹拷入项目的assets文件夹下(没有的话自己新建)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

49 iatDialog.show();文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

50 }文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

51文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

52 private InitListener mInitListener = new InitListener() {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

53 @Override文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

54 public void onInit(int code) {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

55 Log.d(TAG, "SpeechRecognizer init() code = " + code);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

56 if (code != ErrorCode.SUCCESS) {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

57 Toast.makeText(SearchMusicActivity. this, "初始化失败,错误码:" + code, Toast.LENGTH_SHORT).show();文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

58 }文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

59 }文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

60 };文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/38552.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/xcx/38552.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定