Hyundai 手势+语音联合控制专利:指向式座舱交互的架构分析

US 2026/0260654 A1 专利解读与IMS座舱交互启示

专利信息

项目 内容
专利号 US 2026/0260654 A1
申请人 Hyundai / Kia
标题 Method and Apparatus for Performing Voice Command Based on Gesture Recognition
公开日期 2026-09
来源 Car and Driver

核心创新

Hyundai 专利描述了一种手势+语音联合控制系统:

  1. 模糊语音 + 精确手势: 用户说”打开” + 指向车窗 → 系统打开该车窗
  2. 乘员身份识别: 系统识别语音来源座位,匹配该乘员的手势
  3. 物理控制 + 信息查询: 既可控制物理系统,也可查询功能说明
  4. 多点手势解耦: 后排乘客手势不会与前排混淆

关键突破: 解决了纯语音控制(模糊)和纯手势控制(BMW/VW体验差)各自的问题,通过模态互补实现自然交互。

专利技术架构

技术细节

1. 系统工作流程

步骤 输入 处理 输出
1 “打开” 意图分类 → “打开”操作 操作意图
2 麦克风阵列 声源定位 → 座位2(副驾) 乘员位置
3 摄像头 手势识别 → 副驾指向右侧车窗 目标对象
4 系统 操作+目标 → 打开右侧车窗 控制指令

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
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
"""
Hyundai 手势+语音联合控制系统
专利: US 2026/0260654 A1
核心方法: 语音意图分类 + 手势目标匹配 + 乘员定位
"""

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

class VoiceSourceLocator:
"""
声源定位模块

通过麦克风阵列确定语音来源的座位位置

专利描述: "determine which seat the uttered voice command came from"
"""

def __init__(self, num_seats: int = 5, num_mics: int = 6):
self.num_seats = num_seats # 驾驶员、副驾、后排左中右
self.num_mics = num_mics

