语法识别是基于语法文件的一种命令词识别技术。在线语法识别基于abnf语法文件;离线语法基于bnf语法文件。语法文件可以参照Demo的工程所示。
1.1. 在线识别(该服务已下线,新用户无法使用)
1.1.1. 应用级命令词识别
使用浏览器访问讯飞开放平台。在打开的页面中,点击“产品服务”、“在线命令词识别” 。如下图所示:
在随后打开的页面中,点击“使用服务”,选择应用,点击“确定”,即可打开应用级在线语法文件上传页面,如下图所示。上传所需的语法文件,待页面提示“语法文件已生效”,则应用级在线语法文件启用成功。
使用示例如下所示:
//获取识别对象单例
_iFlySpeechRecognizer = [IFlySpeechRecognizer sharedInstance];
//设置协议委托对象
_iFlySpeechRecognizer.delegate = self;
//设置在线识别参数
//设置引擎类型,cloud或者local
[_iflySpeechRecognizer setParameter:@"cloud" forKey:[IFlySpeechConstant ENGINE_TYPE]];
//设置服务类型为asr识别
[_iflySpeechRecognizer setParameter:@"asr" forKey:[IFlySpeechConstant IFLY_DOMAIN]];
//启动识别
[_iFlySpeechRecognizer startListening];
//识别IFlySpeechRecognizerDelegate协议
//本地和在线的识别返回代理是一致
//在切换在线和离线服务时还需要注意参数的重置,具体可以参照demo所示
//结果返回代理
- (void) onResults:(NSArray *) results isLast:(BOOL) isLast{}
//会话结束回调
- (void) onCompleted:(IFlySpeechError*) error{}
//录音音量回调
- (void) onVolumeChanged: (int)volume{}
//录音开始回调
- (void) onBeginOfSpeech{}
//录音结束回调
- (void) onEndOfSpeech{}
//会话取消回调
- (void) onCancel{}
1.1.2. 终端级命令词识别
终端级在线命令词识别需要先在终端上构建语法文件,上传语法文件之后获得相应的Grammer ID,以后每次使用识别功能前,设置该Grammar ID参数即可。其示例代码如下:
//获取识别对象单例
_iFlySpeechRecognizer = [IFlySpeechRecognizer sharedInstance];
//设置协议委托对象
_iFlySpeechRecognizer.delegate = self;
//设置在线识别参数
//开启候选结果
[_iflySpeechRecognizer setParameter:@"1" forKey:@"asr_wbest"];
//设置引擎类型,cloud或者local
[_iflySpeechRecognizer setParameter:@"cloud" forKey:[IFlySpeechConstant ENGINE_TYPE]];
//设置字符编码为utf-8
[_iflySpeechRecognizer setParameter:@"utf-8" forKey:[IFlySpeechConstant TEXT_ENCODING]];
//语法类型,本地是bnf,在线识别是abnf
[_iflySpeechRecognizer setParameter:@"abnf" forKey:[IFlyResourceUtil GRAMMARTYPE]];
//设置服务类型为asr识别
[_iflySpeechRecognizer setParameter:@"asr" forKey:[IFlySpeechConstant IFLY_DOMAIN]];
//编译语法文件,注意grammerType参数的区别
//读取本地abnf语法文件内容
NSString* grammerContent = [self readFile:_abnfFilePath];
//调用构建语法接口
[_iflySpeechRecognizer buildGrammarCompletionHandler:^(NSString * grammerID, IFlySpeechError *error){
//设置grammerID
[_iFlySpeechRecognizer setParameter:grammerID forKey:[IFlySpeechConstant CLOUD_GRAMMAR]];
}grammarType:@”abnf” grammarContent:grammarContent];
//启动识别
[_iFlySpeechRecognizer startListening];
//识别IFlySpeechRecognizerDelegate协议
//本地和在线的识别返回代理是一致
//在切换在线和离线服务时还需要注意参数的重置,具体可以参照demo所示
//结果返回代理
- (void) onResults:(NSArray *) results isLast:(BOOL) isLast{}
//会话结束回调
- (void) onCompleted:(IFlySpeechError*) error{}
//录音音量回调
- (void) onVolumeChanged: (int)volume{}
//录音开始回调
- (void) onBeginOfSpeech{}
//录音结束回调
- (void) onEndOfSpeech{}
//会话取消回调
- (void) onCancel{}
1.2. 离线命令词识别
引擎大小:
状态 | 大小 |
---|---|
编译前静态库 | 24.5 MB |
编译后(ipa) | 8 MB |
资源大小: 5.0MB
空间大小:(不同的编译器编译后大小会有不同,请以实际为准)ipa文件大小 = 引擎编译后(8MB) +资源(5MB)= 13MB。
//设置本地识别参数,其他参数与在线方式一致
//设置引擎类型,cloud或者local
[_iflySpeechRecognizer setParameter:@ "local" forKey:[IFlySpeechConstant ENGINE_TYPE]];
//语法类型,本地是bnf,在线识别是abnf
[_iflySpeechRecognizer setParameter:@ "bnf" forKey:[IFlyResourceUtil GRAMMARTYPE]];
//设置引擎资源文件路径,如demo中的resource/aitalk中的common.jet
NSString *aitalkResourcePath = [[NSString alloc] initWithFormat:@"fo|%@/common.jet",appPath];
[_iflySpeechRecognizer setParameter:aitalkResourcePath forKey:[IFlyResourceUtil ASR_RES_PATH]];
//启动asr识别引擎
[[IFlySpeechUtility getUtility] setParameter:@"asr" forKey:[IFlyResourceUtil ENGINE_START]];
//编译语法文件(注意grammarType参数的区别)
//读取本地bnf语法文件内容
NSString* grammarContent = [self readFile:_bnfFilePath];
//调用语法编译接口
[_iflySpeechRecognizer buildGrammarCompletionHandler:^(NSString *
grammerID, IFlySpeechError *error){
//设置grammerID
[_iFlySpeechRecognizer setParameter:grammerID forKey:[IFlySpeechConstant LOCAL_GRAMMAR]];
}grammarType:@”bnf” grammarContent:grammarContent];
//启动识别
[_iFlySpeechRecognizer startListening];
//识别IFlySpeechRecognizerDelegate协议
//本地和在线的识别返回代理是一致
//在切换在线和离线服务时还需要注意参数的重置,具体可以参照demo所示
//结果返回代理
- (void) onResults:(NSArray *) results isLast:(BOOL) isLast{}
//会话结束回调
- (void) onError:(IFlySpeechError*) error{}
//录音音量回调
- (void) onVolumeChanged: (int)volume{}
//录音开始回调
- (void) onBeginOfSpeech{}
//录音结束回调
- (void) onEndOfSpeech{}
//会话取消回调
- (void) onCancel{}