Speech | openSMILE语音特征提取工具

官方地址:openSMILE 3.0 - audEERING

使用指导:openSMILE — openSMILE Documentation (audeering.github.io)

openSMILE 简介

openSMILE是一款以命令行形式运行的工具,通过配置config文件来提取音频特征。主要应用于语音识别、情感计算、音乐信息获取。2.0版本之后的openSMILE包括了openCV库,可以用于视频处理和视频特征提取。
官网有linux和windows版本提供下载,windows可以不编译直接用,建议在命令行里指明 openSMILE 绝对路径。

openSMILE的输入输出格式
文件输入格式

  • RIFF-WAVE (PCM) (for MP3, MP4, OGG, etc. a converter needs to be used)
  • Comma Separated Value (CSV)
  • HTK parameter files
  • WEKA’s ARFF format.(由htk工具产生)
  • Video streams via openCV.(opencv产生的视频流数据)

文件输出格式

  • RIFF-WAVE (PCM uncompressed audio)
  • Comma Separated Value (CSV)
  • HTK parameter file
  • WEKA ARFF file
  • LibSVM feature file format
  • Binary float matrix format

分类器和其他组件
openSMILE还提供了许多VAD算法,用于判断各时间点有没有说话。

  • Voice Activity Detection based on Fuzzy Logic
  • Voice Activity Detection based on LSTM-RNN with pre-trained models
  • Turn-/Speech-segment detector
  • LibSVM (on-line)
  • LSTM-RNN (Neural Network) classifier which can load RNNLIB and CURRENNT nets
  • GMM (experimental implementation from eNTERFACE’12 project, to be release soon)
  • SVM sink (for loading linear kernel WEKA SMO models)
  • Speech Emotion recognition pre-trained models (openEAR)

0.openSMILE的安装

 0.1.Ubuntu20.04安装openSMILE

 其他系统安装

# 要求必须要有以下包git make gccg++ cmake perl5 gnuplot#没有的话直接安装包名sudo apt-get install package-namegit clone https://github.com/audeering/opensmile.gitcd opensmilebash build.sh

添加环境路径

#每个人的不同 ,查看路径pwd#export PATH="自己的路径/opensmile/build/progsrc/smilextract:$PATH"#我的
export PATH="/workspace/emo-vits/opensmile/build/progsrc/smilextract:$PATH"# 更新
source /etc/profile#查看版本
SMILExtract -h

 

0.2.openSMILE在Windows上的安装

打开Release openSMILE 3.0 · audeering/opensmile · GitHub

拉到页面最下面

点击下载安装包后,进行解压然后配置

0.3. pip方式安装

GitHub - audeering/opensmile-python: Python package for openSMILE

pip install opensmile

 相关库

pip install ffmpeg

 pip方式安装简单,但是只提供几种特征设置

    ComParE_2016 = 'compare/ComParE_2016'GeMAPS = 'gemaps/v01a/GeMAPSv01a'  # legacyGeMAPSv01a = 'gemaps/v01a/GeMAPSv01a'GeMAPSv01b = 'gemaps/v01b/GeMAPSv01b'eGeMAPS = 'egemaps/v01a/eGeMAPSv01a'   # legacyeGeMAPSv01a = 'egemaps/v01a/eGeMAPSv01a'eGeMAPSv01b = 'egemaps/v01b/eGeMAPSv01b'eGeMAPSv02 = 'egemaps/v02/eGeMAPSv02'emobase = 'emobase/emobase'

1.openSMILE使用

在使用时,根据安装方法不同,使用时稍有不同,pip安装的都有import opensmile,如果git安装的,配置好环境后直接使用SMILExtract命令就可以,在bash或python文件中一样使用~

1.1.提取单个语音特征

pip 安装

import opensmilesmile = opensmile.Smile(feature_set=opensmile.FeatureSet.ComParE_2016,feature_level=opensmile.FeatureLevel.Functionals,
)
y = smile.process_file('')print(y)

结果

 1行6373列,代表所使用的特征opensmile.FeatureSet.ComParE_2016包含了6373种特征,例如mfcc等

1.2.读取指定文件中所有的语音文件

Windows处理时需要添加路径

依次处理,将生成的特征文件保存到另一个指定文件中,

import os
audio_path = 'C:/Users/Administrator/Desktop/download/wav'  # 音频文件所在目录
output_path='C:/Users/Administrator/Desktop/download/rebuild'   # 特征文件输出目录
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+audiothis_path_output=os.path.join(output_path,audio[:-4]+'.txt')# &&连续执行;C: 进入C盘内;进入opensmile中要执行的文件的目录下;执行文件 -C 配置文件 -I 语音文件 -O 输出到指定文件cmd = 'C: && cd C:/Program/opensmile-2.3.0/bin/Win32 && SMILExtract_Release -C C:/Program/opensmile-2.3.0/config/IS09_emotion.conf -I ' + this_path_input + ' -O ' + this_path_outputos.system(cmd)
print('over~')

1.3.批量处理生成特征的文本文件

提取组合出可以用来学习处理的矩阵文件。代码如下

import os
import pandas as pdtxt_path = 'C:/Users/Administrator/Desktop/download/rebuild'    # 特征文本文件所在目录
txt_list = os.listdir(txt_path)
features_list = []
for file in txt_list:    # 遍历指定文件夹下的所有文件if file[-4:] == '.txt':file_path = os.path.join(txt_path, file)# 打开输出文件f = open(file_path)# 最后一行是特征向量,取最后一行last_line = f.readlines()[-1]f.close()features = last_line.split(',')# 最后一行特征行的第一个元素为‘unknown’,最后一个为‘?’,都不是对应的特征,要去掉features = features[1:-1]features_list.append(features)
data_m = pd.DataFrame(features_list)
data_m.to_csv(os.path.join('C:/Users/Administrator/Desktop/download', 'test_data.csv'), sep = ',', header=False, index=False)
print('over')

1.4.Linux中提取单个语音特征的bash命令

SMILExtract -C thisconfig.conf -I input.wav -O output.arff #SMILExtract -C config/emobase/emobase2010.conf -I /workspace/emo-vits/dataset/p225v0.1/p225_001_mic1.wav -O output.arff 
  •  thisconfig.conf :指定的配置文件,也就是所需要的特征
  • input.wav :输入的语音文件
  • output .arff : 输出文件

 

输出arff文件如图

在训练时,主要使用最后一行向量特征。

1.5.Linux中批量提取语音数据集特征的python文件

import os
audio_path = '/workspace/emo-vits/dataset/p225v0.1'  # .wav file  path
output_path='/workspace/emo-vits/dataset/p225emo'   # 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+audiothis_path_output=os.path.join(output_path,audio[:-4]+'.csv') # .txt/.csv# 进入opensmile中要执行的文件的目录下;执行文件 -C 配置文件 -I 语音文件 -O 输出到指定文件os.system( 'SMILExtract -C /workspace/tts/opensmile/config/emobase/emobase2010.conf -I ' + this_path_input + ' -O ' + this_path_output)
print('over~')

就会在指定文件夹生成音频对应的csv文件,

 提取文件后,对csv文件进行处理,提取数据特征向量部分

批量处理生成特征的文本文件,提取组合出可以用来学习处理的矩阵文件。

文件分俩步骤运行,一个是批量提取数据集语音的情感特征,第二步骤是将语音特征保存为一个npy文件,以便于数据的读取及使用。


# 步骤一 : 
import os
audio_path = '/workspace/emo-vits/dataset/p225v0.1'  # .wav file  path
output_path='/workspace/emo-vits/dataset/p225emo'   # 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+audiothis_path_output=os.path.join(output_path,audio[:-4]+'.csv') # .txt/.csv# 进入opensmile中要执行的文件的目录下;执行文件 -C 配置文件 -I 语音文件 -O 输出到指定文件os.system( 'SMILExtract -C /workspace/tts/opensmile/config/emobase/emobase2010.conf -I ' + this_path_input + ' -O ' + this_path_output)
print('over 1 ~')# 步骤二 :
# 读取csv文件
import os
import numpy as np
txt_path='/workspace/emo-vits/dataset/p225emo'
txt_list=os.listdir(txt_path)
features_list=[]
for txt in txt_list:if txt[-4:]=='.csv':this_path=os.path.join(txt_path,txt)f=open(this_path)last_line=f.readlines()[-1]print("last_line:",last_line)f.close()features=last_line.split(',')features=features[1:-1]features_list.append(features)
features_array=np.array(features_list)
np.save('p225_opensmile_features.npy',features_array)
print('over 2 ~')

 

