首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python webrtc语音活动检测错误

python webrtc语音活动检测错误
EN

Stack Overflow用户
提问于 2018-07-22 16:03:27
回答 1查看 2K关注 0票数 4

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

基本上,我需要确切地知道给定的音频是否有语言。

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

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

问题是,当我在我自己的音频文件上尝试它时,它对那些有语音的文件工作得很好,但当我给它提供其他类型的音频(比如音乐或鸟鸣)时,它仍然产生假阳性,即使我将攻击性设置为3。

音频为8000采样/hz

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

代码语言:javascript
复制
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)  
EN

回答 1

Stack Overflow用户

发布于 2020-06-16 21:58:02

我也看到了同样的事情。恐怕这只是它工作的程度。语音检测是一项困难的任务,而webrtcvad希望减少资源,因此您可以做的事情也就这么多了。如果您需要更高的精确度,那么您将需要不同的包/方法,这必然会占用更多的计算能力。

在攻击性上,你是对的,即使在3上,仍然有很多假阳性。然而,我也看到了假阴性,所以我使用的一个技巧是运行检测器的三个实例,每个侵略性设置一个。然后,我不对帧0或1进行分类,而是给它最高攻击性的值,仍然说它是语音。换句话说,每个样本现在的得分是0到3,这意味着即使是最不严格的检测器也会说它不是语音,而3意味着即使是最严格的设置也会说它是语音。我得到了更多的分辨率,即使是假阳性,对我来说也足够好了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51463146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档