谷歌为WebRTC项目开发的VAD是目前最优秀、最先进和免费的产品之一。webrtcvad是WebRTC语音活动检测器(VAD)的python接口。兼容python2和python3。功能是将一段音频数据分为静音与非静音。它对于电话和语音识别很有用。

1、安装pip

  1. yum -y install epel-release
  2. yum -y install python-pip

2、安装webrtcvad

  1. yum -y install python-devel
  2. pip install webrtcvad

3、webrtcvad测试脚本(test_webrtcvad.py

  1. import collections
  2. import contextlib
  3. import sys
  4. import wave
  5.  
  6. import webrtcvad
  7.  
  8. def read_wave(path):
  9. with contextlib.closing(wave.open(path, 'rb')) as wf:
  10. num_channels = wf.getnchannels()
  11. assert num_channels == 1
  12. sample_width = wf.getsampwidth()
  13. assert sample_width == 2
  14. sample_rate = wf.getframerate()
  15. assert sample_rate in (8000, 16000, 32000)
  16. pcm_data = wf.readframes(wf.getnframes())
  17. return pcm_data, sample_rate
  18.  
  19. def write_wave(path, audio, sample_rate):
  20. with contextlib.closing(wave.open(path, 'wb')) as wf:
  21. wf.setnchannels(1)
  22. wf.setsampwidth(2)
  23. wf.setframerate(sample_rate)
  24. wf.writeframes(audio)
  25.  
  26. class Frame(object):
  27. def __init__(self, bytes, timestamp, duration):
  28. self.bytes = bytes
  29. self.timestamp = timestamp
  30. self.duration = duration
  31.  
  32. def frame_generator(frame_duration_ms, audio, sample_rate):
  33. n = int(sample_rate * (frame_duration_ms / 1000.0) * 2)
  34. offset = 0
  35. timestamp = 0.0
  36. duration = (float(n) / sample_rate) / 2.0
  37. while offset + n < len(audio):
  38. yield Frame(audio[offset:offset + n], timestamp, duration)
  39. timestamp += duration
  40. offset += n
  41.  
  42. def vad_collector(sample_rate, frame_duration_ms,
  43. padding_duration_ms, vad, frames):
  44. num_padding_frames = int(padding_duration_ms / frame_duration_ms)
  45. ring_buffer = collections.deque(maxlen=num_padding_frames)
  46. triggered = False
  47. voiced_frames = []
  48. for frame in frames:
  49. sys.stdout.write(
  50. '' if vad.is_speech(frame.bytes, sample_rate) else '')
  51. if not triggered:
  52. ring_buffer.append(frame)
  53. num_voiced = len([f for f in ring_buffer
  54. if vad.is_speech(f.bytes, sample_rate)])
  55. if num_voiced > 0.9 * ring_buffer.maxlen:
  56. sys.stdout.write('+(%s)' % (ring_buffer[0].timestamp,))
  57. triggered = True
  58. voiced_frames.extend(ring_buffer)
  59. ring_buffer.clear()
  60. else:
  61. voiced_frames.append(frame)
  62. ring_buffer.append(frame)
  63. num_unvoiced = len([f for f in ring_buffer
  64. if not vad.is_speech(f.bytes, sample_rate)])
  65. if num_unvoiced > 0.9 * ring_buffer.maxlen:
  66. sys.stdout.write('-(%s)' % (frame.timestamp + frame.duration))
  67. triggered = False
  68. yield b''.join([f.bytes for f in voiced_frames])
  69. ring_buffer.clear()
  70. voiced_frames = []
  71. if triggered:
  72. sys.stdout.write('-(%s)' % (frame.timestamp + frame.duration))
  73. sys.stdout.write('\n')
  74. if voiced_frames:
  75. yield b''.join([f.bytes for f in voiced_frames])
  76.  
  77. def main(args):
  78. if len(args) != 2:
  79. sys.stderr.write(
  80. 'Usage: example.py <aggressiveness> <path to wav file>\n')
  81. sys.exit(1)
  82. audio, sample_rate = read_wave(args[1])
  83. vad = webrtcvad.Vad(int(args[0]))
  84. frames = frame_generator(30, audio, sample_rate)
  85. frames = list(frames)
  86. segments = vad_collector(sample_rate, 30, 300, vad, frames)
  87. for i, segment in enumerate(segments):
  88. #path = 'chunk-%002d.wav' % (i,)
  89. print('--end')
  90. #write_wave(path, segment, sample_rate)
  91.  
  92. if __name__ == '__main__':
  93. main(sys.argv[1:])

4、运行命令(其中,第一个参数为敏感系数,取值0-3,越大表示越敏感,越激进,对细微的声音频段都可以识别出来;第二个参数为wav文件存放路径,目前仅支持8K,16K,32K的采样率,示例wav文件下载:73.wav 链接:https://pan.baidu.com/s/19YJB9u0zvCFGBLDRisK1KQ 密码:fgkf)

  1. [root@host---- ~]# python test_webrtcvad.py /home/.wav
  2. +(2.1)-(3.36)--end
  3. +(3.57)-(14.43)--end
  4. +(15.3)-(16.14)--end
  5. +(21.21)-(22.47)--end
  6. +(22.68)-(24.6)--end
  7. +(24.66)-(26.76)--end
  8. +(26.76)-(27.81)--end
  9. +(27.87)-(31.38)--end
  10. +(31.38)-(32.91)--end
  11. +(33.21)-(35.04)--end
  12. +(35.73)-(41.43)--end
  13. +(42.66)-(43.8)--end
  14. +(43.95)-(51.03)--end
  15. +(51.15)-(53.82)--end
  16. +(53.82)-(59.85)--end
  17. +(60.51)-(64.74)--end
  18. +(65.46)-(67.26)--end
  19. +(67.74)-(69.39)--end
  20. +(69.42)-(74.55)--end
  21. +(74.55)-(81.24)--end
  22. +(81.51)-(87.66)--end
  23. +(87.9)-(89.76)--end
  24. +(91.08)-(92.04)--end
  25. +(92.31)-(96.9)--end
  26. +(97.23)-(102.27)--end
  27. +(102.51)-(104.43)--end
  28. +(104.43)-(105.9)--end
  29. +(106.38)-(108.12)--end
  30. +(108.69)-(110.16)--end
  31. +(111.12)-(113.13)--end
  32. +(113.13)-(114.87)--end
  33. +(114.87)-(118.08)--end

语音活性检测器py-webrtcvad安装使用的更多相关文章

  1. python 使用 setup.py 方式安装及包的卸载

     安装:         可通过 --home 或 --prefix 指定安装目录 --prefix=xx/xxx    选择安装目录 --record files.txt   记录所有安装文件的路径 ...

  2. python 利用 setup.py 手动安装第三方类库

    python 利用 setup.py 手动安装第三方类库 由于我在mac使用时,装了python3,默认有python2的环境,使用 pip 安装第三方类库时,老是安装到 python2的环境上: 在 ...

  3. python 利用 setup.py 手动安装django_chartit

    手动安装django_chartit库 1 下载压缩包 2 解压到python安装目录下,文件夹名为django_chartit,并检查文件夹下是否有setup.py文件 3 在cmd中进入djang ...

  4. 对于python setup.py install安装的包如何卸载

    easy_install 安装 卸载命令 easy_install -m package-name setup.py安装 帮助你纪录安装细节方便你卸载 python setup.py install ...

  5. easygui.py的安装和下载地址

    easygui下载地址:http://nchc.dl.sourceforge.net/project/easygui/0.97/easygui-0.97.zip 安装:解压后将easygui.py拷贝 ...

  6. 简单使用setup.py来安装Python项目

    最近做个一个项目需要用到setup.py 这个构建工具来进行项目的便捷安装,把搜集到的一些资料加上个人理解整理成文章,如有错误的地方请各位大佬及时指出,小弟马上修改,下面正式进入setup.py的描述 ...

  7. ez_setup.py(安装python下setuptools用)

    #!python"""Bootstrap setuptools installation If you want to use setuptools in your pa ...

  8. 【py】安装ipython-notebook

    os:ubunutu(debian)-based linux 分两步: 安装ipython及其依赖包 sudo apt-get install ipython-notebook   安装可选的附加工具 ...

  9. Linux 问题 卸载setup.py方式安装的python包

    python ./setup.py install --record install.txt  cat install.txt | xargs rm -rf

随机推荐

  1. 杭电1506 java

    求最大子矩阵面积(dp) import java.util.*; public class Main1{ public static void main(String[] args) { Scanne ...

  2. 小甲鱼Python第十九讲课后习题

    笔记: 1.内嵌函数:函数内部新创建另一个函数 2.闭包:函数式编程的重要语法,如果在一个内部函数里,对外部作用域(但不是在全局作用域的变量)进行引用,那么内部函数就会被认为是闭包. 3.nonloc ...

  3. 201771010118马昕璐《面向对象程序设计java》第八周学习总结

    第一部分:理论知识学习部分 1.接口 在Java程序设计语言中,接口不是类,而是对类的一组需求描述,由常量和一组抽象方法组成.Java为了克服单继承的缺点,Java使用了接口,一个类可以实现一个或多个 ...

  4. Go数组求和

    package main import "fmt" ]int func main() { a := [],,,,} var b int for index,value := ran ...

  5. MySQL数据库的几种引擎

    有些东西其实一直在用,但是突然问起来它是啥,可能你会很陌生,很陌生,很陌生 ....... mysql的四种引擎: 1.MyISAM存储引擎 不支持事务,不支持外键,优势是访问速度快,对事务完整性没有 ...

  6. [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed

    1.在vs编写时出现这个问题(以下为网络查询结果) 问题的原因是“SSL: CERTIFICATE_VERIFY_FAILED”. Python 升级到 2.7.9 之后引入了一个新特性,当使用url ...

  7. socket(套接字)初使用

    socket层 socket:是应用层与TCP/IP协议通信的中间软件抽象层,是一组接口,在设计模式中,socket其实就是一个门面模式,它把复杂的TCP/IP协议隐藏在socket接口后面. 基于T ...

  8. iOS 如何查看APP的jetsamEvent日志

    1.如何在iPhone上查看 设置-通用-分析-分析数据- JetsamEvent+日志 打头的系统日志. 2.如何在Mac 上查看此类分析日志 1.手机链接MAC 2.打开iTunes,点开手机图标 ...

  9. 文本不能被选中的css

    -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; user-select: none;

  10. Web开发——jQuery进阶

    参考: 参考:http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html 参考:Asynchronous J ...