开放能力
开发平台
行业应用
生态合作
开发与教学
资讯 社区 控制台
技术能力
语音技术
图像技术
文字识别
人脸与人体识别
视频技术
AR与VR
自然语言处理
知识图谱
数据智能
场景方案
部署方案
行业应用
智能教育
智能医疗
智能零售
智能工业
企业服务
智能政务
智能农业
信息服务
智能园区
智能硬件
语音技术

    调用流程

    Demo工程

    强烈建议在使用iOS SDK之前,运行并试用Demo工程相关功能,参考Demo工程的调用和配置的方式。

    1. 双击使用XCode打开 BDSClientSample/BDSClientSample.xcodeproj
    2. 在控制台中新建应用,配置应用的BundleId为工程的BundleId,默认为com.baidu.speech.BDSClientSample
    3. 修改 BDSClientSample/Modules/ASR/ASRViewController.m中的 API_KEY, SECRET_KEY, APP_ID
    4. 确保网络通畅,运行工程

    语音识别与唤醒

    添加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头文件
    1. 在线语音识别支持识别任意词,离线语音识别仅支持命令词识别(语法模式)。
    2. 单次短语音识别最长限制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参数

    具体示例如下:

    NSString* gramm_filepath = [[NSBundle mainBundle] pathForResource:@"bds_easr_gramm" ofType:@"dat"];;
    NSString* lm_filepath = [[NSBundle mainBundle] pathForResource:@"bds_easr_basic_model" ofType:@"dat"];;
    NSString* wakeup_words_filepath = [[NSBundle mainBundle] pathForResource:@"bds_easr_wakeup_words" ofType:@"dat"];;
    [self.asrEventManager setDelegate:self];
    [self.asrEventManager setParameter:APP_ID forKey:BDS_ASR_OFFLINE_APP_CODE];
    [self.asrEventManager setParameter:lm_filepath forKey:BDS_ASR_OFFLINE_ENGINE_DAT_FILE_PATH];
    // 请在 (官网)[http://speech.baidu.com/asr] 参考模板定义语法,下载语法文件后,替换BDS_ASR_OFFLINE_ENGINE_GRAMMER_FILE_PATH参数
    [self.asrEventManager setParameter:gramm_filepath forKey:BDS_ASR_OFFLINE_ENGINE_GRAMMER_FILE_PATH];
    [self.asrEventManager setParameter:wakeup_words_filepath forKey:BDS_ASR_OFFLINE_ENGINE_WAKEUP_WORDS_FILE_PATH];

    长语音识别

    长语音识别对语音时长无限制,其本质是在本地进行VAD之后,由服务端逐句识别。

    [self.asrEventManager setParameter:@(NO) forKey:BDS_ASR_NEED_CACHE_AUDIO];
    [self.asrEventManager setParameter:@"" forKey:BDS_ASR_OFFLINE_ENGINE_TRIGGERED_WAKEUP_WORD];
    [self.asrEventManager setParameter:@(YES) forKey:BDS_ASR_ENABLE_LONG_SPEECH];
    // 长语音请务必开启本地VAD
    [self.asrEventManager setParameter:@(YES) forKey:BDS_ASR_ENABLE_LOCAL_VAD];
    1. 使用长语音必须开启本地VAD: BDS_ASR_ENABLE_LOCAL_VAD
    2. 使用长语音必须关闭提示音(Known issue)

    VAD

    端点检测,即自动检测音频输入的起始点和结束点。SDK默认开启VAD,检测到静音后自动停止识别。 如果需要自行控制识别结束需关闭VAD,请同时关闭服务端VAD与端上VAD:

    // 关闭服务端VAD
    [self.asrEventManager setParameter:@(NO) forKey:BDS_ASR_ENABLE_EARLY_RETURN];
    // 关闭本地VAD
    [self.asrEventManager setParameter:@(NO) forKey:BDS_ASR_ENABLE_LOCAL_VAD];

    目前SDK支持两种本地端点检测方式。说明如下:

    识别策略 说明
    ModelVAD 检测更加精准,抗噪能力强,响应速度较慢
    DNNMFE 提供基础检测功能,性能高,响应速度快

    使用ModelVAD、DNN需通过参数配置开启该功能,并配置相应资源文件(基础资源文件)

    ModelVAD

    //获取VAD模型的路径
    NSString *modelVAD_filepath = [[NSBundle mainBundle] pathForResource:@"bds_easr_basic_model" ofType:@"dat"];
    //设置modelVAD的文件路径
    [self.asrEventManager setParameter:modelVAD_filepath forKey:BDS_ASR_MODEL_VAD_DAT_FILE];
    //设置ModelVAD可用
    [self.asrEventManager setParameter:@(YES) forKey:BDS_ASR_ENABLE_MODEL_VAD];

    DNNMFE

    NSString *mfe_dnn_filepath = [[NSBundle mainBundle] pathForResource:@"bds_easr_mfe_dnn" ofType:@"dat"];
    //设置MFE模型文件
    [self.asrEventManager setParameter:mfe_dnn_filepath forKey:BDS_ASR_MFE_DNN_DAT_FILE];
    NSString *cmvn_dnn_filepath = [[NSBundle mainBundle] pathForResource:@"bds_easr_mfe_cmvn" ofType:@"dat"];
    //设置MFE CMVN文件路径
    [self.asrEventManager setParameter:cmvn_dnn_filepath forKey:BDS_ASR_MFE_CMVN_DAT_FILE];

    DNNMFE 支持设置静音时长(需要同时关闭服务端VAD与端上VAD)。设置以下两个参数,单位为帧数,每帧10ms。如需设置为 5s:

    [self.asrEventManager setParameter:@(501.f) forKey:BDS_ASR_MFE_MAX_SPEECH_PAUSE];
    [self.asrEventManager setParameter:@(500.f) forKey:BDS_ASR_MFE_MAX_WAIT_DURATION];

    必须为浮点类型。

    语义理解

    语义解析可以识别用户的意图并提取用户表述中的关键内容,从而帮助开发者理解用户需求。如“北京天气”,“打电话给张三”等。语义理解包括本地语义和在线语义。

    目前仅中文普通话支持语义理解。

    使用在线语义,必须设置BDS_ASR_PRODUCT_ID为15373,完整的PRODUCT_ID列表请参考章节PRODUCT_ID

    为基础模型的product_id即可。

    // 开启离线语义(本地语义)
    [self.asrEventManager setParameter:@(YES) forKey:BDS_ASR_ENABLE_NLU]; 
    // 开启在线语义
    [self.asrEventManager setParameter:@"15373" forKey:BDS_ASR_PRODUCT_ID];

    注意:BDS_ASR_PRODUCT_ID参数会覆盖识别语言的设置 如果默认的语义无法满足要求,建议开发者使用UNIT 2.0,拥有完备的语义理解和交互功能。

    语音唤醒

    语音唤醒,需要配置所需语言模型文件(基础资源文件)及官网导出的自定义唤醒词文件,配置后加载引擎,即可进行开始唤醒。需要注意的是,唤醒引擎开启后会保持录音机为启动状态,用户说出正确的唤醒词后会触发唤醒,通过相关回调反馈给应用程序。

    语音唤醒为离线功能,需配置离线授权信息(APP_ID),加载唤醒所需语言模型文件,接口与语音识别接口相同。

    基于多种因素考虑,在App进入后台后,唤醒将会被打断。

    代码示例

    // 创建语音识别对象
    self.wakeupEventManager = [BDSEventManager createEventManagerWithName:BDS_WAKEUP_NAME];
    // 设置语音唤醒代理
    [self.wakeupEventManager setDelegate:self];
    // 参数配置:离线授权APPID
    [self.wakeupEventManager setParameter:APP_ID forKey:BDS_WAKEUP_APP_CODE];
    // 参数配置:唤醒语言模型文件路径, 默认文件名为 bds_easr_basic_model.dat
    [self.wakeupEventManager setParameter:@"唤醒语言模型文件路径" forKey:BDS_WAKEUP_DAT_FILE_PATH];
    // 发送指令:加载语音唤醒引擎
    [self.wakeupEventManager sendCommand:BDS_WP_CMD_LOAD_ENGINE];
    //设置唤醒词文件路径
    // 默认的唤醒词文件为"bds_easr_wakeup_words.dat",包含的唤醒词为"百度一下"
    // 如需自定义唤醒词,请在 http://ai.baidu.com/tech/speech/wake 中评估并下载唤醒词文件,替换此参数
     [self.wakeupEventManager setParameter:@"唤醒词文件路径”forKey:BDS_WAKEUP_WORDS_FILE_PATH]
    // 发送指令:启动唤醒
    [self.wakeupEventManager sendCommand:BDS_WP_CMD_START];

    唤醒功能回调接口

    @protocol BDSClientWakeupDelegate<NSObject>
    - (void)WakeupClientWorkStatus:(int)workStatus obj:(id)aObj;
    @end

    唤醒辅助识别

    使用唤醒的一种需求场景是唤醒后立刻识别,以唤醒词为百度一下举例,用户可能的输入为百度一下,北京天气怎么样?如果开发者需要对该种场景进行支持,请按如下操作:

    1. 正确配置唤醒引擎,语言模型文件及唤醒词文件,并加载引擎;
    2. 开启唤醒,接收用户语音输入;
    3. 在唤醒的唤醒词触发回调中,配置BDS_ASR_NEED_CACHE_AUDIO为YES到识别引擎,正常识别请将该值设为NO;
    4. 调用识别引擎开启识别过程;
    // 如需要唤醒后立刻进行识别,为保证不丢音,启动语音识别前请添加如下配置,获取录音缓存:
    [self.asrEventManager setParameter:@(YES) forKey:BDS_ASR_NEED_CACHE_AUDIO];




    上一篇
    简介
    下一篇
    输入参数