C# 10分鐘完成百度語音技術(語音識別與合成)——入門篇

  • 2019 年 10 月 3 日
  • 筆記

我們已經講了人臉識別(入門+進階)、圖片識別(入門)。下面是鏈接:

C# 10分鐘完成百度人臉識別——入門篇

C# 30分鐘完成百度人臉識別——進階篇(文末附源碼)

C# 10分鐘完成百度圖片提取文字(文字識別)——入門篇

今天我們來盤一盤語音識別與合成。

PS:僅供了解參考,如需進一步了解請繼續研究。

我們現在就基於百度Ai開放平台進行語音技術的相關操作,demo使用的是C#控制台應用程式。

前面的套路還是一樣的:


 

  1. 註冊百度帳號api,創建自己的應用;
  2. 創建vs控制台應用程式,引入動態鏈接庫;
  3. 編寫程式碼調試,效果圖查看;
    • 語音識別
    • 語音合成
    • 實時語音識別
    • 音頻文件轉寫
    • 語音模型訓練
  1. 總結。

 

1、創建百度AI語音技術應用

  在百度AI開放平台中,登錄自己的百度帳號,點擊“語音識別”服務,選擇“創建應用”,填好應用名稱,選擇應用類型,填好應用描述,這樣就創建好了“語音識別”服務。

具體不廢話,不知道的小夥伴可以移步看這裡:C# 10分鐘完成百度人臉識別——入門篇

創建完成後會生成APPID、APP Key、Secret Key,這些是關鍵內容,後面要用。

 

2、創建VS控制台應用程式,引入動態鏈接庫

首先我們創建一個VS控制台應用程式,這裡就不詳細說明。

然後引入百度Baidu.AI動態鏈接庫,步驟如下,小編使用2017,所以直接在NuGet中搜索Baidu.AI安裝即可。

安裝語音識別 C# SDK

C# SDK 現已開源! https://github.com/Baidu-AIP/dotnet-sdk

** 支援平台:.Net Framework 3.5 4.0 4.5, .Net Core 2.0 **

方法一:使用Nuget管理依賴 (推薦)

在NuGet中搜索 Baidu.AI,安裝最新版即可。

packet地址 https://www.nuget.org/packages/Baidu.AI/

方法二:下載安裝

語音識別 C# SDK目錄結構

Baidu.Aip      ├── net35      │   ├── AipSdk.dll             // 百度AI服務 windows 動態庫      │   ├── AipSdk.xml             // 注釋文件      │   └── Newtonsoft.Json.dll    // 第三方依賴      ├── net40      ├── net45      └── netstandard2.0          ├── AipSdk.deps.json          └── AipSdk.dll  

如果需要在 Unity 平台使用,可引用工程源碼自行編譯。

安裝

1.在官方網站下載C# SDK壓縮工具包。

2.解壓後,將 AipSdk.dll 和 Newtonsoft.Json.dll 中添加為引用。


 

3、編寫程式碼調試,效果圖查看

  創建一個空文件夾,命名為Image,存一個音頻文件,做調試,後面語音合成的文件也在這裡。

在Program.cs中編寫程式碼,程式碼編寫如下,可以直接拷貝進行調試。

我們這裡只講述語音識別和語音合成,其他的內容可以在官網進行編寫:https://ai.baidu.com/docs#/ASR-Online-Csharp-SDK/top

語音識別:

