京东AI开放平台离线语音SDK用户接入手册V1.0


1. 简介

京东语音 Android SDK 是集成京东 AI 语音相关基础服务,运行在 Android 设备上的一体化开放工具包。

1-1. 基础功能

当前主要支持的功能: 基本功能: 录音,语音数据处理,语音端点检测,网络通讯,状态通知,实时反馈语音能量,识别结果返回等。

2. 使用说明

2-1. 下载地址

2-2. 鉴权说明

如果使用离线语音识别需要申请设备授权AUTHID,填入SDK参数进行授权,点击链接,提交工单 https://neuhub.jd.com/workorder/init/3/%E7%9F%AD%E8%AF%AD%E9%9F%B3%E8%AF%86%E5%88%AB-%E7%A6%BB%E7%BA%BF%E9%87%87%E9%9B%86SDK

2-3. 支持的设备

  • 系统: 支持 Android 4.3 及以上系统。通过 minSdkVersion 参数检测。
  • 机型: 手机、平板及其它智能终端设备。
  • 架构: 支持 armeabi,armeabi-v7a,armeabi-v8a,x86,x86_64。
  • 外设: 设备上有麦克风输入。
  • 网络: 支持 wifi 及系统网络。

3. 集成指南

  1. 将jar包拷贝到工程libs目录下,并加入工程依赖。
  2. 将 libs 目录下 armeabi,arm64-v8a,armeabi-v7a,x86 文件夹按需添加到 android studio 工程 src/main/jniLibs 目录中, eclipse 用户默认为 libs 目录。
  3. 为工程添加必要的权限

添加设置:

<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.LOAD 离线引擎初始化,在启动离线识别之前必须先调用,填写AUTH_ID进行加载。
ASR.START 开始识别
ASR.CANCEL 取消识别
ASR.STOP 停止识别
ASR.RELEASE 离线引擎释放
params 识别设置的参数,JSON格式的字符串 各个参数设置见下方说明

识别JSON参数说明:

JSON字段 描述 类型 取值 必填
SAMPLE_RATE 录音采样率 int 目前只支持16000
DOMAIN(在线) 领域模型设置 String search(默认)
VAD_RES 启用本地vad之后需要设置vad资源路径 String 设置vad所在手机存储的完整路径: 例如: "assets:://vad.bin"
RECORD_FILE_PATH 设置保存录音文件路径 String 默认不设置不保存,设置参考:”/sdcard/reco.pcm”
AUTH_ID(离线) 设备离线授权id String 设备授权id请提交工单获取,并且在请在离线引擎初始化的时候填入
AUDIO_SOURCE 语音识别录音来源 String 音频文件的字符串路径"/sdcard/Audio.pcm",不设置默认从麦克风采集录音
ENGINE_TYPE 语音识别模式 int 0 在线识别, 1 离线识别,2 离在线融合模式(优先在线,断网情况下自动切换到离线)
OFFLINE_HOT_WORDS(离线) 离线识别用户自定义热词列表 JSONArray 在使用离线识别需要识别通讯录,音乐等用户自定义的热词语句请设置该参数将热词语句列表设置进去,这样可以提供相关句子的识别准确率.
OFFLINE_CONF(离线) 离线引擎加载模型文件路径 String 使用离线识别在ASR.LOAD时加入该参数设置离线模型文件路径,默认不需要填写
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 回调事件名称 SPEECH_LOADED:离线引擎初始化回调。
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. 示例代码

    //语音识别对象实例化
    SpeechManager asrManager = SpeechUtility.create(context, EngineType.ASR);
    //设置回调监听
    asrManager.setListener(speechListener);
    JSONObject intent = new JSONObject();
    //设置离线设备授权id,请提交工单获取
    intent.put(SpeechConstant.AUTHID, "123");
    //离线引擎初始化
    asrManager.send(ASROperator.LOAD,new JSONObject(map).toString());

    //设置本地vad资源路径
    intent.put(SpeechConstant.VAD_RES, "assets://vad.bin");
     //设置使用离线识别
    intent.put(SpeechConstant.ENGINE_TYPE,1);
    //离线个性化热词设置
    JSONArray hotArrays = new JSONArray().put("打电话给李铭").put("听黄明的歌曲").put("去陆芳路坐车");
    map.put(SpeechConstant.OFFLINE_HOT_WORDS, hotArrays);
     //在离线引擎初始化完成回调SPEECH_LOADED 之后启动识别
    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 在线网关鉴权失败 请参考鉴权说明申请正确的appkey secretkey
-1015 语音离线引擎初始化失败 离线语音初始化不成功,可能原因离线模型文件路径配置错误
-1016 语音引擎没有初始化 在识别开始的时候发现没有进行引擎初始化操作或者引擎初始化失败,请先检查引擎初始化是否正常,或者设备授权不成功导致请检测离线引起初始化是否设置合法AUTH_ID
-1017 离线语音授权失败 AUTH_ID填写错误,请联系商务人员获取合法授权AUTH_ID
Copyright © JD AI Platform all right reserved,powered by GitbookFile Modify: 2021-05-21 22:10:38

results matching ""

    No results matching ""