失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 语音识别开发---基于科大讯飞开放平台

语音识别开发---基于科大讯飞开放平台

时间:2021-05-29 19:56:19

相关推荐

语音识别开发---基于科大讯飞开放平台

科大讯飞开放平台

/

大致开发流程

想要使用科大的语音功能:

首先必须要注册一个开发者账号然后新建一个应用新建完成以后,需要开通你想要使用的功能,例如语音识别、语音合成、语义理解等等下载sdk集成开发

注意:

创建完应用以后,会生成一个AppId,这个AppId是和SDK对应的,如果你在工程中用到的AppId和对应的库对应不上,在使用接口的时候会报错你要使用什么功能,必须要先开通服务以后才能使用。

创建应用以及开通服务

1)创建开发者帐号

右上角注册

2) 登录

右上角登录

3) 创建应用

4) 填写应用信息

5) 开通服务

填写完应用信息,提交以后,跳转到我的应用,新创建的应用是默认没有开通任何服务的,我们要使用哪些功能,需要开通对应的服务

点击立即开通

选择要开通的服务,点击确定

选择完要开通的服务以后会提示下载SDK

6)下载SDK

下载SDK,如果开通的是单个服务,就选择单个服务下载,多个服务就选择组合服务SDK下载,这就不用多说了。

应用审核

当应用开通完服务并且下载过SDK以后,应用后面会显示审核入口按钮,有的应用后面没有,是因为你还没有开通服务或者还没有下载过SDK,因为appid和SDK是对应的,如果你都还没下载过SDK,讯飞认为你肯定还没有把SDK集成到你自己的工程中,这种情况下是不允许审核的。

注意

下载的SDK里面除了Demo还会对应的给出so库、jar包、和一些资源文件,尤其要注意的是,so库和资源文件是和你的appid一一对应的,绝对不能和其他appid混用,否则会报错,导致程序无法正常运行

开始写一个集成的语音听写接口demo

(一)准备工作

0、创建一个空的Android项目,比如项目名叫:SpeechRecognitionDemoJYJ。

1、首先要在科大讯飞开放平台(/)上注册

2、点击网站首页右上角的“控制台”,进入控制台。

3、按照说明创建一个应用,该应用名就叫SpeechRecognitionDemoJYJ,创建成功后会有一个AppID,记下来,编程的时候要用到。

4、点击SpeechRecognitionDemoJYJ后面的“开通服务”按钮,开通服务—>语音听写,进入语音听写—>下载当前应用对应的SDK。

5、下载Android版的SDK,将SDK包中libs目录下的Msc.jar和armeabi复制到Android工程的libs目录(如果工程无libs目录,请自行创建)中,并且因为还要用到语音听写Dialog,所以还要把SDK包中assets目录下的iflytek文件夹复制到工程的assets目录下,如下图所示。还要注意,每个不同的应用都要申请不同的AppID,并且要分别下载不同AppID对应的SDK,否则会出错。

6、其他更详细的说明和资料可以参看讯飞开放平台的资料库(/doccenter)。

(二)开发

Demo实现的功能很简单,就是点击一个按钮,弹出语音识别Dialog窗口,说话,说完了点击Dialog窗口后会把自动识别的文字结果显示在下方的EditText中。服务器返回的语音听写的结果是Json格式数据,最后还要对Json数据进行解析(具体解析方法参看我的这篇文章:用GSON解析Json格式数据),解析出语音字符串。

1、XML代码:

界面中有一个按钮,一个TextView和一个EditText,EditText用于显示语音识别的结果。

1 5 611 1218 1928 29

2、MainActivity

