Skip to content

基于HMM和CNN的英文语音数字识别系统。使用Free Spoken Digit Dataset (FSDD)数据集,实现了两种不同的语音识别方法并进行了对比实验。项目包含完整的数据处理、模型训练、评估和可视化功能,支持GPU加速。

Notifications You must be signed in to change notification settings

Yonagi04/speech_recognition

Repository files navigation

语音识别

本项目实现了基于HMM和CNN的语音数字识别系统,用于比较两种不同方法在语音识别任务上的表现。

项目结构

.
├── data/                # 音频数据目录
├── models/             # 模型保存目录
├── results/            # 实验结果图表
├── cnn_model.py        # CNN模型实现
├── hmm_model.py        # HMM模型实现
├── evaluation.py       # 评估模块
├── main.py            # 主程序
└── README.md          # 项目说明文档

环境要求

  • Python 3.8+
  • TensorFlow 2.x
  • librosa
  • numpy
  • matplotlib
  • scikit-learn
  • hmmlearn

GPU加速支持

本项目支持使用GPU加速,特别是CNN模型的训练部分。要启用GPU加速,需要:

  1. 安装CUDA和cuDNN(如果使用NVIDIA GPU)
  2. 安装支持GPU的TensorFlow版本:
pip install tensorflow-gpu
  1. 确保系统已正确配置GPU环境:

    • NVIDIA显卡驱动
    • CUDA工具包
    • cuDNN库
  2. 验证GPU是否可用:

import tensorflow as tf
print("GPU是否可用:", tf.test.is_gpu_available())
print("GPU设备列表:", tf.config.list_physical_devices('GPU'))

注意:HMM模型的计算主要在CPU上进行,不支持GPU加速。

数据集准备

本项目使用Free Spoken Digit Dataset (FSDD)数据集。数据集准备步骤如下:

  1. 运行数据下载脚本:
python download_fsdd.py

这将自动:

  • 下载FSDD数据集
  • 处理音频文件(统一采样率为16kHz)
  • 将处理后的数据保存在data/processed目录
  1. 划分训练集和测试集:
python data_split.py

这将:

  • 将数据集划分为训练集和测试集
  • 确保每个数字在测试集中有足够的样本
  • 将划分后的数据保存在data/traindata/test目录

数据集结构:

data/
├── processed/          # 处理后的原始数据
├── train/             # 训练集
│   ├── 0/            # 数字0的样本
│   ├── 1/            # 数字1的样本
│   └── ...
└── test/             # 测试集
    ├── 0/            # 数字0的样本
    ├── 1/            # 数字1的样本
    └── ...

实验结果

HMM模型

  • 总体识别率:84.00%
  • 各数字识别率:
    • 数字 0: 100.00%
    • 数字 1: 70.00%
    • 数字 2: 60.00%
    • 数字 3: 80.00%
    • 数字 4: 100.00%
    • 数字 5: 80.00%
    • 数字 6: 100.00%
    • 数字 7: 90.00%
    • 数字 8: 70.00%
    • 数字 9: 90.00%

CNN模型

  • 总体识别率:71.00%
  • 各数字识别率:
    • 数字 0: 100.00%
    • 数字 1: 100.00%
    • 数字 2: 60.00%
    • 数字 3: 100.00%
    • 数字 4: 80.00%
    • 数字 5: 80.00%
    • 数字 6: 100.00%
    • 数字 7: 90.00%
    • 数字 8: 0.00%
    • 数字 9: 0.00%

结果分析

  1. HMM模型表现:

    • 总体识别率较高(84.00%)
    • 对大多数数字都有较好的识别效果
    • 识别率分布较为均匀,没有完全无法识别的数字
    • 在数字2的识别上表现最差(60%)
  2. CNN模型表现:

    • 总体识别率较低(71.00%)
    • 对部分数字(0、1、3、6)有很好的识别效果(100%)
    • 对数字8和9完全无法识别(0%)
    • 识别率分布不均匀,存在明显的两极分化
  3. 对比分析:

    • HMM模型在整体性能上优于CNN模型
    • HMM模型表现更稳定,没有完全无法识别的数字
    • CNN模型在某些数字上表现优异,但在其他数字上表现较差
    • 两种模型在数字2的识别上都存在困难

可视化结果

实验结果的可视化图表保存在results目录下:

  • hmm_results.png:HMM模型的识别结果和混淆矩阵
  • cnn_results.png:CNN模型的识别结果和混淆矩阵
  • comparison.png:两种方法的对比图

运行方法

  1. 安装依赖:
pip install -r requirements.txt
  1. 运行实验:
python main.py

注意事项

  1. 确保音频数据已正确放置在data目录下
  2. 实验过程中会自动创建modelsresults目录
  3. 图表使用中文字体显示,确保系统已安装SimHei字体

About

基于HMM和CNN的英文语音数字识别系统。使用Free Spoken Digit Dataset (FSDD)数据集,实现了两种不同的语音识别方法并进行了对比实验。项目包含完整的数据处理、模型训练、评估和可视化功能,支持GPU加速。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages