【问题标题】:Google Speech API v2 result is blankGoogle Speech API v2 结果为空白
【发布时间】:2014-04-24 12:43:15
【问题描述】:

我想在我当前的项目中使用 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 听,我清楚地听到口语文本)或者我的程序仍有一些错误。

你有没有遇到过speech-api没有结果的问题?它不应该说类似result: couldn't understand what is spoken 或任何其他错误消息吗?

我刚刚试用了 .wav 文件。这对我有用。

【问题讨论】:

  • 你的采样率是多少?对我来说,这是 flac 的采样率。
  • 根据 VLC,采样率为 44100Hz。我使用 44100 作为 flac 文件。但还是没有结果。
  • pastebin.com/Ns3XxBNP 这是我用于语音到文本的类。 (从 CloudSpeech 项目编辑)感兴趣的功能是识别(Stream contentToRecognize),您只需在其中放入您的 flac 流。显然忽略 JSON 解析器,看看你是否得到响应,因为这对我来说绝对有用。

标签: c# google-api speech-recognition


【解决方案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 来控制如何保存我的音轨。

录制后我将音轨设置更改为:

  • 单声道
  • 示例格式:16 位 PCM
  • 频率:44100赫兹

以下屏幕截图显示了这些设置:

使用默认立体声轨道和 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-keys 与 Speech API 配合使用,请按照说明 here

确保您是 chromium-dev@chromium.org 的成员(您可以将subscribe 发送至 chromium-dev 并选择不接收邮件)。

之后您可以创建服务器密钥:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多