摘要:心肺听诊是临床诊断心肺疾病的重要手段,但传统听诊依赖医生主观经验,诊断结果易受个体差异影响。为提高心肺音分类的客观性准确性,本文设计并实现了一套基于集成学习的心肺听诊音自动分类系统。

项目简介

DeepCure 是一套基于集成学习的心肺听诊音自动分类系统,旨在辅助临床医生快速筛查心肺异常。系统涵盖从音频预处理、特征提取 、模型训练到可视化诊断的完整流程。

系统概述

本系统采用 51 例心音、51 例肺音及 146 例心肺混合录音作为实验数据。在预处理阶段,对原始音频进行降噪、归一化及高通滤波处理,并利用 Butterworth 带通滤波器将混合录音分离为心音分量(20–150 Hz)和肺音分量(150–2000 Hz)。在特征提取阶段,提取了 13 维 MFCC 系数及其统计量、频谱质心、频谱带宽、频谱滚降、频谱平坦度、频谱对比度、过零率、短时能量、起始强度、峰态系数等共计 40 余维声学特征。针对肺音中爆裂音与喘鸣音难以区分的问题,引入频谱平坦度、频谱对比度及起始检测等判别性特征以增强分类能力 同时,采用类别感知的数据增强策略(包括噪声注入、时间平移、时间拉伸、音调偏移等)缓解样本不均衡问题。

在分类模型方面,构建了基于随机森林、XGBoost和支持向量机的软投票集成分类器,分别针对心音四分类(正常、杂音、心律不齐、额外心音)和肺音三分类(正常、爆裂音、喘鸣/鼾音)任务进行训练与优化。通过类别加权采样、正则化参数调优及五折交叉验证等策略提升模型的泛化性能。

最终,基于 PySide6 框架开发了桌面端可视化应用,实现了音频上传、心肺音分离、波形与频谱可视化、自动分类诊断及置信度展示 等功能,为临床辅助诊断提供了一套完整的解决方案。

系统架构

系统采用”音频预处理 → 心肺分离 → 特征提取 → 集成学习分类 → 可视化展示”的五阶段流水线架构。

项目结构

系统启动并初始化GUI后,用户依次执行加载项目采用单文件架构,核心代码全部集中在Main.py,包含LungSoundCNN模型类、TrainThread训练线程类和MainWindow主──口类,配合model目录存放预训练权重及特征数据、testAudio目录存放测试音频、以及两个CSV患者数据文件。CSV数据集、提取MFCC特征、训练或加载CNN模型、可视化训练曲线、上传WAV音频进行疾──诊断五个步骤,每步完成后返回主窗口等待下一步操作,最终退出系统。

目录结构

核心模块

本系统包含六个核心模块:数据加载模块通过pandas读取两个CSV文件并按PATIENT_ID合并展示226条患者记录;特征提取模块加载预──算的MFCC特征矩阵(X.txt.npy),经归一化、打乱和转置处理为(N,3,46,46)格式;模型构建模块定义LungSoundCNN网络,包含两层Conv2d+ReLU+MaxPool2d卷积层和Linear(3200→256→8)全连接层;训练模块基于QThread异步执行,采用Adam优化器和CrossEntropyLoss训练50轮;可视化模块通过matplotlib绘制准确率和损失曲线;预测模块使用librosa提取音频MFCC特征,经reshape为46×46×3特征图后送入模型,通过softmax输出8类疾病的分类结果与置信度。

快速开始

安装Python 3.8+环境后,在命令行执行python Main.py启动系统,依次点击左侧控制面板的”加载数据集”(选择项目根目录)→”提取声学特征”→”训练/加载模型”→”可视化训练曲线”→”上传音频诊断”(选择testAudio目录下的WAV文件)即可完成从数据加载到疾病诊断的完整流程。

环境要求

