离线命令词识别 iOS SDK 文档

语音识别

语法识别是基于语法文件的一种命令词识别技术。离线语法基于bnf语法文件。语法文件可以参照Demo的工程所示。 注:语法识别仅提供离线版本。

使用示例如下所示:

离线命令词识别

引擎大小

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

资源大小: 5.0MB

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

//设置本地识别参数,其他参数与在线方式一致
//设置引擎类型
[_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{}

[TOC]

第一步:获取appid

appid是第三方应用集成讯飞开放平台SDK的身份标识,SDK静态库和appid是绑定的,每款应用必须保持唯一,否则会出现10407错误码。appid在开放平台申请应用时可以获得,下载SDK后可从SDK中sample文件夹的Demo工程里找到(例如: /sample/MSCDemo/MSCDemo/Definition.h 的APPID_VALUE)

第二步:工程配置

添加库

将开发工具包中lib目录下的iflyMSC.framework添加到工程中。同时请将Demo中依赖的其他库也添加到工程中。 按下图示例添加 SDK 所需要的 iOS系统库:

库名称 添加范围 功能
iflyMSC.framework 必要 讯飞开放平台静态库。
libz.tbd 必要 用于压缩、加密算法。
AVFoundation.framework 必要 用于系统录音和播放 。
SystemConfiguration.framework 系统库 用于系统设置。
Foundation.framework 必要 基本库。
CoreTelephony.framework 必要 用于电话相关操作。
AudioToolbox.framework 必要 用于系统录音和播放。
UIKit.framework 必要 用于界面显示。
CoreLocation.framework 必要 用于定位。
Contacts.framework 必要 用于联系人。
AddressBook.framework 必要 用于联系人。
QuartzCore.framework 必要 用于界面显示。
CoreGraphics.framework 必要 用于界面显示。
libc++.tbd 必要 用于支持C++。

注意

  1. 添加iflyMSC.framework时,请检查工程BuildSetting中的framwork path的设置,如果出现找不到framework的情况,可以将path清空,在Xcode中删除framework,然后重新添加。
  2. iflyMSC.framework最低支持iOS 8.0。

设置Bitcode

在Xcode 7,8默认开启了Bitcode,而Bitcode 需要工程依赖的所有类库同时支持。MSC SDK暂时还不支持Bitcode,可以先临时关闭。后续MSC SDK支持Bitcode时,会在讯飞开放平台上进行SDK版本更新,请关注。关闭此设置,只需在Targets - Build Settings 中搜索Bitcode 即可,找到相应选项,设置为NO。

用户隐私权限配置

iOS 10发布以来,苹果为了用户信息安全,加入隐私权限设置机制,让用户来选择是否允许。 隐私权限配置可在info.plist 新增相关privacy字段,MSC SDK中需要用到的权限主要包括麦克风权限、联系人权限和地理位置权限:

<key>NSMicrophoneUsageDescription</key>
<string></string>
<key>NSLocationUsageDescription</key>
<string></string>
<key>NSLocationAlwaysUsageDescription</key>
<string></string>
<key>NSContactsUsageDescription</key>
<string></string>

即在Info.plist 中增加下图设置:

第三步:初始化

初始化示例:

//Appid是应用的身份信息,具有唯一性,初始化时必须要传入Appid。
NSString *initString = [[NSString alloc] initWithFormat:@"appid=%@", @"YourAppid"];
[IFlySpeechUtility createUtility:initString];
参数 说明 必填
appid 8位16进制数字字符串,应用的唯一标识,与下载的SDK一一对应。
usr 保留字段,无需关注。
pwd 保留字段,无需关注。

注意: 初始化是一个异步过程,可放在App启动时执行初始化,具体代码可以参照Demo的MSCAppDelegate.m。

第四步:启动服务

所有的服务皆遵循如下的流程,如下图:

所有服务的API详细说明可参见:https://www.xfyun.cn/doc/mscapi/iOS/iosrecognizer.html

语法识别结果示例:

{
  "sn": 1,
  "ls": true,
  "bg": 0,
  "ed": 0,
  "ws": [
    {
      "bg": 0,
      "cw": [
        {
          "sc": "70",
          "gm": "0",
          "w": "北京到上海"
        },
        {
          "sc": "69",
          "gm": "0",
          "w": "天京到上海"
        },
        {
          "sc": "58",
          "gm": "0",
          "w": "东京到上海"
        }
      ]
    }
  ]
}

视频教程

视频教程

视频教程,快速入门。

常见问题

错误码及相应解决方案查询网址

答:错误码及相应解决方案查询

离线命令词sdk如何下载试用?

答:文档中心---快速指引有介绍步骤---根据步骤下载相应平台的离线命令词sdk,离线命令词SDK包有10个装机量,试用期为90天。

离线命令词识别支持多少命令词?

答:离线识别的命令词是开发者自己定义,命令词最大长度为16个汉字,需要先构建语法,然后指定使用的语法。
语法文件开发文档请参考识别语法分享--在线语法和离线语法编写指南(http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=7595)

是否可以连续识别?

答:离线命令词适用于说出指令执行动作的场景,不支持连续识别。