• Stars
    star
    648
  • Rank 69,480 (Top 2 %)
  • Language
    Python
  • License
    MIT License
  • Created over 5 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Speech emotion recognition implemented in Keras (LSTM, CNN, SVM, MLP) | 语音情感识别

Speech Emotion Recognition

用 LSTM、CNN、SVM、MLP 进行语音情感识别,Keras 实现。

改进了特征提取方式,识别准确率提高到了 80% 左右。原来的版本的存档在 First-Version 分支

English Document | 中文文档

 

Environments

  • Python 3.8
  • Keras & TensorFlow 2

 

Structure

├── models/                // 模型实现
│   ├── common.py          // 所有模型的基类
│   ├── dnn                // 神经网络模型
│   │   ├── dnn.py         // 所有神经网络模型的基类
│   │   ├── cnn.py         // CNN
│   │   └── lstm.py        // LSTM
│   └── ml.py              // SVM & MLP
├── extract_feats/         // 特征提取
│   ├── librosa.py         // librosa 提取特征
│   └── opensmile.py       // Opensmile 提取特征
├── utils/
│   ├── files.py           // 用于整理数据集(分类、批量重命名)
│   ├── opts.py            // 使用 argparse 从命令行读入参数
│   └── plot.py            // 绘图(雷达图、频谱图、波形图)
├── config/                // 配置参数(.yaml)
├── features/              // 存储提取好的特征
├── checkpoints/           // 存储训练好的模型权重
├── train.py               // 训练模型
├── predict.py             // 用训练好的模型预测指定音频的情感
└── preprocess.py          // 数据预处理(提取数据集中音频的特征并保存)

 

Requirments

Python

Tools

 

Datasets

  1. RAVDESS

    英文,24 个人(12 名男性,12 名女性)的大约 1500 个音频,表达了 8 种不同的情绪(第三位数字表示情绪类别):01 = neutral,02 = calm,03 = happy,04 = sad,05 = angry,06 = fearful,07 = disgust,08 = surprised。

  2. SAVEE

    英文,4 个人(男性)的大约 500 个音频,表达了 7 种不同的情绪(第一个字母表示情绪类别):a = anger,d = disgust,f = fear,h = happiness,n = neutral,sa = sadness,su = surprise。

  3. EMO-DB

    德语,10 个人(5 名男性,5 名女性)的大约 500 个音频,表达了 7 种不同的情绪(倒数第二个字母表示情绪类别):N = neutral,W = angry,A = fear,F = happy,T = sad,E = disgust,L = boredom。

  4. CASIA

    汉语,4 个人(2 名男性,2 名女性)的大约 1200 个音频,表达了 6 种不同的情绪:neutral,happy,sad,angry,fearful,surprised。

 

Usage

Prepare

安装依赖:

pip install -r requirements.txt

(可选)安装 Opensmile

 

Configuration

configs/ 文件夹中的配置文件(YAML)里配置参数。

其中 Opensmile 标准特征集目前只支持:

如果需要用其他特征集,可以自行修改 extract_feats/opensmile.py 中的 FEATURE_NUM 项。

 

Preprocess

首先需要提取数据集中音频的特征并保存到本地。Opensmile 提取的特征会被保存在 .csv 文件中,librosa 提取的特征会被保存在 .p 文件中。

python preprocess.py --config configs/example.yaml

其中,configs/example.yaml 是你的配置文件路径。

 

Train

数据集路径可以在 configs/ 中配置,相同情感的音频放在同一个文件夹里(可以参考 utils/files.py 整理数据),如:

└── datasets
    ├── angry
    ├── happy
    ├── sad
    ...

然后:

python train.py --config configs/example.yaml

 

Predict

用训练好的模型来预测指定音频的情感。checkpoints/里有一些已经训练好的模型。

python predict.py --config configs/example.yaml

 

Functions

Radar Chart

画出预测概率的雷达图。

来源:Radar

import utils

"""
Args:
    data_prob (np.ndarray): 概率数组
    class_labels (list): 情感标签
"""
utils.radar(data_prob, class_labels)

 

Play Audio

播放一段音频

import utils

utils.play_audio(file_path)

 

Plot Curve

画训练过程的准确率曲线和损失曲线。

import utils

"""
Args:
    train (list): 训练集损失值或准确率数组
    val (list): 测试集损失值或准确率数组
    title (str): 图像标题
    y_label (str): y 轴标题
"""
utils.curve(train, val, title, y_label)

 

Waveform

画出音频的波形图。

import utils

utils.waveform(file_path)

 

Spectrogram

画出音频的频谱图。

import utils

utils.spectrogram(file_path)

 

Other Contributors

More Repositories

1

playground-macos

My portfolio website simulating macOS's GUI, developed with React and UnoCSS.
TypeScript
2,900
star
2