更多语音处理工具请参考

Speech | 提取语音(数据集)的语音特征合集_夏天|여름이다的博客-CSDN博客

参考文献

【1】【音频特征】opensmile 工具的使用和批处理_weiquan fan的博客-CSDN博客

【2】openSMILE简介及使用 - 知乎 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/158019.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

黔院长 | 中医上所说的虚实到底是什么?

虚实是中医上经常出现的词语,例如脾虚、肾虚等也都是我们经常听到的症状。各种病症的发生都有虚实的不同,那什么是虚实呢?在《黄帝内经》当中就有相关的叙述: 所谓虚实,是正气与邪气相比较而言的。什么是正什么是邪&am…

文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《计及电动汽车需求响应的高速公路服务区光储充鲁棒优化配置》

这个标题涉及到一个关于高速公路服务区的优化配置问题,其中考虑了电动汽车需求响应和光储充的因素。让我们逐步解读这个标题: 高速公路服务区: 涉及到高速公路上的服务区,这是供驾驶员休息、加油、用餐等的地方。 电动汽车需求响…

上海亚商投顾:北证50指数大涨 机器人概念股掀涨停潮

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 三大指数昨日震荡反弹,黄白二线有所分化,题材热点轮动表现。北证50指数大涨超3%&#…

el-table 表格表头、单元格、滚动条样式修改

.2023.11.21今天我学习了如何对el-table表格样式进行修改&#xff0c;如图&#xff1a; 运用的两个样式主要是 1.header-cell-class-name&#xff08;设置表头&#xff09; 2.class-name&#xff08;设置行单元格&#xff09; 代码如下&#xff1a; <el-table :data&quo…

主播产品话术

以电子产品为例 一、产品特点 1.高效性能:这款产品采用了最先进的技术&#xff0c;确保高效运行&#xff0c;让你的工作更加流畅。 2.便捷操作:设计简洁&#xff0c;操作方便&#xff0c;即使是不熟悉电子产品的人也能轻松上手。 3.时尚外观:多种颜色可选&#xff0c;满足你…

springboot+bootstrap+java农业电商服务商城系统_30249

本农业电商服务系统是为了提高用户查阅信息的效率和管理人员管理信息的工作效率&#xff0c;可以快速存储大量数据&#xff0c;还有信息检索功能&#xff0c;这大大的满足了管理员、会员和商家这三者的需求。操作简单易懂&#xff0c;合理分析各个模块的功能&#xff0c;尽可能…

实时云渲染 助力破解智慧园区痛点困局

智慧园区是运用先进的信息技术&#xff0c;如物联网&#xff08;IoT&#xff09;、大数据、云计算、人工智能、三维可视化等&#xff0c;对园区内的各类设施、资源以及管理进行智能化和数字化升级。其目标是通过科技手段提升园区的运营效率、资源利用率&#xff0c;提供更便捷、…

什么是软件需求?以及需求的最佳实践?

什么是软件需求 业务需求是反应企业组织对软件系统的高层次目标要求&#xff0c;换句话说就是软件系统的建设目标&#xff0c;常常体现在这两个方面&#xff1a;问题和机会。 要记住&#xff1a;出发点不同&#xff0c;精神面貌就完全不一样&#xff0c;当然如果目标过于夸大也…

机器人算法—ROS TF坐标变换

1.TF基本概念 &#xff08;1&#xff09;什么是TF&#xff1f; TF是Transformations Frames的缩写。在ROS中&#xff0c;是一个工具包&#xff0c;提供了坐标转换等方面的功能。 tf工具包&#xff0c;底层实现采用的是一种树状数据结构&#xff0c;根据时间缓冲并维护多个参考…

