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/troubleshooting
和
https://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();
}
现在努力了 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/troubleshooting
和
https://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();
}