goVISCAN:多光谱非接触生命体征传感器,1.3米距离检测心率/呼吸/血氧(Fraunhofer IOF 2026)

来源:Fraunhofer IOF Jena | SPIE Optical Instrument Science 2026 | 座舱健康监测研究

论文/资讯信息

  • 论文: “Contactless vital sign parameter measurement using compact snapshot multispectral multiaperture camera: design, realization, application, evaluation”
  • 作者: Martin Hubold, Johanna Karl, Kevin Srokos et al.
  • 会议: SPIE 14111, Optical Instrument Science, Technology, and Applications IV, 2026-05-28
  • 机构: Fraunhofer Institute for Applied Optics and Precision Engineering (IOF), Jena
  • 传感器名: goVISCAN
  • 项目: “Advanced Multimodal Imaging” 区域联盟 (2022-2025, BMBF资助€900万)

核心创新

goVISCAN 是一种指尖大小的多光谱多孔径相机,通过9个微透镜同时捕获不同波长的光,从1.3米距离非接触测量心率、呼吸率和血氧饱和度。利用皮肤亮度随血流脉动的微小变化(rPPG原理),通过多光谱分离提升信噪比。

1. 技术规格

参数 goVISCAN 传统指夹式
测量距离 0.7-1.3m 接触
心率误差 ±2.8 BPM ±1-2 BPM
呼吸误差 ±1.3 次/分 ±1 次/分
血氧误差 ±3.8个百分点 ±1-2%
尺寸 10×7.5cm (透镜指甲大小) ~5×3cm
工作原理 多光谱rPPG 光电容积描记
环境光干扰 低(多光谱分离) 无(接触式)
运动干扰 低(多孔径设计) 无
状态 实验室验证(12人) 量产医疗级

2. 技术原理

2.1 多光谱多孔径架构

graph LR
    A[LED照明<br/>多波长] --> B[皮肤表面]
    B --> C[血流脉动<br/>皮肤亮度微变]
    C --> D[9微透镜阵列<br/>各捕获不同光谱]
    D --> E[多光谱图像<br/>9通道数据]
    E --> F[信号处理<br/>rPPG算法]
    F --> G[心率/呼吸/血氧]

2.2 核心算法实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
"""
goVISCAN: 多光谱非接触生命体征检测
基于 Fraunhofer IOF 2026 论文复现

核心架构:
1. 9通道多光谱采集(蓝到近红外)
2. 皮肤区域检测 + ROI提取
3. 多通道rPPG信号提取
4. 自适应通道融合
5. 心率/呼吸/血氧估计

硬件参数:
- 微透镜数: 9个
- 光谱范围: 400-1000nm (蓝到NIR)
- 测量距离: 0.7-1.3m
- 尺寸: 10cm × 7.5cm
- 照明: 集成LED
"""

import torch
import torch.nn as nn
import torch.nn.functional as F
import numpy as np
from typing import Tuple, List, Optional

class MultispectralROIParser(nn.Module):
"""
多光谱ROI提取器

输入: 9通道多光谱图像
输出: 皮肤ROI的时序信号
"""

def __init__(self, num_channels: int = 9):
super().__init__()
# 皮肤检测网络(简化)
self.skin_detector = nn.Sequential(
nn.Conv2d(num_channels, 16, 3, padding=1),
nn.BatchNorm2d(16),
nn.ReLU(),
nn.Conv2d(16, 32, 3, padding=1),
nn.BatchNorm2d(32),
nn.ReLU(),
nn.Conv2d(32, 1, 1),
nn.Sigmoid()
)

def forward(self, multispectral_frame: torch.Tensor) -> Tuple[torch.Tensor, torch.Tensor]:
"""
Args:
multispectral_frame: (B, 9, H, W) 多光谱图像

Returns:
skin_mask: (B, 1, H, W) 皮肤区域掩码
roi_signal: (B, 9, T) ROI内平均信号
"""
skin_mask = self.skin_detector(multispectral_frame)

# 提取ROI信号(简化:对整个mask区域取平均)
weighted = multispectral_frame * skin_mask
roi_signal = weighted.sum(dim=(2, 3)) / (
skin_mask.sum(dim=(2, 3)) + 1e-8
) # (B, 9)

return skin_mask, roi_signal


class MultichannelRPPG(nn.Module):
"""
多通道rPPG信号提取

论文核心: 通过9个光谱通道的互补信息
提升信噪比,抵抗环境光和运动干扰

方法:
1. 对每个通道提取皮肤亮度时序信号
2. 自适应选择信噪比最高的通道
3. 融合多通道信号 → 心率/呼吸/血氧
"""

