Speech-Emotion-Analyzer
从语音中识别5种情感+性别的Conv1D深度学习项目,提供预训练模型可快速体验
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
从语音中识别5种情感+性别的Conv1D深度学习项目,提供预训练模型可快速体验
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一个场景:你在和智能客服通话,语气里带着压抑不住的烦躁——如果AI能像朋友一样感知你的情绪,自动切换到更耐心、更温和的语调来安抚你,那会是一种怎样的体验?这并非科幻,Speech Emotion Analyzer 正是这样一个将"听懂情绪"变成现实的开源项目。
这是一个由印度开发者 Mitesh Puthran 构建的深度学习项目,GitHub 星标 1400+,专门做一件事:从一段语音中识别出说话者的情绪。无论是愤怒、悲伤、平静还是恐惧,模型都能以超过 70% 的准确率做出判断。更难得的是,它甚至能区分说话者的性别,在男女各 5 种情绪的 10 分类任务上做到近乎完美的性别区分精度。

图1:原始音频波形图——这是模型接收的"原材料",一段3秒的语音被转化为波形数值序列。
在日常生活中,我们早已习惯键盘输入和屏幕点击,但语音是人与生俱来的最自然交互方式。而情绪,是语音中最丰富的信息层——同一句话,用不同的语气说出来,意思可能完全相反。
这项技术的应用场景极其广泛:
市场需求驱动下,语音情绪识别已从学术研究走向产业落地,成为情感计算(Affective Computing)领域的核心方向之一。
人类听音乐能感受到节奏和旋律,机器识别情绪则依赖特征工程。项目使用 Python 音频分析库 LibROSA 从原始音频中提取核心特征:MFCC(梅尔频率倒谱系数)、Mel Spectrogram(梅尔标度频谱图)。所有音频被标准化为3秒长度,采样率翻倍处理以增加特征维度——这是在数据集规模较小(仅约2000条音频)情况下的有效数据增强策略。

图2:音频特征提取过程——LibROSA 将原始波形转化为 Mel Spectrogram 等高维特征矩阵,作为神经网络的输入。
项目作者尝试了三种模型架构:
为什么 1D CNN 胜出?关键在于:音频特征的时序依赖不如文本那么强,而卷积核能有效捕捉局部频谱模式(类似图像处理中的局部特征提取)。模型架构为:输入 Shape (216, 1) → Conv1D(128, kernel_size=5, ReLU) × 3 → MaxPooling1D(pool_size=8) → Dropout(10%) → Flatten → Dense(10) 输出。

图3:Conv1D 模型架构——三层一维卷积逐步提取频谱局部特征,Dropout 正则化防止过拟合。
模型训练依赖两个公开数据集:
两个数据集的标注方式不同(RAVDESS 用文件名第7字符,SAVEE 用前2字符),合并训练需要做数据清洗和标签对齐。项目通过 final_results_gender_test.ipynb 完成数据加载、标签提取和模型训练全流程。

图4:提取后的音频特征数组——附有情绪标签,用于模型训练和验证。
Speech-Emotion-Analyzer/
├── AudioRecorder.ipynb # 实时录音测试(PyAudio录制 → 输出.wav)
├── final_results_gender_test.ipynb # 核心训练脚本(数据加载→特征提取→训练→测试)
├── model.json # Keras模型结构定义(Conv1D架构)
├── saved_models/
│ └── Emotion_Voice_Detection_Model.h5 # 训练好的权重文件
├── Predictions.csv # 测试集预测结果(真实值 vs 预测值)
├── output10.wav # 示例录音("This coffee sucks"愤怒男声)
└── images/ # README配图(波形/频谱/特征/CNN结构/预测结果)
实时推理流程:通过 AudioRecorder.ipynb,用户可以用麦克风实时录制语音,调用训练好的 .h5 模型进行实时情绪预测——这是项目最具实用价值的部分。

图5:测试集真实情绪 vs 预测情绪对比——部分样本展示,模型在多数类别上表现稳定。
~70% 的验证准确率在学术标准下并不算高。情绪识别本身具有主观性和模糊性,70% 接近该任务在有限数据集上的理论上限。提升方向:引入更多训练数据、尝试预训练音频模型(Wav2Vec2、HuBERT)、使用注意力机制增强模型对关键情绪片段的捕捉。
RAVDESS 演员在录音棚环境中表现"标准情绪",与真实通话中的自然情绪差异巨大。真实场景的语音往往包含背景噪声、混响、口音差异,模型泛化能力有待验证。
实际人类情绪远不止 5 种(高兴/悲伤/愤怒/恐惧/平静)。更精细的情绪维度(如愉悦度 + 唤醒度 二维空间)需要更复杂的标注体系和多分类模型。
项目以 Jupyter Notebook 形式提供,缺乏 REST API 或 Web UI,无法直接集成到生产系统中。需要额外工程化工作才能部署为实时推理服务。
语音情绪识别是情感计算的核心技术之一,也是多模态情感 AI 的关键输入通道。随着大语言模型(LLM)和多模态模型的兴起,情绪感知能力正成为智能助手升级的重要方向——不仅是"听懂说了什么",更要"听懂说话人的感受"。
从技术演进路径看:
该项目作为入门级研究和教育工具价值显著:代码简洁、逻辑清晰、数据集公开,非常适合作为语音情感 AI 的入门实战项目。
pip install tensorflow keras librosa numpy scikit-learn pyaudio
git clone https://github.com/MiteshPuthran/Speech-Emotion-AnalyzerRawData/ 目录final_results_gender_test.ipynb 按顺序执行各 cellAudioRecorder.ipynb 录制自己的语音并测试模型输出 0-9 数字对应情绪:
0-女声_愤怒 1-女声_平静 2-女声_恐惧 3-女声_高兴 4-女声_悲伤
5-男声_愤怒 6-男声_平静 7-男声_恐惧 8-男声_高兴 9-男声_悲伤
本项目展现了从语音信号处理到深度学习分类的完整技术链路,是语音情绪识别领域的优秀学习案例。