参数说明

参数名称 说明 默认值
langType 语种选项,参见开发指南-语言支持  必填
sampleRate 音频采样率,参见开发指南-基本术语  16000
enableIntermediateResult 是否返回中间识别结果 fasle
enableInverseTextNormalization 是否在后处理中执行ITN,参见开发指南-基本术语 
注意:不会对词信息进行ITN转换
false

调用步骤/示例代码

  1. 创建 Activity 添加识别代码(具体可参考MainActivity.java)

  2. 获取录音权限

private boolean hasPermission() {if (ActivityCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED) {return true;}ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO}, 1);return false;
}@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {if (requestCode == 1) {if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {doAuth(); //成功后进行授权 参考下一步} else {Toast.makeText(this, "应用需要录音权限", Toast.LENGTH_SHORT).show();}}
}
  1. 获取激活码

分为 联网激活 和 不联网激活 ,根据用户实际场景进行选择。

  • 联网激活:终端设备联网自动完成激活
  • 不联网激活:终端设备不联网,由用户/开发者手动完成激活

提示:
您通过AI开放平台创建的离线应用仅支持联网激活,请参照联网激活方式进行激活操作。如您需要不联网激活方式,请与我们联系进行商务对接,您可发送邮件至:bd@huiyan-tech.com 。

  • 联网激活
  • 不联网激活

说明:key的查看方式

AsrAuth.onlineAuth(this, key, new String[]{"zh-cmn-Hans-CN" // ① 需要激活的语种 可以添加多个}, new AsrAuth.AuthListener() {@Overridepublic void onError(String msg) {runOnUiThread(() -> Toast.makeText(context, msg, Toast.LENGTH_SHORT).show());}@Overridepublic void onAuth(String[] strings) {  //这里返回的参数的顺序和①处传入的顺序一致if (strings != null && strings.length == 1) {String checkResult = AsrAuth.check(context, strings[0]);boolean success = false;//检查授权是否成功try {JSONObject jsonObject = new JSONObject(checkResult);int code = jsonObject.getInt("code");if (code != 0) {final String msg = jsonObject.getString("msg");runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(context, "授权错误:" + msg, Toast.LENGTH_SHORT).show();}});} else {success = true;authCode = strings[0];runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(context, "授权成功", Toast.LENGTH_SHORT).show();}});//保存授权码 只有第一次联网时需要进行授权 之后再使用时直接读取保存的激活码即可}} catch (JSONException e) {e.printStackTrace();}if (success) {listener.onAuth();}}}
});

  1. 创建识别类
 //OfflineTranscriber为实时识别 OfflineRecognizer为一句话识别 这里以实时识别为例
OfflineTranscriber transcriber = new OfflineTranscriber(context, getListener(), new OfflineTranscriber.SetupListener() {@Overridepublic void onFinish() {//模型已复制 可以进行初始化了transcriber.getParams().setLangType("zh-cmn-Hans-CN");boolean isOnline = true; //是否为联网激活,true为联网,false为不联网String modelPath = "zh-cmn-Hans-CN"; //模型放到assets/asr-models/zh-cmn-Hans-CN中,modelPath需要与模型的位置保持一致 boolean loaded = transcriber.init(context, modelPath, authCode,isOnline);if (loaded){runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(context, "模型加载完成", Toast.LENGTH_SHORT).show();}});}else{runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(context, "模型加载失败!", Toast.LENGTH_SHORT).show();}});}}});private OfflineTranscriber.Listener getListener() {return new OfflineTranscriber.Listener() {@Overridepublic void onPartialResult(String partial, Object... args) {try {JSONObject jsonObject = new JSONObject(partial);String partialText = jsonObject.getString("result");if (empty(partialText)) {return;}if (partialText.length() > 0) {current = partialText;runOnUiThread(new Runnable() {@Overridepublic void run() {txtMsg.setText(String.format("%s%s", total, current));}});}} catch (JSONException e) {e.printStackTrace();}}@Overridepublic void onFinalResult(String result, Object... args) {System.out.println("TranscriberActivity.onFinalResult," + "result = " + result.replaceAll("\n", ""));onResult(result);}@Overridepublic void onResult(String result, Object... args) {System.out.println("TranscriberActivity.onResult");try {JSONObject jsonObject = new JSONObject(result);String text = jsonObject.getString("result");if (text.length() > 0) {total += text;runOnUiThread(new Runnable() {@Overridepublic void run() {txtMsg.setText(total);}});}} catch (JSONException e) {e.printStackTrace();}}@Overridepublic void onGetInfo(AsrCache cache) {System.out.println("TranscriberActivity.onGetInfo," + "cache = " + cache);}@Overridepublic void onFinish() {}};
}
  1. 参数设置
// 实时识别
OfflineTranscriber.Params params = transcriber.getParams();   //transcriber参考下一节 创建识别类
// 一句话识别
// OfflineTranscriber.Params params = recognizer.getParams();params.setLangType("zh-cmn-Hans-CN");  //识别语种
params.setEnableInverseTextNormalization(true);  //开启itn
params.setEnableIntermediateResult(true);   //开启返回中间识别结果
params.setSampleRate(16000); //设置音频采样率 (暂时仅支持16k)//注意:在调用 init与start方法前,如果需要切换识别语种,需要调用params.setLangType()来设置需要识别的语种
  1. 进行识别
transcriber.start();
  1. 停止识别
transcriber.stop();
  1. 释放识别类
@Override
protected void onDestroy() {super.onDestroy();transcriber.finish("zh-cmn-Hans-CN");
}

安装

添加模型文件

将模型文件解压后,放入 assets/asr-models 目录中,如 assets/asr-models/zh-cmn-Hans-CN/ 。

添加aar依赖 将 transcriber-sdk.aar 放入项目的 libs 目录内,修改 app 模块的 build.gradle ,将 aar 文件与okhttp添加为依赖。

dependencies {implementation files('libs/recognizer-sdk-release.aar')  // 这里添加aarimplementation 'com.squareup.okhttp3:okhttp:4.9.0' //这里添加okhttp 如果项目比较旧可以使用3.14.2版
}  

如果需要使用32位SDK,则需要添加如下代码:

修改AndroidManifest.xml文件

添加权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />

离线语音识别应用(windows和Android)相关推荐

  1. Android平台使用PocketSphinx做离线语音识别,小范围语音99%识别率

    为什么80%的码农都做不了架构师?>>>    最近语音识别很火,但是都是用的在线语音识别,研究了一下离线语音识别,小范围内的语音识别率还不错,在此记录一下 首先本文要说的两个前提1 ...

  2. android 语音识别 离线,Android离线语音识别 PocketSphinx

    本文将使用PocketSphinx来实现Android平台的离线语音识别 优点: 离线,不用联网 识别较准(大家都说99%  我觉得只有80%) 缺点: 自定义语音命令麻烦  只能小范围识别 网上看了 ...

  3. 离线语音识别软件_6.语音板使用科大讯飞离线命令词识别

    0x00 离线命令词识别简介 语音识别技术(Auto Speech Recognize,简称ASR),就是把人的自然语言音频数据转换成文本数据的技术.理论上在线ASR是可以把所有的语音转换成对应的文本 ...

  4. Vosk可以用于Unity的离线语音识别

    Vosk是一个免费,开业,可商用,支持离线语音识别的东西,关键是可以在Unity中使用. Vosk可以离线语音识别,也可以自建语音识别服务区,支持多种语言,还支持在Unity中使用. 整体而言,识别率 ...

  5. 离线语音识别库_离线语音识别_离线语音识别sdk - 云+社区 - 腾讯云

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 但录音存储成单声道 识别结果是否可以把两人的对话分离开采样率普通话录音文 ...

  6. Xamarin效果第二十三篇之离线语音识别

    在前面文章中简单玩了玩GIS的基本操作.Mark相关.AR.测距.加载三维白模.可扩展浮动操作和录音效果;今天抽空再来分享一下最近摸索的基于讯飞的离线语音识别效果,其实就简单用了一下离线命令词识别,看 ...

  7. python自动控制windows、Android的软件用来实现机器人流程自动化--RPA,外挂、自动化测试等方面的解决方案

    python自动控制windows.Android的软件用来实现机器人流程自动化--RPA,外挂.自动化测试等方面的解决方案 参考文章: (1)python自动控制windows.Android的软件 ...

  8. Windows下Android平台搭建_1

    Windows下Android平台搭建_1 一.  Android平台综述 Windows下Android平台搭建需要的软件和工具 1.     JDK        JDK(Java Develop ...

  9. 图文详解如何搭建Windows的Android C++开发环境

    原地址:http://www.apkbus.com/android-18595-1-1.html //================================================= ...

  10. Ubuntu16.04实现Sphinx离线语音识别

    Ubuntu16.04实现Sphinx离线语音识别 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/boke14122621/article/deta ...

最新文章

  1. nagios 监控NFS
  2. ThreadFactory
  3. 项目实战丨某高校校园网络升级改造方案
  4. 【iOS篇】从容面对App崩溃
  5. 22考生这些院校计算机专业改考408
  6. android o 跨进程广播,[Android] Android O 广播限制
  7. 大佬教你如何写出更好的CSS,分享web前端资料
  8. Linux下hba卡驱动的卸载,SLES11下如何重装qlogic FC HBA卡驱动
  9. Rust Async: Pin概念解析
  10. Android同步时出错,Android Studio中的Gradle给出错误项目同步失败
  11. 《又到毕业季》MATLAB GUI 基础控件与交互
  12. 《腾讯传》三、马化腾与“幸运女神”那些令人脸红的事
  13. 教程:如何申请公众号和创建公众号?
  14. Mathematica绘制动态椭圆摆线(一)
  15. 【科普】苹果ARM版Mac发布会——大人,时代变了
  16. 2022-2028全球及中国食品加工机械行业研究及十四五规划分析报告
  17. C语言逻辑操作符的巧妙用法:an anagram of a palindrome
  18. 程序员谈谈返利机器人
  19. 联通云图片上传官方文档
  20. 校准报告确认有哪些方法?为什么需要进行确认?

热门文章

  1. [xctf] 江苏工匠杯easyphp
  2. 我那牛逼老公,创业成功但最后被辞退,仍然一毛钱股份没有拿到……
  3. 我需要HCNE模拟考试系统
  4. Javascript构建Bingo卡片游戏
  5. 安卓图片三级缓存策略与实现
  6. JavaScript 数组方法find()
  7. microsoft office 文档左边导航窗格列表不见了
  8. TortoiseSVN右键没有菜单
  9. win10右键删除多余菜单
  10. php站长统计,如何巧妙去除隐藏“站长统计”文字链接?