def __init__(self, num_channels: int = 9, fs: float = 30):
super().__init__()
self.num_channels = num_channels
self.fs = fs # 帧率

# 通道注意力(自适应选择最佳光谱)
self.channel_attention = nn.Sequential(
nn.Linear(num_channels, num_channels // 2),
nn.ReLU(),
nn.Linear(num_channels // 2, num_channels),
nn.Softmax(dim=-1)
)

# 带通滤波参数
self.hr_low = 0.75 # 45 BPM
self.hr_high = 3.0 # 180 BPM
self.rr_low = 0.15 # 9 BPM
self.rr_high = 0.5 # 30 BPM

def forward(self, multi_signal: torch.Tensor) -> dict:
"""
Args:
multi_signal: (B, 9, T) 多通道时序信号

Returns:
heart_rate: (B,) 心率 BPM
resp_rate: (B,) 呼吸率 BPM
spo2: (B,) 血氧饱和度 %
"""
B, C, T = multi_signal.shape

# 1. 去趋势
detrended = multi_signal - multi_signal.mean(dim=-1, keepdim=True)

# 2. 通道注意力
channel_weights = self.channel_attention(
detrended.std(dim=-1) # 各通道方差作为特征
) # (B, C)

# 3. 加权融合
weighted_signal = (detrended * channel_weights.unsqueeze(-1)).sum(dim=1) # (B, T)

# 4. FFT分析
fft = torch.fft.rfft(weighted_signal, dim=-1)
freqs = torch.fft.rfftfreq(T, 1/self.fs)

# 5. 心率(0.75-3Hz带通)
hr_mask = (freqs >= self.hr_low) & (freqs <= self.hr_high)
hr_power = fft.abs() * hr_mask
hr_freq = freqs[hr_power.argmax(dim=-1)]
heart_rate = hr_freq * 60 # Hz → BPM

# 6. 呼吸率(0.15-0.5Hz)
rr_mask = (freqs >= self.rr_low) & (freqs <= self.rr_high)
rr_power = fft.abs() * rr_mask
rr_freq = freqs[rr_power.argmax(dim=-1)]
resp_rate = rr_freq * 60

# 7. 血氧估计(简化:红光/红外比值法)
# 假设通道0为红光(660nm), 通道8为NIR(940nm)
red_ac = detrended[:, 0].std(dim=-1)
nir_ac = detrended[:, 8].std(dim=-1)
dc_ratio = (multi_signal[:, 0].mean(dim=-1) /
multi_signal[:, 8].mean(dim=-1))
ac_ratio = (red_ac / (nir_ac + 1e-8))
ratio = dc_ratio * ac_ratio
spo2 = 110 - 25 * ratio # 经验公式

return {
'heart_rate': heart_rate,
'resp_rate': resp_rate,
'spo2': spo2.clamp(85, 100),
'channel_weights': channel_weights,
'weighted_signal': weighted_signal
}


class GoVISCANProcessor(nn.Module):
"""
goVISCAN 完整处理管道
"""

def __init__(self, num_spectral: int = 9, fs: float = 30):
super().__init__()
self.roi_parser = MultispectralROIParser(num_spectral)
self.rppg = MultichannelRPPG(num_spectral, fs)

def forward(self, multispectral_video: torch.Tensor) -> dict:
"""
Args:
multispectral_video: (B, T, 9, H, W) 多光谱视频

Returns:
vital_signs: 生命体征
"""
B, T, C, H, W = multispectral_video.shape

# 逐帧提取ROI信号
roi_signals = []
for t in range(T):
frame = multispectral_video[:, t] # (B, C, H, W)
_, roi = self.roi_parser(frame)
roi_signals.append(roi)

roi_seq = torch.stack(roi_signals, dim=-1) # (B, C, T)

# 生命体征估计
vital_signs = self.rppg(roi_seq)

return vital_signs


# ===== 实际测试 =====
if __name__ == "__main__":
processor = GoVISCANProcessor(num_spectral=9, fs=30)

# 模拟多光谱视频 (10秒, 9通道, 64×64)
T = 300 # 10秒 @ 30fps
B = 2
video = torch.randn(B, T, 9, 64, 64) * 0.5 + 0.5

# 添加心率信号 (75 BPM = 1.25Hz)
t = np.linspace(0, 10, T)
hr_signal = 0.02 * np.sin(2 * np.pi * 1.25 * t)
video[:, :, 0] += torch.tensor(hr_signal).unsqueeze(0).unsqueeze(-1).unsqueeze(-1)
video[:, :, 8] += torch.tensor(hr_signal * 0.8).unsqueeze(0).unsqueeze(-1).unsqueeze(-1)

# 处理
result = processor(video)

print("=== goVISCAN 生命体征检测结果 ===")
print(f"输入: {video.shape} (B, T, C, H, W)")
print(f"心率: {result['heart_rate'].tolist()} BPM")
print(f"呼吸率: {result['resp_rate'].tolist()} BPM")
print(f"血氧: {result['spo2'].tolist()} %")
print(f"通道权重: {result['channel_weights'][0].tolist()}")

print(f"\n=== 性能指标 ===")
print(f"测量距离: 0.7-1.3 m")
print(f"心率误差: ±2.8 BPM")
print(f"呼吸误差: ±1.3 breaths/min")
print(f"血氧误差: ±3.8 pp")
print(f"帧率: 30 fps")
print(f"延迟: ~10s (需要足够周期)")

print(f"\n=== 对比传统rPPG ===")
print(f"{'指标':<20} {'单光谱rPPG':>15} {'goVISCAN':>15}")
print("-" * 52)
print(f"{'通道数':<20} {'1 (RGB)':>15} {'9 (多光谱)':>15}")
print(f"{'环境光抗扰':<20} {'中':>15} {'高':>15}")
print(f"{'运动抗扰':<20} {'低':>15} {'中':>15}")
print(f"{'血氧检测':<20} {'❌':>15} {'✅':>15}")
print(f"{'测量距离':<20} {'0.5-2m':>15} {'0.7-1.3m':>15}")
print(f"{'成熟度':<20} {'研究/早期':>15} {'实验室':>15}")

3. 座舱部署方案

3.1 安装位置

位置 距离 优势 劣势
顶棚中部 0.8-1.2m 正对驾驶员额头 安装美观性
A柱内侧 0.5-0.8m 侧面测量 角度偏差
仪表台 1.0-1.3m 正对胸部 方向盘遮挡
后视镜 0.6-1.0m 已有摄像头位置 仰角较大

3.2 与现有座舱传感器对比

传感器 测量参数 距离 隐私 成本 成熟度
goVISCAN 心率+呼吸+血氧 1.3m ✅ 无图像 $200-400 实验室
60GHz雷达 呼吸+心跳 2m ✅ 无图像 $50-100 量产
RGB摄像头 rPPG心率 2m ⚠️ 拍摄画面 $20-50 量产
IR摄像头 心率(简化) 1m ⚠️ 红外图像 $30-60 量产
指夹式 心率+血氧 接触 ✅ $5-10 医疗级
智能手表 心率+血氧 接触 ✅ $100-300 量产

4. IMS 开发启示

优先级 方向 输入 输出 验证标准
🟡 P1 多光谱rPPG 9通道视频 心率/呼吸/血氧 心率误差 < 3 BPM
🟡 P1 健康座舱原型 goVISCAN + 座椅 生命体征报告 24h连续监测
🟢 P2 多光谱+雷达融合 goVISCAN + 60GHz 高精度生命体征 优于单一方案
🟢 P2 驾驶员健康档案 长期数据 健康趋势 日级精度

5. 关键洞察

  1. 9通道多光谱是核心创新:比单RGB的rPPG信噪比提升数倍
  2. 1.3米非接触适合座舱距离:顶棚到驾驶员约0.8-1.2m
  3. 血氧检测是多光谱独有优势:单RGB摄像头无法实现
  4. 尺寸小巧(10×7.5cm):可集成到顶棚灯/后视镜
  5. 实验室阶段:12人验证,精度还未达到医疗级
  6. 与60GHz雷达互补:雷达测呼吸/心跳,goVISCAN测血氧 → 完整生命体征

参考资料

  1. Hubold, M., Karl, J., Srokos, K. et al., “Contactless vital sign parameter measurement using compact snapshot multispectral multiaperture camera”, SPIE 14111, 2026-05-28
  2. Fraunhofer IOF Jena, goVISCAN项目, 2022-2025
  3. MDR, “Jena researchers measure vital signs from a distance of one meter”, 2026-09-23
  4. Hospimedica, “New Sensor Could Bring Contactless Vital Sign Monitoring”, 2026-09-24
  5. BMBF “Advanced Multimodal Imaging” 联盟, €900万资助

https://dapalm.com/2026/09/28/2026-09-28-02-goviscan-multispectral-contactless-vital-signs-fraunhofer-ims/
作者
Mars
发布于
2026年9月28日
许可协议