59 lines
2.3 KiB
Markdown
59 lines
2.3 KiB
Markdown
# Video-based Heart Rate Monitoring
|
|
|
|
这个项目是一个基于视频的心率监测系统。它使用计算机视觉技术从人脸视频中提取心率信息。主要功能包括:
|
|
|
|
1. 检测人脸区域
|
|
2. 从人脸区域提取RGB彩色通道信号
|
|
3. 使用独立分量分析(ICA)从RGB信号中提取心率相关信号
|
|
4. 使用FFT对信号进行频率分析,找出相应的心率值
|
|
5. 计算心率变异性(HRV)指标,如SDNN、RMSSD和CV R-R
|
|
|
|
## 文件结构
|
|
|
|
- `HeartRateMonitor.py`: 实现心率监测算法的核心逻辑,以及算法演示程序。
|
|
|
|
## 使用方法
|
|
|
|
1. 确保已安装所需的Python库,包括`opencv-python`、`dlib`、`numpy`、`scipy`和`scikit-learn`
|
|
2. 运行`HeartRateMonitor.py`脚本
|
|
3. 脚本将打开默认摄像头,检测人脸区域
|
|
4. 从人脸区域提取RGB彩色通道信号,使用ICA分离出心率信号
|
|
5. 使用FFT分析心率信号,计算当前心率值
|
|
6. 同时计算心率变异性指标SDNN、RMSSD和CV R-R
|
|
7. 在视频画面上显示心率值和HRV指标
|
|
|
|
## 算法原理
|
|
|
|
### 心率信号提取
|
|
|
|
1. 从人脸ROI区域提取RGB三个通道的平均值和标准差
|
|
2. 将RGB三个通道作为特征矩阵的三行输入ICA算法
|
|
3. ICA算法将特征矩阵分解为3个独立分量
|
|
4. 选择其中一个独立分量作为心率信号
|
|
|
|
### 心率计算
|
|
|
|
1. 对心率信号进行FFT变换得到频率域表示
|
|
2. 根据设定的有效心率频率范围过滤FFT结果
|
|
3. 在过滤后的FFT结果中找到最大值对应的频率,即为当前心率值(bpm)
|
|
|
|
### 心率变异性指标
|
|
|
|
1. 使用滑动窗口从最近的心率值序列中提取一段心率数据
|
|
2. 计算该段数据的SDNN(标准差)、RMSSD(连续差分平方根值的均值)和CV R-R(R-R间期变异系数)
|
|
3. 以上三个指标反映了心率的变异程度
|
|
|
|
## 参数说明
|
|
|
|
- `freqs_min`: 有效心率频率的下限(Hz)
|
|
- `freqs_max`: 有效心率频率的上限(Hz)
|
|
- `camera_code`: 使用的摄像头编号,0为默认摄像头
|
|
|
|
## 注意事项
|
|
|
|
- 算法依赖人脸检测,如果人脸被遮挡或角度过大,将影响心率测量的准确性
|
|
- 在光照条件较差的环境下,也可能影响测量精度
|
|
- 目前只支持单个人脸的心率检测,多人情况下需要进一步改进
|
|
- 算法的鲁棒性还有待提高,在特殊情况下可能会出现失效或测量偏差
|
|
|