专栏首页功不唐捐【玩转腾讯云】【腾讯云语音识别】如何在微信小程序中进行接口鉴权
原创

【玩转腾讯云】【腾讯云语音识别】如何在微信小程序中进行接口鉴权

腾讯云语音识别

腾讯云语音识别(Automatic Speech Recognition,ASR) 为开发者提供语音转文字服务的最佳体验。语音识别服务经微信、腾讯视频、王者荣耀等大量内部业务验证,同时也在线上线下大量外部客户业务场景下成功落地,具备识别准确率高、接入便捷、性能稳定等特点。腾讯云语音识别服务开放实时语音识别、一句话识别和录音文件识别三种服务形式,满足不同类型开发者需求。

产品优势

海量数据积累

立足于腾讯庞大的社交数据平台,积累了数十万小时的语音标注数据,拥有丰富多样的语料库,为高识别率奠定数据基础。

算法业界领先

基于多种序列神经网络结构(LSTM、Attention Model、DeepCNN),采用 Multitask 训练方法,结合T/S方式,在通用以及垂直领域有业内领先的识别精度。

支持多平台设备

提供 REST API 和 SDK,支持智能硬件、移动应用、网站、桌面客户端和物联网等多种设备终端。

支持语种丰富

现阶段已经支持中文普通话、英语、粤语和韩语语音识别,后续将陆续开放其他语种或方言的识别能力。

噪声环境识别佳

语音识别模型鲁棒性佳,识别精度高,抗噪声的干扰能力强,能够识别来自嘈杂环境的音频信息,不需要客户进行降噪处理。

海量内外部业务验证

经过微信、腾讯视频、王者荣耀等内部业务充分验证,也在大量互联网、金融、教育等领域的外部客户业务场景成功落地,日服务亿级用户,性能稳定。

相关接口文档请参考:实时语音识别接口文档

1. 准备工作:在小程序使用cryptojs

方法一:参照小程序 之使用HMACSHA1算法加密报文,将加密算法文件下载至本地使用。

方法二:引入 npm模块crypto-js在miniprogram文件夹下安装crypto-js,在npm init时一路回车即可

cd miniprogram
npm init 
npm install crypto-js

在小程序开发工具修改配置:

添加描述

  • 点击开发者工具中的菜单栏:工具 --> 构建 npm

添加描述

  • 使用:
const CryptoJs = require('crypto-js');
console.log(CryptoJS.HmacSHA1("Message", "Key"));

2. 开始鉴权

拼接请求参数:

* 在API 密钥管理页面获取所得secretid及secretkey需确保为同一组。

  • 将接口必须的参数进行排序并拼接:

若参数为:

let timestamp = Math.round(Date.now() / 1000);

let params = {
    secretid: '你的SecretId',
    		timestamp: Math.round(Date.now() / 1000),
    expired: timestamp + 90,
    nonce: Math.round(Math.random() * 65535),
    seq: 1,
    end: 0,
    res_type: 0,
    sub_service_type: 1, 
    engine_model_type: '16k_zh',
    result_text_format: 0, 
    voice_format: 8,  //1:wav(pcm);4:speex(sp);6:silk; 8: mp3
    source: 0,   //默认
    voice_id: 'f658c689c3b4db74',
    timeout: 5000, //超时时间单位为毫秒
    needvad: 0,
  }

}

* 具体请求参数请见请求结构,需要确保参数正确,上述标注的参数需要按照请求结构中的要求设置。

拼接函数:

 function generateQueryString(params){
  let keys = Object.keys(params);
  let qstr = '';
  keys.sort();
  keys.forEach(function(key) {
    let val = params[key];
    if (key === '') {
      return;
    }
    if (val === undefined || val === null || (typeof val === 'number' && isNaN(val))) {
      val = '';
    }
    qstr += '&' + key + '=' + val;
  })
  return qstr.slice(1);
}

拼接签名(appid获取:API 密钥管理页面):

const appid = 你的AppId; //type number

let qstr = generateQueryString(params); //params为a 步骤中的参数
let str = 'POSTasr.cloud.tencent.com/asr/v1/' + appid + '?' + qstr;

对secretKey及签名原文进行使用 HmacSha1 算法进行加密处理(secretKey获取: API 密钥管理页面):

const secretKey = '你的SecretKey';

let sha1_result = CryptoJs.HmacSHA1(str, secretKey); //此处接入Crypto的方法请见上文,str为b 步骤中的str

对加密后的数据进行base64转码,所得到的signStr为最终得到的签名串

let bytes = toUint8Array(sha1_result);
let signStr = wx.arrayBufferToBase64(bytes);

function toUint8Array(wordArray) {
  // Shortcuts
  var words = wordArray.words;
  var sigBytes = wordArray.sigBytes;

  // Convert
  var u8 = new Uint8Array(sigBytes);
  for (var i = 0; i < sigBytes; i++) {
      var byte = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
      u8[i]=byte;
  }
  return u8;
}

开始请求(使用wx.getRecorderManager()进行语音输入请参考RecorderManager):

wx.request({
      url: 'https://asr.cloud.tencent.com/asr/v1/' + appid + '?' + qstr, // appid与qstr 为 b 步骤参数
      data: data, //data为通过录音接口获取的原始音频数据,语音编码方式需要对应请求接口params中的voice_format字段
      method: 'POST',
      header: {
          'content-type': 'application/octet-stream',        
          'Authorization': signStr, //signStr为d 步骤中获得的签名串
      },
      success (res) {
          console.log(res);              
      },
      fail(err) {
          console.log( err)
      }
})

3. 腾讯云智能语音插件

欢迎使用【腾讯云智能语音】小程序插件,不需进行复杂的鉴权过程,简单接入即可在小程序中使用腾讯云语音识别能力。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【玩转腾讯云】【腾讯云机器翻译TMT】机器翻译入门

    通过https://cloud.tencent.com/register注册腾讯云账号

    LinSP
  • VR/AR引领品牌营销新风向,潮牌、奢侈品牌紧随潮流

    VRPinea
  • Scala系列 (二)Scala数组----超详细常用方法及其用法

    写在前面: 我是「nicedays」,一枚喜爱做特效,听音乐,分享技术的大数据开发猿。这名字是来自world order乐队的一首HAVE A NICE DAY...

    用户7886150
  • 案例:Standby RAC遭遇ORA-1157,1111,1110导致实例crash处理

    案例:Standby RAC遭遇ORA-1157,1111,1110导致实例crash处理 环境:RHEL 6.5 + Oracle RAC 11.2.0.4...

    Alfred Zhao
  • Python变量类型及变量引用

           Python 不包含像 int 这样的简单类型 —— 只有对象类型, 如果 Python 中需要整数值,将整数赋值给相应变量(如i = 100 )...

    py3study
  • RPA技术如何与财务共享平台完美融合?

    目标之一就是集中处理那些重复性的、标准化的、交易量比较高的流程,如应付账款、总账和报表、员工薪酬、费用报销等。在提升流程标准化水平和管理能力的同时,企业降低财务...

    RPA小葵
  • Win10重大更新!微软推出全新AI平台Windows ML

    微软推出了一个新的AI平台Windows ML,并计划在春季Windows10的更新中加入更多人工智能功能。 ? 在Windows ML平台下,开发人员能够将不...

    IT派
  • 教你阅读Python开源项目代码

    作者:董伟明 链接:https://zhuanlan.zhihu.com/p/22275595 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,...

    bear_fish
  • 比特币脚本

    在比特币区块链中,交易不是这么简单,交易实际是通过脚本来完成,以承载更多的功能个,这也是为什么比特币被称为是一种“可编程的货币”。 比特币交易是首先要通过私钥解...

    春哥大魔王
  • AI驱动智能媒体生产

    本文总结了发表在IBC2018上的由日本NHK的Hiroyuki Kaneko等撰写的“AI-DRIVEN SMART PRODUCTION”,介绍了NHK在智...

    用户1324186

扫码关注云+社区

领取腾讯云代金券