讯飞语音识别demo实现
原标题:讯飞语音识别demo实现
来源:CSDN博客 链接:https://blog.csdn.net/lovelixue/article/details/82656970
最近看了看百度语音和讯飞语音识别的实现,吐个槽,他们的官方文档是真的写得垃圾,可能是我技术不到位,
反正我是很难看懂的,不吐槽了,先上实现
讯飞的官方文档
https://doc.xfyun.cn/msc_android/%E8%AF%AD%E9%9F%B3%E8%AF%86%E5%88%AB.html
按步骤来
注册账号进去后注册应用,得到APPID(这是必须操作,因为不注册应用是不可以下载的,当然也不要想着从其他位置拷贝SDK过来,这里我开始没有理解,后面才知道,每个SDK都是和你要用的应用的APPID绑定的,所以即使拷了别人的SDK过来也没用)
下载 的SDK后面图画部分就是你的APPID,也就是这个SDK必须使用这个APPID
得到了资源后接下来就是新建工程,然后将文件放到对应位置了
三个对应的资料在SDK里面找到文件 对症下药即可
在app的build.gradle里面添加上面配置,加载libs和jnilibs的文件
sourceSets{
main{
jniLibs.srcDir 'libs'
jni.srcDirs = []
}
}
接下来就是代码实现了
添加权限
<!--连接网络权限,用于执行云端语音能力 -->
<uses-permission android:name="android.permission.INTERNET"/>
<!--获取手机录音机使用权限,听写、识别、语义理解需要用到此权限 -->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<!--读取网络信息状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!--获取当前wifi状态 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!--允许程序改变网络连接状态 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<!--读取手机信息权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!--读取联系人权限,上传联系人需要用到此权限 -->
<uses-permission android:name="android.permission.READ_CONTACTS"/>
首先需要初始化操作
SpeechUtility.createUtility(this, SpeechConstant.APPID + "=111111111");
后面的111111是代表你的APPID,拿来替换即可,这个初始化可以在你的demo里面oncreate方法里面进行
下面这个代码是得到并显示讯飞语音识别视图
public void startVoice(){
//1.创建RecognizerDialog对象
RecognizerDialog recognizerDialog = new RecognizerDialog(MainActivity.this, this);
//2.设置accent、language等参数
recognizerDialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn");//语种,这里可以有zh_cn和en_us
recognizerDialog.setParameter(SpeechConstant.ACCENT, "mandarin");//设置口音,这里设置的是汉语普通话 具体支持口音请查看讯飞文档,
recognizerDialog.setParameter(SpeechConstant.TEXT_ENCODING, "utf-8");//设置编码类型
//其他设置请参考文档http://www.xfyun.cn/doccenter/awd
//3.设置讯飞识别语音后的回调监听
recognizerDialog.setListener(new RecognizerDialogListener() {
@Override
public void onResult(RecognizerResult recognizerResult, boolean b) {//返回结果
if (!b) {
Log.i("test_xunfei", recognizerResult.getResultString());
result(recognizerResult.getResultString());
}
}
@Override
public void onError(SpeechError speechError) {//返回错误
Log.e("test_xunfei", speechError.getErrorCode() + "");
}
});
//显示讯飞语音识别视图
recognizerDialog.show();
}
箭头指向的这个this是我实现了InitListener接口,这个接口会让你实现下面这个方法
@Override
public void onInit(int code) {
if (code != ErrorCode.SUCCESS) {
Toast.makeText(MainActivity.this,"初始化失败,错误码:" + code,Toast.LENGTH_LONG).show();
}
}
接下来是拿到识别后的返回结果
在上面onresult毁掉方法里面的log,拿到的只是json数据
{"sn":1,"ls":false,"bg":0,"ed":0,"ws":[{"bg":1,"cw":[{"sc":0.0,"w":"你好"}]}]}这样的值,解析这个数据即可得到
添加fastjson用来解析这个返回值implementation 'com.alibaba:fastjson:1.2.8'
public String result(String resultString){
JSONObject jsonObject = JSON.parseObject(resultString);
JSONArray jsonArray = jsonObject.getJSONArray("ws");
StringBuffer stringBuffer = new StringBuffer();
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject1 = jsonArray.getJSONObject(i);
JSONArray jsonArray1 = jsonObject1.getJSONArray("cw");
JSONObject jsonObject2 = jsonArray1.getJSONObject(0);
String w = jsonObject2.getString("w");
stringBuffer.append(w);
}
String result = stringBuffer.toString();
Log.i("test_xunfei", "识别结果为:" + result);
return result;
}
解析后得到的结果是:识别结果为:你好
好了,总共就这些了,只是先语音识别功能这样还是看上去挺简单的,就是很多时候官方文档没有解析很多细节,所以出了错很多时候不知道为什么,希望能帮到大家吧
————————————————
版权声明:本文为CSDN博主「lovelixue」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lovelixue/article/details/82656970
一THE END一
免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。
合作及投稿邮箱:E-mail:editor@tusaishared.com
下一篇:语音识别的架构
热门资源
应用笔画宽度变换...
应用背景:是盲人辅助系统,城市环境中的机器导航...
GAN之根据文本描述...
一些比较好玩的任务也就应运而生,比如图像修复、...
端到端语音识别时...
从上世纪 50 年代诞生到 2012 年引入 DNN 后识别效...
人体姿态估计的过...
人体姿态估计是计算机视觉中一个很基础的问题。从...
谷歌发布TyDi QA语...
为了鼓励对多语言问答技术的研究,谷歌发布了 TyDi...
智能在线
400-630-6780
聆听.建议反馈
E-mail: support@tusaishared.com