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

实时语音识别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 存放目录

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

报红问题

解决方式:

1. 更新类库

项目结构中

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

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

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

代码分析及其配置调整

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

/**
*/
public class CommonConst {

public static final String appid = &#34;您的appid&#34;;

public static final String projectId = &#34;projectId&#34;;//没有可以填0

public static final String secretId = &#34;您的secretId&#34;;

public static final String secretKey = &#34;您的secretKey&#34;;

public static final String config = &#34;config&#34;;//不用填

}

  • 依赖权限 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, &#34;the start button has clicked..&#34;);
            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()+&#34;/tencent_aai____/audio&#34;, &#34;1.pcm&#34;);

            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();

        }
    });
    ...
}</code></pre></div></div><ul class="ul-level-0"><li><strong>使用效果展示</strong></li></ul><figure class=""><div class="rno-markdown-img-url" style="text-align:center"><div class="rno-markdown-img-url-inner" style="width:48.6%"><div style="width:100%"><img src="https://cdn.static.attains.cn/app/developer-bbs/upload/1723327017818253775.png" /></div><div class="figure-desc">填写后启动</div></div></div></figure><figure class=""><div class="rno-markdown-img-url" style="text-align:center"><div class="rno-markdown-img-url-inner" style="width:55.74%"><div style="width:100%"><img src="https://cdn.static.attains.cn/app/developer-bbs/upload/1723327018020468863.png" /></div><div class="figure-desc">启动后开始实时语音识别效果</div></div></div></figure><h2 id="a0dnv" name="%E8%BF%99%E7%AF%87%E6%96%87%E7%AB%A0%E5%AF%B9%E6%82%A8%E6%9C%89%E5%B8%AE%E5%8A%A9%E7%9A%84%E8%AF%9D%EF%BC%8C%E8%AE%B0%E5%BE%97%E7%BB%99%E5%B0%8F%E7%BC%96%E7%82%B9%E4%B8%AA%E8%B5%9E-%EF%BC%81%EF%BC%81%EF%BC%81%EF%BC%81%EF%BC%81">这篇文章对您有帮助的话,记得给小编点个赞 !!!!!</h2>