前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微信会话语音文件的一句话识别

微信会话语音文件的一句话识别

原创
作者头像
张世强
修改2020-07-24 19:25:23
1.9K1
修改2020-07-24 19:25:23
举报
文章被收录于专栏:zhang

1.项目需求

需求一:将微信会话中的小于60秒的语音文件在线识别为文字

需求二:输入小于60秒的语音文件的url地址,然后将对应的语音文件在线识别成文字

2.项目准备

前往注册

  • 微信开发者工具

前往下载

  • 腾讯云语音识别-一句话识别API说明文档

参考文档

3.项目演示

  • 开通云开发控制台并创建云端项目环境
  • 新建项目
  • 创建一个名为cloud的云函数根目录

  • 配置cloud目录为云函数根目录
代码语言:javascript
复制
"cloudfunctionRoot": "cloud/",

  • 点击编译发现cloud新增了一个云图标
  • 创建用于存放一句话识别API的云函数wordRecognize

  • 在云函数的"package.json"文件中配置云函数的tencentcloud-sdk-nodejs依赖
代码语言:javascript
复制
"tencentcloud-sdk-nodejs": "latest",
  • 安装依赖

在wordRecognize云函数目录上右键选择在"在终端中打开",执行"npm install"安装依赖

  • 在一句话识别云函数目录下的入口文件index.js中实现一句话识别的API调用Demo,然后上传Demo至云端
代码语言:javascript
复制
// 云函数入口文件
const cloud = require('wx-server-sdk')  // 引入云开发服务的内核SDK

cloud.init(   //初始化一个'wx-server-sdk' SDK 实例
{
  env: 'ai-test-t7t64'   // 开通云开发服务后创建的云环境的环境ID(默认可以创建两个ID)
}
)

// 云函数入口函数
exports.main = async (event, context) => {
   
const tencentcloud = require("tencentcloud-sdk-nodejs");  //引入腾讯云SDK

// 下面的代码可以通过explorer在线生成(https://console.cloud.tencent.com/api/explorer?Product=aai&Version=2018-05-22&Action=SentenceRecognition&SignVersion=)
const AaiClient = tencentcloud.aai.v20180522.Client;
const models = tencentcloud.aai.v20180522.Models;

const Credential = tencentcloud.common.Credential;
const ClientProfile = tencentcloud.common.ClientProfile;
const HttpProfile = tencentcloud.common.HttpProfile;

let cred = new Credential("", "");
let httpProfile = new HttpProfile();
httpProfile.endpoint = "aai.tencentcloudapi.com";
let clientProfile = new ClientProfile();
clientProfile.httpProfile = httpProfile;
let client = new AaiClient(cred, "ap-guangzhou", clientProfile);

let req = new models.SentenceRecognitionRequest();
let url=event.url   //接收客户端post的url参数,值类型为Url
var params =  {"ProjectId":0,"SubServiceType":2,"EngSerViceType":"16k_zh","SourceType":0,"VoiceFormat":"mp3","UsrAudioKey":"www","Url":url}  // 定义SDK的请求参数字典
params = JSON.stringify(params)   // 转换为json字符串
req.from_json_string(params);
return new Promise((resolve, reject) => {   // 通过Promise容器来接收异步API的回调,然后通过当前脚本返回给客户端
  client.SentenceRecognition(req, function(errMsg, response)  {  // 此接口是异步的,那么当前脚本无法对外直接访问接口返回值
    if (errMsg) {
      resolve({ "Result": errMsg })
    }
    // resp = response.to_json_string()
    resolve({ "Result": response})
});
})
}

注:云函数的入口文件index.js中调用的"一句话识别"API方法"SentenceRecognition”是异步的,如果直接拷贝Explorer中生成的Demo,将无法为小程序客户端返回"SentenceRecognition”的回调数据,脚本最终会返回null;所以这里我们需要使用Promise对象来获取"SentenceRecognition"的回调数据,然后返回给小程序客户端

  • 在小程序公共配置文件app.json中,添加页面生成参数
代码语言:javascript
复制
"pages/word/word",

  • 点击编译后,可以看到页面的四个文件

完善客户端页面相关文件Demo

word.xml

代码语言:javascript
复制
 <button type="primary" bindtap="uploadRecord">上传微信会话文件</button>

 <textarea placeholder="一句话识别结果" auto-focus value="{{ Words }}" />

word.js

代码语言:javascript
复制
Page({
  /**定义一些逻辑数据 */
   data:{
     tempVoicePaths:"", //录音文件的本地临时文件
     fileID:"", //录音文件上传至云存储中后生成的文件ID
     tempUrl:"",//云存储提供的录音文件临时url
   },
 
  /**将录音文件的Url上传至服务端进行识别,获取到识别任务的ID */
   uploadRecord:function(e){
     var that=this;
     wx.chooseMessageFile({
       count: 10,
       type: 'all',
       success (res) {
         // tempFilePath可以作为img标签的src属性显示图片
         console.log("会话中选择的音频文件在微信客户端的临时路径"+res.tempFiles[0].path)
         that.setData({
           tempVoicePaths: res.tempFiles[0].path
         })
 
       wx.cloud.init()
       var cloudPath = Date.parse(new Date())/1000;
       cloudPath = cloudPath / 1000;
       cloudPath=cloudPath.toString();
       wx.cloud.uploadFile({
       cloudPath: cloudPath, // 上传至云端的路径
       filePath: that.data.tempVoicePaths, // 小程序临时文件路径
       success: res => {
         // 返回文件 ID
         console.log("将音频文件上传到云存储后,返回的文件ID是"+res.fileID)
         wx.cloud.init()
         wx.cloud.getTempFileURL({
           fileList: [res.fileID],
           success: res => {
            console.log("通过文件ID从云存储获取到的音频文件的临时url是:")
             console.log(res.fileList[0].tempFileURL)
             that.setData({
              tempUrl: res.fileList[0].tempFileURL
            })
            wx.cloud.callFunction({  // 调用云函数
              // 云函数名称
              name: 'wordRecognize',  // 调用的云函数的名称
              // 传给云函数的参数
              data: {
                url:that.data.tempUrl
              },
              success: function(res) {
                console.log(res)
                that.setData({  // 发送数据到视图层
                  Words: res.result.Result.Result
                })
              },
              fail: console.error
            })
           },
           fail: err => {
             // handle error
           }
         })
       },
       fail: console.error
     })
       }
     })
     
   }
 })

注意:由于一句话识别时,如果语音长度、复杂度等不确定,可能耗时较长,所以请配置云函数的超时时间为最大值,配置方式如下

测试结果

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.项目需求
  • 2.项目准备
  • 3.项目演示
相关产品与服务
语音识别
腾讯云语音识别(Automatic Speech Recognition,ASR)是将语音转化成文字的PaaS产品,为企业提供精准而极具性价比的识别服务。被微信、王者荣耀、腾讯视频等大量业务使用,适用于录音质检、会议实时转写、语音输入法等多个场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档