资讯 社区 文档 控制台
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术
AR与VR
数据智能
场景方案
部署方案
行业应用
智能教育
智能医疗
智能零售
智能工业
企业服务
智能政务
信息服务
智能园区

SDK-功能简介及参数设置

语音识别Android SDK 功能 主要分为语音识别 及 语义理解与对话管理

  1. 语音识别: 将录音转为文字。目前在线识别支持普通话、英文、粤语和四川话。
  2. 语义理解与对话管理: 提取语音识别出的文字的意图与关键信息,并做出回应。

如果需要了解更多详细参数及其功能,请参见本文后段。

音频格式要求:

默认为麦克风输入,可以设置参数为pcm格式16k采样率,16bit,小端序,单声道的音频流输入。

语音识别

语音识别,可以分为在线识别,离线命令词,及唤醒词

  1. 在线识别: 即联网使用的识别功能。支持自定义词库及自训练平台
  2. 离线命令词: 断网时激活,只能识别预定义的短语。联网时,强制使用在线识别。固定短语的语法需要从控制台“离线词&本地语义”模块预定义并下载为baidu_speech_grammar.bsg文件
  3. 唤醒词: 本地功能,不需要网络。唤醒词即识别“关键词”,当SDK的识别引擎“听到”录音中的关键词后,立即告知用户。与android系统的锁屏唤醒完全无关。关键词和离线命令词一样,需要预定义并下载为WakeUp.bin文件

##没有离线任意语句识别及声纹识别功能 目前没有公开版本的离线任意语句识别及声纹识别

在线识别

在线是指手机联网时(2G 3G 4G wifi),

在线识别,可以分为:

  1. 在线普通识别: 流式识别出识别用户输入的录音音频流,支持普通话、英文、粤语和四川话。限制60s时长。
  2. 在线长语音识别: 在线普通识别的基础上,没有60s时长的限制。 在线识别可以测试DEMO中的第一个按钮“在线识别”。

在线识别的三种模型:

  1. 输入法模型(推荐):适合长句输入,模型及识别效果类似百度输入法。
  2. 远场模型:针对离麦克风较远的音频输入。

自定义词库

设置方法:

登录百度云-管理中心“管理应用”“选择应用”“语音识别词库设置”右侧“进行设置”;

设置效果:

  1. 可以自定义识别词,提升准确率。
  2. 仅在普通话输入法模型下生效。
  3. 自定义词库适合短句,保证词库中一模一样的短句可以被识别出。
  4. 词库中的分词优先级较高。

举例 词库定义了1个短句 :1 .“摆渡船来了”百度内部处理的可能的分词结果:摆渡船来 了。

以下录音的结果

  1. 原始音频:摆渡船来了 =》识别结果: 摆渡船来了 【保证结果】
  2. 原始音频:摆渡船来了么 =》识别结果: 百度传来了么 【可能结果,不保证】
  3. 原始音频:摆渡船来 =》 识别结果: 百度传来 【可能结果,不保证】
  4. 原始音频:百度传来了喜讯 =》 识别结果: 摆渡船来了喜讯 【不保证,词库内的分词优先级高】

最好在1万行以内。

副作用:如果用户的测试集中包含大量非自定义词表的query,整体上准确率下降。

语音自训练平台模型训练

自训练平台可以认为是自定义词库的升级版本,可以更加直观地查看训练效果。同样使用您自定义的文本进行结果优化。

具体功能及使用说明请参考文档 “自训练平台手册

如您需要在Android SDK上添加模型训练的功能,可以在语音自训练平台上训练实时语音识别-中文普通话模型 image.png

训练后的模型注意必须填写上线模型的模型参数,可在自训练平台的模型调用模块进行查看。

示例 获取专属模型参数pid:1537或15372 modelid:1235, 则调用websocket API时必须填写参数 dev_pid=1537或15372(PID功能见下表);同时lm_id 设置为1235。

