Python WebRTC语音活动检测错误

时间:2018-07-22 08:03:27

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

我需要进行语音活动检测,作为对音频文件进行分类的步骤。

基本上,我需要确定是否知道给定的音频是否使用了口语。

我正在使用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)  

1 个答案:

答案 0 :(得分:1)

我看到的是同一件事。恐怕这只是它的作用范围。语音检测是一项艰巨的任务,webrtcvad希望利用资源,因此您只能做很多事情。如果需要更高的准确性,则需要使用不同的软件包/方法,这些软件包/方法必然会占用更多的计算能力。

关于进取心,您说对了,即使是3,仍然存在很多误报。但是我也看到了假阴性,所以我正在使用的一个技巧是运行检测器的三个实例,每个主动性设置一个。然后,我没有将帧0或1进行分类,而是给它提供了最高的攻击性值,该值仍然表示是语音。换句话说,每个样本现在的得分为0到3,其中0表示即使是最不严格的检测器也不是语音,而3表示甚至是最严格的设置也是如此。这样我可以获得更多的分辨率,即使出现误报,对我来说也足够好。

相关问题