腾讯云语音识别之录音文件识别

录音文件识别API介绍地址:https://cloud.tencent.com/document/product/1093/37822


Action : CreateRecTask

获取结果方式

录音文件识别在线API具备2种方式获取识别结果,均为异步

  • 回调

通过设置请求参数CallbackUrl开启回调获取结果,轮循此参数不填。(用户自行搭建的用于接收识别结果的服务器地址)

  • 轮循

提交请求后,获取响应中反馈的TaskId,向接口(Action:DescribeTaskStatus)提交任务ID来轮询识别结果(任务成功、等待、执行中和失败)

轮循任务结果示例:

代码语言:javascript
复制
{
  "Response": {
    "RequestId": "8824366f-0e8f-4bd4-8924-af5e84127caa",
    "Data": {
      "TaskId": 522931820,
      "Status": 2,
      "StatusStr": "success",
      "Result": "[0:0.000,0:2.260,0]  腾讯云语音识别欢迎您。\n",
      "ErrorMsg": ""
    }
  }
}

语音数据传输方式及其限制

  • url

设置SourceType参数为0后,Url参数中传输

限制:音频时长不能长于5小时,文件大小不超过512MB

  • post body

设置SourceType参数为1后,Data参数中传输

限制:大小不超过5MB


注意

  • 语种:中文普通话、英语和粤语,通过EngineModelType参数设定
  • 格式:支持wav、mp3、m4a的音频格式
  • QPS:20qps

Android关于使用录音识别SDK演示

SDK地址:https://cloud.tencent.com/document/product/1093/38351

获取到压缩包,sdk demo获取src下级目录 QCloudSDKOneSentenceDemo 作为项目根目录

目录

设置编辑器环境

ERROR:

配置错误

解决方案:编辑中:文件->项目结构 中设置SDK、NDK、JDK 的 Path

项目结构

更新扩展

在Dependencies中更新扩展,选中app(当前项目),查看当前app下所有扩展,是否需要更新(波浪线代表需要更新版本),点击Update进行更新,无则不更新.

更新扩展

设置项目秘钥配置 DemoConfig.java

秘钥配置文件

设定项目相关权限集

Path:app > src > main > AndroidManifest.xml

