在python中使用opensmile的两种方式
一、安装opensmile的python库
1.1 安装
pip install opensmile
1.2 使用
import opensmile
smile = opensmile.Smile(
feature_set=opensmile.FeatureSet.eGeMAPSv02, # egemaps特征集
feature_level=opensmile.FeatureLevel.Functionals # 功能级特征
)
audio_file = " " # 需要处理的语音文件的地址
save_csv = " " # 存储特征的csv的地址
features = smile.process_file(audio_path)
features.to_csv(save_csv)
输出的features为dataframe数据类型 ,每一列是该特征集中的一个特征。输出的特征可以存入csv文件供后续使用
1.3 优劣
优点:安装和使用方便,无需配置复杂的config文件;能够方便地批量处理多条语音数据
缺点:只有部分特征集可以使用,诸如IS09-13就无法通过这种方式提取,具体见opensmile · PyPI
二、安装opensmile软件本体,编写python代码调用命令行实现批量特征提取(以windows11为例)
2.1 安装
从opensmile的github页面选择和自己系统适配的安装包下载并安装Release openSMILE 3.0 · audeering/opensmile
2.2 使用
因为opensmile软件本体会对输入的每条音频生成一个特征的csv,如果是一个数据库中的几千条数据都生成一个csv,那么既不方便保存,也不方便使用,所以我们希望能通过修改配置文件并撰写合适的python代码来实现批量处理音频,并将全部特征保存到一个csv当中。
2.2.1 修改配置文件
opensmile默认输出为arff类型的,需要修改配置文件使得特征输出是一个csv文件
首先找到需要使用的特征集的配置文件(以is09为例),文件位于安装目录下".\opensmile-3.0-win-x64\config\is09-13\IS09_emotion.conf"
分别在下面两处添加如下代码:
这句话的作用是实例化一个csvsink,也就是告知程序输出csv格式的特征
这段代码的作用是配置程序输出csv的格式,\cm代表动态输入,也就是输入内容从命令行中读取。
其他参数的配置,见“.\opensmile-3.0-win-x64\config\shared\standard_data_output.conf.inc"中的[csvsink:cCsvSink]部分
2.2.2 用python控制命令行执行程序
批量提取音频文件特征并存储到一个csv中的思路:用一个temp_csv来接收opensmile每次处理完生成的音频特征,然后读取这个csv,并将其中的内容附加到final_csv的末尾。
import subprocess
import pandas as pd
for idx, audio_path in enumerate(audio_path_list, 1):
print(f'Processing ({idx}/{len(audio_path_list)})...')
# 调用 OpenSMILE 提取特征,直接覆盖 temp_csv
command = [
opensmile_path,
"-C", is09_config_path,
"-I", audio_path,
"-csvoutput", temp_csv,
"-appendcsv", "0",
"-headercsv", "1",
"-timestampcsv", "0"
]
# 调用 OpenSMILE
subprocess.run(command, check=True)
# 读取临时 CSV 文件
features_df = pd.read_csv(temp_csv, sep=';')
features_df["label"] = emo_label
# 合并特征到最终 CSV 文件
if not os.path.exists(final_csv):
features_df.to_csv(final_csv, index=False, header=True) # 第一次写入,包含列名
else:
features_df.to_csv(final_csv, mode="a", index=False, header=False) # 追加写入
print(f"Feature extraction complete. Results saved to {final_csv}")
audio_path_list是一个列表,存放需要处理的音频的路径
在command中:
opensmile_path:是你电脑上存放opensmile可执行文件的地址,位于安装目录下的".\opensmile-3.0-win-x64\bin\SMILExtract.exe"
"-C", is09_config_path:是所需要的特征集的配置,位于安装目录下的".\opensmile-3.0-win-x64\config\is09-13\IS09_emotion.conf" 这个参数可以替换为其他的特征集,opensmile支持的特征集可在安装目录下的config文件夹中查看
temp_csv:存放opensmile临时输出的单个音频的特征
final_csv:存放全部音频的特征
需要注意:虽说配置opensmile输出csv文件,但是最终存储在csv文件中的分隔符用的是分号";",所以在每次读取这个opensmile生成的csv也就是temp_csv时,需要指定分隔符。
最终得到的csv长这样:
要注意:第一列是配置的instancename,读取特征的时候需要略过这一列
作者:独歩