正在阅读:如何使用微信小程序实现语音识别?语音识别方法如何使用微信小程序实现语音识别?语音识别方法

2017-12-27 12:22 出处:其他 作者:佚名 责任编辑:lishengtao

  今天小编给大家讲解如何使用微信小程序实现语音识别?有需要或者有兴趣的朋友们可以看一看下文,相信对大家会有所帮助的。

  1、概述

  通过微信小程序wx.startRecord()和wx.stopRecord()接口录音并上传silk录音文件至服务器,通过ffmpeg将silk录音文件转成wav录音文件,再通过百度语音识别RESTAPI获取语音识别后的结果。

  2、代码实现

  录音和语音文件上传

  //index.js

  //开始录音。当主动调用wx.stopRecord,

  //或者录音超过1分钟时自动结束录音,返回录音文件的临时文件路径。

  //当用户离开小程序时,此接口无法调用。

  wx.startRecord({

  success:function(res){

  console.log('录音成功'+JSON.stringify(res));that.setData({

  voiceButtonName:'语音识别',

  voicePlayButtonName:'开始播放',

  tempFilePath:res.tempFilePath

  })

  //上传语音文件至服务器

  wx.uploadFile({

  url:'https://你的域名/upload',

  filePath:res.tempFilePath,

  name:'file',

  //header:{},//设置请求的header

  formData:{

  'msg':'voice'

  },//HTTP请求中其他额外的formdata

  success:function(res){

  //success

  console.log('begin');

  console.log(res.data);

  varjson=JSON.parse(res.data);

  console.log(json.msg);

  varjsonMsg=JSON.parse(json.msg);

  console.log(jsonMsg.result);

  wx.navigateTo({

  url:'../voicePage/voicePage?voiceData='+jsonMsg.result.join('')})

  },

  fail:function(err){

  //fail

  console.log(err);

  },

  complete:function(){

  //complete

  }

  })

  },

  fail:function(res){

  //录音失败

  that.setData({

  voiceButtonName:'语音识别'

  })

  console.log('录音失败'+JSON.stringify(res));}

  })

  setTimeout(function(){

  //结束录音

  wx.stopRecord()

  },60000)

  node.js服务端接收语音文件代码

  //upload.js

  //使用koa-multer这个组件

  varmulter=require('koa-multer');

  varrouter=require('koa-router')();

  varpath=require('path');

  //存储文件至path.resolve('./voice-file')路径varupload=multer({dest:path.resolve('./voice-file')});router.post('/',upload.single('file'),asyncfunction(ctx,next){//这是就文件的具体信息

  console.log(ctx.req.file);

  });

  silk文件转wav文件

  我使用的是silk-v3-decoder将silk文件转wav文件

  silk-v3-decoder使用方法

  //upload.js

  varexec=require('child_process').exec;

  functionsilkToWav(file){

  returnnewPromise(function(resolve,reject){

  exec('shconverter.sh'+file+'wav',function(err,stdout,stderr){

  if(err){

  resolve({

  result:false,

  msg:stderr

  });

  }else{

  //vardata=JSON.parse(stdout);

  console.log(stdout);

  console.log(stderr);

  //console.log(err);

  resolve({

  result:true,

  msg:''

  });

  }

  });

  });

  }

  百度语音识别RESTAPI识别wav文件

  1、通过APIKey和SecretKey获取的access_token

  通过APIKey和SecretKey获取的access_token文档

  //speech.js

  speech.getAccessToken=function(){

  returnnewPromise(function(resolve,reject){

  request({

  url:'https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=(你自己的APIkey)&client_secret=(你自己的SecretKey)',

  method:'get',

  headers:{

  'content-type':'application/json'

  }

  },function(error,response,data){

  if(error){

  resolve({

  'result':false,

  'msg':'出现错误:'+JSON.stringify(error)

  });

  }else{

  resolve({

  'result':true,

  'msg':data

  });

  }

  });

  });

  }

  2、通过token调用百度语音识别RESTAPI识别接口

  //speech.js

  speech.recognize=function(base64String,size){

  returnnewPromise(function(resolve,reject){

  request({

  url:'http://vop.baidu.com/server_api',

  method:'post',

  headers:{

  'content-type':'application/json'

  },

  //len+speech方式

  body:JSON.stringify({

  "format":"wav",

  "rate":16000,

  "channel":1,

  "token":'(你的token)',

  "cuid":"9e:eb:e8:d4:67:00",

  "len":size,

  "speech":base64String

  })

  //url+callback方式

  //body:JSON.stringify({

  //"format":"wav",

  //"rate":16000,

  //"channel":1,

  //"token":'(你的token)',

  //"cuid":'9eebe8d46700',

  //"url":'http://ihealth-wx.s1.natapp.cc/download?name=123.wav',

  //"callback":'http://ihealth-wx.s1.natapp.cc/callback'

  //})

  },function(error,response,data){

  if(error){

  resolve({

  result:false,

  msg:'出现错误:'+JSON.stringify(error)

  });

  }else{

  resolve({

  result:true,

  msg:data

  });

  }

  });

  });

  }

  3、语音识别优化

  通过上述操作后,发现识别的内容和实际内容差别很大

  百度语音识别RESTAPI文档

  查看文档可知:采样率:8000/16000仅支持单通道

  在ffmpeg里对应的设置方式分别是:

  -arrate设置采样率

  -acchannels设置声道数

  修改converter.sh文件,修改为下图所示

关注我们

最新资讯离线随时看 聊天吐槽赢奖品