# TDOA (Time Difference of Arrival) 声源定位
self.tdoa_encoder = nn.Sequential(
nn.Linear(num_mics * (num_mics - 1) // 2, 128),
nn.ReLU(),
nn.Linear(128, 64),
nn.ReLU(),
nn.Linear(64, num_seats),
)

def locate(self, mic_signals: torch.Tensor) -> Dict:
"""
声源定位

Args:
mic_signals: (B, num_mics, signal_length) 麦克风信号

Returns:
result: {
'seat': (B,) 座位索引,
'confidence': (B,) 置信度,
'position': (B, 3) 3D位置估计,
}
"""
B = mic_signals.shape[0]

# 计算TDOA特征
tdoa_features = self._compute_tdoa(mic_signals)

# 分类座位
seat_logits = self.tdoa_encoder(tdoa_features)
seat_probs = F.softmax(seat_logits, dim=-1)

seat_idx = seat_probs.argmax(dim=-1)
confidence = seat_probs.max(dim=-1).values

# 3D位置估计
position = self._estimate_3d_position(tdoa_features)

return {
'seat': seat_idx,
'confidence': confidence,
'position': position,
}

def _compute_tdoa(self, mic_signals: torch.Tensor) -> torch.Tensor:
"""计算麦克风间时延特征"""
B, M, L = mic_signals.shape
features = []
for i in range(M):
for j in range(i + 1, M):
# 互相关时延估计
corr = F.conv1d(
mic_signals[:, i:i+1, :],
mic_signals[:, j:j+1, :].flip(-1),
padding=L - 1
)
tdoa = corr.argmax(dim=-1).float()
features.append(tdoa.unsqueeze(-1))
return torch.cat(features, dim=-1) # (B, num_pairs)

def _estimate_3d_position(self, tdoa_features: torch.Tensor) -> torch.Tensor:
"""从TDOA估计3D声源位置"""
B = tdoa_features.shape[0]
# 简化:映射到预定义座位位置
seat_positions = torch.tensor([
[-0.4, 0.5, 0.0], # 驾驶员
[0.4, 0.5, 0.0], # 副驾
[-0.6, -0.5, 0.0], # 后排左
[0.0, -0.5, 0.0], # 后排中
[0.6, -0.5, 0.0], # 后排右
])
idx = self.tdoa_encoder(tdoa_features).argmax(dim=-1)
return seat_positions[idx]


class GestureTargetMatcher:
"""
手势目标匹配模块

将乘员的手势方向匹配到车内物理对象

专利描述: "cameras, other sensors, or a combination to monitor
hand gestures in the cabin"
"""

# 车内可控制对象列表
CABIN_OBJECTS = {
'window_fl': {'position': [-1.2, 0.3, 0.5], 'type': 'window'},
'window_fr': {'position': [1.2, 0.3, 0.5], 'type': 'window'},
'window_rl': {'position': [-1.2, 0.3, -1.0], 'type': 'window'},
'window_rr': {'position': [1.2, 0.3, -1.0], 'type': 'window'},
'sunroof': {'position': [0.0, 0.8, 0.0], 'type': 'sunroof'},
'dashboard': {'position': [0.0, 0.2, 0.8], 'type': 'dashboard'},
'center_console': {'position': [0.0, 0.0, 0.3], 'type': 'console'},
'rearview_mirror': {'position': [0.0, 0.6, 0.9], 'type': 'mirror'},
}

def __init__(self):
# 手部关键点检测 → 方向向量
self.hand_keypoints = 21 # 手部关键点数

def estimate_pointing_direction(self, hand_keypoints: torch.Tensor,
person_position: torch.Tensor) -> torch.Tensor:
"""
估计指向方向

Args:
hand_keypoints: (B, 21, 3) 手部关键点xyz
person_position: (B, 3) 乘员位置

Returns:
direction: (B, 3) 指向方向向量
"""
# 使用食指方向作为指向
wrist = hand_keypoints[:, 0, :] # 手腕
index_tip = hand_keypoints[:, 8, :] # 食指尖
index_mcp = hand_keypoints[:, 5, :] # 食指掌指关节

# 食指方向 = 指尖 - 掌指关节
finger_dir = F.normalize(index_tip - index_mcp, dim=-1)

# 世界坐标方向(加入乘员位置偏移)
world_dir = finger_dir # 方向不依赖位置

return world_dir

def match_to_cabin_object(self, direction: torch.Tensor,
person_position: torch.Tensor) -> Dict:
"""
将指向方向匹配到车内对象

专利描述: "decipher them when a voice command lacks
necessary information like location"

Args:
direction: (B, 3) 指向方向
person_position: (B, 3) 乘员位置

Returns:
result: {
'object_id': str,
'confidence': float,
'alternatives': List[Tuple[str, float]],
}
"""
B = direction.shape[0]
results = []

for i in range(B):
dir_i = direction[i]
pos_i = person_position[i]

scores = {}
for obj_id, obj_info in self.CABIN_OBJECTS.items():
# 计算指向向量到对象的夹角
obj_pos = torch.tensor(obj_info['position'], device=dir_i.device)
to_obj = obj_pos - pos_i
to_obj_normalized = F.normalize(to_obj, dim=0)

# 余弦相似度
cos_sim = F.cosine_similarity(dir_i.unsqueeze(0),
to_obj_normalized.unsqueeze(0)).item()

# 转换为角度
angle = torch.acos(torch.clamp(torch.tensor(cos_sim), -1, 1)).item()

# 只保留前向指向(角度 < 45°)
if angle < 0.785: # ~45°
scores[obj_id] = cos_sim

if scores:
best_obj = max(scores, key=scores.get)
sorted_scores = sorted(scores.items(),
key=lambda x: x[1], reverse=True)
results.append({
'object_id': best_obj,
'confidence': scores[best_obj],
'alternatives': sorted_scores[:3],
})
else:
results.append({
'object_id': None,
'confidence': 0.0,
'alternatives': [],
})

return {'results': results}


class IntentClassifier:
"""
语音意图分类器

将语音命令分类为操作类型

专利描述: "classifies user intent, matches gestures,
and modifies attributes to control vehicle functions"
"""

INTENTS = {
'open': {'action': 'open', 'target_type': 'window/sunroof'},
'close': {'action': 'close', 'target_type': 'window/sunroof'},
'turn_on': {'action': 'power_on', 'target_type': 'electronic'},
'turn_off': {'action': 'power_off', 'target_type': 'electronic'},
'adjust': {'action': 'adjust', 'target_type': 'seat/mirror'},
'what_is': {'action': 'query', 'target_type': 'button/function'},
'increase': {'action': 'increase', 'target_type': 'volume/temperature'},
'decrease': {'action': 'decrease', 'target_type': 'volume/temperature'},
}

def __init__(self, embed_dim: int = 768, num_intents: int = 8):
self.classifier = nn.Sequential(
nn.Linear(embed_dim, 256),
nn.ReLU(),
nn.Dropout(0.2),
nn.Linear(256, 128),
nn.ReLU(),
nn.Linear(128, num_intents),
)

def classify(self, speech_embedding: torch.Tensor) -> Dict:
"""
意图分类

Args:
speech_embedding: (B, 768) 语音文本嵌入

Returns:
result: {
'intent': str,
'action': str,
'confidence': float,
}
"""
logits = self.classifier(speech_embedding)
probs = F.softmax(logits, dim=-1)

idx = probs.argmax(dim=-1)
intent_names = list(self.INTENTS.keys())

results = []
for i in range(speech_embedding.shape[0]):
intent = intent_names[idx[i].item()]
results.append({
'intent': intent,
'action': self.INTENTS[intent]['action'],
'confidence': probs[i, idx[i]].item(),
})

return {'results': results}


class HyundaiGestureVoiceControl(nn.Module):
"""
Hyundai 手势+语音联合控制系统

专利: US 2026/0260654 A1

工作流程:
1. 语音识别 → 意图分类
2. 声源定位 → 乘员位置
3. 该乘员手势识别 → 指向方向
4. 方向匹配到车内对象
5. 意图+目标 → 执行控制
"""

def __init__(self):
super().__init__()
self.voice_locator = VoiceSourceLocator()
self.gesture_matcher = GestureTargetMatcher()
self.intent_classifier = IntentClassifier()

def forward(self, mic_signals: torch.Tensor,
speech_embedding: torch.Tensor,
hand_keypoints: torch.Tensor) -> Dict:
"""
完整推理流程

Args:
mic_signals: (B, num_mics, signal_length) 麦克风信号
speech_embedding: (B, 768) 语音文本嵌入
hand_keypoints: (B, 21, 3) 手部关键点

Returns:
control_command: {
'intent': str,
'target_object': str,
'action': str,
'confidence': float,
}
"""
# 1. 声源定位
voice_result = self.voice_locator.locate(mic_signals)

# 2. 意图分类
intent_result = self.intent_classifier.classify(speech_embedding)

# 3. 手势方向估计
direction = self.gesture_matcher.estimate_pointing_direction(
hand_keypoints, voice_result['position']
)

# 4. 目标匹配
target_result = self.gesture_matcher.match_to_cabin_object(
direction, voice_result['position']
)

# 5. 融合输出
B = mic_signals.shape[0]
commands = []
for i in range(B):
target = target_result['results'][i]
intent = intent_result['results'][i]

commands.append({
'intent': intent['intent'],
'action': intent['action'],
'target_object': target['object_id'],
'target_confidence': target['confidence'],
'voice_confidence': voice_result['confidence'][i].item(),
'intent_confidence': intent['confidence'],
'overall_confidence': (
target['confidence'] * 0.4 +
voice_result['confidence'][i].item() * 0.3 +
intent['confidence'] * 0.3
),
})

return {'commands': commands}


# ========== 测试 ==========
if __name__ == "__main__":
torch.manual_seed(42)

system = HyundaiGestureVoiceControl()

# 场景1: 副驾说"打开" + 指向右车窗
print("=" * 60)
print("场景1: 副驾说'打开' + 指向右前车窗")
mic = torch.randn(1, 6, 16000) # 6麦克风信号
speech = torch.randn(1, 768) # "打开"的语音嵌入
hand = torch.randn(1, 21, 3) * 0.1 # 手部关键点

result = system(mic, speech, hand)
cmd = result['commands'][0]
print(f" 意图: {cmd['intent']}")
print(f" 动作: {cmd['action']}")
print(f" 目标: {cmd['target_object']}")
print(f" 总置信度: {cmd['overall_confidence']:.3f}")

# 场景2: 驾驶员说"这是什么" + 触摸Auto Hold按钮
print("\n场景2: 驾驶员说'这是什么' + 触摸按钮")
mic2 = torch.randn(1, 6, 16000)
speech2 = torch.randn(1, 768) # "what is"的嵌入
hand2 = torch.randn(1, 21, 3) * 0.1

result2 = system(mic2, speech2, hand2)
cmd2 = result2['commands'][0]
print(f" 意图: {cmd2['intent']}")
print(f" 动作: {cmd2['action']}")
print(f" 目标: {cmd2['target_object']}")
print(f" 总置信度: {cmd2['overall_confidence']:.3f}")

# 场景3: 后排乘客说"关闭" + 指向后排车窗
print("\n场景3: 后排左乘客说'关闭' + 指向后排左车窗")
mic3 = torch.randn(1, 6, 16000)
speech3 = torch.randn(1, 768)
hand3 = torch.randn(1, 21, 3) * 0.1

result3 = system(mic3, speech3, hand3)
cmd3 = result3['commands'][0]
print(f" 意图: {cmd3['intent']}")
print(f" 动作: {cmd3['action']}")
print(f" 目标: {cmd3['target_object']}")
print(f" 总置信度: {cmd3['overall_confidence']:.3f}")

print("\n✅ 测试通过")

车载交互发展对比

方案 厂商 优点 缺点
纯触屏 Tesla 功能丰富 分心严重
语音助手 通用 无手操作 模糊指令难解析
手势控制 BMW 直觉 识别率低、体验差
语音+手势 Hyundai 互补 需多模态融合

座舱可控制对象清单

区域 对象 控制类型 当前方案
车窗 前左/前右/后左/后右 开/关/调节 物理按钮+语音
天窗 全景天窗 开/关/调节 物理按钮+语音
空调 温度/风量/方向 调节 触屏+语音
灯光 阅读/氛围/化妆镜 开/关/调节 触屏
座椅 位置/腰托/加热 调节 物理按钮
后视镜 内/外角度 调节 物理按钮
信息 按钮功能查询 语音+指向 Hyundai新方案

IMS 应用启示

1. DMS与HCI融合

IMS当前聚焦DMS(驾驶员监控),Hyundai方案提示HCI(人机交互)与DMS的自然融合:

DMS能力 HCI增强 融合效果
手势识别 指向目标 非接触控制
语音识别 意图分类 模糊命令解析
乘员检测 声源定位 多乘员区分
视线估计 注意力推断 预测操作意图

2. 座舱传感器布局

传感器 数量 位置 用途
麦克风 6 车顶/方向盘/座椅 声源定位
RGB摄像头 4 后视镜/顶棚 手势识别
IR摄像头 2 仪表盘 夜间手势
ToF传感器 2 顶棚 深度信息

3. 开发优先级

功能 IMS现状 Hyundai方案启示 优先级
手势识别 ✅ 已有 扩展为指向控制 🟡 中
语音识别 ❌ 无 集成ASR+意图分类 🟡 中
多模态融合 ❌ 无 语音+手势联合 🟢 低
声源定位 ❌ 无 麦克风阵列 🟢 低

4. 与BMW/VW手势控制的区别

特性 BMW/VW Hyundai
手势类型 固定手势(旋钮、滑动) 自然指向
语音辅助 无 有
目标确定 手势→预设功能 手势→物理对象
多乘员 不区分 按座位区分
可扩展性 固定功能 灵活(信息查询)

竞品专利对比

厂商 专利方向 特点
Hyundai 语音+手势联合 模态互补、乘员区分
Zoox 手势+远程操作 AR眼镜+远程操作
BMW 纯手势 固定手势集
Mercedes 触觉+语音 方向盘触觉板

对IMS的直接启示

  1. DMS不应只是监控者,还应成为交互使能者: 手势识别模块同时服务于DMS(行为检测)和HCI(指向控制)
  2. 语音+手势是减少触屏依赖的关键路径: 触屏导致驾驶员视线偏离道路平均74秒(What Car?研究),手势+语音可将视线偏离降至0秒
  3. 乘员定位是多模态融合的前提: 声源定位+人脸检测+座椅传感器三重验证
  4. 信息查询是新场景: “这个按钮是什么”的需求真实存在,Hyundai已识别这一痛点

专利: US 2026/0260654 A1 | 来源: Car and Driver