调用流程
Demo工程
强烈建议在使用iOS SDK之前,运行并试用Demo工程相关功能,参考Demo工程的调用和配置的方式。
- 双击使用XCode打开 BDSClientSample/BDSClientSample.xcodeproj
- 在控制台中新建应用,配置应用的BundleId为工程的BundleId,默认为com.baidu.speech.BDSClientSample
- 修改 BDSClientSample/Modules/ASR/ASRViewController.m中的 API_KEY, SECRET_KEY, APP_ID
- 确保网络通畅,运行工程
语音识别与唤醒
添加Framework
Framework | 描述 |
---|---|
libc++.tbd | 提供对C/C++特性支持 |
libz.1.2.5.tbd | 提供gzip支持 |
libsqlite3.0.tbd | 提供对本地数据库的支持 |
AudioToolbox | 提供录音和播放支持 |
AVFoundation | 提供录音和播放支持 |
CFNetwork | 提供对网络访问的支持 |
CoreLocation | 提供对获取设备地理位置的支持,以提高识别准确度 |
CoreTelephony | 提供对移动网络类型判断的支持 |
SystemConfiguration | 提供对网络状态检测的支持 |
GLKit | 内置识别控件所需 |
添加头文件
识别相关
如果只需要使用识别功能,只需要引入如下头文件:
#import "BDSEventManager.h"
#import "BDSASRDefines.h"
#import "BDSASRParameters.h"
唤醒相关
如果需要使用离线唤醒功能,需要引入如下头文件:
#import "BDSWakeupDefines.h"
#import "BDSWakeupParameters.h"
内置识别控件
如果需要使用内置识别控件,需要引入如下头文件:
#import "BDTheme.h"
#import "BDRecognizerViewParamsObject.h"
#import "BDRecognizerViewController.h"
#import "BDRecognizerViewDelegate.h"
添加静态库
SDK提供的是静态库,开发者只需要将库文件拖入工程目录即可。对静态库有以下几点说明:
1. 静态库采用lipo命令将armv7,arm64的静态库合并成的一个通用的库文件,避免开发者在编译不同target时频繁替换的问题;
2. 模拟器版本只支持在线识别,不支持离线识别及唤醒功能;
添加所需资源
提示音文件及识别控件所需主题文件
将开发包中BDSClientResource/ASR/BDSClientResources目录以“create folder references”方式添加到工程的资源Group中,注意使用"create groups"方式添加不能生效。
离线识别及唤醒所需资源文件
将开发包中BDSClientResource/ASR/BDSClientEASRResources目录以"create groups"方式添加到工程目录下即可,资源文件说明如下:
文件名 | 说明 |
---|---|
bds_easr_gramm.dat | 离线识别引擎语法模式所需语法文件,在开放平台编辑自定义语法文件 |
bds_easr_basic_model.dat | 基础资源文件,用于modelVAD、唤醒、离线语音识别语法模式 |
bds_easr_wakeup_words.dat | 唤醒引擎所需唤醒词文件,在开放平台编辑自定义唤醒词 |
bds_easr_mfe_dnn.dat | 基础资源文件,用于DNNMFE、唤醒、离线语音识别语法模式 |
bds_easr_mfe_cmvn.dat | MFE CMVN文件,用于DNNMFE |
bds_easr_dnn_wakeup_model.dat | 用于DNNWakeup的模型文件 |
语音识别
语音识别包含数据上传接口和离在线识别接口,接口概述如下:
1. 创建相关接口对象 (createEventManagerWithName:)
2. 设置代理对象 (setDelegate:)
3. 配置参数 (setParameter:forKey:)
4. 发送预定义指令 (sendCommand:)
5. 参数列表及相关预定义值可参考附录,或相关parameters头文件、defines头文件
- 在线语音识别支持识别任意词,离线语音识别仅支持命令词识别(语法模式)。
- 单次短语音识别最长限制60秒。
在线识别
// 创建语音识别对象
self.asrEventManager = [BDSEventManager createEventManagerWithName:BDS_ASR_NAME];
// 设置语音识别代理
[self.asrEventManager setDelegate:self];
// 参数配置:在线身份验证
[self.asrEventManager setParameter:@[API_KEY, SECRET_KEY] forKey:BDS_ASR_API_SECRET_KEYS];
//设置 APPID
[self.asrEventManager setParameter:APP_ID forKey:BDS_ASR_OFFLINE_APP_CODE];
// 发送指令:启动识别
[self.asrEventManager sendCommand:BDS_ASR_CMD_START];
识别功能代理
@protocol BDSClientASRDelegate<NSObject>
- (void)VoiceRecognitionClientWorkStatus:(int)workStatus obj:(id)aObj;
@end
语音识别状态、录音数据等回调均在此代理中发生,具体事件请参考Demo工程中对不同workStatus的处理流程。
离在线并行识别
// 创建语音识别对象
self.asrEventManager = [BDSEventManager createEventManagerWithName:BDS_ASR_NAME];
// 设置语音识别代理
[self.asrEventManager setDelegate:self];
// 参数配置:在线身份验证
[self.asrEventManager setParameter:@[API_KEY, SECRET_KEY] forKey:BDS_ASR_API_SECRET_KEYS];
//设置 APPID
[self.asrEventManager setParameter:APP_ID forKey:BDS_ASR_OFFLINE_APP_CODE];
// 参数设置:识别策略为离在线并行
[self.asrEventManager setParameter:@(EVR_STRATEGY_BOTH) forKey:BDS_ASR_STRATEGY];
// 参数设置:离线识别引擎类型
[self.asrEventManager setParameter:@(EVR_OFFLINE_ENGINE_GRAMMER) forKey:BDS_ASR_OFFLINE_ENGINE_TYPE];
// 参数配置:命令词引擎语法文件路径。请从控制台的左侧功能栏进入“离线词&语义设置”模块,根据页面上的引导自行定义词条和语法,并生成bsg文件。下载语法文件后,替换BDS_ASR_OFFLINE_ENGINE_GRAMMER_FILE_PATH参数
[self.asrEventManager setParameter:@"命令词引擎语法文件路径" forKey:BDS_ASR_OFFLINE_ENGINE_GRAMMER_FILE_PATH];
// 参数配置:命令词引擎语言模型文件路径
[self.asrEventManager setParameter:@"命令词引擎语言模型文件路径" forKey:BDS_ASR_OFFLINE_ENGINE_DAT_FILE_PATH];
// 发送指令:加载离线引擎
[self.asrEventManager sendCommand:BDS_ASR_CMD_LOAD_ENGINE];
// 发送指令:启动识别
[self.asrEventManager sendCommand:BDS_ASR_CMD_START];
关于离线识别
注意
在线识别效果远优于离线识别,不推荐使用离线识别。
首次使用离线,SDK将会后台下载离线授权文件,成功后,授权文件有效期(三年)内无需联网。有效期即将结束后SDK将自动多次尝试联网更新证书)。
使用离线识别必须正确配置BDS_ASR_OFFLINE_APP_CODE,并设置BDS_ASR_STRATEGY为离线在线并行。
离线识别 可识别自定义语法规则下的词,如“打电话给王五”,“打开微信”等。
请在语音控制台的左侧功能栏中,进入“离线词&语义设置”模块,根据页面上的引导自行定义词条和语法,并生成bsg文件。下载语法文件后,设置BDS_ASR_OFFLINE_ENGINE_GRAMMER_FILE_PATH参数
具体示例如下: