腾讯实时语音识别接入

804 阅读4分钟

小程序篇

小程序端的实时语音识别以插件的形式调用

  1. 需要先在控制台开通实时语音识别功能(保存appId,secretkey,secretid)
  2. 在小程序管理后台添加插件(小程序管理后台-设置-第三方服务-插件管理),插件管理中搜索wx3e17776051baf153并添加使用,个人小程序无法使用

密钥放在前端可能会存在安全风险,可参考使用临时密钥方案

该插件有三种调用方式分别是

  1. 语音合成
  2. 实时语音识别(websocket)
  3. 实时语音识别(http)

这里只记录第三种调用方式:

//声明
var countTime = 5
let plugin = requirePlugin("QCloudAIVoice"); //引入语音识别插件
plugin.setQCloudSecret(你的appId, "secretid", "secretkey", true); //设置腾讯云账号信息,其中appid是数字,secret是字符串,openConsole是布尔值(true/false),为控制台打印日志开关
let manager = plugin.getRecordRecognitionManager(); //获取全局唯一的语音识别管理器
var initTime // 声明一个全局变量,let为局部变量

//调用
async onLoad(options) {
         //调用内部方法挂载
        manager.onStart((res) => {
          console.log('recorder start', res.msg);
        })
        manager.onStop((res) => {
          console.log('recorder stop', res.tempFilePath);
        })
        manager.onError((res) => {
          console.log('recorder error', res.errMsg); // 打印录音识别错误信息
        })
}
//methord 调用方法 -------------------------
 // 去除逗号句号和空格 方法
cleanString(input) {
// 检查输入是否为有效的字符串
if (typeof input !== 'string' || input.length === 0) {
  return '' // 或者返回其他默认值,比如 null 或 undefined,根据需求决定
}
// 使用正则表达式匹配中文逗号和句号
const regex = /[,。]/g
// 替换中文逗号和句号为空字符串
let cleaned = input.replace(regex, '')
// 去除头部和尾部的空格
cleaned = cleaned.trim()
return cleaned
},
  /**开始录音并识别 */
  start: function () {
    this._signBtncountdown() // 开始计时
    //开始识别
    manager.start({
      duration: this.data.duration,
      engine_model_type: '16k_zh',
      // 以下为非必填参数,可跟据业务自行修改
      // hotword_id = '08003a00000000000000000000000000',
      // filter_dirty = 0,
      // filter_modal = 0,
      // filter_punc = 0,
      // convert_num_mode = 0,
      // needvad = 1
    });
    //获取识别内容
    manager.onRecognize((res) => {
      if (res.result || res.resList) {
        console.log("识别结果", res.result);
        console.log("处理后的识别结果", this.cleanString(res.result));
      } else if (res.errMsg) {
        console.log("recognize error", res.errMsg);
      }
    })
  },
     /**
   * 停止识别
   */
  stop: function () {
    console.log("语音识别停止");
    manager.stop();
  },
     /**
   * 继续识别
   */
  continue () {
    manager.start({
      duration: 30000,
      engine_model_type: '16k_zh',
      // 以下为非必填参数,可跟据业务自行修改
      // hotword_id = '08003a00000000000000000000000000',
      // filter_dirty = 0,
      // filter_modal = 0,
      // filter_punc = 0,
      // convert_num_mode = 0,
      // needvad = 1
    });
  },
   

代码部分分三块,顶部引入,onLoad挂载,具体使用方法

H5(vue3)篇

首先去官方sdk文档中webSDk的js文档中访问项目的gitHub仓库,然后把项目下载到本地。

image.png

这里采用的asr文件下的版本 参考demo 引入examples/config.js、examples/asrauthentication.js和examples/speechrecognizer.js,需设置用户的SecretID,SecretKey 和 AppId。 在examples/文件下如果找不到speechrecognizer.js文件则去dist/文件下找。然后类似于小程序的接入方式,在配置文件中写入appId,secretkey,secretid即可

image.png

// 腾讯语音识别 ---------------
import '../../utils/vioce/asrauthentication'
import '../../utils/vioce/config'
import '../../utils/vioce/speechrecognizer'

//asrauthentication.js文件引入后方法调用存在不生效的情况,可以直接将该文件内部的方法写到引入的文件内如下图

image.png

//该部分代码为初始化挂载,放在onBeforeUnmount生命周期也可以放在created生命周期(vue2)

    // 初始化腾讯语音识别
  const params = {
    signCallback: signCallback, // 鉴权函数
    // 用户参数
    secretid: config.secretId,
    appid: config.appId,
    // 实时识别接口参数
    engine_model_type: '16k_zh', // 因为内置WebRecorder采样16k的数据,所以参数 engineModelType 需要选择16k的引擎,为 '16k_zh'
    // 以下为非必填参数,可跟据业务自行修改
    voice_format: 1,
    hotword_id: '08003a00000000000000000000000000',
    needvad: 1,
    filter_dirty: 1,
    filter_modal: 2,
    filter_punc: 0,
    convert_num_mode: 1,
    word_info: 2
  }
  // @ts-ignore
  webAudioSpeechRecognizer.value = new WebAudioSpeechRecognizer(params)
  

具体调用方法

        opens() {
        const params = {
            signCallback: signCallback, // 鉴权函数
            // 用户参数
            secretid: config.secretId,
            appid: config.appId,
            // 实时识别接口参数
            engine_model_type: '16k_zh', // 因为内置WebRecorder采样16k的数据,所以参数 engineModelType 需要选择16k的引擎,为 '16k_zh'
            // 以下为非必填参数,可跟据业务自行修改
            voice_format: 1,
            hotword_id: '08003a00000000000000000000000000',
            needvad: 1,
            filter_dirty: 1,
            filter_modal: 2,
            filter_punc: 0,
            convert_num_mode: 1,
            word_info: 2
        }
                this.webAudioSpeechRecognizer = new WebAudioSpeechRecognizer(params);
        // 开始识别
        this.webAudioSpeechRecognizer.OnRecognitionStart = (res) => {
             console.log('开始识别', res);
        };
        // 一句话开始
        this.webAudioSpeechRecognizer.OnSentenceBegin = (res) => {
            console.log('一句话开始', res);
        };
        // 识别变化时
        this.webAudioSpeechRecognizer.OnRecognitionResultChange = (res) => {
           console.log('识别变化时', res.result.voice_text_str);
        };
        // 一句话结束
        this.webAudioSpeechRecognizer.OnSentenceEnd = (res) => {
            console.log('一句话结束', res.result.voice_text_str);
        };
        // 识别结束
        this.webAudioSpeechRecognizer.OnRecognitionComplete = (res) => {
           console.log('识别结束', res);
        };
        // 识别错误
        this.webAudioSpeechRecognizer.OnError = (res) => {
           console.log('识别失败-------------', res)
        };
        this.webAudioSpeechRecognizer.start();
    },
    
    
    close() {
        this.webAudioSpeechRecognizer.stop();
    }