google-cloud-platform - 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/troubleshooting
和
https://cloud.google.com/speech-to-text/docs/best-practices
有很多讨论和文档,目前似乎没有任何帮助。如果有人真的可以帮助我找出问题所在,那将是非常非常棒的!
解决方案
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 线路质量)录制的语音只有在有噪音的情况下才能被人类理解。
推荐阅读
- python - 从 OpenCV/cv2 到 nginx 服务器的 RTMP 流,但客户端只得到一个绿色窗口
- dynamics-crm - Dynamics CRM 365 的 DocuSign 集成 - GetSignatures 失败
- python - 蟒蛇 | 修改未绑定对象仍然修改两者
- r - Shiny传单地图中标记的选择性更新
- wso2 - 如何使用租户管理员凭据登录 WSO2 IS Analytics 门户?
- c++ - 在苹果 m1 上的 Clion 版本中找不到 bits/stdc++.h' 文件
- sql - 通过 GraphQL 返回 sql/postGIS 创建的视图
- vue.js - HTML 拖放 api getdata undefined
- php - 试用期系统连同订阅 - PHP 和 MySQL
- javascript - 从另一个对象构建对象,该对象将其键与数组中的值进行比较