【问题标题】:python webrtc voice activity detection is wrongpython webrtc语音活动检测错误
【发布时间】:2018-12-29 23:34:12
【问题描述】:

我需要将语音活动检测作为音频文件分类的一个步骤。

基本上,我需要确定给定音频是否具有口语。

我正在使用 py-webrtcvad,这是我在 git-hub 中找到的,几乎没有文档记录:

https://github.com/wiseman/py-webrtcvad

问题是,当我在自己的音频文件上尝试它时,它适用于那些有语音的文件,但当我用其他类型的音频(如音乐或鸟声)输入它时,它会不断产生误报,即使我将攻击性设置为 3。

音频为 8000 采样/hz

我对源代码的唯一更改是我将参数传递给主函数的方式(不包括 sys.args)。

def main(file, agresividad):

    audio, sample_rate = read_wave(file)
    vad = webrtcvad.Vad(int(agresividad))
    frames = frame_generator(30, audio, sample_rate)
    frames = list(frames)
    segments = vad_collector(sample_rate, 30, 300, vad, frames)
    for i, segment in enumerate(segments):
        path = 'chunk-%002d.wav' % (i,)
        print(' Writing %s' % (path,))
        write_wave(path, segment, sample_rate)

if __name__ == '__main__':

    file = 'myfilename.wav'
    agresividad = 3 #aggressiveness
    main(file, agresividad)  

【问题讨论】:

  • 运气好吗?我有同样的问题。它可以检测音乐甚至是语音输入。
  • 只是想知道您是否对此有任何回顾性见解。这可能只是 webrtc 训练针对哪些类型的非语音噪声所固有的,不是吗?

标签: python audio webrtc speech-recognition voice-recognition


【解决方案1】:

我看到了同样的事情。恐怕这只是它起作用的程度。语音检测是一项艰巨的任务,webrtcvad 想要减少资源,所以你能做的只有这么多。如果您需要更高的准确性,那么您将需要不同的包/方法,这必然需要更多的计算能力。

关于攻击性,你是对的,即使在 3 上仍有很多误报。但是我也看到了假阴性,所以我使用的一个技巧是运行三个检测器实例,一个用于每个攻击性设置。然后,我没有对帧 0 或 1 进行分类,而是赋予它仍然表示它是语音的最高攻击性的值。换句话说,每个样本现在都有 0 到 3 的分数,0 表示即使最不严格的检测器表示它不是语音,3 表示即使是最严格的设置也表示它是。我得到了更多这样的分辨率,即使有误报,这对我来说也足够了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 2020-09-24
    • 2020-12-27
    相关资源
    最近更新 更多