PID 模型 是否有标点 备注
1537 中文普通话 无标点
15372 中文普通话 加强标点(逗号、句号、问号、感叹号)

在线识别具体功能参数

鉴权信息

描述:APP_ID, APP_SN, 2个鉴权信息决定是否拥有识别、唤醒、离线命令词等权限

请求示例:设置APP_ID, APP_SN

{"appid":155905xx,"appsn":"7ea7hAI894BB3LF1yHYmvQEusxxxxxx ","accept-audio-volume":false}

设置语言、模型、自定义词库、语义

描述:PID参数决定调用哪个识别模型,即决定了语言,模型,及是否支持自定义词库和在线语义解析。

  1. 语言共有4种:中文普通话、英语、粤语及四川话。
  2. 输入法模型/远场模型:分别适用于长句输入/短句输入/离麦克风较远的音频输入。
  3. 在输入法模型下自定义词库生效。
  4. 只有输入法或者远场模型,才可以开启在线语义解析。(下节描述)
  5. 自训练平台 及 百度UNIT 需要使用特定的pid

DEMO中测试方法:(具体可参见识别安卓SDK测试文档)

demo测试:点击 在线识别=>设置=>PID,语种

请求示例: 英语 输入法模型

{"pid":1737,"accept-audio-volume":false}

长语音

描述:开启长语音识别功能,此时VAD参数不能设为touch;长语音可以识别数小时的音频。注意选输入法模型。

VAD_ENDPOINT_TIMEOUT = 0开启长语音

DEMO中测试方法:(具体可参见识别安卓SDK测试文档)

demo测试:点击 在线识别=>设置=>长语音及VAD时长设置

请求参数示例: 开启长语音,不能与VAD=touch联用

{"accept-audio-volume":false,"vad.endpoint-timeout":0}

设置静音时长进行断句

描述:普通识别的录音限制60s。连续xxxms静音后,SDK认为一句话结束。VAD_ENDPOINT_TIMEOUT> 0,作用是静音断句的时长设置,值建议800ms-3000ms可以调节此参数。使用长语音功能时不能使用这个参数。

VAD_ENDPOINT_TIMEOUT > 0设置静音时长

DEMO中测试方法:(具体可参见识别安卓SDK测试文档)

demo测试:点击 在线识别=>设置=>长语音及VAD时长设置

请求示例: 连续800ms静音,表示一句话结束

{"accept-audio-volume":false,"vad.endpoint-timeout":800}

开启/关闭根据静音时长切分句子

描述:默认开启根据静音时长切分句子。通过设置VAD参数的值,当设置VAD=dnn时,表示开启VAD,此时通过设置的静音时长进行断句;开启长语音功能时,VAD必然是开启的状态;当设置VAD=touch时,表示关闭VAD,不能使用长语音功能,限制录音时长60s,在60s内的只能点击停止按钮通过发送停止事件才能停止识别。

DEMO中测试方法:(具体可参见识别安卓SDK测试文档)

demo测试:点击 在线识别=>设置=>VAD是否开启dnn或touch

请求示例: 开启VAD,根据静音时长切分句子

{"accept-audio-volume":false,"vad":"dnn"}

请求示例: 关闭VAD,60s内音频,SDK等待调用stop事件结束录音

{"accept-audio-volume":false,"vad":"touch"}

离线命令词

离线命令词,联网时,强制使用在线识别,在断网时或在线请求超时时,使用离线命令词功能。离线命令词功能不支持任意语句的识别,只能识别预定义的固定短语。

离线命令词的bsg文件设置:

在语音控制台的左侧功能栏中,进入“离线词&语义设置”模块,根据页面上的引导自行定义词条和语法,并生成bsg文件。其中右侧“说法”部分,为固定语法,下载后不可更改。左侧“词条”部分,代码中可以动态定义覆盖。 image.png

离线命令词功能可以测试DEMO中的第二个按钮“离线命令词识别”

离线命令词常用功能参数设置

设置纯在线或离在线融合模式

