心脏每跳一次,都会把多一点血液推进面部皮肤。皮肤颜色随之发生极细微的变化,肉眼看不出,摄像头却能记录下来。远程光电容积脉搏波(rPPG)从普通视频中恢复这个信号,并换算成心率。在胸带或指夹会碍事的研究里,比如屏幕任务、访谈或已有的录像,它提供了一种无需接触式传感器的生理指标。
本文介绍 rPPG 在 Neutropic 中如何运作、返回什么、如何检验,以及从哪里开始不再可信。截图来自每个账户都能打开的示例项目(示例 · 按领域的技能)中的面部视频会话,使用的是已知脉搏的样本视频。
上传什么
上传一段拍到人脸的视频:MP4、MOV、WebM、AVI、MKV 或 M4V。应用内预览使用浏览器自带的播放器,所以如果还想在 Neutropic 里观看视频,H.264 MP4 最稳妥。无论哪种格式,分析都会在服务器上解码文件。上传最大 1 GB。
要得到可用的信号:
- 视频的大部分时间里,脸都要可见且大致正对镜头。至少需要 5 秒检测到人脸的帧,越长越好。
- 光照要稳定。闪烁的灯、在脸上移动的阳光、亮度变化的显示器,都会加入与脉搏无关的颜色变化。
- 帧率至少 8 fps。普通摄像头的 25–30 fps 就足够。
然后用平常的话提出请求:
/analyze 用远程 PPG 从 face_pulse_72bpm.mp4 估计心率。比较 POS、CHROM 和 GREEN 三种方法,报告各自的 SNR,并画出脉搏信号和频谱。
逐步发生了什么
数据分析技能先调用 media_info 读取帧率、分辨率和时长,然后调用 rppg 工具,它会:
- 找到人脸。 MediaPipe 人脸检测器大约每秒运行一次。两次检测之间保留检测框,使区域保持稳定。
- 求皮肤颜色的平均值。 区域取人脸框的内部(宽度 20–80%、高度 10–70%),以额头和脸颊为主。每一帧计算红、绿、蓝三通道的均值。
- 提取脉搏。 最多使用三种已发表的算法:GREEN(Verkruysse 等,2008)、CHROM(de Haan & Jeanne,2013)和 POS(Wang 等,2017)。默认是 POS,要求三种都用就会得到三份结果。
- 滤波与测量。 信号经过 0.7–4.0 Hz(42–240 bpm)带通滤波,心率取自功率谱的峰值。SNR 比较峰值 ±0.1 Hz 以内的功率与频带其余部分的功率。另外还会从逐个心搏得到第二个估计(基于峰值的心率和 RMSSD)。

得到什么
- 图(
*_rppg.png):主方法的滤波后脉搏时间序列,以及以每分钟心跳数为单位、标出估计心率的频谱。 - 表(
*_rppg.csv):时间、每帧面部区域的 R、G、B 均值,以及每种方法的滤波信号。可以重新作图,或接入自己的流程。 - 每种方法的数值:心率、峰值频率、SNR、基于峰值的心率、RMSSD 和心搏数。工具还会返回每种方法对应的论文出处。
- 报告:依据这些数值撰写,每张图和表都保留着生成它的工具调用,在产出物面板里按 { } 即可查看。

如何检验
心率工具只有在能找出真实存在的心率时才有用。所以我们用一段事先知道答案的视频来测试:拿一张微笑人脸的照片,做成 20 秒、30 fps 的视频,把肤色精确地按每分钟 72 次调制,再叠加缓慢的光照漂移,让方法无法只靠追踪一条干净的正弦波得出结果。
内部验证记录中的结果如下:600 帧中 600 帧都检测到了人脸,POS、CHROM 和 GREEN 都给出 72.0 bpm,SNR 分别为 12.0、11.1 和 13.5 dB。此外,单元测试会把合成的 72 bpm 颜色轨迹输入三种方法,检查它们是否返回 72.0,以及信号改为 96 bpm 时能否跟上。
示例会话的报告把三种方法并排列出,并附上各自的论文:

