提高 Google Cloud 语音转文本的准确性



我正在处理一个需要执行以下步骤的项目:

  1. 录制语音通话(.webm文件(
  2. 使用ffmpegwebm文件拆分为块,并将文件转换为wav
  3. 使用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-USen-GB,看看是否有一些差异,但没有我想要的那么多。该程序应该与北欧人说的英语一起工作。如果有人有为口音说话的人选择合适的语言模型的经验,请告诉我。

这是用于将webm文件拆分为块的ffmpeg命令:command = ['ffmpeg', '-i', filename, '-f', 'segment', '-segment_time', '30', parts_dir + outputname + '%09d.wav']

有什么我可以做得更好的吗?我想知道质量是否不够好,谷歌因此而很难过?

主要问题是我从谷歌那里得到了不好的结果(很多错误的词(,想知道我是否可以做些什么。

  1. 直接使用 Google Speech API 并转录整个文件。分裂是个坏主意。

  2. 使用语音上下文功能提高准确性。

  3. 对于电话,请使用谷歌的特定电话型号

  4. 使用其他工具包来适应您的音频和词汇。通常对于糟糕的音频案例,经过调整的开源工具包显示出比通用Google解决方案更好的准确性。

  5. 共享音频文件以更好地了解准确性。

检查 .webm 和 .wav 文件的采样率,以确保您没有对文件进行上采样/下采样。我认为允许跳过在对 Google Speech 的请求中明确设置音频采样率,但我怀疑如果您手动设置正确的采样率,它会提供更高的准确性。

我同意 Nikolay 的观点,即拆分音频是一个坏主意,但如果您必须这样做才能使其正常工作,您应该尝试使用 ffmpeg 检测文件中的静音期。您可以将文件拆分为有>2-3 秒静音的文件,因为 Google 语音会将其解释为句子的结尾,因此不会影响您的结果。如果您打算提出很多请求,最好不要将音频分成块,例如:31s,因为这将导致Google Speech收取3 * 15s的费用,而不是2s,如果您要在2s时拆分。

最新更新