帮助与文档 > 产品文档 > 语音识别ASR > Android_SDK文档 > 实时语音识别服务
实时语音识别服务

有道智云实时语音识别 SDK简介

Hi,您好,欢迎使用有道智云实时语音识别Android SDK。

本文档主要针对需要集成实时语音识别的Android开发工程师,详细描述实时语音识别能力相关的技术内容。

如果您是非技术人员,想要体验我们的产品能力,请点击语音识别体验中心

如果您有与我们商务合作的需求,可以通过一下方式联系我们:

商务邮箱: AIcloud_Business@corp.youdao.com

如果您对文档内容有任何疑问,可以通过以下几种方式联系我们:

客服QQ:1906538062

官方交流群:652880659

联系邮箱: zyservice@corp.youdao.com

下面是Android SDK接入文档,接入测试需要一个绑定实时语音识别的实例的应用Id(appKey),如果您还没有,请按照新手指南获取。

接入前提

  • 在sdk下载页面下载sdk

将app签名以及app包名给智云进行认证备案并生成appKey

  • 获取app签名
gradlew Task :app:signingReport
> Task :app:signingReport
Variant: releaseUnitTest
Config: release
Store: /Users/shen/workspace/sourcecode/ydasr/app/ydasr.key
Alias: ydasr
MD5: A2:20:C7:A2:5B:B7:FF:A3:5F:D9:FD:D7:13:7A:C6:56
SHA1: CC:09:81:E2:B7:27:62:6C:73:BB:FA:BF:43:5F:74:1F:F4:E0:22:AA
SHA-256: 6E:C0:01:C6:1A:1F:25:4F:B7:99:BF:07:89:12:78:20:EA:CC:B1:64:22:6E:6C:D1:E7:82:6E:EA:AE:7E:AB:98
Valid until: Thursday, October 8, 2048
  • 获取密钥。1中获取到的签名MD5部分,过滤掉其中冒号,并将获取到的32位转化为小写即为需要填写的应用密钥。
获取到的MD5: A2:20:C7:A2:5B:B7:FF:A3:5F:D9:FD:D7:13:7A:C6:56
最后得到的密钥:a220c7a25bb7ffa35fd9fdd7137ac656

SDK 集成步骤

引入依赖

引入依赖包,拷贝aar包到app下面的libs目录下,在gradle中如下进行配置即可。

注意:依赖分为两种:aar包和依赖的其他第三方库,aar包包括ydaudiosdk-release.aar和ydasrsdk-release.aar。其他库包括lifeCycle的两个包以及okhttp和gson和kotlin。以上都是需要引入的。

  • libs方式
android {
    ...
    repositories {
        flatDir {
            dirs 'libs'
        }
    }
}
dependencies {
    ...
    implementation "android.arch.lifecycle:extensions:1.1.1"
    implementation "android.arch.lifecycle:common-java8:1.1.1"
    implementation "com.squareup.okhttp3:okhttp:3.11.0"
    implementation "com.google.code.gson:gson:2.8.5"
    implementation "org.jetbrains.kotlin:kotlin-stdlib:1.3.0"

    implementation (name:'ydaudiosdk-release', ext:'aar')
    implementation (name:'ydasrsdk-release', ext:'aar')
}

增加权限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.BLUETOOTH" />

其中 RECORD_AUDIO、WRITE_EXTERNAL_STORAGE和READ_EXTERNAL_STORAGE 权限需要动态申请,申请权限代码可见demo代码所示。

混淆需增加部分

# Gson
-keepattributes Signature
-keepattributes *Annotation*
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.** { *; }

#okhttp3
-dontwarn com.squareup.okhttp3.**
-keep class com.squareup.okhttp3.** { *;}
-dontwarn okhttp3.**
-dontwarn okio.**
-dontwarn javax.annotation.**
-dontwarn org.conscrypt.**

#lifecycle
-keep public class android.arch.lifecycle.** {
    public protected *;
}
-keepclassmembers class ** {
    @android.arch.lifecycle.OnLifecycleEvent public *;
}

#kotlin
-dontwarn kotlin.**

#AsrSdk
-keep class com.youdao.ydasr.** { *; }
-keep interface com.youdao.ydasr.** { *; }
-keep class com.youdao.audio.** { *; }
-keep interface com.youdao.audio.** { *; }

使用说明

  • 创建asr 返回接口
