# 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为默认摄像头 ## 注意事项 - 算法依赖人脸检测,如果人脸被遮挡或角度过大,将影响心率测量的准确性 - 在光照条件较差的环境下,也可能影响测量精度 - 目前只支持单个人脸的心率检测,多人情况下需要进一步改进 - 算法的鲁棒性还有待提高,在特殊情况下可能会出现失效或测量偏差