Google Speech Api从C#中返回{“result”:}的audio文件中获取文本

我正在尝试创build一个Windows应用程序,可以将我拥有的audio文件转换为带有Google语音识别API的文本文件。 这是我做的:

1)我去了https://groups.google.com/a/chromium.org/forum/?fromgroups#!forum/chromium-dev并成为会员。

2)我去了我的Google Developers Console,成功地生成了一个API密钥。

3)我有一些在线代码,并运行它:

private void btnGoogle_Click(object sender, EventArgs e) { string path = @"Z:\path\to\audio\file\good-morning-google.flac"; try { FileStream fileStream = File.OpenRead(path); MemoryStream memoryStream = new MemoryStream(); memoryStream.SetLength(fileStream.Length); fileStream.Read(memoryStream.GetBuffer(), 0, (int)fileStream.Length); byte[] BA_AudioFile = memoryStream.GetBuffer(); HttpWebRequest _HWR_SpeechToText = null; _HWR_SpeechToText = (HttpWebRequest)HttpWebRequest.Create( "https://www.google.com/speech-api/v2/recognize?output=json&lang=en-us&key=your-api-key-here"); _HWR_SpeechToText.Credentials = CredentialCache.DefaultCredentials; _HWR_SpeechToText.Method = "POST"; _HWR_SpeechToText.ContentType = "audio/x-flac; rate=44100"; _HWR_SpeechToText.ContentLength = BA_AudioFile.Length; Stream stream = _HWR_SpeechToText.GetRequestStream(); stream.Write(BA_AudioFile, 0, BA_AudioFile.Length); stream.Close(); HttpWebResponse HWR_Response = (HttpWebResponse)_HWR_SpeechToText.GetResponse(); if (HWR_Response.StatusCode == HttpStatusCode.OK) { Console.WriteLine("looks ok..."); StreamReader SR_Response = new StreamReader(HWR_Response.GetResponseStream()); Console.WriteLine(SR_Response.ReadToEnd()); Console.WriteLine(SR_Response.ReadToEnd()); Console.WriteLine("Done"); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } Console.ReadLine(); } 

上面的代码运行。 它给了我以下输出:

 looks ok... {"result":[]} 

因此,我知道我得到一个HttpStatusCode.OK响应,因为looks ok...日志行执行。

然而,结果是完全空的…为什么呢? 难道我做错了什么?

编辑:这里是我得到的audio文件: https : //github.com/gillesdemey/google-speech-v2

Solutions Collecting From Web of "Google Speech Api从C#中返回{“result”:}的audio文件中获取文本"

首先你的代码更复杂,然后需要,我用这个:

 string api_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; string path = @"C:\temp\good-morning-google.flac"; byte[] bytes = System.IO.File.ReadAllBytes(path); WebClient client = new WebClient(); client.Headers.Add("Content-Type", "audio/x-flac; rate=44100"); byte[] result = client.UploadData(string.Format( "https://www.google.com/speech-api/v2/recognize?client=chromium&lang=en-us&key={0}", api_key), "POST", bytes); string s = client.Encoding.GetString(result); 

你有第二个问题是你的音频文件! 它是在32位立体声。 它应该是16位PCM单声道。 所以转换为单声道,并下降到16位。 我用http://www.audacityteam.org/来转换你的文件。 看截图。

然后我得到了这个回应:

 {"result":[]} {"result":[{"alternative":[{"transcript":"good morning Google how are you feeling today","confidence":0.987629}],"final":true}],"result_index":0} 

在这里输入图像说明

如果Google API没有任何结果,很可能无法满足要求。 所以你的代码没有什么问题,只是测试音频。 你有没有试过其他的音频文件? 我知道这是因为我已经使用Google自定义搜索API。 如果没有找到结果,它将返回空。