语法识别是基于语法文件的一种命令词识别技术。在线语法识别基于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.jetNSString *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{}