1 import java.lang.reflect.Type;2 import java.util.List;3 4 import com.example.speechrecognition.DictationResult;5 import com.google.gson.Gson;6 import com.google.gson.reflect.TypeToken;7 import com.iflytek.cloud.RecognizerListener;8 import com.iflytek.cloud.RecognizerResult;9 import com.iflytek.cloud.SpeechConstant;10 import com.iflytek.cloud.SpeechError;11 import com.iflytek.cloud.SpeechRecognizer;12 import com.iflytek.cloud.SpeechUtility;13 import com.iflytek.cloud.ui.RecognizerDialog;14 import com.iflytek.cloud.ui.RecognizerDialogListener;15 16 import android.app.Activity;17 import android.content.Context;18 import android.os.Bundle;19 import android.os.Handler;20 import android.os.Message;21 import android.util.Log;22 import android.view.Menu;23 import android.view.MenuItem;24 import android.view.View;25 import android.view.View.OnClickListener;26 import android.view.inputmethod.InputMethodManager;27 import android.widget.Button;28 import android.widget.EditText;29 import android.widget.TextView;30 31 public class MainActivity extends Activity implements OnClickListener {32private static String APPID = "569e39a1";33 34private Button listenBtn;35private EditText contentEt;36 37// 听写结果字符串(多个Json的列表字符串)38private String dictationResultStr = "[";39 40@Override41protected void onCreate(Bundle savedInstanceState) {42 super.onCreate(savedInstanceState);43 setContentView(R.layout.activity_main);44 45 listenBtn = (Button) findViewById(R.id.listen_btn);46 contentEt = (EditText) findViewById(R.id.content_et);47 48 listenBtn.setOnClickListener(this);49 50}51 52@Override53public void onClick(View v) {54 switch (v.getId()) {55 case R.id.listen_btn:56 57 dictationResultStr = "[";58 // 语音配置对象初始化59 SpeechUtility.createUtility(MainActivity.this, SpeechConstant.APPID60 + "=" + APPID);61 62 // 1.创建SpeechRecognizer对象,第2个参数:本地听写时传InitListener63 SpeechRecognizer mIat = SpeechRecognizer.createRecognizer(64 MainActivity.this, null);65 // 交互动画66 RecognizerDialog iatDialog = new RecognizerDialog(67 MainActivity.this, null);68 // 2.设置听写参数,详见《科大讯飞MSC API手册(Android)》SpeechConstant类69 mIat.setParameter(SpeechConstant.DOMAIN, "iat"); // domain:域名70 mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn");71 mIat.setParameter(SpeechConstant.ACCENT, "mandarin"); // mandarin:普通话72 73 //3.开始听写74 iatDialog.setListener(new RecognizerDialogListener() {75 76 @Override77 public void onResult(RecognizerResult results, boolean isLast) {78 // TODO 自动生成的方法存根79 // Log.d("Result", results.getResultString());80 // contentTv.setText(results.getResultString());81 if (!isLast) {82dictationResultStr += results.getResultString() + ",";83 } else {84dictationResultStr += results.getResultString() + "]";85 }86 if (isLast) {87// 解析Json列表字符串88Gson gson = new Gson();89ListdictationResultList = gson90 .fromJson(dictationResultStr,91 new TypeToken>() {92 }.getType());93String finalResult = "";94for (int i = 0; i < dictationResultList.size() - 1; i++) {95 finalResult += dictationResultList.get(i)96 .toString();97}98contentEt.setText(finalResult);99100//获取焦点101contentEt.requestFocus();102103//将光标定位到文字最后,以便修改104contentEt.setSelection(finalResult.length());105106Log.d("From reall phone", finalResult);107 }108 }109 110 @Override111 public void onError(SpeechError error) {112 // TODO 自动生成的方法存根113 error.getPlainDescription(true);114 }115 });116 117 // 开始听写118 iatDialog.show();119 120 break;121 default:122 break;123 }124}125 }

3、自定义的com.example.speechrecognition.DictationResult类的代码:

1 import java.util.List;2 3 /**4 * 解析语音听写返回结果Json格式字符串的模板类(多重嵌套Json)5 * 6 * 语音识别结果Json数据格式(单条数据):7 * {"sn":1,"ls":true,"bg":0,"ed":0,"ws":[{"bg":0,"cw":[{"w":"今天","sc":0}]},8 * {"bg":0,"cw":{"w":"的","sc":0}]},{"bg":0,"cw":[{"w":"天气","sc":0}]},9 * {"bg":0,"cw":[{"w":"怎么样","sc":0}]},{"bg":0,"cw":[{"w":"。","sc":0}]}]}10 */11 public class DictationResult {12private String sn;13private String ls;14private String bg;15private String ed;16 17private Listws;18 19public static class Words {20 private String bg;21 private Listcw;22 23 public static class Cw {24 private String w;25 private String sc;26 27 public String getW() {28 return w;29 }30 31 public void setW(String w) {32 this.w = w;33 }34 35 public String getSc() {36 return sc;37 }38 39 public void setSc(String sc) {40 this.sc = sc;41 }42 43 @Override44 public String toString() {45 return w;46 }47 }48 49 public String getBg() {50 return bg;51 }52 53 public void setBg(String bg) {54 this.bg = bg;55 }56 57 public ListgetCw() {58 return cw;59 }60 61 public void setCw(Listcw) {62 this.cw = cw;63 }64 65 @Override66 public String toString() {67 String result = "";68 for (Cw cwTmp : cw) {69 result += cwTmp.toString();70 }71 return result;72 }73}74 75public String getSn() {76 return sn;77}78 79public void setSn(String sn) {80 this.sn = sn;81}82 83public String getLs() {84 return ls;85}86 87public void setLs(String ls) {88 this.ls = ls;89}90 91public String getBg() {92 return bg;93}94 95public void setBg(String bg) {96 this.bg = bg;97}98 99public String getEd() {100 return ed;101}102 103public void setEd(String ed) {104 this.ed = ed;105}106 107public ListgetWs() { 108 return ws; 109 } 110 111 public void setWs(List ws) { 112 this.ws = ws; 113 } 114 115 @Override 116 public String toString() { 117 String result = ""; 118 for (Words wsTmp : ws) { 119 result += wsTmp.toString(); 120 } 121 return result; 122 } 123 }

4、AndroidManifest.xml中申请权限:

1 234567891011121314

5、测试:模拟器无法打开录音机,是不能在上面测试的,要用真机测试。测试结果如下图:

更多可以参考: /q4878802/article/category/2858977

如果觉得《语音识别开发---基于科大讯飞开放平台》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。