IEMOCAP-数据集文件预处理

import os
import glob
import wave
import python_speech_features as ps
import numpy as np
import pickle
def read_wavefile(filename):
    #开始读取wav文件
    file = wave.open(filename,'r')
    params = file.getparams() #获取得到的所有参数
    n_channels, samp_with, fram_rate, wav_length = params[:4]
    str_data = file.readframes(wav_length)
    wave_data = np.fromstring(str_data,dtype=np.short)
    time = np.arange(0,wav_length)*(1.0/fram_rate)
    file.close()
    return wave_data, time, fram_rate
def read_IEMocap():
    #设置数据库的路径
    data_DIR = r"G:\IEMOCAP_full_release"
    #设置训练数据和标签
    train_data = []
    train_label = []
    #开始对数据库进行遍历过程
    for speaker in os.listdir(data_DIR):
        """
        直接开始对每个进行搜索
        并且设置缩小的范围 需要的数据进行查找
        """
        #因为还有其他的不是所需要的文件所以直接进行排除
        if speaker[0] == 'S':
            #语音存储的文件夹
            speech_subdir = os.path.join(data_DIR,speaker,"sentences\\wav")
            #语音标记的文件夹
            speech_labledir = os.path.join(data_DIR,speaker,"dialog\\EmoEvaluation")
            #将训练文件夹也保存
            speech_file_dir = []
            for sess  in os.listdir(speech_subdir):
                #sess 代表的是每个单独的文件夹 里面包含着每个单独的txt文件所以需要单独读取
                lable_text = speech_labledir+"\\"+sess+".txt"
                #获取到了 然后开始读取,这时要知道 读取文件需要用个list 或者是字典来进行存取
                emotion_lable = {}

                with open(lable_text,'r') as txt_read:
                    """
                    这里表达的是,文件读取第一行 看第一行如果有文件则进行保存对应的标签和结果 其中包含标注信息
                    直到文件最后读取结束
                    """
                    while True:
                        line = txt_read.readline()
                        if not line:
                            break
                        if (line[0] == '['):
                            t = line.split()
                            emotion_lable[t[3]] = t[4]
                #--------------------------------------------------------
                """
                读取所有的音频文件
                """
                wava_file = os.path.join(speech_subdir,sess,'*wav')
                files= glob.glob(wava_file)#glob 主要是将目标的所有 来进行返回一个list集合
                for filename in files:
                    #开始读取speech文件内的信息了 文件标签 存储数据内容
                    wavaname = filename.split("\\")[-1][:-4] #得到文件名
                    emotion = emotion_lable[wavaname] #通过对应来得到情感的对应标记
                    #这里开始筛选是不是你需要的文件类型 比如你只想要hap ang neu sad 不要fear 那就可以不用把这个fear放入
                    if emotion in ['hap','ang','neu','sad']:
                        data, time, rate = read_wavefile(filename)
                        mel_spec = ps.logfbank(data, rate, nfilt = 40)#滤波器的个数为40个
                        time = mel_spec.shape[0]
                        print("开始对{}文件的计算".format(filename))
                        #开始对不满足时间少于300的进行padding 0
                        if time <=300:
                            padding_data = mel_spec
                            #后面补充0
                            #padding_data=np.pad(padding_data,((0,300-padding_data.shape[0]),(0,0)),'constant',constant_value=0)
                            padding_data = np.pad(padding_data, ((0, 300 - padding_data.shape[0]), (0, 0)), 'constant',
                                          constant_values=0)

                            train_data.append(padding_data)
                            train_label.append(emotion)
                            speech_file_dir.append(filename)
                        else:
                            begin = 0
                            end = 300
                            padding_data = mel_spec[begin:end,:]
                            train_data.append(padding_data)
                            train_label.append(emotion)
                            speech_file_dir.append(filename)
    #写入pkl文件中
    print("开始写入文件中")
    f = open('./IEMOCAP.pkl', 'wb')
    #将数据 放入pickle中保存
    pickle.dump((train_data,train_label,speech_file_dir),f)
    f.close()
    print("写入完毕")
    pass
def read_picklefile():
    f = open('./IEMOCAP.pkl','rb')
    train_data,train_lable,speech_file = pickle.load(f)
    print(len(train_lable))
if __name__ == "__main__":
    read_picklefile()

这里是模型第一步将数据预处理
接来下是第二步将数据进行特征提取

  • 8
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 25
    评论
### 回答1: iemocap数据集是一种用于情感识别研究的公开数据集,其目的是为研究者提供一个用于识别和分析人类情感状态的基准数据。 iemocap数据集使用了认知情感模型,通过记录人际交流中的语音、文本和肢体动作等多种情感表达形式,提供了一个多模态的研究平台。 该数据集包含了不同情感状态下的语音和面部表情数据,以及对话参与者的情感标注。数据集中的情感状态包括愤怒、悲伤、开心、中性等。 iemocap数据集的基本构成是对话音频文件,每个音频文件包含了多个对话段落。其中,每一个对话段落对应一个情感标签。此外,数据集还包含了使用OpenFace工具进行面部表情分析的结果。 研究者可以利用iemocap数据集开展各种情感识别算法的开发和评估。比如,可以利用该数据集训练机器学习模型,通过对语音和面部表情进行特征提取和分类,实现情感状态的识别。 除了情感识别,iemocap数据集还可用于其他相关领域的研究,例如语言研究、社交交互研究等。 总的来说,iemocap数据集是一个有助于情感识别研究的公开数据集,为研究人员提供了一个研究情感识别算法和模型的基准平台。 ### 回答2: IEMOCAP数据集是一个包含真实情绪表达的多模态数据库,在情绪声音处理领域非常有名。该数据集收集了10位演员在会议场景下进行表演的音频、视频和文本等多种模态的数据。 IEMOCAP数据集的目的是为情感识别和情绪分析提供一个标准的测试平台。该数据集包含了丰富的情绪表达,其中包括六种基本情绪的标签:愤怒、开心、中性、伤心、惊讶和厌恶。这些多模态数据可以用于情感识别、语音情感识别、情感合成和情感计算等多个领域的研究。 IEMOCAP数据集包含了大量的情感声音数据,每个演员都有大约40分钟的语音数据,总共有超过12小时的语音数据。这些数据中包含了不同音频特征(如语速、音调、能量等)以及用于情感识别的音频标签。此外,数据集还包含了演员的面部表情、手势和动作等视频数据,以及他们的语言交互和文本注释。 IEMOCAP数据集的使用非常广泛,被用于情感识别和情绪分析的研究中。在情感识别方面,可以通过深度学习模型来提取音频和视频特征,训练分类器以实现情感分类。在情绪分析方面,可以通过分析不同模态数据之间的关联性,来研究情绪的生成和表达方式。 总之,IEMOCAP数据集是一个非常有价值的情感识别和情绪分析研究资源。它提供了丰富的真实情感数据,被广泛应用于语音情感识别、情感合成和情感计算等领域的研究中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值