这个项目将 RAVDESS 数据集切割成 1s 短语音,利用 openSMILE+CNN 进行训练,目标是将短语音分类到四种情感中,分别是:开心(happy)、悲伤(sad)、生气(angry)和中性(neutral)。最后准确率达到 76% 左右。
本项目的目标是设计一个情绪识别系统,要求在短语音(1s 左右)情况下,能够区分快乐,悲伤,愤怒和中性这四种区分度大的情绪。
本项目以下项目为参考:
本项目采用 openSMILE 的 IS10_paraling 特征集进行特征提取。
本项目采用 RAVDESS 英文数据集,这是一个表演型数据集,包含 12 男 12 女七种情感的 wav 文件,本人做了以下处理来满足要求:
数据集在 dataset 文件夹中。
本项目在比较了 LSTM,CNN,SVM 和 MLP 后,选择采用效果最好的 CNN 进行训练。
pip install -r requirement.txt
安装 Opensmile
python predict.py
直接运行 predict.py
,使用已经预先训练的模型预测你输入语音(wav文件)的情感。可以通过修改 predict.py
中的 audio_path
来修改要识别的语音。在项目路径 test_speech/
中给了一些可以用来测试的语音,其均来自于 TESS 数据集,与训练集不重合。预测结果展示为雷达图,如下为我们输入一段愤怒语音的输出结果。
首先我们利用 openSMILE 进行数据预处理,提取 RAVDESS 的特征保存到路径 features/train_cnn1d_opensmile_ravdess_IS10.csv
文件中。
python preprocess.py
运行 train.py
进行模型训练。具体训练参数设置在 cnn1d.yaml
。
python train.py
训练可以得到准确率和损失的曲线图。
目前我们项目的准确率在76%左右。
训练的模型保存在 checkpoints/
文件夹下。
/models
文件夹dataset/
下,注意一种按照情感分成多个文件夹,与原来的格式保存一致,情感种类可以增加