Android SDK接入(旧)

该技术服务已迁移至思必驰开放平台,本文档于2020年8月25日停止更新。最新版请查看:https://cloud.aispeech.com/docs/lasr_rt_Android

一 功能介绍

实时语音转写通过与服务端建立websocket长连接,对连续的音频流进行实时识别,获取返回的文字流识别结果,达到“边说边出文字”的效果,内置智能断句,可用于大会演讲投屏、实时直播字幕、实时法庭庭审记录等场景。整个识别过程是实时的,支持:

  • 支持wav, ogg, opus以及mp3格式的音频文件转写
  • 支持中文普通话
  • 后续会开放热词配置、自训练语言模型功能,如需提前体验,请联系商务。

二 调用限制

集成实时长语音转写SDK时,需要注意以下内容:

内容
说明
字符编码 UTF-8
语言种类 中文普通话
服务鉴权 长语音服务使用需要进行授权
开发语言 java
响应格式

接口回调

音频属性 采样率16k、位长16bits、单声道
数据发送 sdk通过 WebSocket 每隔100ms发送一次音频数据
音频时长/大小 5小时以内
音频格式

OGG,WAV,MP3,OPUS

并发路数 默认50路并发。
转写结果保存时长 服务器实时返回结果,不保存在服务器上
服务开通 调用长语音服务需要先购买时长, 您可以领取免费时长资源或购买付费资源包


三 集成流程

3.1 产品创建与授权

产品创建

 

3.2 SDK集成准备

下载SDK

可以共用 在线语音识别 的sdk,请前往:基础技术SDK 下载最新版本的SDK。

SDK准备

集成SDK前,需要有:

jar:DUI-lite-SDK-for-Android-xxx.jar

so:libvad.so  libduiutils.so  libopusogg.so 

资源:具体使用到的资源请参考 demo,可以放在assets目录中,也可以自己手动放在磁盘中,比如/sdcard/

 

3.3 集成SDK

SDK集成和授权

授权操作请参照文档 https://www.duiopen.com/docs/ct_overview_Android

 

长语音运行流程

流程如下图:

四 SDK参数说明

4.1 请求参数

详细参数说明请参见文档,部分参数如下:

mAICloudLASRRealtimeIntent.setUseTxtSmooth(false); // 口语顺滑,去掉 嗯、啊 这些词
mAICloudLASRRealtimeIntent.setUseTProcess(true);    // 逆文本,识别出的数字转成阿拉伯数字
mAICloudLASRRealtimeIntent.setUseAlignment(false); // 是否输出词级别时间对齐信息
mAICloudLASRRealtimeIntent.setUseSensitiveWdsNorm(false); // 是否使用内置敏感词
mAICloudLASRRealtimeIntent.setUseStreamPunc(false); // 是否启用流式标点

mAICloudLASRRealtimeIntent.setRes(null); // res=lasr-cn-en使用中英文混合,不设置res字段使用中文在线
mAICloudLASRRealtimeIntent.setForwardAddresses(null); // 当参数不为空时,启动转发模式。 当有转写结果时,会往注册的WebSocket地址实时推送转写结果。

mAICloudLASRRealtimeIntent.setAudioType(AICloudLASRRealtimeIntent.PCM_ENCODE_TYPE.OGG);
mAICloudLASRRealtimeIntent.setUseCustomFeed(false); // 设置是否自行feed数据, default is false

4.2 回调结果

errno = 0,表示本次返回为识别中间rec。
{
    "errno": 0,
    "error": "",
    "data": {
        "sessionId": "94aadbaa39f046c1b2889dac9ccb1cff",
        "bg": 160,
        "end": 8380,
        "onebest": "这个工业化时代,人越来越像机器。现在很多人研究技术是为了让机器越来越像人,而机器做人。",    
        "speaker": 0
    }
}


字段说明:
sessionId: 从start,到stop,为一次Session,sessionId在一次会话中唯一。
begin:开始时间(ms)
end:结束时间(ms)
onebest:识别文本

speaker:说话人序号(暂不支持)

