我正在处理一个需要执行以下步骤的项目:
- 录制语音通话(
.webm
文件( - 使用
ffmpeg
将webm
文件拆分为块,并将文件转换为wav
- 使用
SpeechRecognition
库和 Google Cloud API 转录区块
我遇到了转录准确性的问题,想知道我是否可以做些什么来改进它。当时,我将原始文件拆分为30s块。我认为可能有一个问题,我可能因为拆分而遗漏了单词,所以我也尝试了 60 秒以下的较长块,但没有注意到准确性有任何提高。 通过阅读我决定设置r.energy_threshold = 4000
的语音识别文档,我也尝试像这样动态设置energy_treshold
:
with sr.AudioFile(name) as source:
r.dynamic_energy_threshold = True
r.adjust_for_ambient_noise(source, duration = 1)
audio = r.record(source)
我还测试了en-US
和en-GB
,看看是否有一些差异,但没有我想要的那么多。该程序应该与北欧人说的英语一起工作。如果有人有为口音说话的人选择合适的语言模型的经验,请告诉我。
这是用于将webm文件拆分为块的ffmpeg
命令:command = ['ffmpeg', '-i', filename, '-f', 'segment', '-segment_time', '30', parts_dir + outputname + '%09d.wav']
有什么我可以做得更好的吗?我想知道质量是否不够好,谷歌因此而很难过?
主要问题是我从谷歌那里得到了不好的结果(很多错误的词(,想知道我是否可以做些什么。
-
直接使用 Google Speech API 并转录整个文件。分裂是个坏主意。
-
使用语音上下文功能提高准确性。
-
对于电话,请使用谷歌的特定电话型号
-
使用其他工具包来适应您的音频和词汇。通常对于糟糕的音频案例,经过调整的开源工具包显示出比通用Google解决方案更好的准确性。
-
共享音频文件以更好地了解准确性。
检查 .webm 和 .wav 文件的采样率,以确保您没有对文件进行上采样/下采样。我认为允许跳过在对 Google Speech 的请求中明确设置音频采样率,但我怀疑如果您手动设置正确的采样率,它会提供更高的准确性。
我同意 Nikolay 的观点,即拆分音频是一个坏主意,但如果您必须这样做才能使其正常工作,您应该尝试使用 ffmpeg 检测文件中的静音期。您可以将文件拆分为有>2-3 秒静音的文件,因为 Google 语音会将其解释为句子的结尾,因此不会影响您的结果。如果您打算提出很多请求,最好不要将音频分成块,例如:31s,因为这将导致Google Speech收取3 * 15s的费用,而不是2s,如果您要在2s时拆分。