private AsrListener mAsrListener = new AsrListener() {
    // 开始识别回调
    @Override
    public void onAsrStart() {}

    // 重连后再次连接成功回调
    @Override
    public void onAsrRestart() {}

    // 结束识别回调
    @Override
    public void onAsrStop() {}

    // 正在重连提示
    @Override
    public void onAsrReconnecting() {}

    // 错误回调
    @Override
    public void onAsrError(@NotNull AsrResultCode error) {

    // ASR结果回调
    @Override
    public void onAsrNext(@NotNull AsrResult result, boolean isSentence) {}

    // 音量变化回调
    @Override
    public void onAsrVolumeChange(float volume) {}

    // 后端点静音回调
    @Override
    public void onAsrSilentEnd() {}

    // 前端点静音回调
    @Override
    public void onAsrSilentStart() {}

    // 连接上蓝牙麦克风提示
    @Override
    public void onBluetoothAudioConnected() {}

    // 蓝牙麦克风断开提示
    @Override
    public void onBluetoothAudioDisconnected() {}
};
  • 在activity中创建AsrManager,初始化的参数包含appKey(如何获取见集成前提)并注册生命周期观察
mAsrManager = AsrManager.getInstance(this, Consts.AsrAppKey, mAsrListener);
getLifecycle().addObserver(mAsrManager);
  • 开始识别
Map<String, Object> params = new HashMap<>();
params.put(AsrParams.LANG, mLang);
params.put(AsrParams.SILENT_TIMEOUT_START, 5000L);
params.put(AsrParams.SILENT_TIMEOUT_END, 10000L);
params.put(AsrParams.SENTENCE_TIMEOUT, 3000L);
params.put(AsrParams.CONNECT_TIMEOUT, 10000L);
params.put(AsrParams.WAIT_SERVER_DISCONNECT, true);
mAsrManager.start(params);
  • 停止识别
mAsrManager.stop();

识别结果

  • 识别结果示例
{
    "result": [{
        "st": [{
            "bg": 30,
            "ed": 480,
            "ws": [{
                "w": "Have",
                "wb": 30,
                "we": 240
            }, {
                "w": "a",
                "wb": 240,
                "we": 270
            }, {
                "w": "good",
                "wb": 270,
                "we": 480
            }, {
                "w": "day.",
                "wb": 480,
                "we": 480
            }]
        }],
        "seg_id": 0
    }],
    "errorCode": "0",
    "action": "recognition"
}
  • 识别结果说明
参数含义说明
bg分句开始时间单位毫秒/ms
ed分句结束时间单位毫秒/ms
w词(字)识别结果
wb词(字)开始时间单位毫秒/ms
we词(字)结束时间单位毫秒/ms
seg_id分句 id从 0 开始递增

支持语言

支持中文和其他几种语言的互译。

语言代码
中文zh-CHS
英文en

常见问题

错误1

  • 错误说明
null
C:/Users/liuyanyan/.gradle/caches/transforms-1/files-1.1/appcompat-v7-28.0.0.aar/7cbab2e2b4c7701e76fa4d46215a4687/res/values-v28/values-v28.xml
D:/workdir/ydasrDemo
C:/Users/liuyanyan/.gradle/caches/transforms-1/files-1.1/appcompat-v7-28.0.0.aar/7cbab2e2b4c7701e76fa4d46215a4687/res/values/values.xml
null
failed linking references. 
  • 解决方案
targetSdkVersion 28
...
dependencies {
    ...
    implementation 'com.android.support:appcompat-v7:28.0.0'
}

错误2

  • 错误说明
null
Default interface methods are only supported starting with Android N (--min-api 24): void android.arch.lifecycle.DefaultLifecycleObserver.onCreate(android.arch.lifecycle.LifecycleOwner)
Stripped invalid locals information from 1 method.
null
com.android.builder.dexing.DexArchiveBuilderException: Failed to process C:\Users\liuyanyan\.gradle\caches\modules-2\files-2.1\android.arch.lifecycle\common-java8\1.1.1\795d68cd761d093ccb235d1d91b8fd17c2ae25ff\common-java8-1.1.1.jar
com.android.builder.dexing.DexArchiveBuilderException: Error while dexing.
com.android.tools.r8.CompilationFailedException: Compilation failed to complete
com.android.tools.r8.utils.AbortException
  • 解决方案:gradle中增加如下配置
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

其他注意事项

  • asr回调方法非主线程的,如果需要在回调中更新UI,需放到主线程中,代码可见demo.
  • 权限及动态权限一定要添加否则可能导致无反应
  • 依赖包也必须都添加,否则可能导致无反应或崩溃问题

版本更新记录

上线日期版本号更新内容
2018.11.12v1.0.0支持在线实时语音识别