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

11. //启动识别
12. [_iFlySpeechRecognizer startListening];

14. //识别IFlySpeechRecognizerDelegate协议
15. //本地和在线的识别返回代理是一致
16. //在切换在线和离线服务时还需要注意参数的重置,具体可以参照demo所示
17. //结果返回代理
18. - (void) onResults:(NSArray *) results isLast:(BOOL) isLast{}
19. //会话结束回调
20. - (void) onCompleted:(IFlySpeechError*) error{}
21. //录音音量回调
22. - (void) onVolumeChanged: (int)volume{}
23. //录音开始回调
24. - (void) onBeginOfSpeech{}
25. //录音结束回调
26. - (void) onEndOfSpeech{}
27. //会话取消回调
28. - (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]];

17. //编译语法文件,注意grammerType参数的区别
18. //读取本地abnf语法文件内容
19. NSString* grammerContent = [self readFile:_abnfFilePath];
20. //调用构建语法接口
21. [_iflySpeechRecognizer buildGrammarCompletionHandler:^(NSString * grammerID, IFlySpeechError *error){
22. //设置grammerID
23. [_iFlySpeechRecognizer setParameter:grammerID  forKey:[IFlySpeechConstant CLOUD_GRAMMAR]];
24. }grammarType:@”abnf” grammarContent:grammarContent];

26. //启动识别
27. [_iFlySpeechRecognizer startListening];

29. //识别IFlySpeechRecognizerDelegate协议
30. //本地和在线的识别返回代理是一致
31. //在切换在线和离线服务时还需要注意参数的重置,具体可以参照demo所示
32. //结果返回代理
33. - (void) onResults:(NSArray *) results isLast:(BOOL) isLast{}
34. //会话结束回调
35. - (void) onCompleted:(IFlySpeechError*) error{}
36. //录音音量回调
37. - (void) onVolumeChanged: (int)volume{}
38. //录音开始回调
39. - (void) onBeginOfSpeech{}
40. //录音结束回调
41. - (void) onEndOfSpeech{}
42. //会话取消回调
43. - (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]];

10. //启动asr识别引擎
11. [[IFlySpeechUtility getUtility] setParameter:@"asr" forKey:[IFlyResourceUtil ENGINE_START]];

13. //编译语法文件(注意grammarType参数的区别)
14. //读取本地bnf语法文件内容
15. NSString* grammarContent = [self readFile:_bnfFilePath];
16. //调用语法编译接口
17. [_iflySpeechRecognizer buildGrammarCompletionHandler:^(NSString *
18. grammerID, IFlySpeechError *error){
19. //设置grammerID
20. [_iFlySpeechRecognizer setParameter:grammerID  forKey:[IFlySpeechConstant LOCAL_GRAMMAR]];
21. }grammarType:@”bnf” grammarContent:grammarContent];
22. //启动识别
23. [_iFlySpeechRecognizer startListening];

25. //识别IFlySpeechRecognizerDelegate协议
26. //本地和在线的识别返回代理是一致
27. //在切换在线和离线服务时还需要注意参数的重置,具体可以参照demo所示
28. //结果返回代理
29. - (void) onResults:(NSArray *) results isLast:(BOOL) isLast{}
30. //会话结束回调
31. - (void) onError:(IFlySpeechError*) error{}
32. //录音音量回调
33. - (void) onVolumeChanged: (int)volume{}
34. //录音开始回调
35. - (void) onBeginOfSpeech{}
36. //录音结束回调
37. - (void) onEndOfSpeech{}
38. //会话取消回调
39. - (void) onCancel{}