这只能说明流程在正常工作,不是效度研究。合成视频里没有头部运动、没有说话、没有不同的肤色,也没有摄像头压缩伪影。在研究结论中依赖 rPPG 之前,请在一部分参与者身上同时记录接触式参考信号(ECG 或指尖 PPG)进行对照。
读结果:方法一致性与 SNR
有两个数字告诉你该多大程度上相信估计值,工具两个都会报告。
- SNR。 SNR 低或为负,说明频谱峰值几乎没有高出噪声。工具自带的经验规则是:SNR 低于 0 dB 时估计不可靠。
- 方法间一致性。 POS、CHROM 和 GREEN 处理运动和光照的方式不同。如果它们相差超过 5 bpm,说明驱动信号的是脉搏以外的东西,通常是运动、光照变化或人脸太小。
同时运行三种方法(method: all)成本不高,却能顺带得到这一交叉检验。代理被要求在报告心率时一并给出 SNR 和方法间的差异,而不只是一个心率数字。

心率可以,HRV 要小心
rPPG 会给出基于峰值的 RMSSD,很容易让人把它当作心率变异性(HRV)。请小心。短时 HRV 按惯例用 5 分钟的记录计算,而从视频得到的心搏时刻受帧率限制:30 fps 时帧间隔约 33 ms。对 20 秒的视频来说,RMSSD 充其量只是信号稳定性的指标。示例报告在局限部分也说明了这一点:

如果 HRV 是你的结果变量,请记录接触式 ECG 或 PPG,并对 RR 间期使用 HRV 工具。Neutropic 接受 CSV 格式的 RR 数据,HRV 工具会报告平均 RR、SDNN、RMSSD 和 pNN50。
研究用途
- 无传感器的生理唤醒。 在摄像头本来就在录制的屏幕任务中,追踪各刺激区块的心率。
- UX 与 HCI 测试。 把同一段视频的表情和心率配对,找出可用性测试中用力或紧张的时刻。参见面部表情分析。
- 重新分析已有录像。 为其他目的录制的访谈或实验视频,前提是知情同意涵盖这一用途(见下文)。
- 跨参与者比较。 每个
*_rppg.csv或汇总值都成为参与者层面表格中的一行,之后由统计工具比较条件,例如带假设检查的compare_groups,或针对重复区块的混合模型。
/stats hr_by_block.csv 中每位参与者、每个区块(baseline、task、recovery)一行,记录 rPPG 心率。请检验心率在区块间是否不同,检查前提假设,并报告效应量。
坦诚的局限
- 只有经典算法。 包括 POS、CHROM 和 GREEN。深度学习 rPPG 模型(如 PhysNet、TS-CAN)需要训练好的权重和 PyTorch,因此没有纳入。
- 运动与光照。 头部运动、说话、变化的光照和强烈的视频压缩都会降低 SNR。除了每秒重新检测一次人脸,工具不做运动校正。
- 只处理一张脸。 使用第一个检测到的人脸,多人视频请先裁剪。
- 肤色与摄像头。 已发表的 rPPG 性能随肤色、摄像头和光照而变化。上面的合成检验无法说明它在你的参与者和环境中表现如何。
- 不是医疗器械。 估计值是研究用测量,不适合用于临床决策。
拍摄参与者:知情同意与隐私
面部视频属于个人信息,由它得出的心率在许多法域属于健康信息。首次上传前,Neutropic 会显示 上传研究数据之前 的提示,请你确认已具备处理这些数据所需的权利、参与者同意和审批(例如 IRB 或伦理委员会)。
- 在知情同意书中写明:视频不只是被观看,还会用于分析心率等生理信号。
- 测量工具在 Neutropic 的服务器上运行,模型接收的是工具返回的数字。上传内容在你删除之前一直保存在私有工作区,不会用于训练模型。包括会向你所选模型提供商发送哪些内容在内的详情,见隐私政策。
- 与合作者共享时,尽量共享派生表格(
*_rppg.csv),而不是视频本身。
延伸阅读
- 基于同一段视频的面部表情分析
- 测量身体姿势和关节角度的姿态分析
- 处理照片和图表的图像分析
- 概览所有模态的超越表格:脑电、音频和视频
- 面向心理生理学实验室的 Neutropic

