资讯专栏INFORMATION COLUMN

小程序实现语音识别到底要填多少坑?

Benedict Evans / 963人阅读

摘要:前不久写了个工具型微信小程序周边,里面用到了语音识别技术。当然如果你要兼容低端微信用户需要使用做兼容处理。如果发现不当之处欢迎微信交流。想看实际案例的可以微信扫码关于安装关于安装关于安装

前不久写了个工具型微信小程序(Find周边),里面用到了语音识别技术。现将实现细节整理如下:

接口预览

通过阅读了解科大讯飞接口文档、小程序接口开发文档以及对后端ThinkPhp框架的学习,我整理了如下开发步骤:

注册科大讯飞账号(国人的骄傲,全球领先的语音识别技术)

进入AIUI开放平台在应用管理创建应用并记录APPID和ApiKey

进入应用配置,配置符合自己的情景模式、识别方式和技能

进行小程序开发录制需要识别的音频(下有详述)

后端转码录制的音频(科大讯飞支持pcm、wav),提交给识别接口(下有详述)

小程序接到识别结果进行接下来业务

音频录制接口

wx.startRecord()和wx.stopRecord()

wx.startRecord()和wx.stopRecord()接口也可以满足需求,但从1.6.0 版本开始不再被微信团队维护。建议使用能力更强的 wx.getRecorderManager 接口。该接口获取到的音频格式为silk。  
silk是webm格式通过base64编码后的结果,我们解码后需要将webm转换成pcm、wav

wx.getRecorderManager()

相对wx.startRecord()接口,该接口提供的能力更为强大(详情),可以暂停录音也可以继续录音,根据自己需求设置编码码率,录音通道数,采样率。最让人开心的是可以指定音频格式,有效值 aac/mp3。不好的是wx.getRecorderManager()在1.6.0才开始被支持。当然如果你要兼容低端微信用户需要使用wx.startRecord()做兼容处理。

事件监听细节

// wxjs:

const recorderManager = wx.getRecorderManager()
recorderManager.onStart(() => {
    //开始录制的回调方法
})
//录音停止函数
recorderManager.onStop((res) => {
  const { tempFilePath } = res;
  //上传录制的音频
  wx.uploadFile({
    url: app.d.hostUrl + "/Api/Index/wxupload", //仅为示例,非真实的接口地址
    filePath: tempFilePath,
    name: "viceo",
    success: function (res) {
        console.log(res);
    }
  })
})

Page({
    //按下按钮--录音
  startHandel: function () {
    console.log("开始")
    recorderManager.start({
      duration: 10000
    })
  },
  //松开按钮
  endHandle: function () {
    console.log("结束")
    //触发录音停止
    recorderManager.stop()
  }
})

//wxml:

    {{text}}

音频转换

我这边后端使用php的开源框架thinkphp,当然node、java、python等后端语言都可以,你根据自己的喜好和能力来。想做好音频转码我们就要借助音视频转码工具ffmpeg、avconv,它们都依赖于gcc。安装过程大家可以自行百度,或者关注底部的文章链接。

$flag,"message"=>$message,"data"=>$data);
        print json_encode($result);exit;
    }
}

调用识别接口

当我们把文件准备好之后,接下来我们就可以将base64编码之后的音频文件通过api接口请求传输过去。期间我们要注意严格按照文档中所说的规范传输,否则将造成不可知的结果。

 "main","userid"=>"user_0001","auf"=>"16k","aue"=>"raw","spx_fsize"=>"60" )));
        $data = "data=".$d;
        $res = $this->httpsRequest($url,$data,$xparam);
        if(!empty($res) && $res["code"] == 00000){
            apiResponse("success","识别成功!",$res);
        }else{
            apiResponse("error","识别失败!");
        }
    }
    //数据返回封装
    function apiResponse($flag = "error", $message = "",$data = array()){
        $result = array("flag"=>$flag,"message"=>$message,"data"=>$data);
        print json_encode($result);exit;
    }
}

到这里基本就完成了。以上代码是经过整理之后的,并不一定能够满足各位的实际开发需求。如果发现不当之处欢迎微信交流(xiaoqiang0672)。

想看实际案例的可以微信扫码
-

关于gcc安装:http://www.linuxidc.com/Linux...
关于FFmpeg安装:http://note.youdao.com/notesh...
关于ffmpeg/avconv安装:http://blog.csdn.net/killmice...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/115642.html

相关文章

  • 程序实现语音识别到底要填多少

    摘要:前不久写了个工具型微信小程序周边,里面用到了语音识别技术。当然如果你要兼容低端微信用户需要使用做兼容处理。如果发现不当之处欢迎微信交流。想看实际案例的可以微信扫码关于安装关于安装关于安装 前不久写了个工具型微信小程序(Find周边),里面用到了语音识别技术。现将实现细节整理如下: 接口预览 通过阅读了解科大讯飞接口文档、小程序接口开发文档以及对后端ThinkPhp框架的学习,我整理...

    gaara 评论0 收藏0
  • 如何做一个程序口令红包功能

    摘要:语音识别该功能的应用场景是用户设置了一个中文的口令红包,接收到该红包的用户需要用语音说出该口令,完全匹配的话则获取该红包的某个比例金额。表结构如下如此,便完成了语音识别功能。 在做小程序后端支持的过程中遇到不少有意思的功能,有些比较考你的思维散发及解决问题的实际能力,这里摘录一下记录下来,是为抛砖引玉、如能帮到别人,自然是最好不过了。 先放几张设计图看下大概功能: showImg(ht...

    zhiwei 评论0 收藏0
  • 分享一个比较完整的Vue2+项目供大家交流学习

    摘要:分享一个比较完整的项目供大家交流学习,这个项目的英文简介项目地址在线演示翻译过来呢就是一个涉及面较广的使用豆瓣作为数据源的。 分享一个比较完整的Vue2+项目供大家交流学习,这个项目的英文简介:Awesome douban DEMO created with Vue2.x + Vuex + Vue-router + vue-resource 项目地址:https://github.co...

    Charlie_Jade 评论0 收藏0
  • AWS的人工智能版图

    摘要:的人工智能版图人工智能版图由应用平台框架三大部分组成应用层是提供各种应用服务,比如平台层是平台。应用层主推三大成熟应用基于深度学习的图像和视频分析它能实现对象与场景检测人脸分析面部比较人脸识别名人识别图片调节等功能。AWS的人工智能版图 AWS人工智能版图由:应用、平台、框架三大部分组成 AI应用层:是提供各种应用服务,比如Amazon Rekognition、Polly...

    William_Sang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<