基于 SigWavNet 模型的实时语音情绪识别 Demo
本项目实现了一个基于 SigWavNet 模型的实时语音情绪识别系统,包含完整的前后端实现。
功能特性 / Features:
- 🎤 实时语音捕获
- 🧠 基于 SigWavNet 的情绪识别
- 📊 实时情绪可视化
- 🌐 Web 界面
后端 / Backend:
- Python 3.8+
- Flask + Flask-SocketIO (WebSocket)
- PyTorch
- PyAudio (音频捕获)
- librosa (音频处理)
前端 / Frontend:
- HTML5 + CSS3 + JavaScript
- Web Audio API
- Chart.js (可视化)
模型 / Models:
- SigWavNet (默认) - 多分辨率小波网络,高准确率
- LSTM (备选) - 长短期记忆网络,快速实时处理
realtime_speech_emotion_recognisation/
├── backend/ # 后端代码
│ ├── app.py # Flask主应用
│ ├── audio_processor.py # 音频处理模块
│ ├── emotion_model.py # 模型封装
│ ├── model.py # SigWavNet模型定义
│ ├── lstm_model.py # LSTM模型定义
│ ├── custom_layers.py # 自定义层
│ ├── utils.py # 工具函数
│ ├── train_sigwavnet.py # 训练脚本
│ ├── requirements.txt # Python依赖
│ └── models/ # 预训练模型目录
├── frontend/ # 前端代码
│ ├── index.html # 主页面
│ ├── style.css # 样式文件
│ ├── app.js # 前端逻辑
│ └── assets/ # 静态资源
├── docs/ # 文档目录
│ ├── setup/ # 设置相关文档
│ ├── installation/ # 安装相关文档
│ ├── training/ # 训练相关文档
│ └── model/ # 模型相关文档
├── tests/ # 测试文件
│ └── backend/ # 后端测试
├── scripts/ # 脚本文件
│ └── backend/ # 后端脚本
├── README.md # 项目说明
└── .gitignore # Git忽略文件
# 创建虚拟环境
conda create -n ser-env python=3.8
conda activate ser-env
# 安装依赖
cd backend
pip install -r requirements.txtWindows用户注意: PyAudio安装可能需要额外步骤,参考 docs/setup/SETUP.md
选项A: 使用未训练模型(快速演示)
- 可以直接运行,无需模型文件
- 准确率较低,仅用于功能演示
选项B: 使用训练好的模型
- 参考
docs/model/MODEL_SETUP.md获取模型 - 将模型文件放置在
backend/models/sigwavnet_model.pth
使用默认模型 (SigWavNet):
cd backend
python app.py使用LSTM模型:
cd backend
python app.py --model lstm后端将在 http://localhost:5000 启动。
更多模型选择选项请参考 docs/model/MODEL_COMPARISON.md
- 在浏览器中访问:
http://localhost:5000 - 点击"开始录音"按钮
- 允许浏览器访问麦克风
- 对着麦克风说话
- 查看实时情绪识别结果
详细说明请参考 docs/setup/SETUP.md 或 docs/setup/QUICK_START.md
- 点击"开始录音"按钮
- 对着麦克风说话
- 系统实时识别并显示情绪结果
- 点击"停止录音"结束
- Happy (快乐)
- Sad (悲伤)
- Angry (愤怒)
- Neutral (中性)
- 其他 (根据训练数据)
✅ 高性能: 在IEMOCAP和EMO-DB数据集上表现优异
✅ 端到端: 直接从原始波形提取特征,无需复杂预处理
✅ 多分辨率: 小波变换捕获不同时间尺度的特征
✅ 注意力机制: 空间和时间注意力提升识别准确率
本项目对原始SigWavNet进行了以下适配:
- 流式处理: 支持实时音频流输入
- WebSocket通信: 低延迟的前后端通信
- 优化推理: 针对实时场景优化模型推理
- 错误处理: 增强的异常处理和降级策略
- CPU模式: 适合演示和小规模使用
- GPU加速: 可通过设置
device='cuda'启用 - 延迟: 当前实现约0.5-1秒延迟(可优化)
本项目基于 SigWavNet 的 BSD-3-Clause 许可证。