tjy/BloodPressure/README.md

64 lines
2.8 KiB
Markdown
Raw Normal View History

2024-06-20 18:22:33 +08:00
# 基于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')时,退出程序,关闭视频捕捉对象和所有窗口。