openSMILE提取音频特征(用于情感分类)

环境:windows10

        pycharm2019.3.3

        python37

main.py                        

import os
import numpy as np
import csv
import sys


def excuteCMD(_pathExcuteFile, _pathConfig, _pathAudio, _pathOutput):
    cmd = _pathExcuteFile + " -C " + _pathConfig + \
        " -I " + _pathAudio + " -O " + _pathOutput + \
        ".txt -csvoutput " + _pathOutput + ".csv "
    print(cmd)
    return cmd
def coverTextToNumpy(nameFront):
    _pathOutput = os.path.join(pathOutputRoot, nameFront + ".txt")
    if(not os.path.exists(_pathOutput)):
        return 
    f = open(_pathOutput, "r")
    text = f.read()
    dataBox = text.split(',')
    dataList = []
    countRow = 0
    for i in range(len(dataBox)):
        #print(dataBox[i])
        if("'" in dataBox[i] ):
            dataList.append([])
        else:
            if("?" not in dataBox[i]):
                #print(len(dataList))
                #print((dataBox[i]))
                if('0.0' in dataBox[i]):
                    continue
                dataList[len(dataList) - 1].append(dataBox[i])
    '''
    for i in range(len(dataList)):
        print(len(dataList[i]),dataList[i][len(dataList[i])-1])
    '''

    npList = np.array(dataList)
    print(npList.shape)
    np.save(os.path.join(pathOutputRoot, nameFront + ".npy"), npList)


def coverCsvToNumpy(nameFront):
    _pathOutput = os.path.join(pathOutputRoot, nameFront + ".csv")
    if(not os.path.exists(_pathOutput)):
        return 
    csvfile = open(_pathOutput,'r')
    reader = [each for each in csv.DictReader(csvfile, delimiter=';')]
    dataList = []
    for row in reader:
        dataList.append([])
        for i in row:
            if(i in 'name' or i in 'frameTime'):
                continue
            dataList[len(dataList) - 1].append(row[i])
    csvfile.close()
    npList = np.array(dataList)
    print(npList.shape)
    np.save(os.path.join(pathOutputRoot, nameFront + ".npy"), npList)

pathExecute = ""
pathModel = sys.argv[1]
pathExcuteFile = pathExecute + "bin\\Win32\\" + "SMILExtract_Release"
pathConfig = pathExecute + "config\\" + pathModel + ".conf"
pathAudioRoot = "audio"
pathOutputRoot = "output"

for i in os.listdir(pathAudioRoot):
    nameBehind = os.path.splitext(i)[1]
    nameFront = os.path.splitext(i)[0]
    if nameBehind == '.wav':
        print(i)
        _pathOutput = os.path.join(pathOutputRoot, pathModel + nameFront)
        _pathAudio = os.path.join(pathAudioRoot, i)
        os.system(excuteCMD(pathExcuteFile, pathConfig, _pathAudio, _pathOutput))
        coverTextToNumpy(pathModel+nameFront)
        coverCsvToNumpy(pathModel + nameFront)

将main.py中的pathModel修改成配置文件的名字,比如"IS09_emotion"

☆将pathModel = sys.argv[1]删除,再把pathModel换成需要使用的配置

运行代码,在output文件中看到输出的特征

 这是对名字为one.wav的音频处理的结果。

参考:

GitHub - MichaelPanW/opensmile-python: use opensmile lib to application

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是一个利用opensmile进行语音识别和分析的例子,使用Python实现的代码: ```python import opensmile import pandas as pd # 初始化opensmile smile = opensmile.Smile( feature_set=opensmile.FeatureSet.GeMAPSv01b, feature_level=opensmile.FeatureLevel.Functionals, ) # 读取音频文件 audio_file = "example.wav" # 提取特征 features = smile.process_file(audio_file) # 将特征转换为DataFrame df = pd.DataFrame(features, index=[]) # 打印DataFrame print(df) ``` 这个例子使用opensmile提取了一个音频文件的语音特征,并将其转换为DataFrame格式。这些特征可以用于语音识别情感分析等任务。 ### 回答2: 利用opensmile进行语音识别和分析的一个例子是情感分析。情感分析是指对语音中的情感进行识别和分类的任务。下面是一个用Python实现的代码示例: ```python import os from opensmile import pyOpenSMILE # 设置opensmile的路径 opensmile_path = "/path/to/opensmile/opensmile-3.0/bin/linux_x64_standalone_static/SMILExtract" # 设置配置文件路径 config_file_path = "/path/to/opensmile/opensmile-3.0/config/IS13_ComParE.conf" # 设置输入音频文件路径 input_audio_path = "/path/to/input/audio.wav" # 设置输出特征文件路径 output_feature_path = "/path/to/output/features.csv" # 创建OpenSMILE对象 smile = pyOpenSMILE.OpenSMILE(opensmile_path, config_file_path) # 提取音频特征 smile.extract_feature(input_audio_path, output_feature_path) # 检查特征文件是否生成 if os.path.exists(output_feature_path): print("音频特征提取成功!") else: print("音频特征提取失败!") ``` 在上述代码中,我们首先导入opensmile库,并设置opensmile的可执行文件路径和配置文件路径。然后,我们设置输入音频文件路径和将要保存特征的输出文件路径。接下来,我们创建一个OpenSMILE对象。通过调用`extract_feature`方法,我们将输入音频文件提供给OpenSMILE,它将根据指定的配置文件提取音频中的情感特征,并将特征保存在指定的输出文件中。最后,我们检查特征文件是否生成,以确认特征提取是否成功。 请注意,以上代码仅为示例,需要根据个人需求和opensmile库的安装路径进行相应的修改。此外,opensmile库还提供其他功能,如音频预处理、支持不同配置文件、实时特征提取等。您可以根据需要进一步探索opensmile库的功能和使用方法。 ### 回答3: 一个利用opensmile进行语音识别和分析的例子是基于音频数据进行情绪识别。以下是一个使用python实现的简单代码示例: 首先,需要安装opensmile和pandas库,可以通过以下命令进行安装: ``` pip install opensmile pandas ``` 接下来,导入所需的库: ```python import librosa import pandas as pd import subprocess import os ``` 定义一个函数来提取音频数据的特征: ```python def extract_features(audio_file): subprocess.call(['SMILExtract', '-C', 'opensmile/config/IS13_ComParE.conf', '-I', audio_file, '-O', 'output.csv']) features = pd.read_csv('output.csv', delimiter=',').iloc[:, 1:] os.remove('output.csv') return features ``` 然后,定义一个函数来识别情绪: ```python def recognize_emotion(audio_file): features = extract_features(audio_file) # 在这里根据提取特征进行情绪识别的处理 # 返回情绪标签结果 return emotion_label ``` 最后,可以调用`recognize_emotion`函数并传入音频文件路径来进行情绪识别: ```python audio_file = 'path_to_audio.wav' emotion_label = recognize_emotion(audio_file) print('识别结果:', emotion_label) ``` 以上代码仅提供了一个基本的示例。实际上,根据应用的需求,还需要对提取特征进行进一步处理和模型训练,以获得更准确的情绪识别结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值