Tobii 单摄 DMS+OMS:从技术验证到规模落地的下一站

InCabin Europe 2026 Tobii 专访深度解读

采访信息

核心概念:单摄 DMS+OMS

Tobii 实现了**全球首个单摄像头同时覆盖 DMS(驾驶员监测)和 OMS(乘员监测)**的量产方案:

为什么单摄方案是突破

传统方案 vs Tobii 单摄方案

维度 传统双摄方案 Tobii 单摄方案
摄像头数 2(DMS + OMS 各一) 1
ECU 外部 ECU 可集成
线缆 LVDS × 2 LVDS × 1
标定点 多 少
集成复杂度 高 低
成本 高 低
覆盖范围 驾驶员 + 乘员独立 统一理解
校准 两套 一套

“统一理解”的价值

Tobii 强调单摄不仅是成本优化,更是对舱内人员的统一理解:

“单摄方案创建了一个更简单的架构,同时提供了对车内人员更完整的理解。”

传统双摄方案中,DMS 和 OMS 是独立系统,各自输出结果。单摄方案通过一个 AI 模型同时理解驾驶员和乘员,可以捕捉跨座位的交互关系(如驾驶员回头看后座儿童)。

Tobii 的三阶段演进路线

Stage 1: 单摄 DMS+OMS(已实现)

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
"""
Tobii 单摄 DMS+OMS 架构概念

核心思想:
1. 单摄像头覆盖整个座舱
2. 统一 AI 模型同时处理 DMS 和 OMS
3. 输出统一的人员状态向量
"""

from dataclasses import dataclass
from typing import List, Optional
from enum import Enum


class PersonRole(Enum):
DRIVER = "driver"
PASSENGER = "passenger"
REAR_LEFT = "rear_left"
REAR_RIGHT = "rear_right"
UNKNOWN = "unknown"


@dataclass
class PersonState:
"""单个人员状态"""
role: PersonRole
present: bool = False
gaze_pitch: float = 0.0 # 俯仰角 (度)
gaze_yaw: float = 0.0 # 偏航角 (度)
gaze_confidence: float = 0.0
fatigue_level: float = 0.0 # 0-1
distraction_level: float = 0.0 # 0-1
posture: str = "normal" # normal, leaning, turned, slumped
posture_confidence: float = 0.0
age_group: str = "adult" # adult, child, infant
seatbelt_on: bool = False
hands_on_wheel: bool = False # 仅驾驶员
emotion: str = "neutral"


@dataclass
class CabinState:
"""座舱整体状态(单摄方案输出)"""
persons: List[PersonState]
driver_readiness: float = 1.0 # 0-1
cabin_occupancy: int = 0
cross_seat_interaction: bool = False # 驾驶员是否与乘员互动
timestamp: float = 0.0


class SingleCameraDMSOMS:
"""
Tobii 单摄 DMS+OMS 概念模型

核心优势:
1. 统一理解:一个模型理解所有人员
2. 跨座位交互:检测驾驶员与乘员的互动
3. 低集成复杂度:单摄像头单接口
"""

def __init__(self):
self.persons = []

def process_frame(self, image) -> CabinState:
"""
处理单帧图像,输出座舱状态

步骤:
1. 人员检测和定位
2. 每人状态估计(视线、疲劳、姿态)
3. 跨座位交互分析
4. 驾驶员就绪度评估
"""
# Step 1: 检测所有人员
persons = self._detect_persons(image)

# Step 2: 估计每人状态
for person in persons:
person.gaze_pitch, person.gaze_yaw, person.gaze_confidence = \
self._estimate_gaze(image, person)
person.fatigue_level = self._estimate_fatigue(image, person)
person.distraction_level = self._estimate_distraction(
image, person
)
person.posture = self._classify_posture(image, person)
person.seatbelt_on = self._check_seatbelt(image, person)

# Step 3: 跨座位交互
driver = next(
(p for p in persons if p.role == PersonRole.DRIVER), None
)
if driver and driver.gaze_yaw > 30:
# 驾驶员看向侧后方
cross_interaction = True
else:
cross_interaction = False

# Step 4: 驾驶员就绪度
if driver:
readiness = self._compute_readiness(driver)
else:
readiness = 0.0

return CabinState(
persons=persons,
driver_readiness=readiness,
cabin_occupancy=len(persons),
cross_seat_interaction=cross_interaction
)

def _detect_persons(self, image):
"""检测所有人员"""
# 实际实现使用目标检测模型
return []

def _estimate_gaze(self, image, person):
"""视线估计"""
return 0.0, 0.0, 0.0

def _estimate_fatigue(self, image, person):
"""疲劳估计"""
return 0.0

def _estimate_distraction(self, image, person):
"""分心估计"""
return 0.0

def _classify_posture(self, image, person):
"""姿态分类"""
return "normal"

def _check_seatbelt(self, image, person):
"""安全带检测"""
return False

def _compute_readiness(self, driver: PersonState) -> float:
"""
计算驾驶员就绪度

结合疲劳、分心、视线、姿态
"""
score = 1.0
score -= driver.fatigue_level * 0.4
score -= driver.distraction_level * 0.3
if driver.posture in ['slumped', 'turned']:
score -= 0.2
if not driver.hands_on_wheel:
score -= 0.1
return max(score, 0.0)


# ========== 测试场景 ==========

if __name__ == "__main__":
model = SingleCameraDMSOMS()

# 模拟场景:驾驶员疲劳+后座有儿童
driver = PersonState(
role=PersonRole.DRIVER,
present=True,
gaze_pitch=-5, gaze_yaw=10,
gaze_confidence=0.92,
fatigue_level=0.65,
distraction_level=0.15,
posture="normal",
hands_on_wheel=True,
emotion="tired"
)

child = PersonState(
role=PersonRole.REAR_LEFT,
present=True,
gaze_pitch=0, gaze_yaw=0,
posture="normal",
age_group="child",
seatbelt_on=True
)

cabin = CabinState(
persons=[driver, child],
driver_readiness=model._compute_readiness(driver),
cabin_occupancy=2,
cross_seat_interaction=False
)

print("=== 单摄 DMS+OMS 场景 ===")
print(f" 乘员数: {cabin.cabin_occupancy}")
print(f" 驾驶员就绪度: {cabin.driver_readiness:.2f}")
for p in cabin.persons:
print(f" {p.role.value}: "
f"疲劳={p.fatigue_level:.0%} "
f"分心={p.distraction_level:.0%} "
f"姿态={p.posture}")

Stage 2: 多摄扩展(演进中)

Tobii 描述的演进路线:

“从单摄基础开始,架构可以通过传感器融合和(必要时)多摄感知来演进。”

Stage 3: 全息感知(未来)

“下一步是全息感知:结合舱内理解与舱外 ADAS 上下文。”

关键场景示例:

  • 驾驶员看向侧后方 → 是分心?还是在并道前检查后视镜?
  • 结合 ADAS 上下文 → 如果有变道意图,这是合理行为;如果无变道意图,则是分心
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
"""
全息感知:舱内 + 舱外 ADAS 融合

这是 Tobii 描述的 Evolving Cabin 终极形态
"""

class HolisticSensing:
"""
全息感知引擎

融合舱内感知 + 舱外 ADAS 上下文
判断驾驶员行为的"含义"而非仅检测行为
"""

def interpret_behavior(self, driver_state, adas_context):
"""
行为解释:不是所有"不看路"都是分心

场景1:驾驶员看向右后视镜 + ADAS检测到右侧有车
→ 判定:合理检查行为,不是分心

场景2:驾驶员看向右后视镜 + ADAS无变道意图
→ 判定:可能分心,需要警告

场景3:驾驶员闭眼0.5秒 + 高速直路
→ 判定:微睡眠,一级警告

场景4:驾驶员闭眼0.5秒 + 前方紧急制动
→ 判定:危险!紧急接管
"""
gaze_yaw = driver_state.gaze_yaw
has_lane_change_intent = adas_context.get('lane_change_intent', False)
forward_collision_risk = adas_context.get('collision_risk', 0)