using System;  using System.Collections.Generic;  using System.IO;  using System.Linq;  using System.Text;  using System.Threading.Tasks;    namespace Voice  {      class Program      {          static void Main(string[] args)          {              // 設置APPID/AK/SK              var APP_ID = "16938141";              var API_KEY = "8y2pB5HLrLD5Zu7aaQV3ce0g";              var SECRET_KEY = "5tDp3opvpIdEnlXBTOWn9W0O7CdhRNYu";                //語音識別              var client = new Baidu.Aip.Speech.Asr(APP_ID, API_KEY, SECRET_KEY);              client.Timeout = 60000;  // 修改超時時間              var data = File.ReadAllBytes("E:\Work Demo\語音技術\Voice\Voice\Image\16k.wav");              // 可選參數              var options = new Dictionary<string, object>               {                  {"dev_pid", 1536}  //語音模型1536代表普通話,其他請查看官方文檔               };              client.Timeout = 120000; // 若語音較長,建議設置更大的超時時間. ms              var result = client.Recognize(data, "wav", 16000, options);              Console.Write(result);                  ////語音合成              //var _ttsClient = new Baidu.Aip.Speech.Tts(API_KEY, SECRET_KEY);              //_ttsClient.Timeout = 60000;  // 修改超時時間              //// 可選參數              //var option = new Dictionary<string, object>()              //            {              //                {"spd", 5}, // 語速              //                {"vol", 7}, // 音量              //                {"per", 4}  // 發音人,4:情感度丫丫童聲              //            };              //var result = _ttsClient.Synthesis("今天天氣不錯,適合嗮太陽", option);              //if (result.ErrorCode == 0)  // 或 result.Success              //{              //    File.WriteAllBytes("E:\Work Demo\語音技術\Voice\Voice\Image\aaa.mp3", result.Data);              //}          }      }  }

我們查看一下識別出來的語音是什麼 

 

 

 這個就是我準備的語音,識別成功。

格式支援:pcm(不壓縮)、wav(不壓縮,pcm編碼)、amr(壓縮格式)。推薦pcm 取樣率 :16000 固定值。 編碼:16bit 位深的單聲道。

百度服務端會將非pcm格式,轉為pcm格式,因此使用wav、amr會有額外的轉換耗時。

音頻文件格式轉換請參見文檔【語音識別小工具音頻文件轉碼】

 更多內容詳見官網:https://ai.baidu.com/docs#/ASR-API/top

 


 

 語音合成:

  合成文本長度必須小於1024位元組,如果本文長度較長,可以採用多次請求的方式。文本長度不可超過限制

詳見官網:https://ai.baidu.com/docs#/TTS-Online-Csharp-SDK/top

using System;  using System.Collections.Generic;  using System.IO;  using System.Linq;  using System.Text;  using System.Threading.Tasks;    namespace Voice  {      class Program      {          static void Main(string[] args)          {              // 設置APPID/AK/SK              var APP_ID = "16938141";              var API_KEY = "8y2pB5HLrLD5Zu7aaQV3ce0g";              var SECRET_KEY = "5tDp3opvpIdEnlXBTOWn9W0O7CdhRNYu";                ////語音識別              //var client = new Baidu.Aip.Speech.Asr(APP_ID, API_KEY, SECRET_KEY);              //client.Timeout = 60000;  // 修改超時時間              //var data = File.ReadAllBytes("E:\Work Demo\語音技術\Voice\Voice\Image\16k.wav");              //// 可選參數              //var options = new Dictionary<string, object>              // {              //    {"dev_pid", 1536}  //語音模型1536代表普通話,其他請查看官方文檔              // };              //client.Timeout = 120000; // 若語音較長,建議設置更大的超時時間. ms              //var result = client.Recognize(data, "wav", 16000, options);              //Console.Write(result);                  //語音合成              var _ttsClient = new Baidu.Aip.Speech.Tts(API_KEY, SECRET_KEY);              _ttsClient.Timeout = 60000;  // 修改超時時間              // 可選參數              var option = new Dictionary<string, object>()                          {                              {"spd", 5}, // 語速                              {"vol", 7}, // 音量                              {"per", 4}  // 發音人,4:情感度丫丫童聲                          };              var result = _ttsClient.Synthesis("聽說關注部落客不迷路", option);              if (result.ErrorCode == 0)  // 或 result.Success              {                  File.WriteAllBytes("E:\Work Demo\語音技術\Voice\Voice\Image\aaa.mp3", result.Data);              }          }      }  }

運行後查看效果,如下:

 

這樣就合成成功了。


 

4、總結

  簡單的入門就到這裡,後面的實時語音識別、音頻文件轉寫、建立模型進行語音訓練就需要靠大家了。

轉載請註明出處,謝謝!

原文地址:https://www.cnblogs.com/xiongze520/p/11301882.html

拜拜,下次再見咯!