ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] 语法识别是基于语法文件的一种命令词识别技术。在线语法识别基于abnf语法文件;离线语法基于bnf语法文件。语法文件可以参照Demo的工程所示。 ## 在线识别(该服务已下线,新用户无法使用) ### 应用级命令词识别 使用浏览器访问讯飞开放平台(http://www.xfyun.cn)。在打开的页面中,点击“产品服务”、“在线命令词识别” 。如下图所示: ![](https://box.kancloud.cn/dde622810ddbf5e2e35cf31c10d56a48_532x220.png) 在随后打开的页面中,点击“使用服务”,选择应用,点击“确定”,即可打开应用级在线语法文件上传页面,如下图所示。上传所需的语法文件,待页面提示“语法文件已生效”,则应用级在线语法文件启用成功。 ![](https://box.kancloud.cn/a625d533d6b25c100629f38164eebe04_1194x599.png) 使用示例如下所示: ~~~ //获取识别对象单例 _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) onError:(IFlySpeechError*) error{} //录音音量回调 - (void) onVolumeChanged: (int)volume{} //录音开始回调 - (void) onBeginOfSpeech{} //录音结束回调 - (void) onEndOfSpeech{} //会话取消回调 - (void) onCancel{} ~~~ ### 终端级命令词识别 终端级在线命令词识别需要先在终端上构建语法文件,上传语法文件之后获得相应的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) onError:(IFlySpeechError*) error{} //录音音量回调 - (void) onVolumeChanged: (int)volume{} //录音开始回调 - (void) onBeginOfSpeech{} //录音结束回调 - (void) onEndOfSpeech{} //会话取消回调 - (void) onCancel{} ~~~ ## 离线命令词识别 **引擎大小**: | 状态 |大小 | | :---: | :---: | | 编译前静态库 | 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中的aitalkResource中的common.mp3 NSString *aitalkResourcePath = [[NSString alloc] initWithFormat:@"fo|%@/aitalkResource/common.mp3",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{} ~~~