【问题标题】:Is it not possible to use curl, to use Google Cloud Speech API, to recognize within 10 to 15 minute files?是否可以使用 curl 来使用 Google Cloud Speech API 来识别 10 到 15 分钟内的文件?
【发布时间】:2016-07-30 20:29:28
【问题描述】:

我正在使用带有 cURL 的 REST API,因为我需要做一些快速而简单的事情,而且我在一个无法开始倾倒垃圾的盒子上;即一些厚实的开发者 SDK。

我开始base64 编码flac 文件并启动speech.syncrecognize。

最终失败了:

{
  "error": {
    "code": 400,
    "message": "Request payload size exceeds the limit: 10485760.",
    "status": "INVALID_ARGUMENT"
  }
}

好吧,你不能在请求中发送 31,284,578 字节;必须使用云存储。因此,我上传了 flac 音频文件,并现在在 Cloud Storage 中使用该文件重试。这失败了:

{
  "error": {
    "code": 400,
    "message": "For audio inputs longer than 1 min, use the 'AsyncRecognize' method.",
    "status": "INVALID_ARGUMENT"
  }
}

太好了,speech.syncrecognize 不喜欢内容大小;再试一次speech.asyncrecognize。这失败了:

{
  "error": {
    "code": 400,
    "message": "For audio inputs longer than 1 min, please use LINEAR16 encoding.",
    "status": "INVALID_ARGUMENT"
  }
}

好的,所以speech.asyncrecognize只能做LPCM;以pcm_s16le 格式上传文件,然后重试。所以最后,我得到了一个操作手柄:

{
  "name": "9174269756763138681"
}

不断检查,最终完成:

{
  "name": "9174269756763138681",
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.speech.v1beta1.AsyncRecognizeResponse"
  }
}

所以等等,毕竟现在结果在队列中,没有REST 方法来请求结果?有人请告诉我,我错过了直接盯着我看的那种明显的感觉,而且 Google 并没有创建完全没有意义、不完整的 REST API。

【问题讨论】:

  • 在您的情况下,结果似乎只是空的。可能是音频格式不匹配,音频必须是 16khz 16bit little-endian。
  • 音频为 44,100 或 48,000。我会尝试下采样,尽管文档说:“有效值为:8000-48000”并建议“使用音频源的原生采样率(而不是重新采样)。”在我说我使用 pcm_l16se 的问题中,它应该读取 pcm_s16le,它是有符号的,16 位,小端。
  • 我相信对于 48,您必须在 asyncrecognize 中指定速率
  • 我做了 "config": { "encoding":"LINEAR16", "sample_rate": 48000, "language_code":"pt-BR" } ...但它显然没有用。

标签: rest curl speech-recognition google-speech-api


【解决方案1】:

所以问题的答案是,不,可以使用 curl,使用 Google Cloud Speech API,在 10 到 15 分钟内识别文件...假设您导航并遵守一组相当严格的约束...至少在 beta1 中。

从文档中没有明显看出的是结果应该由operations.get 方法返回......如果我的任何尝试实际上返回了空结果以外的其他内容,这将是显而易见的。

我文件中的源速率为 44,100 或 48,000 Hz,我将 sample_rate 设置为源原生速率。但是,与文档相反:

所有 RecognitionAudio 中发送的音频数据的采样率(以赫兹为单位) 消息。有效值为:8000-48000。 16000 是最佳的。为了最好 结果,将音频源的采样率设置为 16000 Hz。如果 这是不可能的,请使用音频源的原生采样率 (而不是重新采样)。

重新采样到 16,000 Hz 后,我开始使用 operations.get 获得结果。

我认为值得注意的是,相关性并不意味着因果关系。重新采样到 16,000 Hz 后,文件变得明显更小。因此,我无法证明这是采样率问题,而不仅仅是服务阻塞了超过一定大小的文件。

还值得注意的是,文档中提到的采样率不一致。根据它们各自的详细定义,gRPC API 可能需要 sample_rate,而 REST API 可能需要 sampleRate,在这种情况下,快速入门可能会为 REST API 提供不正确的示例。

【讨论】:

  • 根据documentation是sampleRate,不是sample_rate,一定是你没有正确设置速率。
  • 这取决于您正在查看的文档。在Quick Start 中是sample_rate。
  • 虽然 Quick Start 提供了一个带有 cURL 的 REST 示例,但gRPC 使用了 sample_rate,这可能是差异的根源。在Best Practice 中,它也是sample_rate,但更明显的是他们在谈论gRPC……只要你不去假设REST 是一样的。这就是您通过预览测试版所获得的。
  • 这也不是所有必需的,因为我从未提供 sampleRate 但它在@ 16k 时工作......它应该抛出一个异常。因此,它的行为更像是一个默认为 16k 的可选属性,而不是没有默认值的必需属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多