百度雲語音識別,Audio2Txt(c#)


百度雲識別沒有提供c#版本的sdk,下面給個c#的

1、打開網址http://developer.baidu.com/

2、登陸

3、管理控制台》開發者服務管理

4、創建工程

5、輸入名稱,點擊創建

6、點擊左邊【媒體雲】》【語音識別】》申請開啟語音服務,申請內容寫的誠懇一點,一般2天就可以通過了,開通成功后右上角有消息提示,注意觀察

7、申請通過后,就可以來弄了

 

可以自己先看下百度提供的文檔

我是百度文檔,點擊我查看

 

下面上代碼 然后再詳細解釋

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Text;
  7 using System.Windows.Forms;
  8 using System.Net;
  9 using System.IO;
 10 using System.Threading;
 11 
 12 namespace TestBaiDuAudio2Txt
 13 {
 14     public partial class Form1 : Form
 15     {
 16         string token = "";
 17         string filename = Application.StartupPath + "\\3.wav";
 18         string apiKey = "";//對應百度雲界面基本信息的API Key
 19         string secretKey = "";//對應百度雲界面基本信息的Secret Key
 20         string cuid = "";//這個隨便寫  不過盡量寫唯一的,比如自己創建個guid,或者你手機號碼什么的都可以
 21         string getTokenURL = "";
 22         string serverURL = "http://vop.baidu.com/server_api";
 23         public Form1()
 24         {
 25             InitializeComponent();
 26             cuid = Guid.NewGuid().ToString();
 27            //   getToken();
 28          //   Post();
 29         }
 30 
 31         //這個方法得到一個密鑰,這個密鑰可以使用1個月,1個月之后要重新請求一次獲得一個
 32         private void getToken()
 33         {
 34             getTokenURL = "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials" +
 35             "&client_id=" + apiKey + "&client_secret=" + secretKey;
 36             token = GetValue("access_token");
 37         }
 38 
 39         private string GetValue(string key)
 40         {
 41             HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(getTokenURL);
 42             HttpWebResponse response = (HttpWebResponse)request.GetResponse();
 43 
 44             StreamReader reader1 = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
 45             string ssss = reader1.ReadToEnd().Replace("\"", "").Replace("{", "").Replace("}", "").Replace("\n", "");
 46             string[] indexs = ssss.Split(',');
 47             foreach (string index in indexs)
 48             {
 49                 string[] _indexs = index.Split(':');
 50                 if (_indexs[0] == key)
 51                     return _indexs[1];
 52             }
 53             return "";
 54         }
 55 
 56 
 57 
 58 
 59         private void Post()
 60         {
 61             
 62             serverURL += "?lan=en&cuid=kwwwvagaa&token=" + token;
 63             FileStream fs = new FileStream(filename, FileMode.Open);
 64             byte[] voice = new byte[fs.Length];
 65             fs.Read(voice, 0, voice.Length);
 66             fs.Close();
 67             fs.Dispose();
 68 
 69             HttpWebRequest request = null;
 70 
 71             Uri uri = new Uri(serverURL);
 72             request = (HttpWebRequest)WebRequest.Create(uri);
 73             request.Timeout = 10000;
 74             request.Method = "POST";
 75             request.ContentType = "audio/wav; rate=8000";
 76             request.ContentLength = voice.Length;
 77             try
 78             {
 79                 using (Stream writeStream = request.GetRequestStream())
 80                 {
 81                     writeStream.Write(voice, 0, voice.Length);
 82                     writeStream.Close();
 83                     writeStream.Dispose();
 84                 }
 85             }
 86             catch
 87             {
 88                 return;
 89             }
 90             string result = string.Empty;
 91             using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
 92             {
 93                 using (Stream responseStream = response.GetResponseStream())
 94                 {
 95                     using (StreamReader readStream = new StreamReader(responseStream, Encoding.UTF8))
 96                     {
 97                         string line = string.Empty;
 98                         StringBuilder sb = new StringBuilder();
 99                         while (!readStream.EndOfStream)
100                         {
101                             line = readStream.ReadLine();
102                             sb.Append(line);
103                             sb.Append("\r");
104                         }
105 
106                         // result = readStream.ReadToEnd();
107 
108                         result = sb.ToString();
109 
110                         //message = result.Substring(result.IndexOf("utterance") + 12);
111                         //message = message.Substring(0, message.IndexOf("\""));
112                         readStream.Close();
113                         readStream.Dispose();
114                         MessageBox.Show(result);
115                     }
116                     responseStream.Close();
117                     responseStream.Dispose();
118                 }
119                 response.Close();
120             }
121 
122             this.textBox1.BeginInvoke(new MethodInvoker(delegate()
123             {
124                 this.textBox1.Text = result;
125             }));
126          
127         }
128 
129         private void button1_Click(object sender, EventArgs e)
130         {
131             Thread th = new Thread(Post);
132             th.IsBackground = true;
133             th.Start();
134         }       
135 
136     }
137 }
View Code

getToken()方法不需要每次都執行,這個方法返回一個密鑰字符串,可以使用30天,你自己進行判斷,將要過期的時候再請求一次得到個新的就可以了

request.ContentType = "audio/wav; rate=8000";  這個地方注意一下,你可以在文檔中看到支持6種格式,rate支持8000和16000,不過我使用8000識別有問題,你們自己可試一下

注意下:

語音識別接口支持 POST 方式
 目前 API 僅支持整段語音識別的模式,即需要上傳整段語音進行識別
 語音數據上傳方式有兩種:隱示發送和顯示發送
 原始語音的錄音格式目前只支持評測 8k/16k 采樣率 16bit 位深的單聲道語音
 壓縮格式支持:pcm(不壓縮)、wav、opus、speex、amr、x-flac
 系統支持語言種類:中文(zh)、粵語(ct)、英文(en)

還有一下其他的說明你可以看百度的文檔,另外可以使用網絡上的語音文件

 

 

還有不懂的地方 回帖問吧

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM