本文主要讲解了提取数据集的一些主要工具,以及如何使用这些工具,包含安装以及运行命令。
图片来源[2]
提取语音(数据集)的语音特征常见工具有(Extract audio features toolkits)以下方法:
openSMILE
ESPNet
COVAREP
YAAFE
本文主要详解openSMILE,包含安装,使用以及参数详情。
1.openSMILE
Linux 上安装,环境:Ubuntu 20.04.(docker 容器)
1.1.opensmile安装方法及使用
# 安装
pip install opensmile
#安装版本2.4.2
#单个wav文件使用
# opensmile v 2.4.2
import opensmile
path = '/workspace/dataset/mer1/audio/KETI_MULTIMODAL_0000000012_00.wav'
smile = opensmile.Smile(
feature_set=opensmile.FeatureSet.eGeMAPSv02,
feature_level=opensmile.FeatureLevel.Functionals,
)
y = smile.process_file(path)
print(y.shape)
print(y)
pensmile.FeatureSet.后的特征可查看,目前有的(更多内容可参考https://audeering.github.io/opensmile/python/api/opensmile.FeatureSet.html)
Name #features
ComParE_2016 65 / 65 / 6373
GeMAPSv01a 5 / 13 / 62
GeMAPSv01b 5 / 13 / 62
eGeMAPSv01a 10 / 13 / 88
eGeMAPSv01b
结果(这里使用eGenMAPSv02是1×88维的)
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)保存并退出,然后执行:
查看版本信息
SMILExtract -h
成功则会显示版本等相关信息~
调用命令行运行opensmile
(单个音频)实例:
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'
output_path='/workspace/dataset/emoko/opensmile-pro'
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)
this_path_output=os.path.join(output_path,audio[:-4]+'.csv')
os.system( 'SMILExtract -C /workspace/tts/opensmile/config/is09-13/IS09_emotion.conf -I ' + this_path_input + ' -O ' + this_path_output)
print('over~')
可以通过如下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)
1.2.opensmile 参数详解
1.2.1.运行命令参数
opensmile自带的配置文件:
config/对于音乐信息检索和语音处理领域的常见任务,我们在目录中为以下常用功能集提供了一些示例配置文件 。这些还包含 2009-2013 年 INTERSPEECH 影响和副语言学挑战的基线声学特征集:
用于键和弦识别的色度特征
用于语音识别的 MFCC
用于语音识别的 PLP
韵律(音调和响度)
INTERSPEECH 2009 情感挑战赛功能集
INTERSPEECH 2010 副语言挑战赛功能集
INTERSPEECH 2011 演讲者状态挑战功能集
INTERSPEECH 2012 演讲者特质挑战赛功能集
INTERSPEECH 2013 ComParE 功能集
用暴力场景检测的 MediaEval 2012 TUM 功能集。
用于情感识别的三个参考特征集(旧集,被新的 INTERSPEECH 挑战集淘汰)
基于 INTERSPEECH 2010 副语言挑战音频功能的视听功能。
2.ESPnet
2.1.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
其他请参考https://espnet.github.io/espnet/installation.html
检查安装
bash -c ". ./activate_python.sh; . ./extra_path.sh; python3 check_install.py"
如果有任何问题,欢迎在留言板进行提问和交流~
参考文献
[1]https://github.com/naxingyu/opensmile/tree/master
[2]https://www.einfochips.com/blog/speech-processing-model-in-embedded-media-processing/
想要了解更多内容,可在小程序搜索🔍AI Pulse,获取更多最新内容。