基础技术概述(Android)

基础技术SDK (Android)

1. 概述

基础技术sdk 提供语音唤醒,信号处理,离/在线语音识别,离/在线语音合成,离线语义理解等单项语音服务。您可以选择接入一项或者多项技术。

目前DUI平台提供的单项语音服务如下:

1) 离/在线语音识别(Automatic Speech Recognition,ASR):识别语音内容,转化为相应的文字。

2) 离/在线语音合成(Text to Speech,TTS):将文字信息转变为可以听得懂的、流利的汉语。

3) 离线语音唤醒 (VoiceWake up): 通过识别辨认特定的词汇来返回预置好的结果(唤醒设备)。

4) 信号处理(SSPE):语音交互之前对采集到的单路或多路音频信号进行处理,用以提取到用户输入、交互部分的音频信号,降低噪声干扰,提升信噪比,降低后端语音识别或语音唤醒的难度。

音频信号处理的好坏,会直接影响到后续语音识别的交互体验。

2. SDK集成前提

   2.1 创建帐号

           在 DUI开发平台 上创建账号

   2.2 创建 "基础技术" 的产品

          本地语音识别包含: 离线语义,离线特征(asrpp),离线识别

          本地语音合成:  离线TTS

           实时短语音合成: 在线TTS

           语音唤醒:  单麦唤醒  前端信号处理+唤醒

 2.3 申请apiKey productId,productKey, productSecret  

           在授权管理标签申请 apiKey,这样可获取产品 apiKey, productId,productKey, productSecret  

           生成Product ID,Product Key ,Product Secret  ,APIKEY,SDK

           Product ID:集成SDK时需用到的鉴权参数

           Product Key:集成SDK时需用到的鉴权参数

           Product Secret :集成SDK时需用到的鉴权参数

           APIKEY:集成SDK时需用到的鉴权参数

2.4下载 基础技术sdk

          可在 SDK下载页 或者 发布管理 页下载 SDK,SDK 包含 demo,javadoc,jar,so 以及相应的资源文件

3. 集成

基础技术sdk 包括 jar、JavaDoc 、so 动态库以及功能对应的资源。

基础技术sdk 支持 Android 4.0及以上系统,so 动态库目前支持 arm64-v8a, armeabi, armeabi-v7a, x86, x86_64,若需支持其它架构,请提工单申请。

您可以先下载 Demo,体验 SDK 提供的各个功能,有个整体了解。 git仓库地址 https://gitee.com/szaispeech/dui-lite-android-sdk-samples

3.1、引入sdk

从官网下载对应功能的 SDK 添加到项目的 libs 文件夹下,对应的 JNI 库请放在 jniLibs 目录下,如图所示:

 

3.2、添加对SDK的依赖

基础技术sdk依赖于okhttp网络库,所以在你的项目里需要依赖 okhttp
gradle

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    //dui lite sdk依赖于 okhttp 必须外部依赖或导入,否则报错
    implementation 'com.squareup.okhttp3:okhttp:3.12.12'
}

3.3、权限

<!--获取手机录音机使用权限,识别、语义理解需要用到此权限 -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />

<!-- 授权需要 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--保存文件需要用到此权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!--保存文件需要用到此权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--云端功能需要用到此权限 -->
<uses-permission android:name="android.permission.INTERNET" />

<!-- 授权需要 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

targetSdkVersion 版本高于30,需要增加权限


<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
  
if (Build.VERSION.SDK_INT >= 30) {
    if (!Environment.isExternalStorageManager()) {
        Intent intent = new Intent("android.settings.MANAGE_ALL_FILES_ACCESS_PERMISSION");
        startActivity(intent);
    }
}

3.4、混淆

如果项目中配置了混淆项,需要在proguard-rules.pro文件中添加如下代码:

https://aispeech-dui-doc.oss-cn-hangzhou.aliyuncs.com/dui_doc/images/ct_LiteFAQ_commom/proguard-rules.pro

 

4. 授权配置

使用某个功能前首先要进行授权,授权成功后才能正常使用引擎。

SDK 支持参数化配置,初始化配置的操作需要在SDK init方法调用之前设定。

4.1 日志

支持打开关闭DEBUG日志及日志的保存,推荐开发调试阶段开启DEBUG日志,日志保存涉及IO操作,在产品上线或SOP之后不建议开启日志保存。

DUILiteSDK.openLog();//仅开启日志打印
DUILiteSDK.openLog("sdcard/speech");//开始日志并将日志保存在指定路径下
DUILiteSDK.setDebugMode(Log.VERBOSE);   //设置全局log级别,默认为WARN级别

4.2 音频保存

