# 基于rPPG的血压估计系统 该项目是一个基于远程光电容积脉搏波描记法(rPPG)的血压估计系统。它使用LSTM神经网络在多个rPPG数据集上进行训练,然后可以从视频中提取光学脉冲信号,并预测个体的收缩压(SBP)和舒张压(DBP)值。 ## 核心文件 - `BPApi.py`: 包含BP估计模型的核心逻辑,如信号预处理、模型推理等。 - `lstm.py`: 定义了用于BP估计的LSTM神经网络架构。 - `video.py`: 视频处理、人脸检测和BP估计的主要脚本。 - `best_model.pth`: 在多个数据集上训练的最佳模型权重文件。 ## 使用方法 1. 确保已安装所需的Python库,包括`opencv-python`、`torch`、`numpy`、`scipy`和`pywavelets`。 2. 运行`video.py`脚本。 3. 脚本将打开默认摄像头,开始人脸检测和BP估计。 4. 检测到的人脸区域将被提取用于BP估计,预测结果将显示在视频流窗口中。 5. 按`q`键退出程序。 ## 模型介绍 该项目使用LSTM神经网络作为基础模型,使用大规模PPG信号数据集进行预训练,并进一步使用rPPG信号数据集进行微调,以预测个体的SBP和DBP值。模型输出包含两个值,分别对应SBP和DBP的预测值。 ### 数据集介绍 该项目使用了以下三个公开的rPPG数据集进行训练: 1. **MIMIC-III数据集**: 包含9054000条PPG信号序列和对应的SBP/DBP标签。 2. **UKL-rPPG数据集**: 包含7851条rPPG信号序列和对应的SBP/DBP标签。 3. **iPPG-BP数据集**: 包含2120条rPPG信号序列和对应的SBP/DBP标签。 ## 算法流程 1. **视频采集**: - 使用OpenCV库初始化视频捕捉对象,并获取视频的帧率。 2. **人脸检测**: - 在每一帧上使用Haar级联人脸检测器进行人脸检测。 - 如果检测到人脸,获取人脸区域的边界框坐标。 3. **帧序列提取**: - 维护一个固定长度(如250帧)的循环队列,用于存储最近的人脸帧序列。 - 对于新检测到的人脸,将其添加到队列中。 4. **信号预处理**: - 当队列满时,执行以下预处理步骤: - 从人脸帧序列中提取绿色通道信号。 - 使用小波变换进行去趋势,消除基线漂移。 - 使用带通滤波器去除高频和低频噪声,保留有效的脉搏频率范围。 5. **推理**: - 将预处理后的绿色通道信号输入到LSTM神经网络模型中。 - 模型输出SBP和DBP的预测值。 6. **可视化**: - 在视频帧上绘制人脸边界框。 - 在视频帧上显示预测的SBP和DBP值。 7. **持续循环**: - 对新的视频帧重复执行步骤2-6,持续进行人脸检测、BP估计和可视化。 8. **退出**: - 当用户按下特定按键(如'q')时,退出程序,关闭视频捕捉对象和所有窗口。