Google Cloud Speech to text 返回空结果或错误

Google Cloud Speech to text returning empty result or error

现在努力了 4 天来修复 google 云语音到文本 api 的工作,但仍然看不到隧道尽头的光明。在网上搜索了很多,看了很多文档都没有结果。

我们的网站是 bbsradio.com,我们正在尝试使用 google 语音转文本 api 从我们的 mp3 文件中自动提取文字记录。代码写在 PHP 上,几乎是这个的副本:https://github.com/GoogleCloudPlatform/php-docs-samples/blob/master/speech/src/transcribe_async.php 我看到进程已完成并且它到达此处“$operation->pollUntilComplete();”但它没有显示它在“if ($operation->operationSucceeded()) {”处成功并且它在 $operation->getError().[=18= 处也没有返回任何错误]

我正在将 mp3 转换为原始文件,如下所示:ffmpeg -y -loglevel panic -i /public_html/sites/default/files/show-archives/audio-clips-9-23-2020/911freefall2020-05-24.mp3 -f s16le -acodec pcm_s16le -vn -ac 1 -ar 16000 -map_metadata -1 /home/mp3_to_raw/911freefall2020-05-24.raw

虽然也尝试使用 FLAC 格式,但没有用。我使用 windows 媒体播放器测试转换后的 FLAC 文件,我可以清楚地听到对话。我检查了文件的 Hz 16000、通道 = 1 和 16 位。我看到文件已上传到云存储中。检查这个:

https://cloud.google.com/speech-to-text/docs/troubleshootinghttps://cloud.google.com/speech-to-text/docs/best-practices

有很多讨论和文档,目前似乎没有任何帮助。如果有人真的能帮我找出问题所在,那就太好了!

TLDR;从 MP3 转换为 1 声道 FLAC 文件,采样率与您的 MP3 文件相同。

详细解释:

由于您使用 MP3 文件作为处理输入,可能当您重新采样到 16KHz 时,您的 MP3 压缩伪影可能会伤害您(您听不到这个,但是算法 ).

为了证实这个理论:

  • 执行ffprobe -hide_banner filename.mp3它会输出这样的东西:
  Metadata:
    ...
  Duration: 00:02:12.21, start: 0.025057, bitrate: 320 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 320 kb/s
    Metadata:
      encoder         : LAME3.99r
  • 在这种情况下,Google-Spech-Api 的采样率是可以的。只需转码文件而不更改采样率(从 ffmpeg 命令中删除 -ar 16000)

  • 如果原始 MP3 比特率较低,您可能会遇到麻烦。 320kb/s 似乎是安全的(除非录音有很多噪音)。

  • 考虑到在 64kb/s(ISDN 线路质量)下重新编码的语音只有在有噪音的情况下才能被人理解。

终于找到问题的解决方法和原因了。实际上得到空结果是 php api 代码的错误。你需要做什么:

替换为:

$operation->pollUntilComplete();

通过这个:

while(!$operation->isDone()){
       $operation->pollUntilComplete();
}

读这个:enter link description here