微信小程式代辦清單任務之語言識別功能

来源:https://www.cnblogs.com/simoncai/archive/2019/04/07/10607155.html
-Advertisement-
Play Games

最近想給自己的代辦清單任務微信小程式想加個語音識別識別功能,廢話不多說,直接說重點,語音識別使用的是百度語音識別api,因為微信小程式的錄音輸入文件目前只能是mp3或aac 但是百度語音識別不支持這兩種(百度api介面文檔上有說明),所以需要把音頻格式轉換一下,我這邊使用的是Alvas.Audio. ...


  最近想給自己的代辦清單任務微信小程式想加個語音識別識別功能,廢話不多說,直接說重點,語音識別使用的是百度語音識別api,因為微信小程式的錄音輸入文件目前只能是mp3或aac 但是百度語音識別不支持這兩種(百度api介面文檔上有說明),所以需要把音頻格式轉換一下,我這邊使用的是Alvas.Audio.dll轉換的,目前沒發現什麼問題。

百度雲賬號地址:https://login.bce.baidu.com/

Alvas.Audio下載地址:http://www.alvas.net/

 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的官方文檔中給出瞭解決方案,

http://www.alvas.net/alvas.audio,articles.aspx#mp3-to-wav-without-desktop-experience

要麼安裝桌面體驗,要麼安裝庫文件,我選擇了安裝桌面體驗,具體怎麼安裝桌面體驗,可以百度一下,(就像安裝iis一樣)

安裝桌面體驗參考地址:https://www.cnblogs.com/asdyzh/p/9826976.html  

這個時候你發佈到伺服器上的程式,音頻就會正常轉換了

 

下麵恭請大家同行們體驗一下我的微信小程式,體驗一下我實現的語音識別功能,

 

簡單介紹一下我的微信小程式:

這個是個代辦清單任務的小程式,和備忘錄相似,主要是自己用方便,簡單方便,沒有複雜的設置,記錄自己的規劃,讓自己的工作生活變的有計劃。簡單而實用。發現用的人還挺多,為了更簡單,就加上了語音識別功能,在編輯任務的時候可以不用手打字,只要說話就能識別成文字,

 

使用語音識別的正確姿勢

長按輸入框上按鈕,最長可一次性轉換10秒語音,

 

做個廣告,希望同行們的支持,小的拖家帶口感謝您的支持,感謝您的賞了.........

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.Sublime Text: 這是一個輕量級的代碼編輯器,跨平臺,支持幾十種編程語言,包括Python,Java,C/C++等,小巧靈活,運行輕快,支持代碼高亮、自動補全、語法提示,插件擴展豐富,是一個很不錯的代碼編輯器,配置相關文件後,可直接運行python程式: 2.VS Code: 這是微軟 ...
  • 最近在學習Python,不得不說,Python真的是一門很好用的語言。但是學習的過程中關於變數作用域(scope)的命名空間(namespace)的問題真的把我給搞懵了。在查閱了相關資料之後,覺得自己對Python的作用域和命名空間有了一定得瞭解。故寫在這裡,一方面加深自己的理解,另一方面分享知識。 ...
  • 本文將主要講解 J.U.C 中的 Future 框架,並分析結合源碼分析其內部結構邏輯; 一、Future 框架概述 JDK 中的 Future 框架實際就是 Future 模式的實現,通常情況下我們會配合線程池使用,但也可以單獨使用;下麵我們就單獨使用簡單舉例; 1. 應用實例 列印: 如上面代碼 ...
  • 前段時間有個需求:將生產環境的部分數據轉移到測試伺服器進行測試。由於只需要導入特定賬號的數據,我就想著將寫個腳本,將數據組裝成sql語句導出為sql文件,然後轉移到測試伺服器,導入到MySQL中。想象是美好的,過程是痛苦的,下麵總結下幾點。 PHP腳本的處理 1、腳本的思路就是:查詢特定賬號數據,組 ...
  • 文件上傳 使用commons-fileupload-1.4控制項及依賴的commons-io-2.6控制項 jsp頁面中內容 <form action="../servlet/FileUpdate" method="post" enctype="multipart/form-data"> <div al ...
  • 1.安裝git 軟體(下一步直到完成) 2.碼雲註冊(保存代碼) 3.創建代碼托管倉庫 4.創建文件夾 5.寫東西並提交到碼雲 1.在某個文件夾下寫東西 2.寫完之後在此文件夾下滑鼠右鍵,並選擇[git bash here] 6. 在'黑框'里輸入命令 - git init :用於做初始化, 其實就 ...
  • 在阿裡雲伺服器運維過程中,有時候可能會忘記了伺服器的實例密碼,那忘記了阿裡雲Windows伺服器或者Centos伺服器的實例密碼怎麼辦?其實阿裡雲的ECS後臺管理頁面提供了重置實例密碼的功能,運維人員在瀏覽器Web端登錄阿裡雲ECS管理後臺,而後進入實例管理頁面進行實例密碼的重置,重置完實例密碼後重 ...
  • 起因 寫這一篇的起因是想要通過新增預設參數來代替以前的方法,結果發現儘管在調用時寫起來一樣,實際上也沒有被當做同樣的方法,兩個方法大致如下: 上述兩種方法都可以通過 TestMethod("1"); 調用,所以最開始誤以為兩個方法的調用是等價的,但是實際使用中通過DLL引用的方式會提示找不到方法,這 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...