Speech | 提取语音(数据集)的语音特征工具合集数据处理教程

文摘   2024-10-24 16:04   马来西亚  
👆点击上方名片关注哟👆

本文主要讲解了提取数据集的一些主要工具,以及如何使用这些工具,包含安装以及运行命令。

图片来源[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.2import 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/opensmilecd opensmilesh 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 osaudio_path = '/workspace/dataset/emoko/audio'  # .wav file  pathoutput_path='/workspace/dataset/emoko/opensmile-pro'   # feature file pathaudio_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 osaudio_path = '/workspace/dataset/emoko/audio'  # .wav file  pathoutput_path='/workspace/dataset/emoko/opensmile-pro'   # feature file pathaudio_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~')


可以通过如下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 osimport numpy as nptxt_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 cmakeapt-get install soxapt-get install flac git clone https://github.com/espnet/espnetcd 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,获取更多最新内容。

AI Pulse
\x26quot;AI Pulse - AI脉动\x26quot;,探索AI技术前沿,深入解析算法精髓,分享行业应用案例,洞察智能科技未来。欢迎关注,与我们共赴AI学习之旅。
 最新文章