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\北大核心《计及电动汽车需求响应的高速公路服务区光储充鲁棒优化配置》

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

【工具与中间件】Linux-Docker-Redis

文章目录 0. 前言1. Linux 下 安装 Docker1.1 Docker 基本概念1.2 Linux 安装 Docker1.2.1 安装1.2.2 Hello World 1.3 Docker 常用命令1.3.1 系统启动/暂停/卸载 docker1.3.2 docker 容器的增/删/停/查看状态1.3.3 小结 1.4 Docker 可视化工具推荐 2. Docker 下 安装 Redis2.1…

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

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

11 redis中分布式锁的实现

单机锁代码 import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.con…

前端国内镜像环境安装网址

git https://registry.npmmirror.com/binary.html?pathgit-for-windows/ 2.42.0 node 中文官方地址: http://nodejs.cn/download/ 阿里云镜像地址为: https://npm.taobao.org/mirrors/node/v14.6.0/

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;尽可能…

Cpolar - 本地 WebUI 账号登录失败解决方案

遇到这个问题是因为估计之前登录过其他账号导致的&#xff0c;那如何解决呢&#xff1f; 原因分析 因为之前历史账号登录过一次&#xff0c;本地配置信息里会残留&#xff0c;所以只要去除即可 解决方案 Windows 系统为例&#xff0c;MacOS 系统同理可得 找到 cpolar 配置文件…

【python学习】基础篇-常用模块-multiprocessing模块:多种进程间通信

multiprocessing模块提供了多种进程间通信方式&#xff0c;以下是一些常用的方法&#xff1a; 1、Queue: 创建一个队列对象&#xff0c;用于在进程之间传递数据。可以设置队列的最大长度和阻塞时间等选项。 from multiprocessing import Process, Queuedef worker(q):q.put(h…

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

智慧园区是运用先进的信息技术&#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 程序源文件的本质是…

IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Mybatis初识和框架搭建

第一章 初识Mybatis 1.1 框架概述 生活中“框架” 买房子笔记本电脑 程序中框架【代码半成品】 Mybatis框架&#xff1a;持久化层框架【dao层】SpringMVC框架&#xff1a;控制层框架【Servlet层】Spring框架&#xff1a;全能… 1.2 Mybatis简介 Mybatis是一个半自动化持久化…

银行业数据分析算法应用汇总

数据分析在银行业的应用及具体案例 一、欺诈检测二、客户细分三、风险建模四、营销优化五、信用评分六、客户流失预测七、推荐引擎八、客户生命周期价值预测 一、欺诈检测 欺诈检测即通过分析交易模式&#xff0c;检测可能的欺诈行为&#xff0c;主要有以下几个方面 1.跨机构开…

接口304 Not Modified

当客户端向服务端发送HTTP请求时&#xff0c;如果服务端返回状态码为304 Not Modified&#xff0c;则表明此次请求为条件请求。这意味着客户端已经缓存了该资源&#xff0c;并且该资源未被修改。在请求头中&#xff0c;客户端会发送两个请求参数&#xff1a;If-Modified-Since和…