对大多数产品而言,这是主要的浏览器生物信号路径:在交付有意义的信号体验之前无需任何头戴设备。
- 在关键时刻根据脉搏变化做出反应的欺骗或诈唬游戏
- 训练和社交体验中的压力或唤醒度反馈
- 随时间展示生理反应的呼吸和放松流程
- 希望无需额外硬件就能获取摄像头脉搏信号的生物反馈类健康应用
安装
推荐用法与高级用法
推荐:- 浏览器应用使用
createRppgSession()。 - 如果希望在处理器发生终止性故障后自动重启,使用
createManagedRppgSession()。 - 只有在确实需要底层样本输入时,才使用
@elata-biosciences/eeg-web中的createRppgPipeline()。
- 只有在需要自定义编排、且已经理解运行时生命周期时,才使用
RppgProcessor、DemoRunner、自定义后端或生成的 WASM 绑定。 - 如果你不是在调试 SDK 本身,不要从生成的 WASM 导出开始。
最小集成
典型的集成流程
- 在浏览器中获取摄像头流并绑定到
video元素。 - 调用
createRppgSession({ video, backend: "auto" })。 - 通过
session.getMetrics()读取指标。 - 通过
onDiagnostics或session.getDiagnostics()展示诊断信息。 - 清理时使用
await session.stop()停止会话。
createRppgSession() 负责 WASM 初始化、FaceMesh 加载、帧调度、ROI 选择、诊断和清理。
使用 session.state 或 diagnostics.state 区分:
- 正常运行:
running - 启动回退或降级设置:
degraded - 运行时处理器终止性故障:
failed
faceMesh: "off",会话会保持在受支持的 video_frame 模式,默认不会被报告为 FaceMesh 故障。
如果你的应用需要显式的资源路径,而不是默认的 /pkg/* 查找,可以传入以下一个或多个参数:
wasmImporter。
托管重启流程
如果你希望由 SDK 负责处理器终止性故障后的重启时机,请使用托管封装:starting、running、retrying 和 failed 等高层状态,同时仍允许应用在需要时访问底层的 RppgSession。
高级辅助函数
轨迹快照
轨迹快照
当你需要近期的波形或调试数据点用于图表、调试面板或回归记录时,使用 如需基于轨迹数据进行波峰/阈值调试,使用
getTraceSnapshot():computeTraceWaveformDebug():错误规范化
错误规范化
在应用代码中使用 这会为应用提供稳定的错误类别,例如
normalizeRppgError(),而不是解析原始的错误消息文本:wasm_init_failed、backend_unavailable、camera_not_playing 和 processor_failed。应用适配器
应用适配器
如果你想要一个面向应用的单一快照,包含重启状态、发布门控、轨迹数据和稳定的提示信息,使用
createRppgAppAdapter():应用监视器
应用监视器
如果你还希望由 SDK 负责定期获取快照的循环,使用
createRppgAppMonitor():视频播放辅助函数
视频播放辅助函数
createRppgSession() 现在默认会等待视频元素开始播放。如果你需要自己协调这一步,可以直接调用 ensureVideoPlaying():何时改用 rPPG 模板
在以下情况,优先使用脚手架生成的rppg-demo 模板:
- 你需要一个确认可用的浏览器摄像头应用
- 你需要参考打包 WASM 资源的加载方式
- 调试你自己的集成时,需要更快的对比基准
常见问题
- 如果
session.backendMode为unavailable,你的应用很可能没有正确提供打包的pkg/资源。 - 如果
session.state.status为failed,请将该处理器后端视为已终止并重新创建会话,而不是继续从中轮询指标。 - 如果看到 “backend pipeline has no push_sample API”,你可能绕过了安全的封装路径。浏览器应用请从
createRppgSession()开始,底层输入请使用initEegWasm()加createRppgPipeline()。 - 如果遇到
wasmrppgpipeline_new,请先初始化 WASM 模块再创建底层流水线,并避免直接调用生成的构造函数。 - 如果看到已弃用的初始化警告,请通过
initEegWasm()启动,而不是把原始字符串、URL 或缓冲区直接传给生成的初始化导出。 - 如果摄像头访问失败,请确认页面拥有使用
getUserMedia的权限。 - 如果
session.lastError不为空,请使用其code和message展示真实的采集或处理器故障,而不是盲目重试。 - 如果你只是在评估 SDK,使用脚手架应用比自己搭建整个浏览器流水线快得多。
版本建议
这些包各自独立发布版本,因此
rppg-web 和 eeg-web 的版本号不会相同,而且各包的最新版本之间不一定互相兼容。如果同时使用多个 Elata 包,请使用 create-elata-demo 固定的版本组合。参见兼容性。下一步
现有应用教程
分步集成 rPPG
rppg-web 参考
包 API 和导出
故障排查
常见故障及解决方法