离线语音识别应用(windows和Android)
参数说明
参数名称 | 说明 | 默认值 |
---|---|---|
langType | 语种选项,参见开发指南-语言支持 | 必填 |
sampleRate | 音频采样率,参见开发指南-基本术语 | 16000 |
enableIntermediateResult | 是否返回中间识别结果 | fasle |
enableInverseTextNormalization |
是否在后处理中执行ITN,参见开发指南-基本术语 注意:不会对词信息进行ITN转换 |
false |
调用步骤/示例代码
创建 Activity 添加识别代码(具体可参考MainActivity.java)
获取录音权限
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();}}
}
- 获取激活码
分为 联网激活 和 不联网激活 ,根据用户实际场景进行选择。
- 联网激活:终端设备联网自动完成激活
- 不联网激活:终端设备不联网,由用户/开发者手动完成激活
提示:
您通过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();}}}
});
- 创建识别类
//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() {}};
}
- 参数设置
// 实时识别
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()来设置需要识别的语种
- 进行识别
transcriber.start();
- 停止识别
transcriber.stop();
- 释放识别类
@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)相关推荐
- Android平台使用PocketSphinx做离线语音识别,小范围语音99%识别率
为什么80%的码农都做不了架构师?>>> 最近语音识别很火,但是都是用的在线语音识别,研究了一下离线语音识别,小范围内的语音识别率还不错,在此记录一下 首先本文要说的两个前提1 ...
- android 语音识别 离线,Android离线语音识别 PocketSphinx
本文将使用PocketSphinx来实现Android平台的离线语音识别 优点: 离线,不用联网 识别较准(大家都说99% 我觉得只有80%) 缺点: 自定义语音命令麻烦 只能小范围识别 网上看了 ...
- 离线语音识别软件_6.语音板使用科大讯飞离线命令词识别
0x00 离线命令词识别简介 语音识别技术(Auto Speech Recognize,简称ASR),就是把人的自然语言音频数据转换成文本数据的技术.理论上在线ASR是可以把所有的语音转换成对应的文本 ...
- Vosk可以用于Unity的离线语音识别
Vosk是一个免费,开业,可商用,支持离线语音识别的东西,关键是可以在Unity中使用. Vosk可以离线语音识别,也可以自建语音识别服务区,支持多种语言,还支持在Unity中使用. 整体而言,识别率 ...
- 离线语音识别库_离线语音识别_离线语音识别sdk - 云+社区 - 腾讯云
广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 但录音存储成单声道 识别结果是否可以把两人的对话分离开采样率普通话录音文 ...
- Xamarin效果第二十三篇之离线语音识别
在前面文章中简单玩了玩GIS的基本操作.Mark相关.AR.测距.加载三维白模.可扩展浮动操作和录音效果;今天抽空再来分享一下最近摸索的基于讯飞的离线语音识别效果,其实就简单用了一下离线命令词识别,看 ...
- python自动控制windows、Android的软件用来实现机器人流程自动化--RPA,外挂、自动化测试等方面的解决方案
python自动控制windows.Android的软件用来实现机器人流程自动化--RPA,外挂.自动化测试等方面的解决方案 参考文章: (1)python自动控制windows.Android的软件 ...
- Windows下Android平台搭建_1
Windows下Android平台搭建_1 一. Android平台综述 Windows下Android平台搭建需要的软件和工具 1. JDK JDK(Java Develop ...
- 图文详解如何搭建Windows的Android C++开发环境
原地址:http://www.apkbus.com/android-18595-1-1.html //================================================= ...
- Ubuntu16.04实现Sphinx离线语音识别
Ubuntu16.04实现Sphinx离线语音识别 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/boke14122621/article/deta ...
最新文章
- nagios 监控NFS
- ThreadFactory
- 项目实战丨某高校校园网络升级改造方案
- 【iOS篇】从容面对App崩溃
- 22考生这些院校计算机专业改考408
- android o 跨进程广播,[Android] Android O 广播限制
- 大佬教你如何写出更好的CSS,分享web前端资料
- Linux下hba卡驱动的卸载,SLES11下如何重装qlogic FC HBA卡驱动
- Rust Async: Pin概念解析
- Android同步时出错,Android Studio中的Gradle给出错误项目同步失败
- 《又到毕业季》MATLAB GUI 基础控件与交互
- 《腾讯传》三、马化腾与“幸运女神”那些令人脸红的事
- 教程:如何申请公众号和创建公众号?
- Mathematica绘制动态椭圆摆线(一)
- 【科普】苹果ARM版Mac发布会——大人,时代变了
- 2022-2028全球及中国食品加工机械行业研究及十四五规划分析报告
- C语言逻辑操作符的巧妙用法:an anagram of a palindrome
- 程序员谈谈返利机器人
- 联通云图片上传官方文档
- 校准报告确认有哪些方法?为什么需要进行确认?