移动端 NUI SDK 支持识别不超过 60 秒的短语音,适用于对话聊天、控制口令、语音输入和语音搜索等场景。
功能简介
NUI SDK 提供统一接口和状态管理,支持全链路语音能力,也可作为独立的语音能力 SDK 使用。本文说明一句话识别的交互流程、初始化参数、识别参数和响应字段。SDK 接入与完整调用示例,请参见Android SDK和iOS SDK。
使用限制
输入音频为 PCM 编码、16 bit 采样位数、单声道。
音频采样率为 8000 Hz 或 16000 Hz,须与项目配置的模型匹配。
单次语音数据时长不能超过 60 秒。
语种和方言模型在控制台的项目中配置,不能通过识别代码指定。配置方法请参见管理项目。中间结果、标点预测和逆文本规范化(ITN)均为可选功能,可按需开启。
服务地址
SDK 默认使用上海地域的公网地址。ECS 实例可通过同地域的专有网络(VPC)访问内网地址,不产生 ECS 实例的公网流量费用。经典网络不支持通过 AnyTunnel 访问语音服务,使用内网访问时需在 VPC 中部署。
|
地域 |
公网地址 |
内网地址 |
|
华东 2(上海) |
|
|
|
华北 2(北京) |
|
|
|
华南 1(深圳) |
|
|
交互流程
iOS SDK 和 Android SDK 的交互流程如下。
服务端识别响应中的 header.task_id 是任务的唯一标识,排查问题时需提供该值。
1. 鉴权和初始化
客户端使用有效的 NLS Token 与服务端建立 WebSocket 连接。获取方法请参见获取 Token。初始化参数请参见 初始化参数表。
2. 开始识别
开始识别前,通过参数设置接口配置 JSON 格式的识别参数。参数通常设置一次即可;需要更新 Token 或调整配置时重新设置。识别参数请参见识别参数表。
3. 发送数据
客户端持续发送音频数据。enable_intermediate_result 为 true 时,SDK 通过 onNuiEventCallback 回调上报 EVENT_ASR_PARTIAL_RESULT 事件,返回中间识别结果;为 false 时,不返回中间识别结果。
关闭中间结果不影响完成或失败事件。开启语音活动检测(VAD)后,服务端可在音频发送过程中检测到语音结束并完成识别。
4. 结束识别
手动结束:客户端发送结束请求,通知服务端音频数据已发送完毕。服务端结束任务并返回最终识别结果。
-
VAD 自动结束:开启
enable_voice_detection后,达到max_end_silence指定的结束静音条件时,服务端返回RecognitionCompleted并结束任务,后续音频不再识别。说明最后一次中间结果可能与最终结果不同,应以
EVENT_ASR_RESULT事件中的结果为准。
参数说明
初始化参数
以下为通用初始化参数。各平台的完整初始化配置和调用方法,请参见Android SDK和iOS SDK。
|
参数 |
类型 |
是否必选 |
说明 |
|
|
String |
是 |
工作目录路径,SDK 从该目录读取配置文件。 |
|
|
String |
是 |
在控制台创建的项目的 Appkey。 |
|
|
String |
是 |
有效且未过期的 NLS Token。可在初始化时设置,也可通过参数设置接口更新。 |
|
|
String |
是 |
设备的唯一标识,例如 MAC 地址、SN 或 UniquePsuedoID。 |
|
|
String |
否 |
调试目录。初始化 SDK 时, |
|
|
String |
否 |
是否保存调试音频。仅当初始化 SDK 时的 |
识别参数
通过参数设置接口传入以下 JSON 字段。
|
参数 |
类型 |
是否必选 |
说明 |
|
|
String |
否 |
项目的 Appkey,通常在初始化时设置。 |
|
|
String |
否 |
需要更新 NLS Token 时设置。 |
|
|
Int |
是 |
语音服务类型,一句话识别为 |
|
|
String |
否 |
客户端自行解析 DNS 后,可传入 IP 地址访问服务。 |
|
|
JsonObject |
否 |
语音识别配置对象。 |
语音识别配置
nls_config 包含以下字段。输入 SDK 的 PCM 音频要求与 sr_format 指定的传输编码属于不同配置。
|
参数 |
类型 |
是否必选 |
说明 |
|
|
String |
否 |
音频传输编码,支持 OPUS 和原始 PCM,默认值为 OPUS。采样率为 8000 Hz 时仅支持 PCM。 |
|
|
Integer |
否 |
音频采样率,默认值为 16000 Hz。须在控制台项目中配置支持该采样率及业务场景的模型。 |
|
|
Boolean |
否 |
是否返回中间识别结果,默认值为 |
|
|
Boolean |
否 |
是否在后处理中添加标点,默认值为 |
|
|
Boolean |
否 |
是否启用逆文本规范化(ITN),将中文数字转换为阿拉伯数字。默认值为 |
|
|
String |
否 |
自学习模型 ID。 |
|
|
String |
否 |
定制泛热词 ID。 |
|
|
Boolean |
否 |
是否启用语音活动检测(VAD),检测有效语音的开始和结束。默认值为 |
|
|
Integer |
否 |
允许的最大开始静音时长,单位为毫秒。仅当 |
|
|
Integer |
否 |
允许的最大结束静音时长,单位为毫秒,取值范围为 200~6000。仅当 |
|
|
JsonObject |
否 |
扩展配置,可设置交互协议支持但未在本表列出的参数。 |
响应说明
以下 JSON 展示识别结果消息的格式。
中间识别结果
{
"header": {
"namespace": "SpeechRecognizer",
"name": "RecognitionResultChanged",
"status": 20000000,
"message_id": "e06d2b5d50ca40d5a50d4215c7c8****",
"task_id": "4c3502c7a5ce4ac3bdc488749ce4****",
"status_text": "Gateway:SUCCESS:Success."
},
"payload": {
"result": "北京的天气"
}
}
最终识别结果
{
"header": {
"namespace": "SpeechRecognizer",
"name": "RecognitionCompleted",
"status": 20000000,
"message_id": "10490c992aef44eaa4246614838f****",
"task_id": "4c3502c7a5ce4ac3bdc488749ce4****",
"status_text": "Gateway:SUCCESS:Success."
},
"payload": {
"result": "北京的天气。"
}
}
响应字段
header
|
字段 |
类型 |
说明 |
|
|
String |
消息命名空间,此处为 |
|
|
String |
消息名称。 |
|
|
Integer |
服务状态码,表示请求是否成功。 |
|
|
String |
本次消息的 ID,由 SDK 自动生成。 |
|
|
String |
任务的全局唯一 ID,用于排查问题。 |
|
|
String |
状态消息。 |
payload
|
字段 |
类型 |
说明 |
|
|
String |
识别文本。 |
错误码
服务端和移动端 SDK 的错误码及处理方法,请参见错误码查询。