五 SDK集成示例

注意:长语音实时识别整体流程和 在线ASR  一致。

详细的示例demo见:https://gitee.com/szaispeech/dui-lite-android-sdk-samples

// 回调方法
private class AILASRRealtimeListenerImpl implements AILASRRealtimeListener {
  
  
    public void onError(AIError error) {
        textResult.setText(error.toString());
    }
  
    public void onResults(AIResult results) {
        if (results.getResultType() == AIConstant.AIENGINE_MESSAGE_TYPE_JSON) {
            String resultJson = (String) results.getResultObject();
            Log.i(TAG, resultJson);
            try {
                JSONObject jsonObject = new JSONObject(resultJson);
                int errno = jsonObject.getInt("errno");
                if (errno == 0)
                    textResult.append(resultJson);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }
  
    @Override
    public void onInit(int status) {
        if (status == AIConstant.OPT_SUCCESS) {
            textResult.setText("初始化成功!");
            btnStart.setEnabled(true);
            btnStop.setEnabled(true);
        } else {
            textResult.setText("初始化失败!code:" + status);
        }
    }
  
    @Override
    public void onReadyForSpeech() {
        showTip("请说话");
        textResult.setText("请说话");
    }
  
    @Override
    public void onResultDataReceived(byte[] buffer, int size) {
        // 单路音频回调,单麦的话音频直接回调,多麦的话经过 beamforming 之后的单路音频
    }
  
    @Override
    public void onRawDataReceived(byte[] buffer, int size) {
        // 多麦的原始音频
    }
  
}

5.1 初始化

AICloudLASRRealtimeEngine mEngine;
mEngine = AICloudLASRRealtimeEngine.createInstance();
mEngine.init(new AILASRRealtimeListenerImpl());

5.2 开始识别

AICloudLASRRealtimeIntent mAICloudLASRRealtimeIntent = new AICloudLASRRealtimeIntent();
mAICloudLASRRealtimeIntent.setUseTxtSmooth(false); // 口语顺滑,去掉
mAICloudLASRRealtimeIntent.setUseTProcess(true);    // 逆文本,识别出的数字转成阿拉伯数字
mAICloudLASRRealtimeIntent.setUseAlignment(false); // 是否输出词级别时间对齐信息
mAICloudLASRRealtimeIntent.setUseSensitiveWdsNorm(false); // 是否使用内置敏感词
mAICloudLASRRealtimeIntent.setUseStreamPunc(false); // 是否启用流式标点

mAICloudLASRRealtimeIntent.setRes(null); // res=lasr-cn-en使用中英文混合,不设置res字段使用中文在线
mAICloudLASRRealtimeIntent.setForwardAddresses(null); // 当参数不为空时,启动转发模式。 当有转写结果时,会往注册的WebSocket地址实时推送转写结果。

mAICloudLASRRealtimeIntent.setAudioType(AICloudLASRRealtimeIntent.PCM_ENCODE_TYPE.OGG);
mAICloudLASRRealtimeIntent.setUseCustomFeed(false); // 设置是否自行feed数据, default is false

mEngine.start(mAICloudLASRRealtimeIntent);

5.3 停止识别

mEngine.stop(); 

5.4 取消识别

mEngine.cancel(); //关闭录音机,取消本次识别

5.5 销毁引擎

mEngine.destroy();

六 错误码

请看 通用错误码 和 长语音错误码

https://www.duiopen.com/docs/ct_errorcode_Android

七 接口文档

接口文档见:https://www.duiopen.com/duilite-doc/android/

八 常见问题

1、 并发支持多少

目前实时转写默认支持50 个并发路数, 如需进行并发扩容,您可以线下联系商务或项目经理。

 

2、 如何试用服务和购买服务

您需要直接在DUI控制台上进行服务的试用和购买。

 

3、 对硬件的要求有什么

Android 4.0 及以上系统的设备

 

4、 支持的音频格式和语言

  • 中文普通话
  • OGG,WAV,MP3,OPUS
  • 16k 16bit 单声道