在AWS VPC中运行Nagios检查时指定自定义DNS解析器的选项

在AWS VPC中运行Nagios检查&#xff0c;并希望能够指定自定义DNS解析器来处理请求。我想使用Python requests库来实现这个目标。 根据问题描述&#xff0c;您想在AWS VPC中运行Nagios检查&#xff0c;并希望使用Python的requests库来指定自定义DNS解析器。 要解决这个问题&…

获取当前用户信息的几种方式

说明&#xff1a;在开发中&#xff0c;我们经常需要获取当前操作的用户信息&#xff0c;如创建用户、创建订单时&#xff0c;我们需要记录下创建人&#xff0c;本文介绍获取当前用户信息的三种方式。 方式一&#xff1a;使用ThreadLocal ThreadLocal本质上是一个Map&#xff…

一个c语言的hello world的本质是什么?

文章目录 hello world程序源文件的本质是0和1hello world文件的ASCII表示程序被其他程序翻译成不同的格式预处理阶段编译阶段汇编阶段链接阶段 为什么需要了解编译系统的工作原理&#xff1f;优化程序性能理解链接时出现的错误避免安全漏洞 参考 hello world 程序源文件的本质是…

Django 创建项目时找不到数据库sqlite3

原因:PyCharm创建Django项目,找不到数据库sqlite3 解决&#xff1a;如果没有默认的db文件&#xff0c;则应在PyCharm终端中执行以下命令&#xff1a; python manage.py makemigrations python manage.py migrate

文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《就地无常规电源支撑下考虑新能源基地频率稳定的储能优化配置方法》

这个标题涉及到一个关于新能源基地频率稳定的储能优化配置方法的主题。让我们逐步解读&#xff1a; 就地无常规电源支撑下&#xff1a; 就地 (On-site): 意味着在特定地点或场地进行操作&#xff0c;而不是依赖外部地点的资源。无常规电源 (Non-conventional Power): 指的是不传…

python报错ModuleNotFoundError: No module named ‘docx‘解决方案

python报错ModuleNotFoundError: No module named docx解决方案 执行报错分析原因解决方案 执行报错 ModuleNotFoundError: No module named ‘docx’ pip install docx 后报错 分析原因 导错包了&#xff0c;不是docx而是python-docx 解决方案 卸载安装错的 docx pip uni…

足底筋膜炎症状及治疗方法

足底筋膜炎是一种常见的足部疾病&#xff0c;通常会引起足跟疼痛和不适。这种疼痛通常在早晨起床后或者长时间休息后更为明显&#xff0c;行走一段时间后可能会减轻。下面我们将详细介绍足底筋膜炎的症状及治疗方法。 一、足底筋膜炎的症状 足跟疼痛&#xff1a;这是足底筋膜…

2023/11/21JAVAweb学习

优先级高低id > 类 > 元素 格式化ctrl alt L

探索无限自然之美——Terragen Professional 4渲染软件

Terragen Professional 4是一款强大的自然环境渲染软件&#xff0c;为设计师、艺术家和电影制作人们带来了无限的创作可能性。无论是为游戏、电影、动画还是虚拟现实体验创建逼真的自然场景&#xff0c;Terragen Professional 4都能为您提供令人难以置信的结果。 Terragen Pro…

电商数据|淘宝商品数据接口接入|参数|获取商品订单物流|电商数据分析

授权认证 授权不是开放平台对服务商应用的授权 &#xff0c;而是需要开放平台的客户&#xff08;用户&#xff09;对服务商应用的授予&#xff0c;比如ERP应用&#xff0c;也就是淘宝的店铺商家对应用进行授权&#xff0c;使其能够拉取到店铺的订单来完成订单履约。 淘宝授权页…

C题目11:数组a[m]排序

每日小语 双手&#xff0c;且放下一切劳作&#xff0c;前额&#xff0c;也忘掉忧思&#xff0c;此时此刻我所有的感觉就想沉入安睡。 自己敲写 这个问题老师上课讲了一种方法&#xff0c;叫做冒泡排序。基本思想是 1.找最小值&#xff0c;放到a[0] 2.从a[1]~a[3]找最小值&a…