Google Speech API - 识别 base64 编码的音频

Posted

技术标签:

【中文标题】Google Speech API - 识别 base64 编码的音频【英文标题】:Google Speech API - recognizing base64 encoded audio 【发布时间】:2017-02-26 12:30:54 【问题描述】:

我一直在为 Google Speech API 苦苦挣扎,希望得到一些建议。

这是我想要做的:

    在浏览器中录制音频 将录音转换为base64并发送到我的服务器 在服务器上,调用 Google Speech API 的 syncRecognize 函数,传入我的 base 64 编码音频

我总是收到一个空的结果对象。

当我关注getting started tutorial 时,虽然一切正常。

我做错了什么?

非常感谢任何提示/想法。

const Speech = require('@google-cloud/speech');
const SpeechV1beta1 = require('@google-cloud/speech/src/v1beta1')

module.exports = 

    syncRecognize: function(base64Encoding) 

       const speech = Speech();
       const speechV1beta1 = SpeechV1beta1();
       const client = speechV1beta1.speechClient();

       const body = 
           "config": 
               "encoding":"LINEAR16",
               "sampleRate":16000,
               "languageCode":"en-US"
           ,
           "audio": 
              "content": base64Encoding
           
       

       return client.syncRecognize(body)
        .then((results) => 
            console.log('results', results) 
            return transcription: results[0];
        ).catch(function(error) 
            return error: error;
        );;

    

【问题讨论】:

我以前从未尝试在浏览器中执行此操作,所以我不确定。有什么方法可以将音频内容数据保存到文件中,以确保它是可播放的(并且它是 LINEAR16 16kHz)?如果给它一个URI,相同的代码是否有效?如果是这样,问题似乎出在音频“内容”上。 【参考方案1】:

可能您从浏览器记录的内容没有那些配置参数。

我遇到的另一个问题是,对于超过 5 秒的音频持续时间,超时启动,到目前为止,我无法有效地更改 API 截止日期。这也可能是您的情况。

为了在我的 web 应用程序中验证音频的元数据,我使用 ffmpeg:我自动将文件保存到存储中并在脚本中运行 ffmpeg -i filename 以检索采样率、编码、通道数和持续时间。

请注意,有 audio lenght limits 用于同步语音识别请求。如果超过了,我建议您使用异步方法(或将音频文件拆分为子文件)。在前一种情况下,您可能需要转换音频编码(幸运的是 ffmpeg 也可以为您做到这一点:))。在后一种情况下,您可以使用SoX 将音频拆分为静音并分别处理。

【讨论】:

以上是关于Google Speech API - 识别 base64 编码的音频的主要内容,如果未能解决你的问题,请参考以下文章

Google-speech-api 错误地转录口语数字

来自浏览器的Google Speech API

403(禁止),Google Speech API 上的无效键错误

Web Speech API - iOS 中的语音识别

使用 C++ 的 Google Cloud Speech API,第一步是啥?

谷歌语音识别 API