描述:设置纯在线功能和离在线融合识别

DECODER 参数

  • DECODER = 0 ,表示禁用离线功能,只使用在线功能;
  • DECODER = 2 ,表示启用离线功能,但是SDK强制在线优先。

DEMO中测试方法:(具体可参见识别安卓SDK测试文档)

demo测试:点击 离线命令词功能=>开始

请求示例:DECODET=2,表示断网时,使用离线识别固定短语;

{"accept-audio-volume":false,”decoder”:2}

设定离线命令词文件路径

描述:离线命令词只能识别bsg文件中预定义的固定短语,其中bsg文件必须在项目中设定路径,参数ASR_OFFLINE_ENGINE_GRAMMER_FILE_PATH作用就是定义离线命令词识别的bsg文件路径;该参数需要在ASR_KWS_LOAD_ENGINE加载离线资源输入事件中初始化;

ASR_OFFLINE_ENGINE_GRAMMER_FILE_PATH设置bsg文件路径

DEMO中测试方法:(具体可参见识别安卓SDK测试文档)

demo测试:点击 离线命令词功能

请求示例:定义assets目录下的离线命令词文件

{"accept-audio-data":false,"grammar":"assets:\/\/\/baidu_speech_grammar.bsg","decoder":2}

扩展离线命令词的词条部分

描述:离线命令词bsg文件的左侧词条部分内容可通过SLOT_DATA参数进行动态覆盖,覆盖后原先的bsg文件中的左侧词条部分失效。和ASR_OFFLINE_ENGINE_GRAMMER_FILE_PATH一起使用。

SLOT_DATA扩展词条

DEMO中测试方法:(具体可参见识别安卓SDK测试文档)

demo测试:点击全部识别=>设置=>纯在线或在线+离线命令词=>离线命令词及在线识别混合                                                       =>离线命令词及本地语义                                                       =>扩展词条

请求示例:动态修改离线命令词的词条部分

{"accept-audio-data":false,"grammar":"asset:\/\/\/baidu_speech_grammar.bsg","decoder":2, "slot-data":{"name":\["妈妈","老伍"\],"appname":\["手百","度秘”"\]}}

语义

语义包括理解与对话管理,可用于提取语音识别出的文字的意图与关键信息,并做出回应。目前,百度语音识别技术已和百度NLP实现了流程打通。NLP部分由百度语义理解与对话管理平台UNIT提供。语音识别Android SDK提供了3种对接语义的方式:

在线语义

  • 百度UNIT: 对话理解与交互技术平台,开发者可根据业务需要定制对话系统,也可以直接使用UNIT预置的对话能力。
  • 通用场景语义解析: 基于百度UNIT搭建的常见场景的语义理解(不含对话管理能力)。

本地语义

  • 在任意网络下都可使用,android sdk内部根据设置的bsg文件的定义进行离线命令词语义解析。

语义参数设置

在线语义 百度UNIT

