是否无法使用curl来使用Google Cloud Speech API识别10到15分钟的文件?

tlu*_*lum 5 rest curl speech-recognition google-speech-api

我正在使用REST API与cURL,因为我需要做一些快速而简单的事情,而且我在一个盒子里,我无法开始倾倒垃圾; 即一些厚的开发人员SDK.

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

最终失败了:

{
  "error": {
    "code": 400,
    "message": "Request payload size exceeds the limit: 10485760.",
    "status": "INVALID_ARGUMENT"
  }
}
Run Code Online (Sandbox Code Playgroud)

好的,你不能在请求中发送31,284,578字节; 必须使用云存储.所以,我上传了flac音频文件,然后再使用云存储中的文件重试.那失败了:

{
  "error": {
    "code": 400,
    "message": "For audio inputs longer than 1 min, use the 'AsyncRecognize' method.",
    "status": "INVALID_ARGUMENT"
  }
}
Run Code Online (Sandbox Code Playgroud)

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

{
  "error": {
    "code": 400,
    "message": "For audio inputs longer than 1 min, please use LINEAR16 encoding.",
    "status": "INVALID_ARGUMENT"
  }
}
Run Code Online (Sandbox Code Playgroud)

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

{
  "name": "9174269756763138681"
}
Run Code Online (Sandbox Code Playgroud)

继续检查,最终完成:

{
  "name": "9174269756763138681",
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.speech.v1beta1.AsyncRecognizeResponse"
  }
}
Run Code Online (Sandbox Code Playgroud)

那么等等,毕竟结果现在坐在队列中,没有REST方法可以请求结果?有人请告诉我,我已经错过了明显盯着我的人,并且Google没有创建完全没有意义,不完整的REST API.

tlu*_*lum 3

所以问题的答案是,不,可以使用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 提供错误的示例。