检测嘈杂音频数据中罕见的语音出现的好方法是什么?

数据挖掘 异常检测 音频识别
2022-03-11 01:09:32

我有一些录音(具有相对静态但嘈杂的背景,例如,空旷区域的风),有少量短暂的语音(约 1% 的总音频持续时间)。

以无人监督的方式检测语音发生的好方法是什么?

我在频谱图上尝试过简单的阈值化,但这是有问题的,因为:

  • 背景的强度会随着时间的推移而变得谨慎(即有时噪音会更大)
  • 不同的语音片段不需要彼此相似
  • 通常,语音太安静(与背景的平均响度相比)并且被噪音覆盖

这似乎是一项艰巨的任务,但是我可以通过收听音频/查看频谱图轻松注意到语音片段,因为语音的频谱图具有一些独特的结构(尽管依靠该结构进行检测并非易事因为它仍然很不规则)。

  • 请注意,我只想检测听起来像人类语音的间隔(或者说,与背景足够不同的东西,因为数据通常除了背景/语音之外没有其他声源)。
2个回答

专门检测语音是一个众所周知的问题,通常称为语音活动检测(VAD)。最简单的机制只是计算语音频率中能量与总能量的时间平均比率,这个想法在 Github 上的许多实现。语音的音频代码也倾向于包含 VAD 组件。基于 WebRTC 项目的 VAD,可以在libvad中找到一个现代示例。

更一般地,您可以使用Isolation ForestLocalOutlierFactor等算法尝试异常检测关键是使用好的特征作为输入。一个好的起点是计算mel-spectrogramMFCC频谱图帧应该被归一化,通常通过减去中值/平均值并除以 RMS 能量。在 20-50ms 的单个帧上运行异常检测,然后对分类进行一些过滤以减少错误触发。一个简单的方法是要求 N 个连续的帧被分类为异常,以将其视为真正的异常。或者要求在较大的滚动窗口(例如 200-1000 毫秒)内至少有 P% 的帧。

在 Python 中,您可以使用 librosa 进行音频特征提取,使用 scikit-learn 进行异常检测

请注意,为了评估您的方法,您需要收集和标记测试集。

如果你需要一个工具来实现它,你可以使用谷歌的 SpeechRecognition 包。是有关如何使用它的教程。

这很棒,因为它只有在听到一些讲话时才能打开,即使在嘈杂的环境中也很神奇。