Skip to content

Michael-YuQ/sleep-apnea-detection

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

打鼾声音与呼吸骤停关联检测系统

项目概述

本项目实现了一个基于深度学习的打鼾声音与呼吸骤停关联检测系统,能够通过分析音频数据识别可能伴有呼吸暂停的打鼾模式。

功能模块

1. 音频预处理模块 (audio_preprocessing.py)

  • 音频加载与重采样
  • 噪声消除(维纳滤波)
  • 音频标准化
  • 音频分段

2. 特征提取模块 (feature_extraction.py)

  • MFCC(梅尔频率倒谱系数)
  • 梅尔频谱图
  • 普通频谱图
  • Chroma特征
  • 能量特征
  • 过零率

3. 深度学习模型模块 (model.py)

  • CNN+LSTM模型
  • Transformer模型
  • 纯CNN模型(基线)

4. 模型训练与验证模块 (train.py)

  • 数据加载与预处理
  • 数据集划分
  • 模型训练
  • 训练历史可视化
  • 模型评估

5. 实时检测演示模块 (real_time_detection.py)

  • 实时音频流检测
  • 音频文件检测
  • 检测结果实时显示

6. 链接分类模块 (classify_links.py)

  • 对txt文件中的链接进行分类
  • 支持多种分类规则
  • 结果可视化与保存

环境配置

1. 创建虚拟环境

python -m venv venv

2. 激活虚拟环境

# Windows
venv\Scripts\activate

# Linux/Mac
source venv/bin/activate

3. 安装依赖

pip install numpy tensorflow keras librosa scikit-learn matplotlib soundfile sounddevice seaborn

数据准备

1. 数据格式

将音频数据按照以下目录结构组织:

data/
  normal/     # 正常打鼾音频
    file1.wav
    file2.wav
    ...
  apnea/      # 伴有呼吸暂停的打鼾音频
    file1.wav
    file2.wav
    ...

2. 支持的音频格式

  • .wav
  • .mp3

使用方法

1. 模型训练

python train.py

参数说明:

  • 可通过修改脚本中的run()函数参数调整训练配置
  • model_type: 模型类型,可选 cnn_lstmtransformercnn
  • epochs: 训练轮数
  • batch_size: 批次大小

训练结果:

  • 模型文件保存到 models/ 目录
  • 训练历史图保存到 models/ 目录
  • 混淆矩阵保存到 models/ 目录

2. 实时检测

2.1 实时音频流检测

python real_time_detection.py --model models/cnn_lstm_best.h5

2.2 从音频文件检测

python real_time_detection.py --model models/cnn_lstm_best.h5 --file path/to/audio.wav

参数说明:

  • --model: 训练好的模型路径
  • --file: 要检测的音频文件路径(可选,不指定则进行实时检测)
  • --duration: 实时检测时长(秒)
  • --threshold: 呼吸暂停检测阈值(默认0.5)

3. 链接分类

python classify_links.py

功能说明:

  • 778740145531650048.txt 文件中的链接进行分类
  • 分类结果保存到 classified_links/ 目录
  • 分类类别:
    • raw_data: 原始APNEA_RML数据
    • cleaned_data: 清洗后的APNEA_RML数据
    • other: 其他类型数据

模型架构

1. CNN+LSTM模型

  • 3层CNN提取频谱图特征
  • 2层LSTM捕获时序信息
  • 全连接层进行分类

2. Transformer模型

  • 多头自注意力机制
  • 位置编码
  • 前馈网络
  • 全局平均池化

3. 纯CNN模型

  • 3层CNN提取特征
  • 全连接层进行分类

特征提取流程

原始音频 → 预处理 → 特征提取 → 模型输入
  1. 预处理:降噪、标准化、分段
  2. 特征提取:提取梅尔频谱图等特征
  3. 模型输入:将特征输入深度学习模型

检测流程

  1. 音频获取:通过麦克风实时获取或从文件读取
  2. 预处理:降噪、标准化
  3. 特征提取:提取梅尔频谱图
  4. 模型预测:使用训练好的模型进行预测
  5. 结果输出:显示检测结果

项目结构

.
├── audio_preprocessing.py  # 音频预处理模块
├── feature_extraction.py   # 特征提取模块
├── model.py                # 深度学习模型模块
├── train.py                # 模型训练与验证模块
├── real_time_detection.py  # 实时检测演示模块
├── classify_links.py       # 链接分类模块
├── README.md               # 使用说明文档
├── models/                 # 模型保存目录
├── data/                   # 数据目录
└── venv/                   # 虚拟环境

注意事项

  1. 数据质量:高质量的音频数据对模型性能至关重要
  2. 模型选择:根据实际需求选择合适的模型
  3. 实时检测:实时检测需要足够的计算资源
  4. 阈值调整:根据实际情况调整呼吸暂停检测阈值

扩展建议

  1. 增加更多音频特征类型
  2. 尝试更复杂的模型架构
  3. 增加数据增强技术
  4. 实现更精确的呼吸暂停事件定位
  5. 开发用户友好的GUI界面

许可证

本项目采用MIT许可证。

联系方式

如有问题或建议,请联系项目维护者。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages