腾讯云 实时语音识别介绍及其Android SDK Demo搭建

2020-08-03 15:39:29 浏览数 (1)

实时语音识别API地址:https://cloud.tencent.com/document/product/1093/35799


接口地址:http://asr.cloud.tencent.com/asr/v1/<appid>?{请求参数}

接口形式:HTTP RESTful

请求前准备:AppID、SecretID 和 SecretKey

语音数据请求相关

  • POST

请求URL

代码语言:javascript复制
http://asr.cloud.tencent.com/asr/v1/<appid>?
projectid=xxx&
sub_service_type=xxx&
engine_model_type=xxx&
result_text_format=xxx&
res_type=xxx&
voice_format=xxx&
secretid=xxx&
timestamp=xxx&
expired=xxx&
needvad=xxx&
nonce=xxx&
seq=xxx&
end=xxx&
source=xxx&
voice_id=xxx&
timeout=xxx
请求头部

请求头部,包括 Host,Authorization,Content-Type,Content-Length 四个参数

请求正文

请求正文主要包含实时语音识别的数据,每个数据包的音频分片最大不能超过200KB。

注意事项

  • QPS:50qps
  • 支持语种:中文普通话、英语、粤语。
  • 音频格式:wav、pcm、opus、speex、silk、mp3。采样率:16000Hz或8000Hz、采样精度:16bits、声道:单声道
  • 签名:非V3签名,单独的签名:https://cloud.tencent.com/document/product/1093/35799#sign
  • 数据包音频分片大小:不超过200kb

Android关于使用实时语音识别SDK使用及代码分析

准备工作

  • android studio 开发工具
  • android 环境 (java14)
  • Tencent 云 语音识别产品开通后,秘钥

一、下载与安装

1. 下载地址 : https://cloud.tencent.com/document/product/1093/35722

下载地址下载地址

2. 解压包,获取 QCloudSDK_Realtime_Android-model 文件夹中src目录作为实际项目目录

存放项目目录存放项目目录
项目根目录项目根目录

3. android studio 打开 项目

ERROR1:项目环境配置错误,需要制定本地配置的SDK目录等

环境配置报错环境配置报错

解决方案:

打开项目结构打开项目结构
设置环境目录 SDK  JRE ndk 存放目录设置环境目录 SDK JRE ndk 存放目录

ERROR2 : build.gradle 报红问题,类库未更新或者类库未加载

报红问题报红问题

解决方式:

1. 更新类库

项目结构中

更新类库(应用->确定)更新类库(应用->确定)

2.加载类库(Dependency列表不存在,即类库不存在时)

加载位置加载位置
示例(搜索gson类库,并加载)示例(搜索gson类库,并加载)

代码分析及其配置调整

  • 更改配置 src > main > java > com.xxx > CommonConst 新版本SDK配置在MainActivity.java的onCreate中写入
代码语言:javascript复制
package com.tencent.aaifortest;

/**
 */
public class CommonConst {

    public static final String appid = "您的appid";

    public static final String projectId = "projectId";//没有可以填0

    public static final String secretId = "您的secretId";

    public static final String secretKey = "您的secretKey";

    public static final String config = "config";//不用填

}
  • 依赖权限 AndroidManifest.xml
