我想在我当前的项目中使用Google Speech API。
我从here
获取了有关如何访问api的信息如github所述,你必须向服务器发送一个post webrequest并以json的形式返回结果。
我还从here
获得了一些用于v1 api的源代码设置请求并不难:
WebRequest request = WebRequest.Create(Constants.GoogleRequestString);
request.Method = "POST";
request.ContentType = "audio/x-flac; rate=" + sampleRate;
request.ContentLength = bytes.Length;
在我的示例中,Constants.GoogleRequestString
等于https://www.google.com/speech-api/v2/recognize?output=json&lang=en-us&key=AIzaSyCnl6MRydhw_5fLXIdASxkLJzcJh5iX0M4
我从github链接下载了.flac文件并在c#中编写了一个小程序,它正在加载flac文件的字节,并使用略微修改的方法GoogleRequest(byte[] bytes, int sampleRate)
我打开流,如方法所示,并将所有字节发送到服务器。我收到了回复,但是
我得到的JSON字符串是:"{\"result\":[]}"
我不知道它为什么不起作用。文件或文件中的语音文字不正确(但是如果我用vlc听它,我清楚地听到语音文字)或者我的程序仍有一些错误。
你有没有遇到过这个问题而没有得到语音api的结果?它不应该说result: couldn't understand what is spoken
或任何其他错误消息吗?
我刚尝试了.wav文件。这对我有用。
答案 0 :(得分:1)
您的代码很好,假设它类似于:
var uriBuilder = new UriBuilder(
"https",
"www.google.com",
443,
"speech-api/v2/recognize",
"?output=json&lang=en-us&key=YOURAPIKEY");
int sampleRate = 44100;
using (var stream = File.Open("c:\\tmp\\g2.flac", FileMode.Open))
{
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(uriBuilder.Uri);
request.Method = "POST";
request.ContentType = "audio/x-flac; rate=" + sampleRate;
request.AutomaticDecompression = DecompressionMethods.GZip;
stream.CopyTo(request.GetRequestStream());
try
{
using (var resp = request.GetResponse().GetResponseStream())
{
using (var sr = new StreamReader(resp))
{
Debug.WriteLine(sr.ReadToEnd());
}
}
}
catch(WebException ee)
{
var all = new StreamReader(ee.Response.GetResponseStream()).ReadToEnd();
Debug.WriteLine(all);
}
}
重要的是FLAC文件的确切格式。我使用Audacity来控制音轨的保存方式。
录制后我将曲目设置更改为:
以下屏幕截图显示了这些设置:
使用默认的立体声音轨和32位浮点样本格式,我无法获得语音API以产生任何其他结果,然后你也得到了空的json有效载荷。
使用上述设置,我的结果是:
{
"result" : []
}{
"result" : [{
"alternative" : [{
"transcript" : "translate this",
"confidence" : 0.92849225
}, {
"transcript" : "translate days"
}, {
"transcript" : "translate dish"
}, {
"transcript" : "translate fish"
}, {
"transcript" : "translate these"
}
],
"final" : true
}
],
"result_index" : 0
}
我的英语发音不是很好,因为谷歌认为我想翻译鱼......
如果出现http错误(如403 Forbidden),异常处理程序会尝试从http正文中读取完整的响应。如果您的身份验证密钥不正确,它会告诉您。
要使您的api键能够使用Speech API,请按照here
说明进行操作确保您是chromium-dev@chromium.org的成员(您只需subscribe到chrome-dev并选择不接收邮件。)
之后,您可以创建服务器密钥: