Google语音API出现无效参数错误

5

我想使用Google语音API的异步转录服务。我已经将我的音频文件上传到了Google buckets,并尝试使用以下代码进行操作(我已从命令中删除了我的密钥和文件名,其他都是复制的)。

curl -H "Content-Type: application/json" 
    --data '{"audio":{"uri":"https://storage.cloud.google.com/<mybucketname>/<filename>"},
    "config":{"encoding":"FLAC","sample_rate_hertz":"16000","language_code":"en_US"}}' 
    https://speech.googleapis.com/v1/speech:longrunningrecognize?key=<mykey>

我收到了一个400 INVALID_ARGUMENT错误,告诉我“请求包含无效参数”。我的curl请求出了什么问题?
4个回答

1
显然问题出在我的URI上。Google有一种特殊的方式来引用Google存储桶中的项目,前缀为“gs:”。
curl -H "Content-Type: application/json" 
    --data '{"audio":{"uri":"gs://<mybucketname>/<filename>"},
    "config":{"encoding":"FLAC","sample_rate_hertz":"16000","language_code":"en_US"}}' 
    https://speech.googleapis.com/v1/speech:longrunningrecognize?key=<mykey>

请注意,我在采用这种方法后遇到了权限错误,但我认为这与我的curl请求方式无关。

0

<filename> 后面应该加双引号吗?


哦,那是我在复制命令时犯的一个打字错误。已经在问题中修正了。谢谢。 - Roozbehan

0

检查sample_rate_Hertz。你可能会发现这是SYNCHRONOUS请求的格式。

ASYNCHRONOUS是sampleRateHertz。

我刚刚让它工作了,所以如果需要的话,请在我的记忆还很新鲜时回退!


能否提供这个的源码?尝试运行时出现 ValueError: Protocol message RecognitionConfig has no "sampleRateHertz" field。谢谢! - Ronen Ness

0
我正在使用Node JS客户端和Google Storage存储文件。
    // The audio file's encoding, sample rate in Hertz, and BCP-47 language code
    const audio = {
        uri: 'gs://sst_bbc/',
    };
    const config = {
        enableWordTimeOffsets: true,
        encoding: 'FLAC',
        // sampleRateHertz: 16000,
        languageCode: 'en-US',
    };
    const request = {
        audio: audio,
        config: config,
    };

    // Detects speech in the audio file
    const [operation] = await client.longRunningRecognize(request);
    const [response] = await operation.promise();

    fs.writeFileSync('ted_talk.json', JSON.stringify(response), 'utf8');

我犯了一个错误,没有引用正确的对象。控制台中的错误非常模糊。在我设置正确的路径之后,它开始正常工作。

    const audio = {
        uri: 'gs://sst_bbc/ted_talk.flac',
    };

如果文件位置正确,请再次检查编码类型。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接