难道不能使用 curl,使用 Google Cloud Speech API,在 10 到 15 分钟内识别文件吗?

Is it not possible to use curl, to use Google Cloud Speech API, to recognize within 10 to 15 minute files?

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

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

最终失败了:

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

好吧,你不能在请求中发送 31,284,578 字节;必须使用云存储。因此,我上传了 flac 音频文件,然后再次尝试使用云存储中的文件。失败:

{
  "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 格式的文件,然后重试。所以最后,我得到了一个操作 handel:

{
  "name": "9174269756763138681"
}

继续检查,最终完成:

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

等一下,结果现在在队列中,没有 REST 方法来请求结果?有人请告诉我,我已经错过了那个明显地盯着我的脸,而且 Google 并没有创造出完全没有意义、不完整的 REST API.

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

从文档中看不出明显的是结果应该由 operations.get 方法返回...如果我的任何尝试实际上返回的不是空结果,这将是显而易见的。

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

Sample rate in Hertz of the audio data sent in all RecognitionAudio messages. Valid values are: 8000-48000. 16000 is optimal. For best results, set the sampling rate of the audio source to 16000 Hz. If that's not possible, use the native sample rate of the audio source (instead of re-sampling).

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

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

还值得注意的是,文档对采样率的引用不一致。看起来 gRPC API 可能期望 sample_rate,REST API 可能期望 sampleRate,根据它们各自的详细定义,在这种情况下,快速入门可能会给出一个REST API.

的不正确示例