[TOC]

语法识别是基于语法文件的一种命令词识别技术。在线语法识别基于abnf语法文件;离线语法基于bnf语法文件。语法文件可以参照Demo的工程所示。

1.1. 在线识别(该服务已下线,新用户无法使用)

1.1.1. 应用级命令词识别

使用浏览器访问讯飞开放平台。在打开的页面中,点击“产品服务”、“在线命令词识别” 。如下图所示:语法识别  - 图1

在随后打开的页面中,点击“使用服务”,选择应用,点击“确定”,即可打开应用级在线语法文件上传页面,如下图所示。上传所需的语法文件,待页面提示“语法文件已生效”,则应用级在线语法文件启用成功。语法识别  - 图2

使用示例如下所示:

  1. //获取识别对象单例
  2. _iFlySpeechRecognizer = [IFlySpeechRecognizer sharedInstance];
  3. //设置协议委托对象
  4. _iFlySpeechRecognizer.delegate = self;
  5. //设置在线识别参数
  6. //设置引擎类型,cloud或者local
  7. [_iflySpeechRecognizer setParameter:@"cloud" forKey:[IFlySpeechConstant ENGINE_TYPE]];
  8. //设置服务类型为asr识别
  9. [_iflySpeechRecognizer setParameter:@"asr" forKey:[IFlySpeechConstant IFLY_DOMAIN]];
  10. //启动识别
  11. [_iFlySpeechRecognizer startListening];
  12. //识别IFlySpeechRecognizerDelegate协议
  13. //本地和在线的识别返回代理是一致
  14. //在切换在线和离线服务时还需要注意参数的重置,具体可以参照demo所示
  15. //结果返回代理
  16. - (void) onResults:(NSArray *) results isLast:(BOOL) isLast{}
  17. //会话结束回调
  18. - (void) onCompleted:(IFlySpeechError*) error{}
  19. //录音音量回调
  20. - (void) onVolumeChanged: (int)volume{}
  21. //录音开始回调
  22. - (void) onBeginOfSpeech{}
  23. //录音结束回调
  24. - (void) onEndOfSpeech{}
  25. //会话取消回调
  26. - (void) onCancel{}

1.1.2. 终端级命令词识别

终端级在线命令词识别需要先在终端上构建语法文件,上传语法文件之后获得相应的Grammer ID,以后每次使用识别功能前,设置该Grammar ID参数即可。其示例代码如下:

  1. //获取识别对象单例
  2. _iFlySpeechRecognizer = [IFlySpeechRecognizer sharedInstance];
  3. //设置协议委托对象
  4. _iFlySpeechRecognizer.delegate = self;
  5. //设置在线识别参数
  6. //开启候选结果
  7. [_iflySpeechRecognizer setParameter:@"1" forKey:@"asr_wbest"];
  8. //设置引擎类型,cloud或者local
  9. [_iflySpeechRecognizer setParameter:@"cloud" forKey:[IFlySpeechConstant ENGINE_TYPE]];
  10. //设置字符编码为utf-8
  11. [_iflySpeechRecognizer setParameter:@"utf-8" forKey:[IFlySpeechConstant TEXT_ENCODING]];
  12. //语法类型,本地是bnf,在线识别是abnf
  13. [_iflySpeechRecognizer setParameter:@"abnf" forKey:[IFlyResourceUtil GRAMMARTYPE]];
  14. //设置服务类型为asr识别
  15. [_iflySpeechRecognizer setParameter:@"asr" forKey:[IFlySpeechConstant IFLY_DOMAIN]];
  16. //编译语法文件,注意grammerType参数的区别
  17. //读取本地abnf语法文件内容
  18. NSString* grammerContent = [self readFile:_abnfFilePath];
  19. //调用构建语法接口
  20. [_iflySpeechRecognizer buildGrammarCompletionHandler:^(NSString * grammerID, IFlySpeechError *error){
  21. //设置grammerID
  22. [_iFlySpeechRecognizer setParameter:grammerID forKey:[IFlySpeechConstant CLOUD_GRAMMAR]];
  23. }grammarType:@”abnf grammarContent:grammarContent];
  24. //启动识别
  25. [_iFlySpeechRecognizer startListening];
  26. //识别IFlySpeechRecognizerDelegate协议
  27. //本地和在线的识别返回代理是一致
  28. //在切换在线和离线服务时还需要注意参数的重置,具体可以参照demo所示
  29. //结果返回代理
  30. - (void) onResults:(NSArray *) results isLast:(BOOL) isLast{}
  31. //会话结束回调
  32. - (void) onCompleted:(IFlySpeechError*) error{}
  33. //录音音量回调
  34. - (void) onVolumeChanged: (int)volume{}
  35. //录音开始回调
  36. - (void) onBeginOfSpeech{}
  37. //录音结束回调
  38. - (void) onEndOfSpeech{}
  39. //会话取消回调
  40. - (void) onCancel{}

1.2. 离线命令词识别

引擎大小

状态大小
编译前静态库24.5 MB
编译后(ipa)8 MB

资源大小: 5.0MB

空间大小:(不同的编译器编译后大小会有不同,请以实际为准)ipa文件大小 = 引擎编译后(8MB) +资源(5MB)= 13MB。

  1. //设置本地识别参数,其他参数与在线方式一致
  2. //设置引擎类型,cloud或者local
  3. [_iflySpeechRecognizer setParameter:@ "local" forKey:[IFlySpeechConstant ENGINE_TYPE]];
  4. //语法类型,本地是bnf,在线识别是abnf
  5. [_iflySpeechRecognizer setParameter:@ "bnf" forKey:[IFlyResourceUtil GRAMMARTYPE]];
  6. //设置引擎资源文件路径,如demo中的resource/aitalk中的common.jet
  7. NSString *aitalkResourcePath = [[NSString alloc] initWithFormat:@"fo|%@/common.jet",appPath];
  8. [_iflySpeechRecognizer setParameter:aitalkResourcePath forKey:[IFlyResourceUtil ASR_RES_PATH]];
  9. //启动asr识别引擎
  10. [[IFlySpeechUtility getUtility] setParameter:@"asr" forKey:[IFlyResourceUtil ENGINE_START]];
  11. //编译语法文件(注意grammarType参数的区别)
  12. //读取本地bnf语法文件内容
  13. NSString* grammarContent = [self readFile:_bnfFilePath];
  14. //调用语法编译接口
  15. [_iflySpeechRecognizer buildGrammarCompletionHandler:^(NSString *
  16. grammerID, IFlySpeechError *error){
  17. //设置grammerID
  18. [_iFlySpeechRecognizer setParameter:grammerID forKey:[IFlySpeechConstant LOCAL_GRAMMAR]];
  19. }grammarType:@”bnf grammarContent:grammarContent];
  20. //启动识别
  21. [_iFlySpeechRecognizer startListening];
  22. //识别IFlySpeechRecognizerDelegate协议
  23. //本地和在线的识别返回代理是一致
  24. //在切换在线和离线服务时还需要注意参数的重置,具体可以参照demo所示
  25. //结果返回代理
  26. - (void) onResults:(NSArray *) results isLast:(BOOL) isLast{}
  27. //会话结束回调
  28. - (void) onError:(IFlySpeechError*) error{}
  29. //录音音量回调
  30. - (void) onVolumeChanged: (int)volume{}
  31. //录音开始回调
  32. - (void) onBeginOfSpeech{}
  33. //录音结束回调
  34. - (void) onEndOfSpeech{}
  35. //会话取消回调
  36. - (void) onCancel{}