【问题标题】:Improving accuracy of a voice detection algorithm提高语音检测算法的准确性
【发布时间】:2013-12-10 10:55:23
【问题描述】:

所以我有这个 Mono 音频文件,其中包含人们说话、说话暂停然后他们再次说话。在他们说话和不说话的时候,背景中不时有孩子在哭泣,汽车刹车的尖叫声,你在外面时听到的声音。

我的目标是在他们说话时保留这些部分,并在他们不说话时剪掉这些部分。不需要过滤背景噪音。

基本上我的最终目标是有一个这样的切割清单

Start in seconds, End in seconds

我尝试了什么?

  1. 我通过将所有包含语音的部分组合在一起手动创建了一个纯语音文件。(10 秒)
  2. 我通过将所有不包含语音的部分组合在一起手动创建了一个纯噪声文件。(50 秒)
  3. 我通过应用快速傅里叶变换得到了频率 + 幅度
  4. 我每 100 毫秒浏览一次音频文件并拍摄 FFT 快照
  5. 我将一个快照的所有值(在我的情况下为 512)放入一个列表中,并将其提供给机器学习算法(numl)和一个标签(在第一种情况下 voice = true,在第二种情况下 voice = false )
  6. 然后我使用我的主音频文件,基本相同,但这次使用我的机器学习模型的结果来确定它是否是语音,并以秒为单位输出它实现这一点的时间。

我的问题是我得到了很多误报和误报。它似乎在没有声音时识别声音,反之亦然。

这可能是一个训练有素的模型(我使用决策树)还是我需要采取其他措施以获得更好的结果?

【问题讨论】:

  • 使用 PCA 分离主扬声器,背景噪音应该可以为您提供更好的数据。

标签: c# c#-4.0 machine-learning c#-3.0 voice-recognition


【解决方案1】:

关于语音的常见误解是将其视为不相关的数据帧序列。语音的核心属性是它是一个时间上的连续过程,而不仅仅是一组数据点。

任何合理的 VAD 都应考虑到这一点,并使用 HMM 等面向时间的分类器。在您的情况下,任何考虑时间的分类器都是简单的基于能量的语音活动检测,它监控背景水平或基于 GMM-HMM 的 VAD 将比任何静态分类器做得更好。

关于简单算法的描述可以查看Wikipedia

如果你正在寻找一个好的复杂的 VAD 实现,你可以在 WebRTC 项目中找到一个,这个 VAD 是由 Google 开发的:

https://code.google.com/p/webrtc/source/browse/trunk/webrtc/common_audio/vad/

【讨论】:

  • 你有 C# 实现吗?
  • 您可以通过互操作插入 C# 中的 C 代码。在 C# 中找到好的 VAD 的可能性很小,因为它们中的大多数都是在 C/C++/Matlab 中实现的。
  • 请通过编辑您的回复以供大家查看,以示例中的方式分享如何在 c# 中使用这个非常 VAD by google。
  • @Gewinn 你为什么不亲自尝试一下,让我们知道你的发现?
  • 请通过编辑您的回复以供大家查看,以示例中的方式分享如何在 c# 中使用这个非常 VAD by google。
猜你喜欢
  • 2020-02-12
  • 1970-01-01
  • 1970-01-01
  • 2014-12-23
  • 1970-01-01
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
  • 2017-06-22
相关资源
最近更新 更多