资源技术动态讯飞语音识别demo实现

讯飞语音识别demo实现

2020-02-18 | |  103 |   0

原标题:讯飞语音识别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过来也没用)

01.png

下载 的SDK后面图画部分就是你的APPID,也就是这个SDK必须使用这个APPID


得到了资源后接下来就是新建工程,然后将文件放到对应位置了

02.png

三个对应的资料在SDK里面找到文件 对症下药即可

03.png

在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

上一篇:语音识别传统方法(GMM+HMM+NGRAM)概述

下一篇:语音识别的架构

用户评价
全部评价

热门资源

  • 应用笔画宽度变换...

    应用背景:是盲人辅助系统,城市环境中的机器导航...

  • GAN之根据文本描述...

    一些比较好玩的任务也就应运而生,比如图像修复、...

  • 端到端语音识别时...

    从上世纪 50 年代诞生到 2012 年引入 DNN 后识别效...

  • 人体姿态估计的过...

    人体姿态估计是计算机视觉中一个很基础的问题。从...

  • 谷歌发布TyDi QA语...

    为了鼓励对多语言问答技术的研究,谷歌发布了 TyDi...