首页 > 解决方案 > Google Cloud Speech to text 返回空结果或错误

问题描述

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

我们的网站是 bbsradio.com,我们正在尝试使用 google Speech-to-text api 从我们的 mp3 文件中自动提取成绩单。代码是用 PHP 编写的,几乎完全是这样的副本:https://github.com/GoogleCloudPlatform/php-docs-samples/blob/master/speech/src/transcribe_async.php 我看到过程已完成,它在这里“ $operation->pollUntilComplete();”但它没有显示它在“”处是成功的,if ($operation->operationSucceeded()) {并且它也没有返回任何错误$operation->getError()

我正在将 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

有很多讨论和文档,目前似乎没有任何帮助。如果有人真的可以帮助我找出问题所在,那将是非常非常棒的!

标签: google-cloud-platformgoogle-cloud-speech

解决方案


TLDR;从 MP3 转换为具有与 MP3 文件相同采样率的 1 通道 FLAC 文件。

长解释:

由于您使用 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 线路质量)录制的语音只有在有噪音的情况下才能被人类理解。


推荐阅读