本系统需 Python 3.8+ 环境,核心依赖包括 PySide6(GUI)、PyTorch(模型构建与训练)、librosa(音频与 MFCC 特征)、NumPy(数组与数据处理)、Pandas(CSV 数据处理)、matplotlib(训练曲线可视化),支持 CPU 运行,若有 NVIDIA GPU 可自动启用 CUDA 加速训练与推理。

运行实验

启动系统后,依次点击“加载数据集”选择项目根目录,系统读取并合并 CSV 文件显示 226 条患者记录;点击“提取声学特征”加载并预处理 MFCC 矩阵;点击“训练/加载模型”,若已有 model_pytorch.pth 则加载权重,否则异步训练 50 轮并保存模型;点击“可视化训练曲线”查看准确率与损失变化;最后点击“上传音频诊断”选择 WAV 文件,系统提取 MFCC 特征并经 CNN 推理输出病分类、置信度及 Top5 类别概率分布。

查看结果

模型训练或加载完成后,点击“可视化训练曲线”查看 50 轮训练的准确率与损失变化;点击“上传音频诊断”选择 WAV 文件后,系统在日志区显示音频采样率和时长,并输出诊断结果卡片(疾病名称及置信度)及 Top5 类概率柱状图,其中健康结果以绿色、疾病结果以黄色标识。

实验结果

实验结果表明,LungSoundCNN 经 50 轮训练后可有效区分哮喘、支气管扩张、细支气管炎、COPD、健康、下呼吸道感染、肺炎及呼吸道感染 8 类疾病,系统能对用户上传的肺部听诊音频实时输出分类结果及置信度。

识别效果

图1 系统界面

图2 加载数据集

图3 提取声学特征

图4 训练和加载模型

图5 可视化训练曲线

图6 慢性阻塞性肺病

图7 听音:上呼吸道感染

图8 听音:健康

图9 听音:肺炎

结果点评

本系统采用轻量级两层卷积的 LungSoundCNN,结构简洁、训练速度快,适合作为呼吸疾病辅助筛查工具;但未使用 Dropout 或数据增强,仅依赖预计算 MFCC 特征,在样本量有限(226 例)情况下可能过拟合,且缺少训练/测试划分评估,无法量化泛化能力。后续可引入交叉验证、混淆矩阵分析及更深层网络以提升分类性能和临床可靠性。

项目资源

包括完整的项目源代码、演示视频、运行截图,开箱即用。

关于项目

本项目基于卷积神经网络,通过分析肺部听诊音频的 MFCC 特征自动识别 8 类呼吸疾病,可辅助临床医生进行快速初步筛查与诊断。

项目背景

呼吸系统疾病是全球主要健康威胁,传统肺部听诊依赖医生经验且难以标准化,本项目通过卷积神经网络自动学习肺部声音 MFCC 特征,实现呼吸疾病的计算机辅助诊断。

作者信息

作者:Bob (张家梁)
项目编号:YP-2
原创声明:本项目为原创作品

开源协议

本项目采用AGPL-3.0开源协议,允许个人和组织自由使用、修改和分发代码,但基于本项目的衍生作品必须同样开源,且用于提供网络服务时需向用户提供完整源代码。本项目仅供学习研究使用,作者不对使用本项目产生的任何后果承担责任,使用者应遵守当地法律法规,合理合法使用本项目。如本项目对您的研究或工作有所帮助,欢迎引用并注明出处。

版权声明:本站除特别标注外的所有源码与资料均为原创,受《中华人民共和国著作权法》等相关法律保护。未经本站事先书面许可,任何个人或机构不得以复制、转载、爬取、汇编、改写、引用等方式使用本站内容,不得将本站内容发布或用于任何形式的商业活动。对未经授权使用本站内容的行为,本站保留追究法律责任的权利,包括但不限于要求删除、赔偿、诉讼等。如认为本站内容侵犯其合法权益,请提供权属证明并联系我们,我们将在核实后依法及时处理。