You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中使用opensmile将提取的特征保存为.arff文件?

解决opensmile特征转Weka兼容ARFF文件的方法

opensmile处理后返回的y是pandas DataFrame,可以借助第三方库直接将其转换为符合Weka要求的ARFF格式,以下是两种可靠实现方式:

方法一:使用pandas-arff库(推荐)

这个库专门针对pandas DataFrame和ARFF格式的转换,对Weka兼容性更好。

步骤1:安装依赖

pip install pandas-arff

步骤2:修改代码实现保存

import opensmile
from pandas_arff import dump

smile = opensmile.Smile(
    feature_set=opensmile.FeatureSet.ComParE_2016,
    feature_level=opensmile.FeatureLevel.Functionals,
)
y = smile.process_file('audio.wav')

# 可选:如果是分类任务,添加类别标签列(示例)
# y['class_label'] = 'positive'  # 根据你的实际标签修改

# 保存为ARFF文件
dump(
    y,
    'audio_features.arff',
    relation='audio_compar_features',  # 自定义ARFF的关系名称
    clean_string_values=True,
    arff_encode_nominal=True  # 自动将字符串类型列识别为Weka的nominal属性
)

方法二:使用scipy库(无需额外安装)

如果已经安装了scipy,可以用其内置的ARFF处理工具:

import opensmile
from scipy.io import arff

smile = opensmile.Smile(
    feature_set=opensmile.FeatureSet.ComParE_2016,
    feature_level=opensmile.FeatureLevel.Functionals,
)
y = smile.process_file('audio.wav')

# 将DataFrame转换为结构化数组
structured_data = y.to_records(index=False)
# 保存ARFF文件
arff.savearff('audio_features_scipy.arff', structured_data)

注意事项

  • 多文件处理:如果要批量处理音频,先将所有文件的特征合并到同一个DataFrame,再保存为单个ARFF文件,方便Weka批量加载。
  • 特征名兼容性:opensmile的ComParE_2016特征名基本符合Weka要求,无需额外修改。
  • 类别标签:如果添加标签列,确保标签为字符串类型,这样会被Weka识别为分类属性。

内容的提问来源于stack exchange,提问作者Mister Sir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 05:46:07