代码语言:javascript
复制
    <!--网络权限-->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- 相机硬件的权限 -->
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    <uses-permission android:name="android.permission.FLASHLIGHT" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
&lt;!-- 录音的权限 --&gt;
&lt;uses-permission android:name=&#34;android.permission.RECORD_AUDIO&#34; /&gt; </code></pre></div></div><p></p><h3 id="7bgcc" name="%E5%BD%95%E9%9F%B3%E6%96%87%E4%BB%B6%E8%AF%86%E5%88%AB%E5%8A%9F%E8%83%BD%E4%BB%A3%E7%A0%81%E6%96%87%E4%BB%B6-FileRecognizeActivity.java%E4%BB%8B%E7%BB%8D"><strong>录音文件识别功能代码文件 FileRecognizeActivity.java介绍</strong></h3><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    setContentView(R.layout.activity_file_sentence_recognize);


    RotateLoading rotateLoading = findViewById(R.id.rotateloading);
    rotateLoading.setLoadingColor(Color.parseColor(&#34;#FF79CD6E&#34;));
    if(!checkMyPermission(permiss)){
        ActivityCompat.requestPermissions(this,permiss, REQUEST_CODE);
    }
    //读取秘钥配置
    if (fileRecognizer == null) {
        fileRecognizer = new QCloudFileRecognizer(DemoConfig.apppId, DemoConfig.secretId, DemoConfig.secretKey);
        //设置识别结果回调
        fileRecognizer.setCallback(this);
    }
    System.out.println(Thread.currentThread());
    //通过setOnClickListener绑定按钮recognize(url)点击事件请求URL方式传递文件访问录音文件识别接口
    findViewById(R.id.recognize_ur_btn).setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            try {
                showLoading(true);
                QCloudFileRecognitionParams params = (QCloudFileRecognitionParams) QCloudFileRecognitionParams.defaultRequestParams();
                params.setUrl(&#34;http://client-sdk-1255628450.cossh.myqcloud.com/test%20audio/voice_WGVNG_8000.mp3&#34;);
                params.setSourceType(QCloudSourceType.QCloudSourceTypeUrl);
                params.setFilterDirty(0);// 0 :默认状态 不过滤脏话 1:过滤脏话
                params.setFilterModal(0);// 0 :默认状态 不过滤语气词  1:过滤部分语气词 2:严格过滤
                params.setConvertNumMode(1);//1:默认状态 根据场景智能转换为阿拉伯数字;0:全部转为中文数字。

// params.setHotwordId(""); // 热词id。用于调用对应的热词表,如果在调用语音识别服务时,不进行单独的热词id设置,自动生效默认热词;如果进行了单独的热词id设置,那么将生效单独设置的热词id。
fileRecognizer.recognize(params);
} catch (Exception e) {
e.printStackTrace();
System.out.println("exception msg" + e.getMessage());
} finally {
}
}
});

    //通过setOnClickListener绑定按钮recognize(data)点击事件方式,通过data参数传递本地录音文件数据请求录音文件识别接口
    findViewById(R.id.recognize_ur_data).setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            InputStream is = null;
            try {
                showLoading(true);
                //转化本地录音文件为base64数据流
                AssetManager am = getResources().getAssets();
                is = am.open(&#34;test1.mp3&#34;);
                int length = is.available();
                byte[] audioData = new byte[length];
                is.read(audioData);

                QCloudFileRecognitionParams params = (QCloudFileRecognitionParams) QCloudFileRecognitionParams.defaultRequestParams();
                params.setData(audioData);
                params.setSourceType(QCloudSourceType.QCloudSourceTypeData);
                params.setFilterDirty(0);// 0 :默认状态 不过滤脏话 1:过滤脏话
                params.setFilterModal(0);// 0 :默认状态 不过滤语气词  1:过滤部分语气词 2:严格过滤
                params.setConvertNumMode(1);//1:默认状态 根据场景智能转换为阿拉伯数字;0:全部转为中文数字。

// params.setHotwordId("");

                fileRecognizer.recognize(params);
            }
            catch (IOException e) {
                e.printStackTrace();
            }
            catch (Exception e) {
                e.printStackTrace();
                System.out.println(&#34;exception msg&#34; + e.getMessage());
            }
            finally {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    });
}</code></pre></div></div><p></p><p><strong>识别结果获取回调方法 </strong></p><p><strong>qcloudasrsdk_2.0_release 扩展实例方法参考 : </strong>https://cloud.tencent.com/document/product/1093/38351</p><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">  /**
 * 识别结果回调
 * @param recognizer 录音文件识别实例
 * @param requestId 请求唯一标识别
 * @param result 识别文本
 * @param status 任务状态码:0:任务等待 1:任务执行中 2:任务成功 3:任务失败 
 * @param exception 异常信息
 *
 */
@Override
public void recognizeResult(QCloudFileRecognizer recognizer, final long requestId, String result,int status, Exception exception) {
    if(status==2||status==3){
        showLoading(false);
    }
    TextView textView = findViewById(R.id.recognize_text_view);
    Log.e(&#34;recognizeResult&#34;,&#34;thread id:&#34; + Thread.currentThread().getId() + &#34; name:&#34; + Thread.currentThread().getName());
    if (exception != null) {
        Log.e(&#34;recognizeResult&#34;,&#34;result: &#34; + result + &#34;exception msg&#34; + exception + exception.getLocalizedMessage());
        textView.setText(exception.getLocalizedMessage());
        showLoading(false);
    }
    else {
        Log.e(&#34;recognizeResult&#34;,&#34;result: &#34; + result+&#34;---status==&#34;+status);
        if(!TextUtils.isEmpty(result)){
            String pattern = &#34;\\[[^\\]]+\\]&#34;;	//中括号内
            //String pattern = &#34;\\([^)]*\\)&#34;;//括号内
            //String pattern = &#34;\\(.+&#34;
            result = result.replaceAll(pattern, &#34;&#34;);
        }
        textView.setText(result);
    }

}</code></pre></div></div><p></p><h2 id="2k8a7" name="%E6%A8%A1%E6%8B%9F%E5%99%A8%E8%AF%B7%E6%B1%82%E6%BC%94%E7%A4%BA">模拟器请求演示</h2><p></p><figure class=""><div class="rno-markdown-img-url" style="text-align:center"><div class="rno-markdown-img-url-inner" style="width:66.71%"><div style="width:100%"><img src="https://cdn.static.attains.cn/app/developer-bbs/upload/1723290353874867921.png" /></div><div class="figure-desc">请求演示</div></div></div></figure><h2 id="23fgu" 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>