支持打开关闭音频保存,推荐开发调试阶段开启音频保存,该功能会占用较大存储空间,在产品上线或SOP之后不建议开启音频保存。

DUILiteSDK.setGlobalAudioSaveEnable(true);    //使能全局音频保存开关,此开关关闭则不保存音频.默认为开,但是需要设置下面的保存路径才能保存音频
DUILiteSDK.setGlobalAudioSavePath("/sdcard/aispeech/"); //设置全局音频保存路径,比引擎单独设置的优先级高

4.3 授权

授权目前支持 在线授权方案。

4.3.1在线授权

// 产品认证需设置 apiKey, productId, productKey, productSecret
DUILiteConfig config = new DUILiteConfig.Builder()
        .setApiKey("127537a77becd25e104f7e7161df8c00")
        .setProductId("279608105")
        .setProductKey("c476883eb0cf3cdeca1c8ea1a524cc9f")
        .setProductSecret("c28557cbf3998f1266a1b785a8691f54").create();
// 产品认证需设置 apiKey, productId, productKey, productSecret
DUILiteConfig config = new DUILiteConfig("d3c265662929841215092b415c257bd6""278578021",
"cfbdf9df02d199a602ed6f666a2494a3",
"b06adce105c97ba926da3f18365a69f3");
 
  
 
// SDK预初始化方法
// init预初始化方法耗时极少,不会影响App首次冷启动用户体验
DUILiteSDK.init(getApplicationContext());
// SDK 授权
DUILiteSDK.doAuth(getApplicationContext(), config, new DUILiteSDK.InitListener() {
    @Override
    public void success() {
        Log.d(TAG, "授权成功! ");
    }
  
    @Override
    public void error(String errorCode,String errorInfo) {
        Log.d(TAG, "授权失败, errorcode: "+errorCode+",errorInfo:"+errorInfo);
    }
});
确保App首次冷启动时,调用预初始化方法DUILiteSDK.init(...),再调用授权方法DUILiteSDK.doAuth(...),此时SDK才会真正收集用户信息(设备信息)并上报数据。
开发者应该保证在Applicaiton.onCreate函数中调用预初始化方法DUILiteSDK.init(...)。
获取授权文件com.aispeec.DUILiteSDK.doAuth(...)可以在预初始化方法之后紧接着调用,也可以放到后台

注意事项

  1. SDK init 操作需要放置在sdk其他操作之前,引擎的初始化之前都会校验授权状态。
  2. 授权失败后,请勿无间隔死循环递归调用init。建议策略:每隔3s重试,并限定次数。否则可能额外消耗cpu占用。
  3. 授权过程中可能遇到的错误码请参见 基础技术sdk - 错误码

5. 使用引擎的通用流程

以 wakeup 引擎为例,说明一般引擎的使用流程。

上图即唤醒引擎的使用流程图,以下是补充说明:

  1. 创建引擎对象,创建引擎对象有2种方法: createInstance (多实例) 或 getInstance (单例模式)
  2. 初始化引擎,调用 init 方法
  3. 启动引擎,调用 start 方法
  4. 默认使用Android的录音机获取音频数据,如需自行输入音频数据,可以使用 feedData 方法
  5. 此时引擎内部处理音频数据中,有唤醒结果或其它错误信息会从回调中返回。部分引擎可以动态调整少量参数。
  6. 停止引擎,调用 stop 方法
  7. 停止引擎后可以调用 start 方法重新启动引擎
  8. 销毁引擎,调用 destroy 方法

在 init 和 start 时会有很多参数设置,Demo 已经为常见情况做了示例,详细说明请查看 JavaDoc。

6. 错误码

基础技术SDK - 错误码

7. 接口文档

javadoc   https://www.duiopen.com/duilite-doc/android

8.名词释义

ASR - Automatic Speech Recognition 缩写,指语音识别技术,其目标是将人类语音中的词汇内容转换为计算机可读的输入。

VAD - Voice Activity Detection 缩写,指语音活动检测技术,目的是从声音信号流里识别和消除长时间的静音期,以达到在不降低业务质量的情况下节省话路资源的作用,主要用于识别场景下检测人声并送入识别内核。

TTS - Text To Speech 缩写,指语音合成技术,用作将文本转换成自然语音输出。

AEC - Acoustic Echo Cancellation 缩写,指回声消除技术,其目标是通过采集回路音频来消除麦克风采集到的音频部分中设备发出的分部音频信号。

DOA - Direction Of Arrival 缩写,指利用麦克风阵列实现声源到达方向估计,也常常称之为声源定位。

BF - Beamforming 缩写,指波束成形技术。

NLU - Natural language understanding,指自然语言理解。

BSS - Blind source separation,指盲源分离。