教你用 Android 做二次开发,识别率达到科大讯飞语音输入水平 | 原力计划
作者 | Pek_KuaiJia
责编 | 夕颜
头图 | CSDN 下载自视觉中国
出品 | CSDN(ID:CSDNnews)
随着目前用户需求的精细化和智能化,很多时候我们需要在App内集成语音输入模块,为用户提供语音输入的功能。而科大讯飞语音作为行业内翘楚,识别结果相对准确,且讯飞自带一套识别动画,适合快速搭建模块,废话不多说,先看下效果图。
下面开始具体步骤
申请key
百度搜索讯飞开放平台,注册账号并实名认证,然后在产品中找到语音听写,可以领取90天试用包,商用需付费。接着打开控制台,添加你需要使用讯飞SDK的应用,注意保存这里的APPID,这个就是之后需要配置到APP中。
下载SDK
在官网中找到资料库,选择你刚才添加的应用,下载在线语音识别SDK
将加压所得文件夹中libs下的Msc.jar文件复制到项目中的libs下
如果没有就新建一个,复制完成后,右击Msc.jar文件,选择add as library,这里后面获取语音识别结果需要解析json,由于我使用的是gson,所以一并导入了;接着将下载下来的文件夹libs下两个文件夹复制到你项目目录的src/main/jniLibs,如果没有该文件夹就新建一个;最后在你项目app目录下新建assets文件夹,将下载下来的文件夹中assets中文件夹复制进去,至此,文件全部导入完成,放个整体项目文件结构图。
为语音听写添加权限
在mainfest.xml添加即可,注意Android6.0以上,读取麦克风和获取手机识别码权限需要动态申请。
1 <uses-permission android:name="android.permission.INTERNET" />2 <!--获取手机录音机使用权限,听写、识别、语义理解需要用到此权限 -->3 <uses-permission android:name="android.permission.RECORD_AUDIO" />4 <!--读取网络信息状态 -->5 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />6 <!--获取当前wifi状态 -->7 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />8 <!--允许程序改变网络连接状态 -->9 <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
10 <!--读取手机信息权限 -->
11 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
配置APPID
在APP的Application的onCreate()配置如下代码,如果没有application,也可以在需要用到这个功能的Activity的onCreate()添加,注意“=”不能少
1public class MyApplication extends Application{23 @Override4 public void onCreate() {5 super.onCreate();6 //注意这里的“=”不能少7 SpeechUtility.createUtility(getApplicationContext();, SpeechConstant.APPID + "=你的APPID");89 }
10
11}
在启动语音识别模块添加代码
这里的result就是语音转换的结果字符串,可以通过iatDialog.setParameter()配置语言,间隔时间(即多长时间不说话时视为结束)等,具体可参考官网文档。
1private void changeIntoText() {23 // ②初始化有交互动画的语音识别器4 iatDialog = new RecognizerDialog(SearchMusicActivity.this, mInitListener);5 //③设置监听,实现听写结果的回调6 int a = 1+2;78 iatDialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn");9 iatDialog.setParameter(SpeechConstant.ACCENT, "mandarin");
10
11 iatDialog.setListener(new RecognizerDialogListener() {
12 String resultJson = "[";//放置在外边做类的变量则报错,会造成json格式不对(?)
13
14 @Override
15 public void onResult(RecognizerResult recognizerResult, boolean isLast) {
16 System.out.println("----------------- onResult -----------------");
17 if (!isLast) {
18 resultJson += recognizerResult.getResultString() + ",";
19 } else {
20 resultJson += recognizerResult.getResultString() + "]";
21 }
22
23 if (isLast) {
24 //解析语音识别后返回的json格式的结果
25 Gson gson = new Gson();
26 List<DictationResult> resultList = gson.fromJson(resultJson,
27 new TypeToken<List<DictationResult>>() {
28 }.getType());
29 String result = "";
30 for (int i = 0; i < resultList.size() - 1; i++) {
31 result += resultList.get(i).toString();
32 }
33
34 et_content.setText(result);
35 //获取焦点
36 et_content.requestFocus();
37 //将光标定位到文字最后,以便修改
38 et_content.setSelection(result.length());
39 }
40 }
41
42 @Override
43 public void onError(SpeechError speechError) {
44 //自动生成的方法存根
45 speechError.getPlainDescription(true);
46 }
47 });
48 //开始听写,需将sdk中的assets文件下的文件夹拷入项目的assets文件夹下(没有的话自己新建)
49 iatDialog.show();
50 }
51
52 private InitListener mInitListener = new InitListener() {
53 @Override
54 public void onInit(int code) {
55 Log.d(TAG, "SpeechRecognizer init() code = " + code);
56 if (code != ErrorCode.SUCCESS) {
57 Toast.makeText(SearchMusicActivity.this, "初始化失败,错误码:" + code, Toast.LENGTH_SHORT).show();
58 }
59 }
60 };
【End】
推荐阅读
☞罗永浩宣布进军电商直播;微博回应用户数据泄露;Android 11 开发者预览版 2 发布 | 极客头条
☞苹果阻止上架的这款软件,到底有多可恶?
☞了解这4个重点,带你探索未来将如何设计智能系统和机器人!
☞超 6 成程序员月薪 8000 以上,后端开发最吃香!| 中国开发者现状报告
☞Docker 开发环境的滑坡
☞比特币Logo背后有哪些历史及象征意义?Logo 上的“B”为什么会向右倾斜?
你点的每一个在看,我认真当成了喜欢
教你用 Android 做二次开发,识别率达到科大讯飞语音输入水平 | 原力计划相关推荐
- 教你用Android做二次开发,识别率达到科大讯飞语音输入水平 | 原力计划
作者 | Pek_KuaiJia 责编 | 夕颜 头图 | CSDN 下载自视觉中国 出品 | CSDN(ID:CSDNnews) 随着目前用户需求的精细化和智能化,很多时候我们需要在App内集成语音 ...
- 什么样的GPS定位系统最适合做二次开发
什么样的GPS定位系统最适合做二次开发呢? 术业有专攻,好比都是汽车,轿车和越野车功能用途不同,如果你跑高速肯定选择轿车跑的平稳舒适:如果你去泥泞沟沟坑坑的道路,跑山过河肯定选择越野车跑得更轻松,底盘 ...
- GPS定位系统源码只有这种才是最适合做二次开发的...
GPS定位系统是一个泛概念,有很多种类,比如公交车,物流车,渣土车,船运车辆,宠物定位等等监控管理系统都属于GPS定位系统里面的一个分支!每个分支的应用场景都不一样,宠物定位的GPS定位系统主要侧重宠 ...
- 基于leveldb,levigo做二次开发
Leveldb是一个C++库,它有提供标准的C接口,头文件在include/leveldb/c.h中 levigo是leveldb 的一个go wrapper,它主要基于Leveldb中inlude/ ...
- 【Arduino】OTTO机器人(做二次开发的一点点总结)
偶然一个机会得以接触一下Arduino,了解一下Arduino代码的编写模式,接触了C++函数封装,算是真正接触了一下项目开发,也意识到项目开发中的种种问题不是写代码能解决的,在阅读别人代码时也需要有 ...
- 改:如何基于开源项目做二次开发
改:如何基于开源项目做二次开发 [保持纯洁,加以包装] 当我们发现开源项目有的地方不满足我们的需求的时候,自然会有一种去改改的冲动,但是怎么改是个大学问.一种方式是投入几个人从内到外全部改一遍,将其 ...
- 400 多行代码!超详细 Rasa 中文聊天机器人开发指南 | 原力计划
作者 | 无名之辈FTER 责编 | 夕颜 出品 | 程序人生(ID:coder_life) 本文翻译自Rasa官方文档,并融合了自己的理解和项目实战,同时对文档中涉及到的技术点进行了一定程度的扩展, ...
- Google是如何做Code Review的?| CSDN原力计划
作者 | 帅昕 xindoo 编辑 | 屠敏 出品 | CSDN 博客 我和几个小伙伴一起翻译了Google前一段时间放出来的Google's Engineering Practices docume ...
- 2020 年 GitHub 上那些优秀 Android 开源库,这里是 Top10! | 原力计划
作者 | 依然饭特稀西 责编 | 郭芮 出品 | CSDN博客 每过一段时间呀,我都会给大家带来一些从Github上收集的一些开源库,有的是炫酷动效,有的则是实用的工具和类库.2020年有哪些优秀的开 ...
最新文章
- 「彩票假说」要修正?王言治团队:神经网络要「中奖」,秘密在于学习率!|ICML 2021...
- UVA - 514:Rails
- php中join用法,PHP join()函数用法与实例讲解
- C++ 函数模板与分离编译模式
- 百度搜索关键词纠错机制研究
- Go操作MySql Memache Mongodb
- 职称计算机 frontpage 2003,计算机职称考试FrontPage2003考试大纲
- 网络中的公网和内网 (ipv4)
- 计算机控制电机启动接线图,电机控制线路图大全(上下)
- 线下活动报名|增长骇客:如何利用数据「玩」出新意
- Nginx搭建文件服务器(解决无法下载文件.txt,.pdf等)
- #学习方法 linux的教程推荐
- spring boot 启动
- 使用 requireJS 的shim参数 解决插件jequery 插件问题
- jetson nano 远程登录及关闭图形化显示
- bzoj2757【scoi2012】Blinker的仰慕者
- 面向对象:对有腹肌的男生毫无抵抗力,诚心诚意找一个小哥哥
- 用最长情的告白陪伴技术人的成长
- 【C#】转换为整型(int)及int取整
- xp系统服务器管理器在哪里找,XP系统设备管理器空白没有选项怎么办
热门文章
- SSD Network Architecture--keras version
- vue从入门到开发--2-基本结构
- SQL Server调优系列进阶篇(查询优化器的运行方式)
- [zsh] restart a zsh process
- php base64 gzip加密,PHP base64+gzinflate压缩加密和解密算法
- 关于卷积神经网络可视化的一点心得
- 获取python脚本的返回值_Python多线程获取返回值代码实例
- reids笔记4 集群
- Flutter框架基础
- 异步发电机 matlab仿真,基于MATLABSIMULINK异步电机矢量控制系统的仿真.pdf