OpenSmile提取eGeMAPS 特征集

语音特征提取在NLP中很重要的一步,初学,复现一篇论文用到了eGeMAPS特征集,本来想用Librosa提取,但是好像它的函数没又提取eGeMAPS特征集。参考一下这篇:论文笔记:语音情感识别(五)语音特征集之eGeMAPS,ComParE,09IS,BoAW 对特征集的描述,还有里面提及到使用OpenSmile可以提取eGeMAPS特征集。

OpenSmile下载后在doc目录下有个PDF文件:openSMILE_book.pdf,这是一个OpenSmile的使用手册。可以从书的2.3看一下关于配置文件的使用,这里就不详细介绍了。再往下看,最好先看一下OpenSmile自带的书,不然有的地方你可能看不太懂,欲速则不达,还是要一步一步来嘛。

在OpenSmile的config\gemaps目录下有eGeMAPSv01a.conf这样一个配置,如果我们直接把跑demo用的config文件替换为此文件会得到一个只有88个数据的文件,数据的上面还有一堆什么@attribute 的东西,这显然不是一个csv格式的文件,而且这里并没有做分帧操作。下面就要进行修改:

一、分帧设定:eGeMAPS的特征应该也都是HSFs(high level statistics functions)特征吧,没仔细看,暂且这样认为。书中说到对函数组件的分帧操作定义在frameModeFunctionalsConf这个属性中。

打开GeMAPSv01a_core.func.conf.inc (关于function的定义的文件)中看到:FrameModeFunctionals.conf.inc这个文件被引用了OpenSmile提取eGeMAPS 特征集_第1张图片

所以我们需要修改这个文件,接着看book,这里说明几种分帧的格式,这个文件里面用的是第一种,不分帧,所以大家看只有88个数据也就不奇怪了。下面可以根据自己的需要修改。OpenSmile提取eGeMAPS 特征集_第2张图片

二、输出到CSV:由于惯性思维,我们在cmd定义输出文件的时候还是用的 -O  来指定输出文件的路径及文件名。打开eGeMAPSv01a.conf,它的输出是引用了这个文件,也就是输出都定义在这里。打开这个文件,可以看到里面定义了六种输出组件:

OpenSmile提取eGeMAPS 特征集_第3张图片

 那我怎么知道怎么定义输出我要的特征呢?仔细你会发现第一个输出的显然是csv格式,第二个不知道啥格式...倒数第二个也是csv格式。在看每个组件都有这两个属性:

 如果你看过手册,reder.dmLevel是输入的dataMemoryLevel,就是输入的级别。这个cvs的输入定义的是lld,lld_de,就是 LLDs(low level descriptors),一些低级的手工特征,可以理解为中间过程。

重点看第二个:filename,\cm是从命令行中读进来的,默认是问号。看后的注释:这个属性默认是?,只有被指定的时候才会以csv格式输出LLD特征集到指定的文件。也就是说,如果我们要输出这个特征到文件我们需要在运行的命令行中添加:-lldcsvoutput 文件名  或者 -D 文件名 ,而不是 -O 文件名 了。当然我们不需要这个中间结果,自然就不要这个的文件名了。

找到倒数第二个的定义:

很显然这个就是我们要的。它的输入时func就是最终的结果,然后看它的filename如何制定:csvoutput,所以我们在指定输出文件的名字的时候需要以 -csvoutput 文件名的格式指定:下面给一个我的例子:

E:\PythonCode\OpenSmilePlugins\opensmile-2.3.0\bin\Win32\SMILExtract_Release.exe -C E:\PythonCode\OpenSmilePlugins\opensmile-2.3.0\config\gemaps\eGeMAPSv01a.conf -I E:\PythonCode\AudioFiles\predictsets\record.wav -csvoutput E:\PythonCode\AudioFiles\predictsets\record.csv

最后那就可以看到输出结果为:列的属性除了88个值还有音频文件名,时间。这个不重要了,可以自己在配置文件中调。

OpenSmile提取eGeMAPS 特征集_第4张图片

你可能感兴趣的:(NLP)