前言
最近公司的体测模型中,血压信息精度有点问题,无奈只能翻找相关信息
不得不说,rppg这个路线是针的窄,rppg出血压这个。。。反正我目前只找到non这个github仓库有一个pos提取的血压数据…而且,血压会受到很多数据的影响而变,这也进一步加剧了ppg出血压的进度,这方面如为什么手表测血压不准和智能手环测量血压?结果别太认真等这些文章都指出了这种方案的不完全可靠性。
但rppg直接出血压还是一个非常非常诱人的话题,毕竟血压的测量即使是靠腕带设备也不敢说百分百准确,这种东西不需要带东西,只需要在相机面前待上一小会,就会出现血压信息,谁不心动?
另外,找到一个不错的文章:rppg出bp血压的研究 这个文章列举了很多rppg转bp的路线,只是都没有提供代码就是了emm
困难
血压与心率不同,你剧烈运动了,心率就会高,rppg信号就会密集,没运动静坐就是低。
血压与很多很多关系有关,比如是否吃药,是否经常运动,是否经常吃盐之类的,而且不同人身上表现不一致,比如我几个同事喝同一款茶,一个高压部分上升,一个高压部分下降。。。而rppg信号方面却变化没这么激烈。。。就相当的痛苦
方向1:ppg直出血压
这个方案是根据HealthWatcher这个项目得到的,它的计算方法是计算心率,然后通过身高体重性别年龄这些一股脑的计算一个高压一个低压,核心代码如下
//这个就是心率
Beats = (int) bufferAvgB;
double ROB = 18.5;
double ET = (364.5 - 1.23 * Beats);
double BSA = 0.007184 * (Math.pow(Wei, 0.425)) * (Math.pow(Hei, 0.725));
double SV = (-6.6 + (0.25 * (ET - 35)) - (0.62 * Beats) + (40.4 * BSA) - (0.51 * Agg));
double PP = SV / ((0.013 * Wei - 0.007 * Agg - 0.004 * Beats) + 1.307);
double MPP = Q * ROB;
SP = (int) (MPP + 3 / 2 * PP);
DP = (int) (MPP - PP / 3);
我测了一下,在测试血压较为正常的人时,这个计算公式是有一定的用的,但在计算高血压/低血压时,就会出现精度问题。。。只能说如果rppg已经可以出心率,并且比较准的话,可以先考虑一下这个方法
方向2 ppg识别为abp,并计算血压,然后通过迁移学习进行rppg的测试
目前有一些文章研究,说abp和ppg信号有一定的关联,如ppg2abp这个文章,这个东西我试着跑了一下,用人家的数据集,确实精度很高,但我使用自己的ppg数据集的时候,出来的血压非常之糟糕,给我高压测到150(真实125)嗯。。。等我能正常传入ppg信号出abp信号了,再考虑这个方法吧。而且,abp信号为什么能和ppg信号相关,目前找到的几篇文章几乎都是单纯比对,而不列出科学依据。。这里也令我头大
方向3 计算多个区域的rppg信号,然后比较信号出血压
这个方案灵感来自同时测耳朵手指ppg然后估算血压,但这个方案在规划中发现太过理想了,首先很多监督训练模型在训练中都是完整的脸,现在只给一部分脸进去,其他地方全黑,不知道精度如何,如果选用pos这类算法,人的左右脸出现的如果不是完美的对称出现在屏幕中,算的区域小了,那么rppg信号精度就又会打一个巨大的问号。。这个方向已经有大佬在研究了,而且精度似乎不错,但文章是在iee上的,我看不了,就不细说了。这个我是从这个文章中的注释11看见的
方向4 通过附带abp信号的视频,直接往出淦血压信号
这个方向。。。说实话我是有一点打颤的。用的v4v这类附带血压信息的数据集,然后将里面abp作为label进行训练。。。现在用ppg作为rppg信号进行训练,出来的rppg信号都不敢说很完美,我不太清楚这种方法出来的血压能不能完美,先留个坑,等方案5的数据集训练好了再试试看
方向5 同时训练rppg信号和bp预测
这个是韩国一个dalao出的方案phase_shifted_rppg这个方案看效果演示非常出色,我也正在尝试训练这个模型,就看最终的结果了
结尾
有一说一,rppg出血压针的是忒难了,这个东西一方面研究的人少,有效数据集少,数据集获取困难。另一方面,这个东西不像了yolo,或者mtcnn这种,模型架构丰富完善,iou计算一天一套花活,这个方向的研究感觉果然更是偏学术研究方向,在商用这条路上还是有一定路要走的