代码语言:javascript复制
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  • 实时音频识别功能代码文件 MainActivity.java介绍
代码语言:javascript复制
    @Override
    protected void onCreate(Bundle savedInstanceState){
    ...
        // 用户配置:需要在控制台申请相关的账号;
        final int appid = 1257709062;
        final int projectId = 0;
        final String secretId = "";
        final String secretKey = "";
    ...
        // 识别结果回调监听器, 用来监听语音识别的结果,共有如下四个接口:
        final AudioRecognizeResultListener audioRecognizeResultlistener = new AudioRecognizeResultListener() {

            boolean dontHaveResult = true;

            /**
             * 返回分片的识别结果
             * @param request 相应的请求
             * @param result 识别结果
             * @param seq 该分片所在语音流的序号 (0, 1, 2...)
             */
            @Override
            public void onSliceSuccess(AudioRecognizeRequest request, AudioRecognizeResult result, int seq) {
                ...
            }

            /**
             * 返回语音流的识别结果
             * @param request 相应的请求
             * @param result 识别结果
             * @param seq 该语音流的序号 (1, 2, 3...)
             */
            @Override
            public void onSegmentSuccess(AudioRecognizeRequest request, AudioRecognizeResult result, int seq) {
                 ...
            }

            /**
             * 识别结束回调,返回所有的识别结果
             * @param request 相应的请求
             * @param result 识别结果
             */
            @Override
            public void onSuccess(AudioRecognizeRequest request, String result) {
                ...
            }

            /**
             * 识别失败
             * @param request 相应的请求
             * @param clientException 客户端异常
             * @param serverException 服务端异常
             */
            @Override
            public void onFailure(AudioRecognizeRequest request, final ClientException clientException, final ServerException serverException) {
                 ...
            }
        };
        
         /**
         * 识别状态监听器
         */
        final AudioRecognizeStateListener audioRecognizeStateListener = new AudioRecognizeStateListener() {

            /**
             * 开始录音
             * @param request
             */
            @Override
            public void onStartRecord(AudioRecognizeRequest request) {
                ...
            }

            /**
             * 结束录音
             * @param request
             */
            @Override
            public void onStopRecord(AudioRecognizeRequest request) {
                ...
            }

            /**
             * 第seq个语音流开始识别
             * @param request
             * @param seq
             */
            @Override
            public void onVoiceFlowStartRecognize(AudioRecognizeRequest request, int seq) {
                ...
            }

            /**
             * 第seq个语音流结束识别
             * @param request
             * @param seq
             */
            @Override
            public void onVoiceFlowFinishRecognize(AudioRecognizeRequest request, int seq) {
                ...
            }

            /**
             * 第seq个语音流开始
             * @param request
             * @param seq
             */
            @Override
            public void onVoiceFlowStart(AudioRecognizeRequest request, int seq) {
                ...
            }

            /**
             * 第seq个语音流结束
             * @param request
             * @param seq
             */
            @Override
            public void onVoiceFlowFinish(AudioRecognizeRequest request, int seq) {
                ...
            }

            /**
             * 语音音量回调
             * @param request
             * @param volume
             */
            @Override
            public void onVoiceVolume(AudioRecognizeRequest request, final int volume) {
                ...
            }
        };
        ...
        //绑定点击事件
        start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                AAILogger.info(logger, "the start button has clicked..");
                resMap.clear();
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        //   start.setEnabled(false);
                    }
                });
                // 2、初始化语音识别请求。
                AudioRecognizeRequest.Builder builder = new AudioRecognizeRequest.Builder();
                //File file = new File(Environment.getExternalStorageDirectory() "/tencent_aai____/audio", "1.pcm");

                boolean isSaveAudioRecordFiles=false;//默认是关的 false
                // 初始化识别请求
                final AudioRecognizeRequest audioRecognizeRequest = builder
//                        .pcmAudioDataSource(new AudioRecordDataSource()) // 设置数据源
                        .pcmAudioDataSource(new AudioRecordDataSource(isSaveAudioRecordFiles)) // 设置数据源
                        //.templateName(templateName) // 设置模板
                        .template(new AudioRecognizeTemplate(EngineModelType.EngineModelType16K.getType(),0,0)) // 设置自定义模板
                        .setFilterDirty(0)  // 0 :默认状态 不过滤脏话 1:过滤脏话
                        .setFilterModal(0) // 0 :默认状态 不过滤语气词  1:过滤部分语气词 2:严格过滤
                        .setFilterPunc(0) // 0 :默认状态 不过滤句末的句号 1:滤句末的句号
                        .setConvert_num_mode(1) //1:默认状态 根据场景智能转换为阿拉伯数字;0:全部转为中文数字。
//                        .setHotWordId("")//热词 id。用于调用对应的热词表,如果在调用语音识别服务时,不进行单独的热词 id 设置,自动生效默认热词;如果进行了单独的热词 id 设置,那么将生效单独设置的热词 id。
                        .build();

                // 自定义识别配置
                //设置语音识别参数
                //通过构建 AudioRecognizeConfiguration 类,可以设置语音识别时的配置:
                final AudioRecognizeConfiguration audioRecognizeConfiguration = new AudioRecognizeConfiguration.Builder()
                        .setSilentDetectTimeOut(true)// 是否使能静音检测,true表示不检查静音部分
                        .audioFlowSilenceTimeOut(5000) // 静音检测超时停止录音
                        .minAudioFlowSilenceTime(2000) // 语音流识别时的间隔时间
                        .minVolumeCallbackTime(80) // 音量回调时间
                        .sensitive(2.5f)
                        .build();

                if (aaiClient==null) {
                    try {
                        /**
                         * AAIClient 是语音服务的核心类,用户可以调用该类来开始、停止以及取消语音识别。
                         * context 上下文
                         * ...
                         * credentialProvider 鉴权类
                         * 如果 aaiClient 不再需要使用,请调用 release() 方法释放资源:
                         */
                        aaiClient = new AAIClient(MainActivity.this, appid, projectId, secretId,secretKey ,credentialProvider);
                    } catch (ClientException e) {
                        e.printStackTrace();
                        AAILogger.info(logger, e.toString());
                    }
                }
                //currentRequestId = audioRecognizeRequest.getRequestId();
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        aaiClient.startAudioRecognize(audioRecognizeRequest, audioRecognizeResultlistener,
                                audioRecognizeStateListener, audioRecognizeTimeoutListener,
                                audioRecognizeConfiguration);

                    }
                }).start();

            }
        });
        ...
    }
  • 使用效果展示
填写后启动填写后启动
启动后开始实时语音识别效果启动后开始实时语音识别效果

这篇文章对您有帮助的话,记得给小编点个赞 !!!!!

0 人点赞