本文主要讲解了提取数据集的一些主要工具,以及如何使用这些工具,包含安装以及运行命令。
提取语音(数据集)的语音特征工具(Extract audio features toolkits)
1.openSMILE
Linux 上安装。环境:Ubuntu 20.04.(docker 容器)
安装方法一(暂时有问题)
wget https://github.com/audeering/opensmile/releases/download/v3.0.1/opensmile-3.0.1-linux-x64.tar.xz
# 解压
tar -zxvf opensmile-3.0-linux-x64.tar.gz
cd opensmile-3.0-linux-x64
opensmile安装方法2(推荐)
git clone https://github.com/audeering/opensmile
cd opensmile
sh build.sh
将 smilextract 路径 加入系统目录
加入系统目录
source /etc/profile
版本不同,可能路径不同,找自己电脑的smilextract路径。我的是:
export PATH="/workspace/tts/opensmile/build/progsrc/smilextract:$PATH"
(快捷键Esc+:+wq)保存并退出,然后执行:
source /etc/profile
查看版本信息
SMILExtract -h
成功则会显示版本等相关信息~
调用命令行运行opensmile
SMILExtract -C(配置文件) -I(后面加输入的音频文件) -O(后面加输出的路径)
(单个音频)实例:
SMILExtract -C ./config/is09-13/IS09_emotion.conf -I /workspace/dataset/emoko/audio/000-001.wav -O /workspace/dataset/emoko/opensmile-file/1.txt
需要根据自身的需求,更换下面命令中的conf文件名(配置文件)即可,注意音频文件必须是无损的wav格式。
输出文件1.txt如下
最后一行为具体的特征数据:
用python批量调用命令行
如果有很多个音频需要去提取特征,那么一个个用dos界面敲命令会非常麻烦。用python批量调用命令行源代码如下:(俩种方法只选一个)
opensmile-feature01.py
方法一
import os
path = '/workspace/dataset/emoko'
for root,dir,files in os.walk(path):
for i in files:
os.system('SMILExtract -C /workspace/tts/opensmile/config/is09-13/IS09_emotion.conf -I ' + path + '/audio/' + i + ' -O ' + '/emoko' + i[:-4] + '.csv')
方法二
import os
audio_path = '/workspace/dataset/emoko/audio' # .wav file path
output_path='/workspace/dataset/emoko/opensmile-pro' # feature file path
audio_list=os.listdir(audio_path)
features_list=[]
for audio in audio_list: # 遍历指定文件夹下的所有文件
if audio[-4:]=='.wav':
this_path_input=os.path.join(audio_path, audio) # 打开一个具体的文件,audio_path+audio
this_path_output=os.path.join(output_path,audio[:-4]+'.csv') # .txt/.csv
# 进入opensmile中要执行的文件的目录下;执行文件 -C 配置文件 -I 语音文件 -O 输出到指定文件
os.system( 'SMILExtract -C /workspace/tts/opensmile/config/is09-13/IS09_emotion.conf -I ' + this_path_input + ' -O ' + this_path_output)
print('over~')
*注意方法二中:这里需要三个路径
①.wav文件文件夹路径
②前面处理语音文件提取的csv文件或txt文件存放的文件路径
③opensmile的情感特征配置文件
运行这个py文件时,要在opensmile文件夹下运行。
提取的文件可保存为.txt/.csv文件
输出(每一个.wav文件对应的特征文件,且与wav文件名字相同)
提取文件后,对csv文件进行处理,提取数据特征向量部分
批量处理生成特征的文本文件,提取组合出可以用来学习处理的矩阵文件。代码如下
opensmile-pro-csv02.py
import os
audio_path = '/workspace/dataset/emoko/audio' # .wav file path
output_path='/workspace/dataset/emoko/opensmile-pro' # feature file path
audio_list=os.listdir(audio_path)
features_list=[]
for audio in audio_list: # 遍历指定文件夹下的所有文件
if audio[-4:]=='.wav':
this_path_input=os.path.join(audio_path, audio) # 打开一个具体的文件,audio_path+audio
this_path_output=os.path.join(output_path,audio[:-4]+'.csv') # .txt/.csv
# 进入opensmile中要执行的文件的目录下;执行文件 -C 配置文件 -I 语音文件 -O 输出到指定文件
os.system( 'SMILExtract -C /workspace/tts/opensmile/config/is09-13/IS09_emotion.conf -I ' + this_path_input + ' -O ' + this_path_output)
print('over~')
*注意:这里需要三个路径
①.wav文件文件夹路径
②前面处理语音文件提取的csv文件或txt文件存放的文件路径
③opensmile的情感特征配置文件
运行这个py文件时,要在opensmile文件夹下运行。
可以通过如下Python代码进行特征解析:
def feature_file_reader(feature_fp):
"""
读取生成的ARFF格式csv特征文件中特征值
:param feature_fp: csv特征文件路径
:return: np.array
"""
with open(feature_fp) as f:
last_line = f.readlines()[-1] # ARFF格式csv文件最后一行包含特征数据
features = last_line.split(",")
features = np.array(features[1:-1], dtype="float64") # 第2~倒数第二个为特征数据
return features
保存为一个npy文件
import os
import numpy as np
txt_path='输出文件夹路径'
txt_list=os.listdir(txt_path)
features_list=[]
for txt in txt_list:
if txt[-4:]=='.txt':
this_path=os.path.join(txt_path,txt)
f=open(this_path)
last_line=f.readlines()[-1]
f.close()
features=last_line.split(',')
features=features[1:-1]
features_list.append(features)
features_array=np.array(features_list)
np.save('保存文件的路径/opensmile_features.npy',features_array)
创建自己的配置文件
可参考audio - How to create custom config files in OpenSMILE - Stack Overflow
openSMILE 3.0 - audEERING
opensmile 参数详解
01.运行命令参数
更多可查看Reference section — openSMILE Documentation
首先是处理数据时
'lldsink','lldhtksink','lldarffsink','csvsink','htksink',cArffSink ,'arffsink'具体可查看opensmile/standard_data_output.conf.inc at master · naxingyu/opensmile · GitHub
opensmile自带的配置文件:
config/
对于音乐信息检索和语音处理领域的常见任务,我们在目录中为以下常用功能集提供了一些示例配置文件 。这些还包含 2009-2013 年 INTERSPEECH 影响和副语言学挑战的基线声学特征集:
-
用于键和弦识别的色度特征
-
用于语音识别的 MFCC
-
用于语音识别的 PLP
-
韵律(音调和响度)
-
INTERSPEECH 2009 情感挑战赛功能集
-
INTERSPEECH 2010 副语言挑战赛功能集
-
INTERSPEECH 2011 演讲者状态挑战功能集
-
INTERSPEECH 2012 演讲者特质挑战赛功能集
-
INTERSPEECH 2013 ComParE 功能集
-
用于暴力场景检测的 MediaEval 2012 TUM 功能集。
-
用于情感识别的三个参考特征集(旧集,被新的 INTERSPEECH 挑战集淘汰)
-
基于 INTERSPEECH 2010 副语言挑战音频功能的视听功能。
ESPnet
Linux(Ubuntu20.04)安装
apt-get install cmake
apt-get install sox
apt-get install flac
git clone https://github.com/espnet/espnet
cd espnet/tools
#python环境下
bash setup_python.sh $(command -v python3)
make
#根据make后出来的值复制 TH_VERSION 和 CUDA_VERSION 版本
make TH_VERSION=1.13.1 CUDA_VERSION=11.4
其他请参考Installation — ESPnet 202304 documentation
检查安装
bash -c ". ./activate_python.sh; . ./extra_path.sh; python3 check_install.py"
【PS1】bash: SMILExtract: command not found
https://fxburk.medium.com/machine-classification-of-emotional-speech-with-emodb-and-python-25a67753210e
apt install automake
apt install autoconf
apt install libtool
apt install m4
apt install gcc
apt update
尝试1
./SMILExtract -h
出现bash: ./SMILExtract: No such file or directory
尝试2
strace ./SMILExtract
出现strace: Can't stat './SMILExtract': No such file or directory
参考文献
[1]opensmile/INSTALL at master · naxingyu/opensmile · GitHub