UNIT是百度最专业的语义理解和对话管理平台,为开发者预置可一键式接入的语义理解和对话管理服务,方便快捷的满足语义理解和对话管理需求。 如果需要更多的定制语义服务,可先在UNIT上进行语义解析的配置,配置说明点击这里(http://ai.baidu.com/docs#/UNIT-v2-guide/top)。

使用流程如下:1.登录UNIT;2.训练一个技能;3.拿到技能"bot_id":"xx";4.通过语音SDK配置对应PID(15374,19364)及参数进行调用。

UNIT支持单bot和多bot的接入,接入参数如下:

  • 单bot接入就是发送一个bot_id,示例:
{"bot_session_list":"[{\"bot_id\":\"5\",\"bot_session_id\":\"\"}]}"
  • 多bot接入就是发送多个bot_id,示例:
{"bot_session_list":"[{\"bot_id\":\"5\",\"bot_session_id\":\"\"},{\"bot_id\":\"6\",\"bot_session_id\":\"\"},\"bot_id\":\"1006\",\"bot_session_id\":\"\"}]}"
  • 返回结果:
{
    "errno":"0",
    "error_msg":"ok",
    "bot_session_list":"[{\"bot_id\":\"xx\",\"bot_session_id\":\"xxx\"},{\"bot_id\":\"xx\",\"bot_session_id\":\"xxx\"}"}]",
    "unit_response":[
        ...
    ],
}
  • 请求参数说明
字段 是否必选 类型 备注
bot_session_list string(json) 至少有1个元素
bot_session_list[].bot_id string 当前账号在UNIT平台的创建的技能的ID
bot_session_list[].bot_session_id string 技能的session信息,由系统自动生成,client从上轮resonpse中取出并直接传递。如果为空,则表示清空session(开发者判断用户意图已经切换且下一轮会话不需要继承上一轮会话中的词槽信息时可以把bot_session_id置空,从而进行新一轮的会话)
  • 响应参数说明
字段 是否必选 类型 备注
errno int 0 是正常,非0为异常
error_msg string 错误信息,errno!=0时存在,具体错误码参考本文档UNIT错误码
bot_session_list string(json)
bot_session_list[].bot_id string bot_id
bot_session_list[].bot_session_id string
unit_response List<Object>
unit_response[i] Object 格式参考UNIT响应参数里的response字段
  • 更多UNIT问题可通过QQ群:805312106咨询沟通。

在线语义 通用场景语义解析

描述: PID仅普通话并且选远场模型才可以开启在线语义;在线条件下,会将识别的文本进行解析,找出文本的意图

DEMO中测试方法:(具体可参见识别安卓SDK测试文档)

demo测试:点击 在线和本地语义=>设置=>PID,语种

请求示例: 普通话 输入法模型

{"pid":15373,"accept-audio-volume":false}

本地语义

描述:必须设置ASR_OFFLINE_ENGINE_GRAMMER_FILE_PATH参数生效,无论网络状况,都可以有本地语义结果。并且本地语义结果会覆盖在线语义结果。

NLU= enable表示开启本地语义

DEMO中测试方法:(具体可参见识别安卓SDK测试文档)

Demo测试:在线和本地语义=>设置=>本地语义解析enable && 本地语义文件 && 扩展词条

请求示例:设置本地语义的bsg文件路径,例如在asset目录下;

{"accept-audio-data":false,"grammar":"assets:\/\/\/baidu_speech_grammar.bsg",”pid”:1537, "slot-data":{"name":\["妈妈","老伍"\],"appname":\["手百","度秘”"\]},"nlu":"enable"}
  • 设置本地语义文件路径

描述:使用本地语义需要设置bsg文件的路径,本地语义共用离线命令词的参数和文件。使用本地语义功能的时候,不需要作为ASR_KWS_LOAD_ENGINE的输入参数。但是需要作为ASR_START事件的输入参数。

ASR_OFFLINE_ENGINE_GRAMMER_FILE_PATH参数设置bsg文件路径。

DEMO中测试方法:(具体可参见识别安卓SDK测试文档)

Demo测试:在线和本地语义=>设置=>本地语义文件

请求示例:设置本地语义的bsg文件路径,例如在asset目录下;

{"accept-audio-data":false,"grammar":"assets:\/\/\/baidu_speech_grammar.bsg",”pid”:1537,”nlu”:”enable”}
  • 扩展本地语义文件的词条部分内容

描述:bsg文件的左侧词条部分内容可通过SLOT_DATA参数进行动态覆盖,覆盖后原先的bsg文件中的左侧词条部分失效。和ASR_OFFLINE_ENGINE_GRAMMER_FILE_PATH一起使用。

SLOT_DATA参数动态覆盖bsg文件词条内容

DEMO中测试方法:(具体可参见识别安卓SDK测试文档)

Demo测试:在线和本地语义设置本地语义文件, 扩展词条

请求示例:动态覆盖bsg文件左侧词条内容

{"accept-audio-data":false,"grammar":"assets:\/\/\/baidu_speech_grammar.bsg",”pid”:1537, "slot-data":{"name":\["妈妈","老伍"\],"appname":\["手百","度秘”"\]},”nlu”:”enable”}

唤醒词

唤醒词: 唤醒词即识别预定义的“关键词”。与在线长语音识别不同,长语音识别会返回所有识别结果,唤醒词只会识别出您预先定义的关键词。与android本身的锁屏唤醒没有任何关系。

唤醒词是本地功能,正常使用时无需联网。 在http://ai.baidu.com/tech/speech/wake页面下方可以自行定义bin文件。百度语音提供了近15个预定义唤醒词,效果有优化。也可以自定义唤醒词,效果不如预定义唤醒词。bin文件中最多可以有10个唤醒词,其中自定义唤醒词不超过3个,并且2个字的预定义唤醒词不超过3个。

进行唤醒词操作前必须要有相对静音

唤醒词常用功能参数设置

设置唤醒词文件路径

描述:唤醒词功能是本地功能使用时无需联网,只能唤醒bin文件中预定义的关键词,bin文件需要使用WP_WORDS_FILE设置路径,支持android asset目录(如assets:///wakeUp.bin);

WP_WORDS_FILE设置bin文件路径

DEMO中测试方法:(具体可参见识别安卓SDK测试文档)

demo测试:精简版唤醒

请求示例:使用唤醒功能加载唤醒词bin文件;

{"kws-file":"assets:\/\/\/WakeUp.bin","accept-audio-volume":false}

正式授权

唤醒词和离线命令词功能需要一个正式授权文件。正式授权由SDK内部管理,无对外接口。正式授权文件在第一次联网使用SDK识别功能下载,比如第一次在线联网使用唤醒词功能或第一次在线识别后,SDK自动下载正式授权文件。正式授权文件有效期为应用新建后的35个月。在最后一个月,SDK一旦发现正式授权文件失效或即将失效,会尝试更新授权文件

注意,appId appKey appSecret包名(applicationId)4个必须完全正确,才能自动下载正式授权文件。

通用录音设置

下面2个参数设置识别和唤醒都可以使用;

引入外部音频文件

描述:SDK默认麦克风的音频输入,可以改为用户自定义的音频文件或者自定义的音频流。IN_FILE该参数可以引入音频文件或者InputStream语音流进行识别,适用于对于音频输入有定制化的情况。音频格式为pcm,16000采样率,16bit,单声道,小端序;

IN_FILE引入外部音频文件(识别和唤醒都可使用)

DEMO中测试方法:(具体可参见识别安卓SDK测试文档)

demo测试:点击 在线识别=>设置=>外部音频=>16k_test.pcm,16k采样的测试音频

请求示例: 使用本地音频文件16k_test.pcm识别

{"accept-audio-volume":false,"infile":"res:\/\/\/com\/baidu\/android\/voicedemo\/16k_test.pcm"}

外部音频流, 格式如:”#com.test.Factory.create16KInputStream()”,具体见

{"accept-audio-volume":false,"infile":"#com.test.Factory.create16KInputStream()"}

高级的使用说明见doc_integration_DOCUMENT/N_FILE-inputstream.md文档说明

保存录音文件

描述:SDK在识别的同时,可以把识别的音频保存下来,比如用于复现。OUT_FILE该参数可以保存录音文件。该参数需要设置ACCEPT_AUDIO_DATA参数;反馈问题时,请先使用该参数保存音频文件,使用上面的IN_FILE参数复现。

OUT_FILE 保存录音文件

DEMO中测试方法:(具体可参见识别安卓SDK测试文档)

demo测试:点击 在线识别设置保存音频开启音频回调。

请求示例:保存音频到 /storage/emulated/0/baiduASR/outfile.pcm

{"accept-audio-data":true,"accept-audio-volume":false,"outfile":"\/storage\/emulated\/0\/baiduASR\/outfile.pcm"}