emotion-recognition-using-speech二次开发实战:从正确引用到快速训练语音情感识别模型
【免费下载链接】emotion-recognition-using-speechBuilding and training Speech Emotion Recognizer that predicts human emotions using Python, Sci-kit learn and Keras项目地址: https://gitcode.com/gh_mirrors/em/emotion-recognition-using-speech
emotion-recognition-using-speech 是一个基于 Python、Sci-kit Learn 和 Keras 构建的开源语音情感识别系统,它能够从一段语音中自动判断说话人的情绪(如开心、悲伤、愤怒、中性等)。本文是一份面向新手和普通开发者的实战指南,带你走通"引用项目 → 搭建环境 → 二次开发 → 训练自己的情感识别模型"的完整流程,全程无需阅读大量源码即可上手。
上图展示了该项目对 8 种机器学习模型在 1%、10%、100% 三种训练集规模下的训练/预测耗时、准确率与 F 值对比,是二次开发时挑选基线的重要参考。
项目简介:这个语音情感识别项目能做什么
该项目的核心能力包括:
- 9 种情绪识别:neutral(中性)、calm(平静)、happy(开心)、sad(悲伤)、angry(愤怒)、fear(恐惧)、disgust(厌恶)、ps(惊喜)、boredom(无聊);
- 经典机器学习 + 深度学习双路线:既支持 SVC、随机森林、梯度提升、MLP、Bagging 等 sklearn 模型,也支持基于 Keras 的 RNN(LSTM/GRU)深度模型;
- 丰富的特征提取:内置 MFCC、Chroma、MEL 频谱、Contrast、Tonnetz 五种主流语音特征,特征提取逻辑集中在 utils.py 的
extract_feature()函数; - 多数据集开箱即用:仓库已内置 RAVDESS、TESS、EMO-DB 三个公开数据集,并附带自定义数据集模板(
data/train-custom、data/test-custom); - 实时语音测试:通过 test.py 即可调用麦克风,实时录制并判断情绪。
快速搭建运行环境:3 步搞定依赖
二次开发的第一步是让项目跑起来,按下面三步操作即可:
- 准备 Python 环境:项目要求 Python 3.6+,建议使用虚拟环境(venv 或 conda)隔离依赖;
- 安装依赖:依赖清单已整理在 requirements.txt 中,包含 tensorflow、librosa、scikit-learn、pyaudio 等关键库,执行
pip3 install -r requirements.txt一键安装; - 可选安装 ffmpeg:如果你想训练自定义音频,需要安装 ffmpeg 并加入 PATH,用于把音频统一转换为 16000Hz 采样率、单声道格式,转换逻辑见 convert_wavs.py。
如何正确引用 emotion-recognition-using-speech 项目
作为开源项目使用者,引用是基本礼仪。仓库已经贴心地在 CITATION.cff 中提供了标准引用信息,你可以直接使用下面的 BibTeX 格式:
@software{speech_emotion_recognition_2019, author = {Abdeladim Fadheli}, title = {Speech Emotion Recognition}, version = {1.0.0}, year = {2019}, publisher = {GitHub}, journal = {GitHub repository}, url = {https://github.com/x4nth055/emotion-recognition-using-speech} }注意:本项目采用MIT 许可证(见根目录 LICENSE),允许自由使用、修改和商用,只需保留版权声明即可。若你的论文或项目直接使用了该框架,请务必补充上述引用。
二次开发第一步:理解两个核心类
这是整个二次开发指南中最关键的部分——你只需要掌握两个类,就能完成 90% 的开发工作。
经典机器学习:EmotionRecognizer
核心实现位于 emotion_recognition.py,只需三步即可完成训练和预测:
from emotion_recognition import EmotionRecognizer from sklearn.svm import SVC # 1. 初始化(传入任意 sklearn 模型 + 情绪列表) rec = EmotionRecognizer(model=SVC(), emotions=['sad', 'neutral', 'happy'], balance=True) # 2. 训练 rec.train() # 3. 评估与预测 print("Test score:", rec.test_score()) print("Prediction:", rec.predict("data/emodb/wav/15a04Nc.wav"))深度学习路线:DeepEmotionRecognizer
深度版本位于 deep_emotion_recognition.py,它继承了EmotionRecognizer,用 LSTM/GRU 循环神经网络替代传统分类器:
from deep_emotion_recognition import DeepEmotionRecognizer deeprec = DeepEmotionRecognizer( emotions=['angry', 'sad', 'neutral', 'ps', 'happy'], n_rnn_layers=2, n_dense_layers=2, rnn_units=128, dense_units=128 ) deeprec.train() print(deeprec.test_score()) # 测试准确率 print(deeprec.confusion_matrix(percentage=True, labeled=True)) # 混淆矩阵此外,predict_proba()还能返回每个情绪的概率分布,方便做置信度判断或接入业务逻辑。
训练你自己的语音情感识别模型:实用调参技巧
二次开发时最常问的问题是"如何提高准确率"。以下技巧直接对应项目源码中的可调参数:
- 调整情绪组合:
emotions参数决定分类任务。经验上 3 情绪(sad/neutral/happy)任务比 5 情绪任务准确率更高,可先用少类别验证流程; - 平衡数据集:
balance=True会自动均衡各类别样本数,避免多数类主导训练,见 data_extractor.py 中的数据加载逻辑; - 切换特征组合:
features参数支持["mfcc", "chroma", "mel", "contrast", "tonnetz"]任意组合,不同特征组合对准确率影响显著; - 网格搜索自动调参:官方已把各模型的候选参数写在 parameters.py,运行
python grid_search.py即可自动搜索最优超参数,结果以 pickle 形式保存在grid/目录(含 best_classifiers.pickle),最佳模型会自动被determine_best_model()加载; - 深度模型参数:在
DeepEmotionRecognizer中可调n_rnn_layers、rnn_units、dropout、epochs等,注意训练轮数默认较大,小数据集可适当减小。
如何加入自己的语音数据集:扩展项目的推荐路径
该项目的自定义数据集机制非常简单,非常适合二次开发:
- 准备音频:把任意 wav 文件转换为 16000Hz 采样率、单声道格式,可复用 convert_wavs.py 中的
convert_audio()方法(依赖 ffmpeg); - 命名即标注:在文件名末尾用下划线分隔情绪标签,例如
20190616_125714_happy.wav会被自动解析为 happy,解析规则见 create_csv.py; - 放入对应目录:训练音频放入
data/train-custom,测试音频放入data/test-custom,与仓库已有命名规范保持一致; - 控制开关:实例化时通过
custom_db、tess_ravdess、emodb三个布尔参数自由开关各数据集,灵活组合训练数据。
二次开发进阶:把模型接入你的应用
如果你想把语音情感识别能力嵌入自己的产品(如客服质检、智能音箱、情感陪伴应用),可参考以下整合思路:
- 离线批量预测:直接调用
rec.predict(audio_path),传入任意音频文件路径即可返回情绪标签,非标准格式音频会自动转换; - 实时识别:参考 test.py 的麦克风录制逻辑,它基于 pyaudio 实现录音、静音检测、音量归一化与去首尾静音,可改造为流式 API 服务;
- 概率输出:使用
predict_proba()获取情绪概率分布,用于下游置信度过滤或多轮对话状态管理; - 打包服务:将训练好的模型(pickle 或 Keras 权重)导出后,用 Flask/FastAPI 封装成 HTTP 接口,即可前后端分离部署。
常见问题与避坑指南
最后分享几个二次开发中容易踩的坑:
| 问题现象 | 原因与解决办法 |
|---|---|
| 音频加载报 RuntimeError | 音频格式不符合 16000Hz/单声道要求,请安装 ffmpeg 并确认加入 PATH |
| 报 "Emotion not recognized" | emotions参数不在 9 种可用情绪内,请核对拼写 |
| 网格搜索耗时数小时 | 属正常现象,可在 parameters.py 中删减候选参数加快速度 |
| 首次实例化较慢 | 首次运行会提取特征并写入 CSV,属于一次性开销 |
| 深度模型显存不足 | 减小rnn_units/dense_units,或减少batch_size |
总结
emotion-recognition-using-speech 是一个代码结构清晰、开箱即用的语音情感识别开源项目。本文带你完成了正确引用(BibTeX + MIT 许可)、环境搭建(requirements + ffmpeg)、核心接口理解(两个类三行代码)、自定义数据集扩展(命名即标注)以及模型调优与接入(网格搜索 + 概率输出)的全流程二次开发。掌握这些要点后,你完全可以在几小时内训练出属于自己的语音情感识别模型,并轻松集成到实际业务中。
【免费下载链接】emotion-recognition-using-speechBuilding and training Speech Emotion Recognizer that predicts human emotions using Python, Sci-kit learn and Keras项目地址: https://gitcode.com/gh_mirrors/em/emotion-recognition-using-speech
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考