Android 科大讯飞语音识别(详细步骤+源码)

您所在的位置:网站首页 手机上的录音功能怎么用 Android 科大讯飞语音识别(详细步骤+源码)

Android 科大讯飞语音识别(详细步骤+源码)

2024-07-16 07:14| 来源: 网络整理| 查看: 265

前言

语音识别在现在的APP中是常见的,但是通常小的项目中我们不会去费心思自己去做这一块的业务功能开发,常规的是接入第三方的SDK快速实现功能,比如百度、讯飞之类的,百度语音识别之前我已经写过了,本着雨露均沾的原则的,写这篇讯飞的SDK对接步骤,开始吧~ 效果图 在这里插入图片描述 点击 在这里插入图片描述 识别中,识别到之后 在这里插入图片描述 源码在文章最后面

正文

首先呢,你先去注册讯飞的开发者账号,点击讯飞开放平台前往注册, 在这里插入图片描述 注册好之后你可以选择实名认证或者不认证都可以,然后登录进入控制台或者我的应用 在这里插入图片描述创建一个应用

在这里插入图片描述 填写信息然后提交 在这里插入图片描述 点击这个应用名称查看详细信息 在这里插入图片描述 右边的是对接过程需要用到的值,APPID用SDK中,APIKey或APISecret适用于WebAPI调用方式,这两者有什么区别呢?SDK的话很好理解,复制一些文件到你的项目中,然后添加依赖,你就可以使用讯飞的SDK中的语音识别功能了,而WebAPI调用顾名思义是通过网络接口携带参数的方式去实现的,需要自己去做网络请求,本文中目前使用SDK的方式进行对接实现功能,如果有想看WebAPI调用方式的请在评论区留言,

OK,现在滑动到下面下载Android SDK 在这里插入图片描述 下载到本地,然后解压,打开文件目录如下: 在这里插入图片描述 然后就是创建你自己项目了,打开AS 在这里插入图片描述

① 配置资源文件

我取名是XFASRDemo,然后Finish,等待项目创建好之后,复制文件中libs里面的三个文件,到项目的libs中 在这里插入图片描述 在这里插入图片描述 右键Mac.jar添加Add As Library 在这里插入图片描述 在这里插入图片描述 点击OK添加,添加好之后你的jar包就会有一个三角箭头,可以展开,这个时候你就可以使用里面的方法了。 在这里插入图片描述 然后复制资源文件到main下面 在这里插入图片描述

② 配置项目

创建SpeechApplication.java 在这里插入图片描述

package com.llw.xfasrdemo; import android.app.Application; import com.iflytek.cloud.SpeechUtility; public class SpeechApplication extends Application { @Override public void onCreate() { // 5ef048e1 为在开放平台注册的APPID 注意没有空格,直接替换即可 SpeechUtility.createUtility(SpeechApplication.this, "appid=5ef048e1"); super.onCreate(); } }

打开AndroidManifest.xml,增加权限配置

配置SpeechApplication和注册权限

在这里插入图片描述 然后修改app模块下面的build.gradle 在这里插入图片描述

sourceSets { main { jniLibs.srcDirs = ['libs'] } } implementation files('libs/Msc.jar')

改完记得Sync一下

然后修改布局activity_main.xml

接下来就是MainActivity了

③ 编码 一、声明变量和初始化 private static final String TAG = "MainActivity"; private SpeechRecognizer mIat;// 语音听写对象 private RecognizerDialog mIatDialog;// 语音听写UI // 用HashMap存储听写结果 private HashMap mIatResults = new LinkedHashMap(); private SharedPreferences mSharedPreferences;//缓存 private String mEngineType = SpeechConstant.TYPE_CLOUD;// 引擎类型 private String language = "zh_cn";//识别语言 private TextView tvResult;//识别结果 private Button btnStart;//开始识别 private String resultType = "json";//结果内容数据格式

同时你要实现这个点击事件的监听

在这里插入图片描述 实现一个方法

@Override public void onClick(View v) { //写入点击之后处理逻辑 } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvResult = findViewById(R.id.tv_result); btnStart = findViewById(R.id.btn_start); btnStart.setOnClickListener(this);//实现点击监听 } 二、动态权限请求 /** * android 6.0 以上需要动态申请权限 */ private void initPermission() { String permissions[] = {Manifest.permission.RECORD_AUDIO, Manifest.permission.ACCESS_NETWORK_STATE, Manifest.permission.INTERNET, Manifest.permission.WRITE_EXTERNAL_STORAGE }; ArrayList toApplyList = new ArrayList(); for (String perm : permissions) { if (PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(this, perm)) { toApplyList.add(perm); } } String tmpList[] = new String[toApplyList.size()]; if (!toApplyList.isEmpty()) { ActivityCompat.requestPermissions(this, toApplyList.toArray(tmpList), 123); } } /** * 权限申请回调,可以作进一步处理 * * @param requestCode * @param permissions * @param grantResults */ @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { // 此处为android 6.0以上动态授权的回调,用户自行实现。 }

在onCreate方法中调用

initPermission();//权限请求 三、语音监听 /** * 初始化监听器。 */ private InitListener mInitListener = new InitListener() { @Override public void onInit(int code) { Log.d(TAG, "SpeechRecognizer init() code = " + code); if (code != ErrorCode.SUCCESS) { showMsg("初始化失败,错误码:" + code + ",请点击网址https://www.xfyun.cn/document/error-code查询解决方案"); } } }; /** * 听写UI监听器 */ private RecognizerDialogListener mRecognizerDialogListener = new RecognizerDialogListener() { public void onResult(RecognizerResult results, boolean isLast) { printResult(results);//结果数据解析 } /** * 识别回调错误. */ public void onError(SpeechError error) { showMsg(error.getPlainDescription(true)); } }; /** * 提示消息 * @param msg */ private void showMsg(String msg) { Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show(); }

里面用到一个方法,用于解析监听到的结果

四、数据解析 /** * 数据解析 * * @param results */ private void printResult(RecognizerResult results) { String text = JsonParser.parseIatResult(results.getResultString()); String sn = null; // 读取json结果中的sn字段 try { JSONObject resultJson = new JSONObject(results.getResultString()); sn = resultJson.optString("sn"); } catch (JSONException e) { e.printStackTrace(); } mIatResults.put(sn, text); StringBuffer resultBuffer = new StringBuffer(); for (String key : mIatResults.keySet()) { resultBuffer.append(mIatResults.get(key)); } tvResult.setText(resultBuffer.toString());//听写结果显示 }

里面用到一个JsonParser的工具类,需要手动去创建一个 在这里插入图片描述 代码如下:

package com.llw.xfasrdemo; import org.json.JSONArray; import org.json.JSONObject; import org.json.JSONTokener; /** * Json结果解析类 */ public class JsonParser { public static String parseIatResult(String json) { StringBuffer ret = new StringBuffer(); try { JSONTokener tokener = new JSONTokener(json); JSONObject joResult = new JSONObject(tokener); JSONArray words = joResult.getJSONArray("ws"); for (int i = 0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3