【发布时间】: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