语音识别iOS SDK
下载安装
SDK及示例demo下载地址: https://github.com/data-baker/BakerIosSdks
- 项目说明:bakerIosSdks是标贝科技语音相关的iOS SDK 服务,本项目使用“DBShortASRKit’即可;
- 兼容性:系统:iOS 9.0 及以上
- 硬件架构:arm64, i386
- 权限说明:Privacy - Microphone Usage Description — 开启麦克风;需要使用网络权限。
集成说明
-
通过cocoaPods集成;
pod ‘DBAudioSDK/DBShortASRKit’ , “xxx”, xxx 指的是SDK的版本号
手动集成:
- 下载项目中的文件,然后导入相应的DBAudioSDK文件夹下的代码文件:
- 导入一句话识别的代码 “DBFASRClient” 和“DBResponseModel” 这两个文件;
SDK关键类
- DBFASRClient
一句话识别关键业务处理类,全局只需一个实例即可。
- DBFASRClientDelegate
实时识别结果源数据回调类。您可以在这些个回调方法中获取到当前识别的各类结果和状态,或者错误信息。您可以在回调方法中处理识别结果。初始化SDK时请将此callback提交给OneSpeechAsr实例。
- DBResponseModel
ASR识别的model类,负责封装asr的识别结果,包含识别,数据和错误数据;
调用说明
- 实例化DBFASRClient类
实例化DBFASRClient类,得到DBFASRClient的实例;DBFASRClient * OneSpeechAsr = [DBFASRClient shareInstance];
- 初始化SDK
如果是调用我们公有云公共识别接口,请采用以下示例代码初始化OneSpeechAsr类,传入由我们授权邮件里面给到的账户相关的clientId和clientSecret。
[oneSpeechAsr setupClientId:clientID clientSecret:clientSecret];
如果是私有化部署请采用以下示例代码初始化OneSpeechAsr类。并注意需要在参数中设置私有化部署的识别服务器地址,仅私有化部署时需要设置该参数。
[oneSpeechAsr setupURL:privateSeverUrl];
- 一句话识别支持的两种识别场景说明
一句话识别支持2种识别场景,第一种是SDK内调用手机麦克风录音、上传完成识别返回识别结果。此种方式需要接入方提前获取应用的录音权限。第二种场景是接收字节流,SDK收到数据后,上传服务器完成识别,返回识别结果。
第一种场景:
- 需要应用取得录音权限。
- 通过OneSpeechAsr实例,设置各类参数。
- [oneSpeechAsr startOneSpeechASR];开启识别
- 在DBFASRClientDelegate回调中接收状态、识别结果,或错误信息等。
- 通过[oneSpeechAsr endOneSpeechASR]; 此方法结束识别。
第二种场景:
- 通过OneSpeechAsr实例,设置各类参数。
- [oneSpeechAsr startOneSpeechASR] 通知SDK准备识别。
- 在DBFASRClientDelegate的onReady回调方法中得到SDK已准备好后。
- 多次调用[oneSpeechAsr websocketPostData:data];方法向SDK输入待识别语音字节流。此方法单次接收固定长度(5120)字节数组。最后一片数据可以是其他长度字节数组。
- 在DBFASRClientDelegate回调中接收状态、识别结果,或错误信息等。
- [oneSpeechAsr endOneSpeechASR]结束识别。
- 此种方式,每次在调用[oneSpeechAsr websocketPostData:(NSDAta *data)];时,前后2次间隔时间不能超过60秒,私有化部署根据服务器设定具体时间为准。
- 在确定不再使用识别后,调用[oneSpeechAsr endOneSpeechASR]释放SDK资源。
- 如果需要发起新的识别请求,可以重复第3.3步。
参数说明
- 基本参数说明
- DBFASRClientDelegate回调类方法说明
- 响应结果参数说明
- words内部结构:
方法名称 | 参数名称 | 是否必填 | 说明 |
---|---|---|---|
initSdk | 初始化SDK | 是 | 必须调用此方法初始化SDK,祥见3.2 |
setUrl | 识别服务器地址 | 否 | 仅私有化部署,需要设置服务器URL。 |
setSampleRate | 设置语音录音采样率 | 否 | 采样率支持16000/8000,默认16000。 |
setAddPct | 设置是否返回标点 | 否 | 是否在短静音处添加标点,默认true |
setDomain | 模型名称 | 否 | 模型名称,必须填写公司购买的语言模型,默认为common |
setAudioFormat | 音频编码格式 | 否 | 输入字节流方式识别时,支持设置音频编码格式pcm或wav |
setHotwordid | 配置的热词组的Id | 否 | 配置的热词组的Id |
setDiylmid | Asr个性化模型的Id | 否 | Asr个性化模型的Id |
enable_vad | vad功能 | 否 |
False: 关闭静音检测(默认) True:开启静音检测 |
max_begin_silence | 允许的最大开始静音时长 | 否 |
当enable_vad为true时有效,表示允许的最大开始静音时长 单位:毫秒,取值范围[200,60000],输入超过范围取临近值,该值是一个参考值,具体可能会根据音频不同有少量浮动。 超出规定范围后,即开始识别后多长时间没有检测到语音,服务端将会发送错误码90002,表示没有检测到语音,结束本次识别。 |
max_end_silence | 允许的最大结束静音时长 | 否 |
当enable_vad为true时有效,表示允许的最大结束静音时长 单位:毫秒,取值范围[200, 5000],输入超过范围取临近值,该值是一个参考值,具体可能会根据音频不同有少量浮动。 超出规定范围后,即在上句话识别后,间隔多长时间没有检测到语音,结束本次识别,间隔后如果还有后续语音则不会被识别。 |
参数 | 参数名称 | 说明 |
---|---|---|
- (void)onReady | 准备就绪 | 授权验证通过,且与服务器连接成功,准备就绪回调 |
- (void)identifyTheCallback:(NSString *)message sentenceEnd:(BOOL)sentenceEnd; | 实时识别持续返回数据的接口回调 | 当识别有效,且识别到内容后,会唤起此回调方法,多次回调。回调内容是当前句的实时识别内容,回调中的字符串结果会持续变化至最新校正后的结果。第一个布尔值sentenceEnd代表当前句识别是否结束,为true时代表当前句识别最终结果,下一次回调是下一句的识别内容。第二个布尔值endFlag为true时代表识别全部结束。注意:需要开发者根据此回调逐句追加显示或处理识别结果。 |
- (void)onError:(NSInteger)code message:(NSString *)message | 识别出现错误 | String code是错误码,错误码具体请参考以下错误码对照表。String message是具体的错误信息日志。识别过程中出现各种错误情况都会回调此方法。一旦出现错误,此次识别任务中断。 |
- (void)resultTraceId:(NSString *)traceId | 追溯Id | 每句话识别的TraceID,用于追溯识别结果 |
- (void)onResult:(DBResponseModel *)model | 识别的数据 | DBResponseMode 表示识别后返回的数据,具体见响应结果参数说明 |
参数 | 类型 | 说明 |
---|---|---|
res_idx | int | 数据块序列号,请求内容会以流式的数据块方式返回给客户端。服务器端生成,从1递增 |
nbest | stringArray | 识别结果 |
end_flag | int | 是否是最后一个数据块,0:否,1:是 |
text | string | 语音识别结果,失败时为空 |
confidence | string | 整句置信度[0-100] |
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 音量很大 |
Code | int | 错误码 |
uncertain | array | 识别的中间文本结果 |
trace_id | String | 任务id 用于定位错误跟踪日志 |
Message | String | 错误描述 |
asr_text | String | ASR 带VAD解析后的数据 |
text | String | 语音识别结果,失败时为空 |
bWords | array | 词级别识别结果 |
参数 | 类型 | 说明 |
---|---|---|
confidence | string | 词置信度,置信度取值[0-100] |
sos | string | 词在音频中的绝对开始时间点 单位:秒 |
eos | string | 词在音频中的绝对结束时间点 单位:秒 |
word | string | 词 |
错误码说明
错误码 | 含义 | 备注 |
---|---|---|
13190001 | 缺少ClientId | |
13190002 | 缺少Secret | |
13190003 | token获取失败 | |
13190004 | 没有录音权限 | |
13190005 | 本地网络不可用 | |
13190006 | 麦克风启动失败 | |
13190007 | 数据长度错误 | |
13190008 | 服务器返回数据解析失败 | |
90000 | 文本数据 | |
30001 | HTTP请求参数错误 | 服务器内部错误,提交traceid,标贝后台进行排查。 |
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解析失败 | 将请求序列化为json结构 |
40002 | json字段不全 | 检查对应的参数是否正确 |
40003 | 版本错误 | |
40004 | json字段值类型错误 | |
40005 | 参数错误 | |
40006 | idx超时 | 相邻idx间隔超过设置超时值(默认60s) |
40007 | idx顺序错误 | idx乱序 |
40008 | token校验失败 | |
40009 | token处于未激活状态 | 检查相应的client_id |
40010 | token已过期 | 重新获取token |
40011 | 使用量已超过购买量 | 检查相应的client_id |
40012 | qps错误 | 增大qps |
40013 | 音频包长度错误 | |
40014 | access_token与当前服务不匹配 | |
40015 | 音频大小错误 | |
40016 | 错误的音频格式 | |
40017 | 错误的采样率 | |
40018 | 错误的req_idx | |
40019 | 错误的version | |
40020 | 错误的access_token | |
40021 | 错误的domain | |
50001 | 处理超时 | |
50002 | 内部 rpc 调用失败 | |
50003 | 服务端繁忙 | |
50004 | 其他内部错误 |