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