最近在折騰語音方面的東西,所以看了下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; string url = "http://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=zh-CN"; 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的封閉,我們不清楚而已。