一、准备工作
1. 需要在 腾讯云语音识别控制台 已开通相关语音产品。
2. 在腾讯云控制台 访问管理 页面获取 SecretID 和 SecretKey 。
3. 在腾讯云控制台 账号信息 页面获取 AppId。
二、接入流程
1. 首先需要接入 TRTC web 端 SDK,完成接入流程,详情请参见 实时音视频-Web。(默认为 V5 版本,V4 旧版本见这篇文章)
2. 引入asr.js,asr.js 中封装了从 TRTC web 端 demo 中获取音轨,处理音频,以及调用 ASR 整个过程。为了更好的兼容浏览器,asr.js 主要是 es5写法,若要通过 import 方式引入,可参考 asr.esm.js 中代码。
3. 在 TRTC web 端中的调用(这里以 TRTC web 端 demo 本地流为例):
·参数说明
·ASR 类的方法列表:
| 方法 | 参数 | 说明 |
| start | – | 开始识别 |
| stop | – | 结束识别 |
| OnRecognitionStart | callback | 开始识别回调 |
| OnSentenceBegin | callback | 一句话开始时回调 |
| OnRecognitionResultChange | callback | 识别结果变化回调 |
| OnSentenceEnd | callback | 一句话结束时回调 |
| OnRecognitionComplete | callback | 识别完成回调 |
| OnError | callback | 识别错误回调 |
| OnChange | callback | 有识别结果回调 |
·new ASR(options)说明:
| 属性 | 必填 | 默认值 | 说明 |
| engine_model_type | 是 | 16k_zh | 引擎类型 |
| voice_format | 是 | 1 | 语音编码方式 |
·其他参数和返回字段参考 接口文档。
注意:目前 ASR 类将 TRTC 对应的音频默认处理为16k、16bit的 pcm 格式音频数据,所以 engine_model_type 目前只支持16k模型,voice_format 只能为1,若对音频数据有要求,可自行处理数据,具体可参考 asr.js 中16k音频的处理方式。
·将生成 AppID、SecretID 和 SecretKey 作为参数传入 ASR 类中,具体调用示例如下 :
·trtc v5 获取 track 接口地址为:trtc.getAudioTrack()
TRTC 5.xTRTC 4.x let resultText = ''; await trtc.startLocalAudio(); const audioTrack = await trtc.getAudioTrack(); webAudioSpeechRecognizer = new ASR({ secretKey: asrSecretKey, secretId: asrSecretId, appId: asrAppId, // 实时识别接口参数 engine_model_type: '16k_zh_en', // 引擎 voice_format: 1, audioTrack, // 以下为非必填参数,可跟据业务自行修改 needvad: 1, filter_modal: 1 }); // 开始识别 webAudioSpeechRecognizer.OnRecognitionStart = (res) => { console.log('开始识别', res); }; // 一句话开始 webAudioSpeechRecognizer.OnSentenceBegin = (res) => { console.log('一句话开始', res); }; // 识别变化时 webAudioSpeechRecognizer.OnRecognitionResultChange = (res) => { console.log('识别变化时', res.result.voice_text_str); const currentText = `${resultText}${res.result.voice_text_str}`; asrText.innerText = currentText; asrText.scrollTo(0, asrText.scrollHeight); }; // 一句话结束 webAudioSpeechRecognizer.OnSentenceEnd = (res) => { console.log('一句话结束', res.result.voice_text_str); resultText += res.result.voice_text_str; asrText.innerText = resultText; }; // 识别结束 webAudioSpeechRecognizer.OnRecognitionComplete = (res) => { console.log('识别结束', res); }; // 识别错误 webAudioSpeechRecognizer.OnError = (res) => { console.log('识别失败', res); }; webAudioSpeechRecognizer.start();// 若从trtc获取的audioTrack发生变化时,需要重新实例化ASR,发起asr识别。const localStreamAsr = new ASR({ secretKey: '', secretId: '', appId: 0, // 实时识别接口参数 engine_model_type : '16k_zh', // 引擎 voice_format : 1, // 以下为非必填参数,可跟据业务自行修改 hotword_id : '08003a00000000000000000000000000', needvad: 1, filter_dirty: 1, filter_modal: 1, filter_punc: 1, convert_num_mode : 1, word_info: 2, audioTrack: this.localStream_.getAudioTrack() // this.localStream_.getAudioTrack() 为获取的本地流的音轨})// 开始语音识别调用localStreamAsr.start();// 开始识别localStreamAsr.OnRecognitionStart = (res) => {console.log('本地流:开始识别', res);};// 一句话开始localStreamAsr.OnSentenceBegin = (res) => {console.log('本地流:一句话开始', res);};// 识别变化时localStreamAsr.OnRecognitionResultChange = (res) => {console.log('本地流:识别变化时', res);};// 一句话结束localStreamAsr.OnSentenceEnd = (res) => {console.log('本地流:一句话结束', res);};// 识别有结果时localStreamAsr.OnChange = (res) => {console.log('本地流:识别中' ,res)}// 识别结束localStreamAsr.OnRecognitionComplete = (res) => {console.log('本地流:识别结束', res);};// 识别错误localStreamAsr.OnError = (res) => {console.log('本地流:识别失败', res);};// 关闭识别时localStreamAsr.stop();
注意:SecretID 和 SecretKey 作为敏感信息,不建议直接放在前端代码里运行,可以通过接口服务获取,同时建议采取临时密钥方案,具体可参考:临时身份凭证 。
·采取临时密钥方案时,policy 参数需要授予该临时证书权限的 CAM 策略,这里以只授权 asr 服务为例:
policy = {"version": "2.0","statement": [ { "effect": "allow", "action": ["name/asr:*"], "resource": "*", }]}
通过调用接口获取临时密钥信息。
·将接口返回的密钥信息 tmpSecretId、tmpSecretkey 和 Token 依次作为参数 secretId、secretKey 和 token 传入 ASR 类中,若未采用临时密钥方案,可直接按照示例传入 secretId、secretKey 即可。
const audioTrack = await trtc.getAudioTrack();// const audioTrack = this.localStream_.getAudioTrack(); // v4 为 this.localStream_.getAudioTrack() 为获取的本地流的音轨const localStreamAsr = new ASR({ secretKey: '', // tmpSecretId secretId: '', // tmpSecretkey token: '', // Token appId: 0, // 实时识别接口参数 engine_model_type : '16k_zh', // 引擎 voice_format : 1, // 以下为非必填参数,可跟据业务自行修改 hotword_id : '************************************************************', needvad: 1, filter_dirty: 1, filter_modal: 1, filter_punc: 1, convert_num_mode : 1, word_info: 2, audioTrack,})