vuepress-theme-gungnir

A blog theme for VuePress 2.
TypeScript
314
star
3

Speech-and-Text

Speech to text (PocketSphinx, Iflytex API, Baidu API) and text to speech (pyttsx3) | 语音转文字(PocketSphinx、百度 API、科大讯飞 API)和文字转语音(pyttsx3)
Python
247
star
4

oh-vue-icons

A Vue component for importing inline SVG icons from different popular icon packs easily.
JavaScript
205
star
5

Text-Classification

PyTorch implementation of some text classification models (HAN, fastText, BiLSTM-Attention, TextCNN, Transformer) | 文本分类
Python
126
star
6

pcalg-py

Implement PC algorithm in Python | PC 算法的 Python 实现
Python
88
star
7

Fishmail

奇怪的摸鱼工具增加了:装作在 Gmail 上查邮件的样子看知乎摸鱼,从而降低我上班摸鱼时的不安全感
Vue
65
star
8

Just-a-Cube

A rubik's cube solver | 魔方还原(层先法 + Two-phase)
JavaScript
54
star
9

oh-my-cv

Write your curriculum vitae in Markdown online.
TypeScript
51
star
10

blog.zxh.io

My blog 🧐, powered by VuePress 2, themed by Gungnir.
CSS
36
star
11

flint

A toy deep learning framework implemented in pure Numpy from scratch. Aka homemade PyTorch lol.
Python
30
star
12

jekyll-theme-gungnir

A blog theme for Jekyll.
SCSS
17
star
13

what-if

My messy notebook, built with VuePress 2.
TypeScript
17
star
14

renovamen.github.io

My personal website 🤔
TypeScript
14
star
15

Legend-of-Zeld

Spring 2018 User Interface Interaction - A web page for "The Legend of Zelda: Breath of the Wild" | 塞尔达传说:荒野之息
CSS
12
star
16

Operating-Systems

Spring 2018 Operating Systems - Assignments (Elevator Scheduling, Memory Management and File Management) | 操作系统课程项目(电梯调度,内存管理,文件管理)
Java
11
star
17

KG-Application-Papers

Paper list about application of Knowledge Graph | 知识图谱的应用相关论文
10
star
18

midgard

Hey adventurer! Why not help me with retrieving my curriculum vitae fragments back! | 来帮我找简历吗勇士!
TypeScript
10
star
19

Image-Captioning

PyTorch re-implementation of some papers on image captioning | 图像描述
Python
7
star
20

metallic

A clean, lightweight and modularized PyTorch meta-learning library.
Python
7
star
21

wordle-helper

Help you solve the Wordle puzzles when your vocabulary failes you.
TypeScript
5
star
22

Ratom

Spring 2019 Introduction to Cybersecurity - A simple cross platform rat (remote access trojan)
Python
4
star
23

Gomoku

Fall 2016 C Programming - A Gomoku AI based on Minimax Algorithm with Alpha-beta pruning | 基于极大极小值搜索 + Alpha-beta 剪枝的五子棋人工智障
C
3
star
24

AntiFood

深夜放毒反击系统(基于酷 Q 和 NoneBot)
Python
3
star
25

OI-ACM

My solutions for OI / ACM problems - 退役蒟蒻的人生回顾
C++
3
star
26

Just-Movies

Spring 2019 Web System and Technology - Assigment: Assignment: A movie web app using Django and Vue | Django + Vue 实现的电影 Web 应用
Vue
3
star
27

gitbook-plugin-katex

Math typesetting using KaTex into Gitbook. Update Katex to the latest version (0.11.1) and support single '$' for inline math.
JavaScript
2
star
28

HUAJI_OS

Spring 2018 Operating System - Final Project | 操作系统课程设计,修改了 ORANGES 的源码
C
2
star
29

torchop

A collection of some attention / convolution operators implemented using PyTorch.
Python
2
star
30

Galaxy-Voyager

Spring 2019 Web System and Technology - Final Project: A game
JavaScript
2
star
31

alkaid

PyTorch reinforcement learning toolbox.
Python
1
star
32

Stupid-Torch

一个沙雕安卓手电筒 app,在有光的地方亮,没有光的地方绝对不亮
Java
1
star
33

Renovamen

1
star
34

Just-a-Cat

Fall 2018 SOA and Web Services - Individual Assignment: An Android app integrating some Web APIs
Java
1
star
35

Byzantine

Implement the Om(n, m) algorithm for solving the Byzantine generals problem | 拜占庭口头消息算法的 Python 实现
Python
1
star
36

StockBot

A chatbot based on Rasa NLU aims to provide stock and weather information implemented by Python | 基于 Rasa NLU 的提供股票和天气信息的聊天机器人
Jupyter Notebook
1
star