我需要做语音活动检测作为对音频文件进行分类的一个步骤。
基本上,我需要确切地知道给定的音频是否有语言。
我使用的是py-webrtcvad,它是我在git-hub中找到的,几乎没有文档:
https://github.com/wiseman/py-webrtcvad
问题是,当我在我自己的音频文件上尝试它时,它对那些有语音的文件工作得很好,但当我给它提供其他类型的音频(比如音乐或鸟鸣)时,它仍然产生假阳性,即使我将攻击性设置为3。
音频为8000采样/hz
我对源代码所做的唯一更改是将参数传递给main函数的方式(不包括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) 发布于 2020-06-16 21:58:02
我也看到了同样的事情。恐怕这只是它工作的程度。语音检测是一项困难的任务,而webrtcvad希望减少资源,因此您可以做的事情也就这么多了。如果您需要更高的精确度,那么您将需要不同的包/方法,这必然会占用更多的计算能力。
在攻击性上,你是对的,即使在3上,仍然有很多假阳性。然而,我也看到了假阴性,所以我使用的一个技巧是运行检测器的三个实例,每个侵略性设置一个。然后,我不对帧0或1进行分类,而是给它最高攻击性的值,仍然说它是语音。换句话说,每个样本现在的得分是0到3,这意味着即使是最不严格的检测器也会说它不是语音,而3意味着即使是最严格的设置也会说它是语音。我得到了更多的分辨率,即使是假阳性,对我来说也足够好了。
https://stackoverflow.com/questions/51463146
复制相似问题