文档中心>语音识别>实践教程>TRTC 相关实践>TRTC WEB SDK 接入实时语音识别

TRTC WEB SDK 接入实时语音识别

最近更新时间:2024-10-31 17:02:21

我的收藏

概述

目前有部分用户接入 TRTC(Tencent RTC)服务后,会有一些实时字幕、会议文字纪要的需求。本文档帮助 web 端用户在已经接入 TRTC 服务后,更方便的快速接入 ASR,完成语音转文字的需求。

准备工作

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.x
TRTC 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_large', // 引擎
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,
})