欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

微信小程序代办清单任务之语言识别功能

程序员文章站 2022-06-01 19:59:29
最近想给自己的代办清单任务微信小程序想加个语音识别识别功能,废话不多说,直接说重点,语音识别使用的是百度语音识别api,因为微信小程序的录音输入文件目前只能是mp3或aac 但是百度语音识别不支持这两种(百度api接口文档上有说明),所以需要把音频格式转换一下,我这边使用的是Alvas.Audio. ......

  最近想给自己的代办清单任务微信小程序想加个语音识别识别功能,废话不多说,直接说重点,语音识别使用的是百度语音识别api,因为微信小程序的录音输入文件目前只能是mp3或aac 但是百度语音识别不支持这两种(百度api接口文档上有说明),所以需要把音频格式转换一下,我这边使用的是alvas.audio.dll转换的,目前没发现什么问题。

百度云账号地址:

alvas.audio下载地址:

 1、登录百度云账号后打开百度语音页面

微信小程序代办清单任务之语言识别功能

创建一个语音识别的应用,记录应用的相关信息,如果api key、secret key  ....下载sdk......这里废话就不多说了api文档上面都有 https://ai.baidu.com/docs#/asr-online-csharp-sdk/top

(这是需要注意的是百度提供的sdk引用的newtonsoft.json    10.0.0.0 以上的版本,所以如果您项目中使用的是低版本的,必须升级newtonsoft.json)

2、下载 alvas.audio.dll 引用到项目中,

直接上代码

    public class audiohelper
    {

        /// <summary>
        /// mp3 to pcm
        /// </summary>
        /// <param name="stream"></param>
        /// <returns></returns>
        public static byte[] mp3topcm(stream stream)
        {
            try
            {
                //mp3 -> mp3 mono 48000 samples per second example
                //int sps = 48000;

                mp3reader mr = new mp3reader(stream);
                intptr formatmp3 = mr.readformat();
                byte[] datamp3 = mr.readdata();
                mr.close();
                intptr formatpcm = audiocompressionmanager.getcompatibleformat(formatmp3, audiocompressionmanager.pcmformattag);
                //mp3 -> pcm
                byte[] datapcm = audiocompressionmanager.convert(formatmp3, formatpcm, datamp3, false);

                return datapcm;
            }
            catch (system.exception ex)
            {
                logmanager.defaultlogger.errorformat("mp3 to pcm 出错:{0}", ex.tostring());
                return null;
            }
        }
    }

 

上传语音到百度云平台上识别语音

    /// <summary>
    /// 百度语音识别帮助
    /// </summary>
    public class baiduhelper
    {

        private readonly static asr client = new baidu.aip.speech.asr("你的 api key", "你的 secret key");

        /// <summary>
        /// 语音识别
        /// </summary>
        /// <param name="data">语音内容</param>
        /// <param name="text">文本内容</param>
        /// <param name="format">语音文件的格式,pcm 或者 wav 或者 amr。不区分大小写。推荐pcm文件,</param>
        /// <param name="rate">采样率,16000,固定值</param>
        /// <param name="devpid">默认1537(普通话 输入法模型)。dev_pid 必须为整数类型。参数可选值见rest api文档说明</param>
        /// <returns></returns>
        public static bool recognize(byte[] data, out string text, string format = "pcm", int rate = 16000, int devpid = 1536)
        {
            text = "";
            client.timeout = 120000;

            var options = new dictionary<string, object>
             {
                {"dev_pid", devpid}
             };

            var jobject = client.recognize(data, format, rate, options);

            if ((int)jobject.getvalue("err_no") == 0)
            {
                text = jobject["result"][0].tostring();
                return true;
            }
            else
            {
                return false;
            }
        }
    }

 

 微信小程序录音上传的代码我就就不贴了,网上很多。官方文档介绍的也很详细,整个流程就是微信小程序录音上传到后台,后台转码后通过百度语音识别api上传到百度云平台,返回结果后台返回给前端。

 

下面也是比较坑的地方,截止到这里,语音识别基本完成了,我做到这里的时候发现将将程序发到服务器上,语音转码总是报错,语音转码不成功,最后查找alvas.audio的官方文档中给出了解决方案,

微信小程序代办清单任务之语言识别功能

要么安装桌面体验,要么安装库文件,我选择了安装桌面体验,具体怎么安装桌面体验,可以百度一下,(就像安装iis一样)

安装桌面体验参考地址: 

这个时候你发布到服务器上的程序,音频就会正常转换了

 

下面恭请大家同行们体验一下我的微信小程序,体验一下我实现的语音识别功能,

 

简单介绍一下我的微信小程序:

这个是个代办清单任务的小程序,和备忘录相似,主要是自己用方便,简单方便,没有复杂的设置,记录自己的规划,让自己的工作生活变的有计划。简单而实用。发现用的人还挺多,为了更简单,就加上了语音识别功能,在编辑任务的时候可以不用手打字,只要说话就能识别成文字,

微信小程序代办清单任务之语言识别功能

 

使用语音识别的正确姿势

长按输入框上按钮,最长可一次性转换10秒语音,

微信小程序代办清单任务之语言识别功能

 

做个广告,希望同行们的支持,小的拖家带口感谢您的支持,感谢您的赏了.........

 

 微信小程序代办清单任务之语言识别功能