if abs(gaze_yaw) > 30:
if has_lane_change_intent:
return {
'behavior': 'mirror_check',
'is_safe': True,
'action': 'none',
'reason': '合理的并道前检查'
}
else:
return {
'behavior': 'distraction',
'is_safe': False,
'action': 'warning_l1',
'reason': '无变道意图的视线偏离'
}

if driver_state.fatigue_level > 0.5:
if forward_collision_risk > 0.5:
return {
'behavior': 'fatigue_emergency',
'is_safe': False,
'action': 'emergency_takeover',
'reason': '疲劳+前方危险,紧急接管'
}
else:
return {
'behavior': 'fatigue_warning',
'is_safe': False,
'action': 'warning_l2',
'reason': '疲劳但无即时危险'
}

return {
'behavior': 'normal',
'is_safe': True,
'action': 'none',
'reason': '正常驾驶'
}

Tobii 的商业化策略:灵活交付

Tobii 采访中最有洞察的部分——他们不提供单一交付模式:

客户类型 需求 Tobii 交付
完全外包型 OEM 交钥匙方案 生产就绪的完整解决方案
有自研能力 OEM 保留架构控制权 技术咨询+工程支持
部分自研型 解决特定难题 针对性干预(corner case 数据/验证)
数据缺失型 缺训练/验证数据 数据基础设施 + 标注

核心壁垒:5年积累

“过去五年,我们积累的不仅是软件包,还有生产代码、工程专长、验证方法、集成经验、开发工具、数据基础设施、对 corner case 的深刻理解。”

Tobii 的竞争壁垒分析:

资产 描述 可复制难度
生产代码 量产级代码库 ⚠️ 中
Corner case 数据 真实场景的罕见案例 🔴 高
验证方法 5年验证经验 🔴 高
集成经验 多 OEM 集成 ⚠️ 中
数据基础设施 标注+训练+验证链 ⚠️ 中

对 IMS 开发的启示

1. 单摄 vs 双摄选型决策

GB 47955-2026 要求 2027年1月1日起 L2 车辆标配双摄,但 Tobii 认为单摄仍有价值:

场景 推荐 理由
L2 基础 DMS 双摄(法规要求) GB 47955-2026 强制
L0-L1 疲劳检测 单摄足够 无法规强制,成本优先
OMS 乘员监测 单摄起步 后座监测无需高精度
L3 就绪度 多摄+融合 需要更高置信度
出口车型(欧洲) 单摄可能足够 Euro NCAP 不强制双摄

2. 统一理解 vs 独立系统

Tobii 的”统一理解”理念对 IMS 架构有重要影响:

1
2
3
4
5
6
7
8
传统架构:
DMS摄像头 → DMS算法 → DMS输出
OMS摄像头 → OMS算法 → OMS输出
两个系统独立运行,输出在车辆层融合

Tobii 架构:
单摄 → 统一AI → 统一人员状态向量
包含跨座位交互、统一姿态理解

IMS 建议: 即使采用双摄,也应考虑统一 AI 模型处理,而非完全独立的两套系统。

3. 全息感知的实现路径

4. 数据策略

Tobii 强调 corner case 数据是最难复制的壁垒。对 IMS:

数据类型 重要性 获取方式
正常驾驶 基线 量产采集
疲劳场景 高 模拟器+真实
分心场景 高 模拟器+真实
Corner case 极高 长尾场景积累
跨座位交互 中高 多摄采集
极端光照 高 环境舱测试

结论

Tobii 单摄 DMS+OMS 方案的核心价值不在于”省一个摄像头”,而在于用统一 AI 理解整个座舱。其三阶段演进路线(单摄 → 多摄融合 → 全息感知)为 IMS 提供了清晰的技术演进框架。

Tobii 商业化策略中最值得学习的是灵活交付模式——不同 OEM 需要不同层次的参与,从交钥匙方案到 corner case 数据支持。这种灵活度是扩大采用率的关键。

对 IMS 开发而言,立即评估单摄方案的覆盖范围,并规划从单摄到多摄的演进路径,同时开始积累 corner case 数据,是建立长期竞争力的关键。


参考链接: