最近在折騰語音方面的東西,所以看了下GOOGL的語音識別,經過GOOGLE發現Google的語音引擎是通過http來請求的,並且已經獲取到http的地址,中文的調用Url爲:http://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=zh-CN 其實一看就知道替換zh-CN 成其它語言也是可以的.那麼在C#中如何調用呢,直接看代碼:
/// <summary>
/// 調用GOOLE語音識別引擎
/// </summary>
/// <returns></returns>
private
string GoogleSTT()
{
string
result = string .Empty;
try {
string
inFile = "audio.wav" ;
FileStream fs =
new FileStream(inFile, FileMode.Open);
byte [] voice =
new byte [fs.Length];
fs.Read(voice, 0, voice.Length);
fs.Close();
HttpWebRequest request =
null ;
Uri uri =
new Uri(url);
request = (HttpWebRequest)WebRequest.Create(uri);
request.Method =
"POST" ;
request.ContentType =
"audio/x-flac; rate=16000" ;
request.ContentLength = voice.Length;
using
(Stream writeStream = request.GetRequestStream())
{
writeStream.Write(voice, 0, voice.Length);
}
using
(HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using
(Stream responseStream = response.GetResponseStream())
{
using
(StreamReader readStream = new
StreamReader(responseStream, Encoding.UTF8)) {
result = readStream.ReadToEnd();
}
}
}
}
catch
(Exception ex) {
Console.WriteLine(ex.StackTrace);
}
return
result; } |
其實就是直接通過http請求,然後獲取返回的識別結果,不過有需要注意的地方 request.ContentType = "audio/x-flac; rate=16000;這句寫的不對會有影響的,google默認的是audio/x-flac的,支持flac格式,要想支持wav、mp3等格式,在網上查之後說只能通過格式轉換,如果是直接提交wav文件是無法識別的;後來我在訊飛的語音識別引擎的時候發現他們的也是http的,但是他們的是可以這樣寫的audio/L16,然後我就嘗試着把google的也改成這樣,不出所料可以支持wav格式了,這隻說明google是有支持的,可能只是有些參數由於google對api的封閉,我們不清楚而已。