pyaudio是语音处理的python库,提供了比较丰富的功能。
具体功能如下:
- 特征提取(feature extraction):关于时域信号和频域信号都有所涉及
- 分类(classification):监督学习,需要用已有的训练集来进行训练。交叉验证也实现了,进行参数优化使用。分类器可以保存在文件中以后使用。
- 回归(regression):将语音信号映射到一个回归值。
- 分割(segmenttation):有四个功能被实现了
- [x] 固定大小的分割
- [x] 静音检测(silence removal)
- [x] 语音聚类(speaker diarization)
- [x] 语音缩略图(audio thumbnailing)
- 可视化:给定语音,将内容可视化
所有的短时间特征可以见下图
- 短时间特征(short-term features)
- 时域特征(特征1-3)是直接提取的
- 频域特征(特征4-34,MFCC除外)是由傅里叶转换而来
- MFCC特征提取过程已经讨论过
过程:语音信号分帧,一帧有34个特征。一般20~100ms
-
中等长度特征(mid-term features)和特别长的特征(long-term features)
- 中等长度的调用短时间的特征,并进行统计运算
- 1-10分钟左右长度
- long-term调用Mid-term然后做统计运算
速度有关的特征
语音分割
pyaudio提供了两类的语音分割
- 有监督的语音分割:需要有提供一些材料,例如,已经训练好的分类器。为此,此库提供了两种算法:分类的方法和隐马尔科夫的算法
- 无监督的语音分割:无监督的或者半监督的,不需要提供知识准备,主要的例子是静音检测,语音聚类,语音缩略图
有监督的
- 固定长度的分割算法(fix-sized segmentation)
- audioSegmentation.py的函数mtFileClassfication()是主要的
- 切分一个语音段为一个连续的中等长度的段(mid-term)并且提取min-term features,使用mtFeatureExtraction()
- 使用已经训练好的模型来进行分类
- 只要两个段相连并且都是同一个类别,就将两个段进行合并
- 将数据进行可视化
- 注意事项,一个.segment的文件必须要有
- plotSegmentationResults()用来画图可视化数据
- audioSegmentation.py的函数mtFileClassfication()是主要的
-
隐马尔科夫模型分割算法(HMM-based segmentation)
- 用户需要提供已经标注过的数据,包括:段开始点,段结束点,段类别
- 一个语音文件配一个标注的配置文件,两者构成训练集
- TrainHMM_fromFile()和TrainHMM_fromDir()是两个训练的函数
- hmmSegmentation()函数用来使用HMM算法
- plotSegmentationResult()可视化并且计算正确率
无监督的语音分割
-
静音检测
- 短时间特征提取
- 训练SVM,在高能帧和低能帧中,特别的,10%的高能帧和10%的低能帧用在训练SVM模型
- 将SVM分类器用在全部的语音中,得到一串概率值,对应此帧是个时间帧(audio event)的概率
- 一个动态的阈值被用来探测段是不是活跃的
在做python环境下的语音识别等相关任务时,一般都需要用到这个库。然而,对于第一次安装这个库的时候,发现都装不上,报的错就是:
找不到portaudio.h文件。
针对这个问题,本来以为是PIP安装的时候下载的包错了,后来对着文件名进行搜索了下,原来是pyaudio的运行需要依赖于portaudio这个库。
因此需要从http://portaudio.com/download.html这个网址上下载相应的软件包,然后进行正常的C++编译和安装。
再次运行pip install pyaudio,果然非常顺利就成功了。