语音识别Android SDK
下载安装
SDK及示例demo下载地址: https://github.com/data-baker/BakerAndroidSdks
Android Studio集成SDK(参考demo)
-
将以下3个aar包添加至工程主module下,lib文件夹里。
basecomponent-release.aar bakerasr-release.aar bakerhttp-release.aar
- 在主module的build.gradle文件里,添加以下代码。
dependencies { implementation fileTree(dir: 'libs', include: ['*.aar']) implementation 'com.squareup.okhttp3:okhttp:4.2.2' implementation 'com.google.code.gson:gson:2.8.6' }
2021年6月,标贝计划开源sdk源码,所以也可以直接集成源码model。
注意:SDK内使用了okhttp、gson所以需要开发者添加以这两个库,若工程内已存在,无需重复添加。okhttp请使用4.x版本,以免出现版本兼容bug。
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.RECORD_AUDIO" />
关于混淆
SDK中用到了okhttp和gson,所以需要将这两个包的混淆代码添加上。具体混淆代码可以去官方文档上查阅。如果项目中已经有这两个包的混淆代码,不必重复添加。请加上我们SDK其他类的混淆代码,如下:
-keep class com.baker.speech.asr.basic.**{*;} -keep class com.baker.speech.asr.bean.**{*;} -keep class com.baker.speech.asr.utils.**{*;} -keep public class com.baker.speech.asr.AsrConstants{*;} -keep public class com.baker.speech.asr.AsrErrorConstants{*;} -keep public class com.baker.speech.asr.BakerRecognizer{ public <methods>; } -keep public class com.baker.speech.asr.vadJni{*;} -keep public class com.baker.speech.asr.event.EventManagerMultiNet$BakerWebSocketListener{*;}
SDK关键类
- BakerRecognizer:语音识别关键业务处理类,全局只需一个实例即可。
- BakerRecognizerCallback:实时识别结果源数据回调类。您可以在这些个回调方法中获取到当前识别的各类结果和状态,或者错误信息。您可以在回调方法中处理识别结果。设置参数时请将此callback提交给BakerRecognizer实例。
调用说明
- 初始化BakerRecognizer类,得到BakerRecognizer的实例。
如果是调用我们公有云公共识别接口,请采用以下示例代码初始化BakerRecognizer类,传入由我们授权邮件里面给到的账户相关的clientId和clientSecret。
BakerRecognizer bakerRecognizer = new BakerRecognizer(); bakerRecognizer.initSdk(Context, clientId, clientSecret, BakerRecognizerCallback);
如果是私有化部署请采用以下示例代码初始化BakerRecognizer类。并注意需要在参数中设置私有化部署的识别服务器地址,仅私有化部署时需要设置该参数。
BakerRecognizer bakerRecognizer = new BakerRecognizer(); bakerRecognizer.initSdk(Context, BakerRecognizerCallback); bakerRecognizer.setUrl("ws://xxxx"); //设置私有化部署的识别服务器地址
参数说明
参数 | 参数名称 | 是否必填 | 说明 |
---|---|---|---|
initSdk | 初始化 | 是 | 设置授权相关信息及回调信息 |
setUrl | 识别服务器地址 | 否 | 仅私有化部署,需要设置服务器URL。 |
setSampleRate | 音频采样率 | 否 | 音频采样率8000/16000(默认) |
setAudioFormat | 音频编码格式 | 否 | 音频编码格式wav/pcm(默认) |
setDomain | 设置识别场景 | 否 | 默认是common。 |
setAddPct | 添加标点 | 否 | true: 加标点,默认值 false:不添加标点 |
setHotwordid | 配置热词组 | 否 | 配置的热词组的id |
setDiylmid | 配置个性化模型 | 否 | asr个性化模型的id |
setEnable_vad | 开启静音检测 | 否 |
False: 关闭静音检测(默认) True:开启静音检测 |
setMax_begin_silence | 最大开始静音时长 | 否 |
允许的最大开始静音时长 单位:毫秒,取值范围[200,60000] |
setMax_end_silence | 最大结束静音时长 | 否 |
允许的最大结束静音时长 单位:毫秒,取值范围[200, 5000] |
startAsr | 开启识别 | 否 | 开启识别时调用 |
stopAsr | 结束识别 | 否 | 结束识别时调用 |
Start() | 开启数据流识别 | 否 | 开启数据流识别 |
send(byte[] data) | 发送数据 | 否 | 每包必须5120字节大小,最后一包可以小于5120,或者是空包。 |
end() | 结束数据流识别 | 否 | 主动结束数据流识别 |
BakerRecognizerCallback回调类方法说明
参数 | 参数名称 | 说明 |
---|---|---|
onReadyOfSpeech | 准备就绪 | 网络准备就绪后回调 |
onResult(BakerResponse response) | 流式识别持续返回数据的接口回调 | 此回调方法会被多次唤起。持续返回实时的识别数据信息。List<String> nbest参数是一个识别结果集合,最优识别结果理论上是nbest(0),List<String> uncertain参数是一个预测的可能出现的语音识别内容的结果集,供选择使用。boolean isLast 当前结果是否是最终识别数据,false:否,true:是。 |
onBeginOfSpeech() | 用户开始输入声音 | sdk内部录音,识别到用户开始输入声音时回调。 |
onEndOfSpeech | 识别正常结束 | 正常识别结束时,会唤起此回调方法。正常识别结束时,会唤起此回调方法。 |
onVolumeChanged (int volume) | 识别音量信息 | volume是取值0-100之间的整数,代表声音的分贝值。 |
onError | 识别出现错误 | int code是错误码,错误码具体请参考以下错误码对照表。String message是具体的错误信息日志。识别过程中出现各种错误情况都会回调此方法。 |
BakerResponse内部结构
参数 | 类型 | 说明 |
---|---|---|
res_idx | int | 数据块序列号,请求内容会以流式的数据块方式返回给客户端。服务器端生成,从1递增 |
nbest | stringArray | 此回调方法会被多次唤起。持续返回实时的识别数据信息。List<String> nbest参数是一个识别结果集合,最优识别结果理论上是nbest(0), |
end_flag | int | 是否是最后一个数据块,0:否,1:是 |
text | string | 正常识别结束时,会唤起此回调方法。 |
confidence | string | 语音识别结果,失败时为空 |
speed | int | 语速,取值[0-2000] |
speed_label | string |
语速标签: 15以下:FAST 快 15-30 : MEDIUM 适中 30-2000:SLOW 慢 |
volume | int | 音量,取值[0-100] |
volume_label | string |
音量标签: SILENT:0-15 静音 XSOFT:15-30 音量很小 SOFT:30-50 音量小 MEDIUM:50-70 音量适中 LOAD:70-85 音量大 XLOUD:85-100 音量很大 |
words | array | 词级别识别结果 |
words内部结构
参数 | 类型 | 说明 |
---|---|---|
confidence | string | 词置信度,置信度取值[0-100] |
sos | string | 词在音频中的绝对开始时间点 单位:秒 |
eos | string | 词在音频中的绝对结束时间点 单位:秒 |
word | string | 词 |
响应结果示例
{ "code": 90000, "data": { "confidence": "68.31", "end_flag": 1, "nbest": ["欢迎使用标贝科技开放平台。"], "res_idx": 20, "speed": 26, "speed_label": "MEDIUM", "text": "欢迎使用标贝科技开放平台。", "volume": 45, "volume_label": "SOFT", "words": [{ "confidence": "0.40", "eos": "0.51", "sos": "0.06", "word": "欢迎" }, { "confidence": "0.80", "eos": "1.05", "sos": "0.51", "word": "使用" }, { "confidence": "0.40", "eos": "1.52", "sos": "1.05", "word": "标贝" }, { "confidence": "1.00", "eos": "1.95", "sos": "1.52", "word": "科技" }, { "confidence": "0.50", "eos": "2.40", "sos": "1.95", "word": "开放" }, { "confidence": "1.00", "eos": "3.12", "sos": "2.40", "word": "平台" }] }, "message": "Success", "trace_id": "1652148314904999" }
错误码说明
错误码 | 含义 |
---|---|
13180001 | 缺少ClientId |
13180002 | 缺少Secret |
13180003 | token获取失败 |
13180004 | 没有录音权限 |
13180005 | 本地网络不可用 |
13180006 | 网络未准备好,没有调用start方法 |
13180007 | 录音尚未初始化 |
13180008 | 正在录音 |
13180009 | 发送的数据为空 |
13180010 | response is null |
13180011 | gson to object error |
13180012 | websocket发送消息出错 |
13180013 | websocket onFailure error |
13180014 | 录音意外中断 |
90000 | 文本数据 |
30001 | HTTP请求参数错误 |
30002 | 服务内部错误 |
30003 | 识别结果解析出错 |
30004 | 应用包名未知 |
30005 | 语音质量问题 |
30006 | 输入语音过长 |
30007 | 连接识别引擎失败 |
30008 | 会话id不存在 |
30009 | Rpc调用非法 |
30010 | redis rpop操作返回空 |
30011 | redis rpop值不合法 |
30012 | rpc调用识别引擎失败 |
30013 | Redis rpop操作失败 |
30014 | redis lpush操作失败 |
30015 | 单个语音分片过长 |
30016 | 回调url失败 |
40001 | json解析失败 |
40002 | json字段不全 |
40003 | 版本错误 |
40004 | json字段值类型错误 |
40005 | 参数错误 |
40006 | idx超时 |
40007 | idx顺序错误 |
40008 | token校验失败 |
40009 | token处于未激活状态 |
40010 | token已过期 |
40011 | 使用量已超过购买量 |
40012 | qps错误 |
50001 | 处理超时 |
50002 | 内部 rpc 调用失败 |
50003 | 服务端繁忙 |
50004 | 其他内部错误 |