iOS SDK
一、概述
离线ASR是一种低资源、低成本识别引擎;通用词库识别,可定制语法 ,最多可支持2000条本地指令;适用于手机及各类智能硬件产品。
主要功能是在无网络的情况下,通过传入客户自定义语法文件,可将语音转为文字。
二、XBNF文件编写指导
XBNF文件采用ebnf语法作为基础语法,开发者通过编辑该文件用以限定识别范围同时规定输出的语义项格式。(参考XBNF语法文件编写指导)
三、SDK使用说明
在使用基础技术离线ASR的SDK时,请先接入技术服务,获得授权,否则禁止使用。授权操作详见文档授权说明。
此外,在使用离线 ASR SDK之前,还应编写XBNF语法文件,在SDK中,通过配置项K_GRAM_EBNF_FILEPATH进行配置。
3.1 参数与配置
参数名 | 取值 | 说明 | 是否必须 | 默认值 |
---|---|---|---|---|
K_GRAM_RESBIN_PATH | 字符串 | 设置语法的资源文件路径 | 必须 | N/A |
K_GRAM_EBNF_FILEPATH | 字符串 | 设置客户自定义的语法文件路径 | 必须 | N/A |
K_GRAM_OUTPUT_PATH | 字符串 | 设置根据语法文件生成的识别资源路径 | 必须 | N/A |
K_ASR_RESBIN_PATH | 字符串 | 设置识别的资源路径 | 必须 | N/A |
K_VAD_RESBIN_PATH | 字符串 | 设置VAD资源路径 | 非必须(启用VAD 必须设置) | N/A |
K_VAD_PAUSE_TIME | 字符串 | 设置VAD后端检测人声的停顿时间(ms) | 非必须 | 500 |
K_VAD_ENABLE | 字符串 true / false | 设置是否启用VAD | 非必须 | false |
K_CUSTOM_FEED_DATA | 字符串 true / false | 设置是否启用第三方录音引擎 | 非必须 | false |
3.2 使用Log测试服务
使用Log测试请先在程序入口处调用如下代码,打开Log开关:
Log开关设置
[DUILiteAuth setLogEnable:YES];
3.3 初始化
使用以下方法来初始化SDK:
初始化
//设置音频策略
- (void)setAudioConfig{
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
}
//SDK初始化
-(void)initLocalASR{
NSMutableDictionary *authConfigDic = [[NSMutableDictionary alloc] init];
[authConfigDic setObject:@"xxxxxx" forKey:K_PRODUCT_ID];
[authConfigDic setObject:@"xxxxxx" forKey:K_API_KEYS];
[authConfigDic setObject:@"xxxxxx" forKey:K_USER_ID];
[authConfigDic setObject:@"xxxxxxxxxx" forKey:K_PRODUCT_KEYS];
[authConfigDic setObject:@"xxxxxxxxxx" forKey:K_PRODUCT_SECRET];
[DUILiteAuth setLogEnabled:YES];
[DUILiteAuth setAuthConfig:self config:authConfigDic];
cfg = [[NSMutableDictionary alloc] init];
NSString * vadResPath = [[NSBundle mainBundle] pathForResource:@"vad_aihome_v0.11.bin" ofType:nil];
NSString * asrResPath = [[NSBundle mainBundle] pathForResource:@"ebnfr.aicar.1.3.1.bin" ofType:nil];
NSString * gramResPath = [[NSBundle mainBundle] pathForResource:@"ebnfc.aicar.1.2.0.bin" ofType:nil];
NSString * gramXbnfPath = [[NSBundle mainBundle] pathForResource:@"gram.xbnf" ofType:nil];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
NSString * gramOutputPath = [path stringByAppendingString:@"/local.net.bin"];
//[cfg setObject:@"true" forKey:K_VAD_ENABLE];
//[cfg setObject:@"300" forKey:K_VAD_PAUSE_TIME];
//[cfg setObject:@"true" forKey:K_CUSTOM_FEED_DATA];
[cfg setObject:asrResPath forKey:K_ASR_RESBIN_PATH];
[cfg setObject:vadResPath forKey:K_VAD_RESBIN_PATH];
[cfg setObject:gramResPath forKey:K_GRAM_RESBIN_PATH];
[cfg setObject:gramXbnfPath forKey:K_GRAM_EBNF_FILEPATH];
[cfg setObject:gramOutputPath forKey:K_GRAM_OUTPUT_PATH];
localASREngine = [DUILiteLocalASREngine shareInstance];
[localASREngine localASREngineInit:self config:cfg];
}
//回调接口
//发生错误时回调
-(void)onLocalASRError:(NSString*) error{
NSLog(@"%@, develop error: %@", TAG, error);
}
//识别结果回调
-(void)onLocalASRResult:(NSString*) result{
NSLog(@"%@, ASR result: %@", TAG, result);
}
//检测到说话时回调(需启用VAD)
-(void)onLocalASRSpeakBegin{
NSLog(@"%@, check people sound begin", TAG);
}
//结束说话时回调(需启用VAD)
-(void)onLocalASRSpeakEnd{
NSLog(@"%@, check people sound end", TAG);
}
//音频数据的回调
-(void) onLocalASRAudioData:(NSData*)data{
NSLog(@"%@, audio data: %@", TAG, data);
}
//音量变化的回调
-(void) onLocalASRRmsChanged:(NSNumber*)rmsdB{
NSLog(@"%@, sound change: %@", TAG, rmsdB);
}
3.4 功能列表
3.4.1 开始识别,准备说话
引擎启动接口
//开始识别
[[DUILiteLocalASREngine shareInstance] startLocalASREngine];
//开始识别,并传入相关配置参数
AILocalASRIntent *intent = [[AILocalASRIntent alloc] init];
intent.useXbnfRec = NO;//是否输出扩展语法结果
intent.useConf = YES;//是否开启置信度
intent.usePinyin = NO;//是否输出拼音
intent.useHoldConf = NO;//是否开启ngram置信度
[[DUILiteLocalASREngine shareInstance] startLocalASREngineWithIntent:intent];
3.4.2 停止识别,等待结果
引擎关闭接口
[[DUILiteLocalASREngine shareInstance] stopLocalASREngine];
3.4.3 取消本次识别
取消本次识别接口
[[DUILiteLocalASREngine shareInstance] cancel];
3.4.4 释放识别引擎
引擎释放接口
[DUILiteLocalASREngine releaseInstance];
3.4.5 第三方录音引擎接口
第三方录音机接口
[[DUILiteLocalASREngine shareInstance] feedData:data];
3.5 错误码描述
error id | 描述 | 解决办法 |
---|---|---|
070950 | vad res path used local_asr is nil | 请检查参数K_VAD_RESBIN_PATH设置是否正确 |
070951 | releasing engine is failed | 内核报错,请联系客服 |
070952 | gram res path used local_asr is nil | 请检查参数K_GRAM_RESBIN_PATH设置是否正确 |
070953 | stopping engine is failed | 内核报错,请联系客服 |
070954 | gram output path used local_asr is nil | 请检查参数K_GRAM_OUTPUT_PATH设置是否正确 |
070955 | gram ebnf path used local_asr is nil | 请检查参数K_GRAM_EBNF_FILEPATH设置是否正确 |
070956 | asr res path is nil | 请检查参数K_ASR_RESBIN_PATH设置是否正确 |
070957 | starting engine is failed | 内核报错,请联系客服 |
070958 | init engine is failed | 内核报错,请联系客服 |
070959 | starting recorder is failed | 请检查音频策略是否设置,再重新启动识别引擎或者联系客服 |