64 lines
2.8 KiB
Markdown
64 lines
2.8 KiB
Markdown
# 基于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')时,退出程序,关闭视频捕捉对象和所有窗口。
|