京东AI开放平台语音SDK用户接入手册V1.0
1. 简介
京东语音 Android SDK 是集成京东 AI 语音相关基础服务,运行在 Android 设备上的一体化开放工具包。
1-1. 基础功能
当前主要支持的功能: 基本功能: 录音,语音数据处理,语音端点检测,网络通讯,状态通知,实时反馈语音能量,识别结果返回等。
2. 使用说明
2-1. 下载地址
2-2. 鉴权说明
平台为每个API提供试用体验服务,您在AI市场选择“免费试用”规格下单后,即可开始体验业内领先的人工智能API服务。 免费试用服务具有调用量、QPS限制,如需更高性能的API服务,可以提交咨询工单,联系京东AI扩容购买。
该SDK封装ASR API的功能,需要先参考 接入流程 获取AppKey和SecretKey,并在调用SDK时作为参数传入。
2-3. 支持的设备
- 系统: 支持 Android 4.3 及以上系统。通过 minSdkVersion 参数检测。
- 机型: 手机、平板及其它智能终端设备。
- 架构: 支持 armeabi,armeabi-v7a,armeabi-v8a,x86,x86_64。
- 外设: 设备上有麦克风输入。
- 网络: 支持 wifi 及系统网络。
3. 集成指南
- 将jar包拷贝到工程libs目录下,并加入工程依赖。
- 将 libs 目录下 armeabi,arm64-v8a,armeabi-v7a,x86 文件夹按需添加到 android studio 工程 src/main/jniLibs 目录中, eclipse 用户默认为 libs 目录。
- 为工程添加必要的权限
添加设置:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
各权限使用说明:
名称 | 用途 |
---|---|
android.permission.INTERNET | 允许应用联网发送语音数据给服务器获 取识别结果 |
android.permission.RECORD_AUDIO | 运行使用麦克风采集录音 |
android.permission.ACCESS_NETWORK_STATE | 获取当前 WiFi 状态 |
android.permisson.READ_PHONE_STATE | 获取 imei 作为唯一标识 |
Android 6.0 及以上的动态申请权限,示例参考.
private void applyPremission() {
String permissions[] = {
Manifest.permission.RECORD_AUDIO,
Manifest.permission.ACCESS_NETWORK_STATE,
Manifest.permission.INTERNET,
Manifest.permission.READ_PHONE_STATE
};
ArrayList<String> applyList = new ArrayList<String>();
for(String perm :permissions) {
if(PackageManager.PERMISSION_GRANTED !=
ContextCompat.checkSelfPermission(this,perm)) {
applyList.add(perm);
}
}
String tmpList[] = new String[applyList.size()];
if(!applyList.isEmpty()) {
ActivityCompat.requestPermissions(this, applyList.toArray(tmpList), 123);
}
}
4. 语音 SDK 接口说明
语音识别类
SpeechManager
创建对象:
SpechUtility.create(Context context, EngineType engineType);
名称 | 描述 |
---|---|
context | 上下文对象 |
engineType | 引擎类型,ASROperator.START 语音识别 |
设置回调监听:
setListener(SpeechListener listener);
名称 | 描述 |
---|---|
listener | 语音识别回调接口,通知外部获取识别结果状态 |
发送识别请求:
send(String cmd, String params,);
参数说明:
名称 | 描述 | 取值 |
---|---|---|
cmd | 语音识别命令 | ASR.START 开始识别 ASR.CANCEL 取消识别 ASR.STOP 停止识别 |
params | 识别设置的参数,JSON格式的字符串 | 各个参数设置见下方说明 |
识别JSON参数说明:
JSON字段 | 描述 | 类型 | 取值 | 必填 |
---|---|---|---|---|
SAMPLE_RATE | 录音采样率 | int | 目前只支持16000 | 否 |
DOMAIN | 领域模型设置 | String | search(默认) | 否 |
SERVER_VAD_ENABLE | 是否开启云端VAD | boolean | true 开启,false不开启(默认) | 否 |
AUDIO_SOURCE | 语音识别录音来源 | String | 音频文件的字符串路径"/sdcard/Audio.pcm",不设置默认从麦克风采集录音 | |
APPKEY | 鉴权使用 | String | 请参考鉴权说明申请 | 是 |
SECRETKEY | 鉴权使用 | String | 请参考鉴权说明申请 | 是 |
LOCAL_VAD_ENABLE | 是否启用离线VAD | boolean | true启用,false不启用(默认) | 否 |
POST_PROCESS | 是否启用数字后处理 | int | 1 启用(开启后默认将数字汉字转化成阿拉伯数字例如:"一千"转成"1000",0 不启用(默认)) | 否 |
VAD_START_DELAY | (LOCAL_VAD_ENABLE 为true的情况下生效)离线vad前端点超时时间(单位:秒) | double | [0.25~0.5] 默认0.25 | 否 |
VAD_END_DELAY | (LOCAL_VAD_ENABLE 为true的情况下生效)离线vad后端点超时时间(单位:秒) | double | [0.4 ~ 2.0]默认0.5 | 否 |
LONG_SPEECH | 是否开启长语音识别,开启长语音之后会持续一直识别,调用ASR.STOP关闭本次识别 | boolean | true 开启,false 不开启(默认) | 否 |
PHRASE_LIST | 上传个性化词列表 | JSONArray | 上传的词表总长度小于2K,上传示例:[“王茗“,”班玛县“,”龙羊峡“], 在用户说“打电话给王茗”,“导航到班玛县”,”我要去龙羊峡”会优先识别出个性化词表里面的词.,默认为空。 | 否 |
PARTIAL_RESULT | 是否开启实时结果返回 | int | 1 启用,0 不启用(默认) | 否 |
语音识别状态回调
SpeechListener
回调方法
public void onEvent(String event, String result, byte[] data);
参数说明
名称 | 描述 | 取值 |
---|---|---|
event | 回调事件名称 | speechStart:准备就绪。开始录音 speechBegin 用户开始说话 speechEnd 用户结束说话 speechVolume 音量回调 speechParitalResult 临时识别结果 speechResult 最终结果 |
result | 相关回调时间返回的json字符串结果 | 具体见下方"result参数JSON字符串说明" |
data | 相关事件返回携带的音频数据,例如保存录音音频到本地 |
result参数JSON字符串说明
(1) SPEECH_START、SPEECH_BEGIN与SPEECH_END事件时没有result返回。
(2) SPEECH_VOLUME事件返回 JSON字符串结果说明与示例
名称 | 类型 | 描述 |
---|---|---|
volume | String | 音量大小,取值返回[0~100] |
示例:
{"volume":"20"}
(3) SPEECH_PARITAL_RESULT与SPEECH_RESULT 事件返回JSON字符串结果说明与示例
名称 | 类型 | 描述 |
---|---|---|
err_code | int | 错误码 |
request_id | String | 请求ID |
err_msg | String | 错误信息 |
context | JSON | 识别结果 |
示例:
{
"err_code":"0",
"request_id":"fe0c804d-dec9-4a80-8167-b730b697ee5b",
"err_msg":"识别成功",
"context":[{"text": "今天天气怎么样"}]
}
5. 示例 demo
SpeechManager asrManager = SpeechUtility.create(context, EngineType.ASR);
JSONObject intent = new JSONObject();
//采样率设置
intent.put(SpeechConstant.SAMPLE_RATE, 16000);
//领域设置
intent.put(SpeechConstant.DOMAIN, "search");
//设置本地vad资源路径
intent.put(SpeechConstant.VAD_RES, "assets://vad.bin");
//APPkey和SecretKey请参考鉴权说明申请
intent.put(SpeechConstant.APPKEY,"124345");
intent.put(SpeechConstant.SECRETKEY,"12345");
intent.put(SpeechConstant.URL,"https://aiapi.jd.com/jdai/asr");
//设置回调监听
asrManager.setListener(speechListener);
//启动识别
asrManager.send(ASROperator.START,intent.toString());
6. 常见问题及错误码描述
错误码 | 描述 | 错误原因 | 备注 |
---|---|---|---|
0 | 识别成功 | ||
-1001 | 录音异常 | 录音机被占用或者录音设备异常 | |
-1002 | 权限异常 | 未声明录音权限或者权限被其他软件限制 | |
-1003 | 网络连接失败 | 没有网络权限或者网络未连接 | |
-1004 | 网络超时 | 网络质量差 | |
-1005 | 语音太长 | 说话事件超出限制,语音最大长度为60秒 | |
-1006 | 没有识别到语音 | 用户没有说话 | |
-1007 | 服务端错误 | 服务器识别过程出错 | |
-1008 | 客户端错误 | 参数配置出错,集成过程中参数设置出错,请参照开发文档检查 | |
-1009 | 语音格式错误 | SDK只接收PCM或者WAV格式语音 | |
-1011 | 语音文件头出错 | 文件头信息校验出错,请检查语音是否正常 | |
-1012 | 语音采样率或者通道错误 | SDK要求采样率为8000/16000单通道 | |
-1013 | Vad 初始化失败 | Vad 资源配置错误 | |
-1014 | Nehub网关鉴权失败 | 请参考鉴权说明申请正确的appkey secretkey |