语音活性检测器py-webrtcvad安装使用
谷歌为WebRTC项目开发的VAD是目前最优秀、最先进和免费的产品之一。webrtcvad是WebRTC语音活动检测器(VAD)的python接口。兼容python2和python3。功能是将一段音频数据分为静音与非静音。它对于电话和语音识别很有用。
1、安装pip
- yum -y install epel-release
- yum -y install python-pip
2、安装webrtcvad
- yum -y install python-devel
- pip install webrtcvad
3、webrtcvad测试脚本(test_webrtcvad.py)
- import collections
- import contextlib
- import sys
- import wave
- import webrtcvad
- def read_wave(path):
- with contextlib.closing(wave.open(path, 'rb')) as wf:
- num_channels = wf.getnchannels()
- assert num_channels == 1
- sample_width = wf.getsampwidth()
- assert sample_width == 2
- sample_rate = wf.getframerate()
- assert sample_rate in (8000, 16000, 32000)
- pcm_data = wf.readframes(wf.getnframes())
- return pcm_data, sample_rate
- def write_wave(path, audio, sample_rate):
- with contextlib.closing(wave.open(path, 'wb')) as wf:
- wf.setnchannels(1)
- wf.setsampwidth(2)
- wf.setframerate(sample_rate)
- wf.writeframes(audio)
- class Frame(object):
- def __init__(self, bytes, timestamp, duration):
- self.bytes = bytes
- self.timestamp = timestamp
- self.duration = duration
- def frame_generator(frame_duration_ms, audio, sample_rate):
- n = int(sample_rate * (frame_duration_ms / 1000.0) * 2)
- offset = 0
- timestamp = 0.0
- duration = (float(n) / sample_rate) / 2.0
- while offset + n < len(audio):
- yield Frame(audio[offset:offset + n], timestamp, duration)
- timestamp += duration
- offset += n
- def vad_collector(sample_rate, frame_duration_ms,
- padding_duration_ms, vad, frames):
- num_padding_frames = int(padding_duration_ms / frame_duration_ms)
- ring_buffer = collections.deque(maxlen=num_padding_frames)
- triggered = False
- voiced_frames = []
- for frame in frames:
- sys.stdout.write(
- '' if vad.is_speech(frame.bytes, sample_rate) else '')
- if not triggered:
- ring_buffer.append(frame)
- num_voiced = len([f for f in ring_buffer
- if vad.is_speech(f.bytes, sample_rate)])
- if num_voiced > 0.9 * ring_buffer.maxlen:
- sys.stdout.write('+(%s)' % (ring_buffer[0].timestamp,))
- triggered = True
- voiced_frames.extend(ring_buffer)
- ring_buffer.clear()
- else:
- voiced_frames.append(frame)
- ring_buffer.append(frame)
- num_unvoiced = len([f for f in ring_buffer
- if not vad.is_speech(f.bytes, sample_rate)])
- if num_unvoiced > 0.9 * ring_buffer.maxlen:
- sys.stdout.write('-(%s)' % (frame.timestamp + frame.duration))
- triggered = False
- yield b''.join([f.bytes for f in voiced_frames])
- ring_buffer.clear()
- voiced_frames = []
- if triggered:
- sys.stdout.write('-(%s)' % (frame.timestamp + frame.duration))
- sys.stdout.write('\n')
- if voiced_frames:
- yield b''.join([f.bytes for f in voiced_frames])
- def main(args):
- if len(args) != 2:
- sys.stderr.write(
- 'Usage: example.py <aggressiveness> <path to wav file>\n')
- sys.exit(1)
- audio, sample_rate = read_wave(args[1])
- vad = webrtcvad.Vad(int(args[0]))
- 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('--end')
- #write_wave(path, segment, sample_rate)
- if __name__ == '__main__':
- main(sys.argv[1:])
4、运行命令(其中,第一个参数为敏感系数,取值0-3,越大表示越敏感,越激进,对细微的声音频段都可以识别出来;第二个参数为wav文件存放路径,目前仅支持8K,16K,32K的采样率,示例wav文件下载:73.wav 链接:https://pan.baidu.com/s/19YJB9u0zvCFGBLDRisK1KQ 密码:fgkf)
- [root@host---- ~]# python test_webrtcvad.py /home/.wav
- +(2.1)-(3.36)--end
- +(3.57)-(14.43)--end
- +(15.3)-(16.14)--end
- +(21.21)-(22.47)--end
- +(22.68)-(24.6)--end
- +(24.66)-(26.76)--end
- +(26.76)-(27.81)--end
- +(27.87)-(31.38)--end
- +(31.38)-(32.91)--end
- +(33.21)-(35.04)--end
- +(35.73)-(41.43)--end
- +(42.66)-(43.8)--end
- +(43.95)-(51.03)--end
- +(51.15)-(53.82)--end
- +(53.82)-(59.85)--end
- +(60.51)-(64.74)--end
- +(65.46)-(67.26)--end
- +(67.74)-(69.39)--end
- +(69.42)-(74.55)--end
- +(74.55)-(81.24)--end
- +(81.51)-(87.66)--end
- +(87.9)-(89.76)--end
- +(91.08)-(92.04)--end
- +(92.31)-(96.9)--end
- +(97.23)-(102.27)--end
- +(102.51)-(104.43)--end
- +(104.43)-(105.9)--end
- +(106.38)-(108.12)--end
- +(108.69)-(110.16)--end
- +(111.12)-(113.13)--end
- +(113.13)-(114.87)--end
- +(114.87)-(118.08)--end
语音活性检测器py-webrtcvad安装使用的更多相关文章
- python 使用 setup.py 方式安装及包的卸载
安装: 可通过 --home 或 --prefix 指定安装目录 --prefix=xx/xxx 选择安装目录 --record files.txt 记录所有安装文件的路径 ...
- python 利用 setup.py 手动安装第三方类库
python 利用 setup.py 手动安装第三方类库 由于我在mac使用时,装了python3,默认有python2的环境,使用 pip 安装第三方类库时,老是安装到 python2的环境上: 在 ...
- python 利用 setup.py 手动安装django_chartit
手动安装django_chartit库 1 下载压缩包 2 解压到python安装目录下,文件夹名为django_chartit,并检查文件夹下是否有setup.py文件 3 在cmd中进入djang ...
- 对于python setup.py install安装的包如何卸载
easy_install 安装 卸载命令 easy_install -m package-name setup.py安装 帮助你纪录安装细节方便你卸载 python setup.py install ...
- easygui.py的安装和下载地址
easygui下载地址:http://nchc.dl.sourceforge.net/project/easygui/0.97/easygui-0.97.zip 安装:解压后将easygui.py拷贝 ...
- 简单使用setup.py来安装Python项目
最近做个一个项目需要用到setup.py 这个构建工具来进行项目的便捷安装,把搜集到的一些资料加上个人理解整理成文章,如有错误的地方请各位大佬及时指出,小弟马上修改,下面正式进入setup.py的描述 ...
- ez_setup.py(安装python下setuptools用)
#!python"""Bootstrap setuptools installation If you want to use setuptools in your pa ...
- 【py】安装ipython-notebook
os:ubunutu(debian)-based linux 分两步: 安装ipython及其依赖包 sudo apt-get install ipython-notebook 安装可选的附加工具 ...
- Linux 问题 卸载setup.py方式安装的python包
python ./setup.py install --record install.txt cat install.txt | xargs rm -rf
随机推荐
- 杭电1506 java
求最大子矩阵面积(dp) import java.util.*; public class Main1{ public static void main(String[] args) { Scanne ...
- 小甲鱼Python第十九讲课后习题
笔记: 1.内嵌函数:函数内部新创建另一个函数 2.闭包:函数式编程的重要语法,如果在一个内部函数里,对外部作用域(但不是在全局作用域的变量)进行引用,那么内部函数就会被认为是闭包. 3.nonloc ...
- 201771010118马昕璐《面向对象程序设计java》第八周学习总结
第一部分:理论知识学习部分 1.接口 在Java程序设计语言中,接口不是类,而是对类的一组需求描述,由常量和一组抽象方法组成.Java为了克服单继承的缺点,Java使用了接口,一个类可以实现一个或多个 ...
- Go数组求和
package main import "fmt" ]int func main() { a := [],,,,} var b int for index,value := ran ...
- MySQL数据库的几种引擎
有些东西其实一直在用,但是突然问起来它是啥,可能你会很陌生,很陌生,很陌生 ....... mysql的四种引擎: 1.MyISAM存储引擎 不支持事务,不支持外键,优势是访问速度快,对事务完整性没有 ...
- [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed
1.在vs编写时出现这个问题(以下为网络查询结果) 问题的原因是“SSL: CERTIFICATE_VERIFY_FAILED”. Python 升级到 2.7.9 之后引入了一个新特性,当使用url ...
- socket(套接字)初使用
socket层 socket:是应用层与TCP/IP协议通信的中间软件抽象层,是一组接口,在设计模式中,socket其实就是一个门面模式,它把复杂的TCP/IP协议隐藏在socket接口后面. 基于T ...
- iOS 如何查看APP的jetsamEvent日志
1.如何在iPhone上查看 设置-通用-分析-分析数据- JetsamEvent+日志 打头的系统日志. 2.如何在Mac 上查看此类分析日志 1.手机链接MAC 2.打开iTunes,点开手机图标 ...
- 文本不能被选中的css
-moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; user-select: none;
- Web开发——jQuery进阶
参考: 参考:http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html 参考:Asynchronous J ...