隔空手势交互设计规范
面向设计师与工程师:让系统判得清什么算输入、让用户知道自己此刻在哪个状态、让识别的不确定不变成不可挽回的后果。
7 条原则 · 39 条规则 · 必须 27 · 应当 12
目录
面向设计师与工程师:让系统判得清什么算输入、让用户知道自己此刻在哪个状态、让识别的不确定不变成不可挽回的后果。
隔空手势与触摸、鼠标、按键的根本差别不在"手势好不好记",而在输入意图的判定方式:
鼠标和触摸提供按下、移动、释放等明确事件,但仍需设计取消与误操作处理。隔空手势还必须从连续运动中判断输入是否开始、属于谁、何时结束。
传感器一直在采集,用户一直在动,系统必须持续裁决"这个动作是不是给我的"。由此派生出两条贯穿全文的前提:误触发是这个模态的结构性属性,不是待优化的细节;跟踪丢失是正常状态,不是异常处理分支。任何把这两件事当边缘情况的设计,都会在真实环境里失效。
本规范由七条原则和39 条规则组成:原则说明设计方向,规则规定适用情境、行为要求与验证方式。每条规则归属且仅归属一条原则,规则编号即原则编号(G4-2 就是第四条原则下的第二条规则)。
同一件事只写在一处。以"跟踪丢失"为例:丢失时系统采取什么行为、用户如何知道正在丢失、丢失是否导致已发生的改变无法撤销,分属三条不同规则(G5-1、G4-5、G6-2)——因为它们的规范对象不同,不是同一条义务的三种表述。
本规范约束的是产品对用户作出的交互承诺及其兑现机制的性质,不预设唯一的传感方案(光学、雷达、超声、可穿戴均适用),不指定具体 SDK 或手势识别算法。它不是手势词典,不规定"挥手表示下一页";具体手势的形态标准化见 ISO/IEC 30113 系列与 ISO/IEC 14754。采用本规范不能替代无障碍、隐私、车载分心与领域合规的专项评估。
阅读入口:配置字段见 Design Token,评审时使用附录 A。
全文四章:第 1 章原则,第 2 章规则的读法与速查,第 3 章规则详解,第 4 章术语;验证清单与论证边界见附录 A、B,外部来源对照见同目录 reference.md。
1. 七条原则
七条原则按规范对象切分设计责任:每条原则管辖一类对象上的义务,每条规则按其义务的直接规范对象归属唯一原则。对象不同,原则就不会互相替代——这是切分的依据,也是检验切分的方式。
| 原则 | 规范对象 | 设计方向 | 管辖规则 |
|---|---|---|---|
| G1 输入成立可判定 | 系统对"这是不是给我的输入"的判定 | 不要默认传感器看到的都是命令。参与与脱离有显式条件,输入有归属,未退出不等于持续授权 | G1-1 ~ G1-6 |
| G2 手势与意义的绑定 | 手势集及其语义映射 | 不要靠设计者直觉定手势。手势集有界、可发现、彼此可区分,语义在情境中稳定 | G2-1 ~ G2-6 |
| G3 身体代价有预算 | 用户的生理与运动资源 | 不要把身体当免费的输入设备。疲劳、精度上限、身体差异是设计约束,不是用户的问题 | G3-1 ~ G3-5 |
| G4 状态可感知 | 用户判断系统当前状态的依据 | 不要让用户靠试错猜状态。适用的输入、候选与结果反馈可区分,且按场景提供非视觉通道 | G4-1 ~ G4-6 |
| G5 识别不确定性显式化 | 识别结果的可靠性及其处置 | 不要把概率当事实。置信、偏置方向、丢失行为与降级顺序是显式设计决定 | G5-1 ~ G5-5 |
| G6 后果与手势解耦 | 手势造成的后果 | 不要让一次误识别造成不可挽回的结果。后果越重,提交路径越不能只靠一个手势 | G6-1 ~ G6-5 |
| G7 情境与他人 | 交互所处的物理与社会环境 | 不要假定单人、静态、私密环境。旁人、光照、姿势、安全关键任务都改变什么是可行的交互 | G7-1 ~ G7-6 |
同一个场景可以触及多条原则——用户在交互区边缘做一个删除手势,同时涉及边界的可感知(G4-5)、低置信下的处置(G5-3)和不可逆动作的提交路径(G6-1)——这不是分类错误:三条规则约束的是三个不同规范对象上的义务。互斥与穷尽是这套切分接受检验的主张,不是宣布即成立的事实:规则增删或归属存疑时,按附录 A 的分类检验验证;检验不过,修改的是原则的切分。
原则用于理解规则与裁决归属,本身不作为单独的判定条目。当原则与具体条款的解读出现冲突时,以适用条款为准,并记录需要澄清的歧义。
2. 规则的读法
2.1 每条规则的结构
| 部分 | 作用 |
|---|---|
| 一句话 | 规则的记忆版,不替代正文 |
| 适用 | 这条规则在什么情境下生效。不落在适用范围内的产品记录"不适用"即可 |
| 规则 | 规范正文,规定这条规则的要求 |
| 边界条件 | 与适用共同限定要求的适用范围:说明这条规则不要求什么、例外在什么条件下成立(仅部分规则有) |
| 设计应用 / 验证示例 / 反例 | 帮助落地的说明,不另行增加义务,也不指定唯一实现 |
| 依据与参考 | 失败记录与实现参考(仅部分规则有;来源见 reference.md) |
规则写行为性质、不写实现方式:手部离开视野后不得继续推进拖动,是产品行为;用卡尔曼滤波还是直接冻结,是工程方案——两者必须对得上,但不是同一份交付物。
2.2 约束词
- 必须:不满足即不符合本规范。缺了它,某条对用户的承诺会在可预见的情境下失效——这是标「必须」的唯一依据(见附录 B)。
- 禁止:与「必须」同等强度的反向表述;正文中的「不得」与「禁止」等价。
- 应当:默认遵循;确有理由偏离时,记录理由与替代做法,并接受同样的验证。偏离不需要审批,但需要留痕。
合规判定以正文中的独立义务子句为单位:无约束词的陈述句承接所在规则标题的强度,显式约束词优先;「不应当」是「应当」的反向表述。【应当】规则内的「必须/禁止/不得」子句仍是硬约束(G1-6、G2-5、G2-6、G3-4、G6-5、G7-5 含此类子句;其中 G2-6 的练习隔离同时含必须级与禁止级子句),规则标题与速查表的强度标注不替代子句约束力。
强度表示约束力,不表示重要性:「必须」决定产品能不能上,「应当」往往决定产品好不好用。
2.3 反例的两侧
反例分两侧:"做不到"是漏掉这条要求,"做过头"是为了满足它而堆确认、停留圈和提示。两侧都算没做对。隔空手势被做坏的最典型方式恰恰是后者:为了压住误触发,给每个动作套一个两秒的停留确认圈,把交互变成罚站——误触发率确实降了,交互也死了。
2.4 规则速查:39 条
下表是全部规则的一句话记忆版。速查不替代各条的适用条件与完整要求。
G1 输入成立可判定
| 规则 | 强度 | 一句话 |
|---|---|---|
| G1-1 参与状态显式化 | 必须 | 让用户和系统对"现在是否在接收手势"有同一个答案。 |
| G1-2 手势起止可判定 | 必须 | 每次手势有明确的开始和结束,不靠从连续动作里猜。 |
| G1-3 未脱离不等于持续授权 | 必须 | 没主动退出不代表一直同意,参与状态会过期。 |
| G1-4 无意动作不成为输入 | 必须 | 说话时比划、挠头、递东西,不该触发命令。 |
| G1-5 输入归属明确 | 必须 | 明确听谁的、哪个输入生效;换人、换手与换模态有条件。 |
| G1-6 参与成本与场景相称 | 应当 | 入口的代价配得上功能的价值,两头都别走极端。 |
G2 手势与意义的绑定
| 规则 | 强度 | 一句话 |
|---|---|---|
| G2-1 手势集有界且可发现 | 必须 | 手势数量有上限,用户不看说明书也能发现能做什么。 |
| G2-2 语义映射稳定 | 必须 | 同一个手势在同一情境下只有一个意思。 |
| G2-3 形态差异足以区分 | 必须 | 相近的手势不承担后果差别大的功能。 |
| G2-4 不假定通用直觉 | 应当 | 手势含义靠目标用户验证,不靠设计者觉得自然。 |
| G2-5 可自定义与可关闭 | 应当 | 允许替换或关掉个别手势,但不能借此绕过后果约束。 |
| G2-6 学习成本可重入 | 应当 | 需要学的手势随时能再学一次,不靠首次引导讲完。 |
G3 身体代价有预算
| 规则 | 强度 | 一句话 |
|---|---|---|
| G3-1 主路径不依赖疲劳性动作 | 必须 | 高频操作不要求抬臂过肩或长时间悬停。 |
| G3-2 精度要求与人的能力相称 | 必须 | 别把鼠标级精度要求搬到没有支撑的空中。 |
| G3-3 单手可完成 | 应当 | 核心路径单手能走完,且不假定惯用手。 |
| G3-4 连续使用有上限并可休息 | 应当 | 长任务提供可支撑的姿势或替代模态,不要求持续保持。 |
| G3-5 身体差异不构成排除 | 必须 | 手小、震颤、缺指、义肢的人也要能完成任务。 |
G4 状态可感知
| 规则 | 强度 | 一句话 |
|---|---|---|
| G4-1 三态各有反馈 | 必须 | 在范围、已锁定、已提交,三种状态要分得开。 |
| G4-2 反馈延迟有上限 | 必须 | 反馈慢到破坏因果感时,降级为离散反馈而不是没反馈。 |
| G4-3 连续动作有连续反馈 | 必须 | 拖动缩放时持续显示当前值,不是结束才告诉结果。 |
| G4-4 反馈不独占视觉 | 应当 | 主要状态至少有一条非视觉通道。 |
| G4-5 边界可感知 | 必须 | 快出界、已出界,用户要在发生时知道,不是靠没反应推断。 |
| G4-6 反馈不过载 | 应当 | 反馈强度配得上动作后果,不对每次微动都大声提示。 |
G5 识别不确定性显式化
| 规则 | 强度 | 一句话 |
|---|---|---|
| G5-1 跟踪丢失是正常状态 | 必须 | 丢失时的行为预先定义且安全,禁止拿最后一帧继续推进。 |
| G5-2 偏置方向显式且分级 | 必须 | 识别基础值可共享,后果放行策略必须分级验证。 |
| G5-3 低置信不冒充确定 | 必须 | 拿不准时不执行高后果动作,也不静默猜一个。 |
| G5-4 识别条件可被知道并改善 | 应当 | 识别变差时告诉用户原因,且是他能动手改的原因。 |
| G5-5 降级路径预先定义 | 必须 | 能力下降时怎么退,提前定好顺序,不在运行时临时决定。 |
G6 后果与手势解耦
| 规则 | 强度 | 一句话 |
|---|---|---|
| G6-1 不可逆动作不由单次手势提交 | 必须 | 删除、发送、支付不能一挥手就成立。 |
| G6-2 撤销可达 | 必须 | 可恢复的改变有真实撤销,且撤销不只依赖手势;不可恢复的后果不冒称可撤。 |
| G6-3 误触发成本有上限 | 必须 | 单次误识别的后果有上限,反复误触发要能被察觉并收敛。 |
| G6-4 确认动作不与常用动作同形 | 必须 | 用来确认的手势,形态上要和高频手势明显分开。 |
| G6-5 后果分级决定交互形态 | 应当 | 保护强度配得上后果,不以动作更累、耗时更长证明更安全。 |
G7 情境与他人
| 规则 | 强度 | 一句话 |
|---|---|---|
| G7-1 非手势路径必须存在 | 必须 | 每个功能都有不用手势也能到达的入口。 |
| G7-2 采集状态可见 | 必须 | 传感器什么时候在采集,用户能知道,且关不掉这个指示。 |
| G7-3 第三方不被当作用户 | 必须 | 路过的人不触发命令,也不被默默留存。 |
| G7-4 社会可接受度纳入设计 | 应当 | 公共场合的手势不让人做起来觉得尴尬或让旁人误解。 |
| G7-5 环境变化触发适配 | 应当 | 光线、噪声、姿势变了,配置跟着变,不是一套走天下。 |
| G7-6 不与安全关键任务争注意力 | 必须 | 驾驶等场景下,手势不得要求看屏幕或长时间脱离主任务。 |
2.5 从任务到交互决策
先说明手势为目标用户解决什么问题,例如手部不宜接触屏幕、远距快速控制,或直接操纵空间对象。比较同一任务的手势与非手势路径,把发现、进入、纠错和退出一并计入成本;只比较一次识别的速度,不足以证明采用手势的价值。
下表是设计记录模板,不新增规则或统一数值。先选平台已有的标准输入模型,再决定确需自定义的部分。
| 旅程阶段 | 要作出的决定 | 用户能判断什么 | 失效与恢复 | 规则 / Token 类别 |
|---|---|---|---|---|
| 发现与准备 | 适用场景、替代入口、采集与授权条件 | 能做什么、是否正在采集 | 拒绝授权后可继续使用替代入口 | G2-1、G7-1/G7-2 / 情境、回退 |
| 进入 | 主体、有效区域与参与条件 | 当前是否接收我的动作 | 超时或离开后结束参与 | G1-1/G1-3/G1-5 / 参与、交互区 |
| 选中 | 由手、注视还是其他输入确定目标,何时锁定 | 将操作哪个对象 | 目标消失或改变时取消候选 | G1-2、G4-1 / 手势集、反馈 |
| 操作 | 连续或离散映射、精度与身体预算 | 当前值、当前操作对象 | 遮挡时冻结或回滚,重获后重新建立控制 | G3-1/G3-2、G4-3、G5-1 / 体力、识别 |
| 确认或取消 | 生效时点、对象绑定与主动取消方式 | 尚未生效还是已经生效 | 提交前取消;提交后按真实撤销能力处理 | G1-2、G6-1/G6-2 / 后果 |
| 等待与纠错 | 慢响应、结果未知、防重与核对路径 | 请求已收到、结果待查或确已完成 | 不以重复动作盲目重发;保留可用成果 | G4-1、G6-2/G6-3 / 反馈、后果 |
| 切换与离开 | 模态接替、焦点丢失、进度保留 | 哪个入口现在有效 | 不把旧模态的释放事件带入新操作 | G1-5、G5-1、G7-1 / 参与、回退 |
最小交付包括:一条完整任务路径、动作与后果映射、状态与转换表、可解析配置、验证记录及来源。平台默认可以继承,但应标注平台、输入合同与适用条件。
3. 规则详解
本章按七条原则展开全部 39 条规则。其中的设计应用、验证示例与反例只是帮助落地的说明,不指定唯一实现。
3.1 G1 输入成立可判定
传感器持续采集,用户持续活动,两者之间需要一条明确的界线:什么动作被当作命令。这条界线由产品定义、由机制执行、并且必须对用户可见。界线定得模糊,产品会在两个方向同时失败——既误触发,又"怎么做都没反应"。
G1-1参与状态显式化必须
一句话:让用户和系统对"现在是否在接收手势"有同一个答案。
适用所有以隔空手势作为输入通道的产品。
规则产品必须定义有限且可枚举的参与状态(至少区分"未参与"与"接收输入中"),并保证任一时刻系统对当前状态有唯一判定。进入与脱离必须各有明确条件,其中脱离条件必须至少包含一项用户可主动执行的方式。当前参与状态必须对用户可感知(感知要求见 G4-1)。禁止把"手出现在采集范围内"直接等同于"用户希望交互",除非误触发后果已被 G6 约束到可接受范围并作为显式设计决定记录。
设计应用参与的进入可以是显式分隔动作、进入特定空间体积、注意力锚(注视或身体朝向)、其他模态触发,或以上组合;选择依据是误触发后果与使用频率,不是技术可行性。
验证示例
- 用户侧:让用户在不被告知的情况下靠近设备并自然活动,观察其能否说出"系统现在是否在听我的"。
- 实现侧:检查是否存在两个模块对参与状态判断不一致的窗口;状态切换是否作为事件被记录。
反例做不到——手一进画面就开始响应,用户放下水杯触发了下一页;做过头——每次交互前都要求先做一个两秒的举手确认,用户宁可去按物理按钮。
G1-2手势起止可判定必须
一句话:每次手势有明确的开始和结束,不靠从连续动作里猜。
适用以手势产生离散命令或连续控制的产品。本条各子款按其对象分别适用:分段要求适用于需要从动作流中识别出一次操作的输入;目标绑定要求适用于面向对象的操作;取消与进度重置要求适用于存在预览、拖动、停留、保持或其他尚未生效阶段的操作。无空间目标的命令可声明"目标绑定不适用",但这不免除其命令起止与主动取消的要求。
规则每个手势必须有可判定的开始与结束条件。系统必须能区分"一次完整手势"、"尚未完成的手势"与"手势之间的过渡动作",并且不得把过渡动作(收手、复位、切换姿势)识别为命令。产品必须显式声明所采用的分段依据:分隔动作、姿势变化、速度或位置阈值、时间窗口,或其组合。
边界条件本条不要求所有手势都使用同一种分段依据;不同后果等级可以采用不同依据(见 G6-5)。
规则(目标与取消):面向对象的操作必须定义目标绑定时点,以及移动、注视转移、对象消失或内容变化后的处理。操作开始后,禁止把同一段手势静默转交给新目标。存在预览、拖动、停留或保持阶段时,必须定义生效前的主动取消条件;丢失跟踪不等于有效释放(G5-1)。停留进度必须绑定当前目标,目标改变后不得继承原目标的累计进度。
规则(连续映射):连续控制必须声明手部运动如何映射为对象变化:位置、位移还是速度控制,所用坐标系、轴向、比例或增益、允许范围,以及释放后的停止或惯性行为。提供吸附时必须声明进入与退出条件,禁止静默换目标。长距离操作需要松手复位时,必须区分“暂停控制以重新放置手”的离合动作与提交动作;重新抓取前建立新基准,不得把复位位移补算为输入。双手控制必须定义两手角色及任一手丢失时的行为,不得静默降为单手并改变映射。
验证补充(连续映射):拖动中转身、改变距离、松手复位、重定位坐标锚或丢失辅助手,检查对象是否跳变;速度控制在中立位置、退出和跟踪丢失时是否按约定停止。有效释放后已声明的惯性动画,与把丢失误当释放是不同情况。
依据与参考WCAG 2.5.2 Pointer Cancellation 解释了按下、释放、取消与撤销的区分。其直接对象是单指针输入;这里把可取消的操作阶段用于隔空交互,是本规范的设计推导,并不要求所有手势都采用释放触发。
验证补充:开始拖动 A 后看向 B、停留中换目标、在提交前主动取消;检查目标是否被偷换、进度是否被继承、取消后是否仍生效。
设计应用为连续控制(拖动、缩放)设计明确的抓取与释放语义;释放的判定不应只依赖速度阈值,否则用户缓慢松手会被判为持续抓取。
验证示例
- 用户侧:让用户连续执行三次同一手势,观察复位动作是否被误识别为第四次。
- 实现侧:录制连续动作流,检查切分点与人工标注的一致性,特别关注收手段。
反例做不到——向右挥手翻页后收回手臂,被识别为向左挥手翻回;做过头——要求每次手势前后各做一个明确的"准备"和"结束"姿势。
G1-3未脱离不等于持续授权必须
一句话:没主动退出不代表一直同意,参与状态会过期。
适用参与状态可以持续超过单次手势的产品。
规则参与状态必须有失活条件:至少包括无有效动作的超时。用户静止、转身、离开采集范围、注意力转移或开始与他人交谈,禁止被当作继续同意接收命令。参与状态失活后再次交互,必须重新满足进入条件;若产品提供短时免代价重入,其宽限时长必须显式定义且有限。
依据与参考用户结束操作后,系统可能仍把日常动作解释为输入。参与失活用于限制这段误触发暴露时间;保持原姿势本身不能证明用户仍希望发出命令。
边界条件低后果功能可以免去独立的进入动作;没有跨动作参与会话时,参与超时不适用,但每次命令仍须重新满足主体、空间与分段判据,并在操作结束或识别超时后失效。存在参与会话时,超时后不得因先前进入条件仍然为真而在下一帧自动重入。重入宽限不得恢复旧候选的提交资格。
设计应用超时时长按误触发后果分级,不用统一值;失活时给出可感知提示,不要静默切换。
验证示例
- 用户侧:用户完成操作后转身与人说话两分钟,观察其手部动作是否触发命令。
- 实现侧:检查是否存在无超时的参与状态;宽限重入的时长是否可解析到具体值。
反例做不到——用户在客厅看完电视继续聊天,手势被持续解释为音量调节;做过头——五秒不动就退出,用户思考一下就得重新举手。
G1-4无意动作不成为输入必须
一句话:说话时比划、挠头、递东西,不该触发命令。
适用采集范围覆盖用户日常活动空间的产品。
规则系统必须区分命令性动作与非命令性动作,其判据必须显式定义、可测试,且不得仅依赖手势形态本身。命令性判据至少应结合参与状态(G1-1)、注意力指向、动作的空间位置或分隔动作中的一项以上。日常交流手势、无关操作与身体调整动作被识别为命令的比率,必须在真实使用环境中测量,并作为发布判据之一。
依据与参考这是隔空手势最著名的失败模式(Midas touch)。提高识别阈值改变的是误识别与漏识别之间的权衡,但仅靠形态分类不足以证明"这是一次命令"——这需要结合参与状态或情境判据,并在目标数据上验证其权衡结果。有效手段在架构层:加一层参与状态或注意力锚,把"是不是命令"和"是哪个命令"分成两次判定。
设计应用把命令判定与手势分类拆成两级;第一级尽可能保守,第二级才做形态区分。
验证示例
- 用户侧:在真实环境中记录一小时自然活动(含交谈、进食、使用手机),统计误触发次数与后果。
- 实现侧:确认命令判定不是单纯的形态分类置信度;关闭注意力锚后误触发率的变化量可被测量。
反例做不到——用户打电话时的比划触发了删除;做过头——要求用户每次都先注视摄像头三秒,正常对话中根本无法使用。
G1-5输入归属明确必须
一句话:明确此刻听谁的、听哪只手,换人换手有显式条件。
适用采集范围内可能同时出现多人、多只手,或同时提供多个输入模态,或同一动作会被多个事件源解释的产品。
规则系统必须在任一时刻明确当前输入的归属主体(哪个人、哪只手)以及所属的操作实例,并定义归属的建立、保持与转移条件。归属转移必须有显式条件,禁止因另一只手更靠近、更清晰或先被检测到而自动转移;另一个人或另一只手进入采集范围时,不得继承已锁定的目标或已累积的确认进度,坐标连续本身不构成主体相同的证据。归属主体离开或失活时,必须结束当前未完成的连续操作,不得由新主体接续(连续操作的中止行为见 G5-1)。
边界条件本条不要求产品支持多人;声明"单人使用"的产品,只需保证第二人出现时不发生归属转移或误识别即可满足。平台不提供主体证据时,用可验证的隔离或显式参与机制满足本条,不得虚构身份置信分数。第三方被采集本身的处置见 G7-3。
规则(多模态路由):同时使用手势、注视、语音、触摸或控制器时,必须定义各输入在目标选择、操作与提交中的角色,以及竞争时的优先级。同一用户意图不得因多个入口同时响应而重复生效。应用失去输入焦点、系统接管、设备休眠或模态切换时,必须结束或挂起未完成操作;恢复后核对主体、目标和参与条件,禁止自动补发旧的提交事件。
规则(事件归一):同一物理动作同时产生平台选择、抓取和自定义识别事件时,必须指定负责当前操作的事件来源,并把其余事件关联或排除;不得将同一意图重复解释为多个提交。防抖时长不能替代操作归属和副作用防重。
依据与参考Microsoft 交互模型指南 提醒混合输入模型可能产生竞争性的操作线索;W3C XAUR §3.8 讨论输入切换中的焦点丢失。上述来源支持问题与设计方向;事件防重和恢复条件是本规范的必要性推导。
验证补充:捏合过程中拿起控制器、唤出系统菜单后返回、两个入口同时确认;检查是否重复提交或沿用过期目标。
设计应用为多人场景定义仲裁规则(先到、显式接管、绑定指定主体),并让当前归属对在场所有人可见。
验证示例
- 用户侧:一人正在拖动对象,另一人从旁走过并抬手,观察拖动是否被劫持或中断。
- 实现侧:检查归属切换事件是否被记录;单手绑定期间另一只手的输入是否被正确忽略。
反例做不到——两人在场时系统在两双手之间来回跳,谁都控制不了;做过头——要求每次操作前先做人脸识别登录。
G1-6参与成本与场景相称应当
一句话:入口的代价配得上功能的价值,两头都别走极端。
适用定义参与进入方式的产品。
规则进入交互的动作代价应当与所要完成任务的价值和频率相称:高频低后果的操作应当有低成本入口;低频高后果的操作应当有足以辨明意图、对象与后果的参与条件——"更高成本"指判据更充分,不指动作更累或等待更久;对后果的保护主要由 G6 的提交约束承担。不得以"零成本入口 + 事后撤销"替代 G6-1 对不可逆动作的提交约束。
设计应用同一产品内可以有多级入口——快捷手势直达常用操作,完整参与流程用于其他操作。
验证示例
- 用户侧:测量常用操作从"想做"到"做成"的总动作时间,与触摸或语音路径对比。
- 实现侧:检查是否所有功能共用同一个高成本入口。
反例做不到——调音量也要先完成一套三步参与流程;做过头——为了快,把删除也放进了零成本快捷手势。
3.2 G2 手势与意义的绑定
自定义隔空手势通常缺少实体标签;可见对象和平台标准交互可以提供可供性与既有约定。用户能用的手势,等于他能发现并记住的手势——这个数量远比设计者估计的小。本原则管的是手势集本身:多大、怎么被发现、彼此差多远、含义从哪来。
G2-1手势集有界且可发现必须
一句话:手势数量有上限,用户不看说明书也能发现能做什么。
适用所有定义了手势词汇的产品。
规则同一情境下同时有效的手势数量必须有明确上限,并作为设计决定记录。用户必须能够在不阅读外部文档的前提下发现完成主要任务所需的全部手势;主路径禁止依赖只能通过文档、教程视频或口口相传得知的隐藏手势。
设计应用优先让手势对应可见对象上的直接操作(推、抓、拖),此类交互的可供性来自对象本身,可以降低记忆负担,仍需验证其可发现性;把需要记忆的姿势型手势留给少量高价值的全局操作。
验证示例
- 用户侧:给未经培训的目标用户一个任务,记录其在无提示条件下能发现并使用的手势数量。
- 实现侧:清点各情境下同时有效的手势数,检查是否超出声明上限。
反例做不到——十二个自定义姿势,用户只记得住两个,其余功能事实上不可达;做过头——每个界面都常驻一张手势速查图,遮住了内容本身。
G2-2语义映射稳定必须
一句话:同一个手势在同一情境下只有一个意思。
适用所有定义了手势词汇的产品。
规则同一手势形态在同一情境下必须只绑定一个语义。允许同一形态在不同情境承担不同语义,但情境差异必须对用户可感知,且该感知不得仅依赖用户记忆当前所处的模式。手势的语义禁止随系统内部状态静默改变。
依据与参考这是模式混淆在手势模态中的形态。GUI 里模式有可见的视觉线索;手势没有输入设备的物理状态可依赖,模式错误往往到执行完才被发现。
设计应用让情境差异体现在被操作对象或空间位置上,而不是一个抽象的模式开关。
验证示例
- 用户侧:让用户在两个情境间切换后立即执行同一手势,观察其对结果的预期是否与实际一致。
- 实现侧:清点是否存在同形态多语义的组合,检查每组的情境区分依据。
反例做不到——同一个握拳动作在播放时是暂停、在列表里是删除,用户不知道自己在哪;做过头——为避免复用,给每个功能各配一个独立姿势,词汇量爆炸(违反 G2-1)。
G2-3形态差异足以区分必须
一句话:相近的手势不承担后果差别大的功能。
适用所有定义了手势词汇的产品。
规则手势之间的差异必须同时在两个层面成立:识别层面(系统能可靠区分)与执行层面(人能可靠做出区别)。二者只满足其一不算满足本条。后果等级差异大的两个动作,禁止绑定在形态相近的手势上;相近程度的判据必须显式定义并在目标用户中测量。
规则(平台冲突):自定义与重映射后的手势必须检查与目标平台系统手势、辅助技术输入及日常交流动作的冲突。禁止拦截系统保留的退出或接管操作;升级平台或手势词汇后,必须复核相关冲突。
依据与参考Apple WWDC23:Design for spatial input 建议优先标准手势,自定义手势需与系统手势及常见交流动作区分。此为平台设计参考,不证明跨平台存在统一词典。
设计应用把后果重的动作放在形态上明显不同、且不容易被日常动作偶然构成的姿势上(见 G6-4)。
验证示例
- 用户侧:让用户连续执行相近的两个手势各二十次,统计其自身执行的可区分度与主观确信度。
- 实现侧:测量混淆矩阵,检查高后果动作与其最近邻手势的混淆率。
反例做不到——四指伸展是"保存"、五指伸展是"丢弃",识别率还不错,但用户自己做不稳;做过头——为了区分度要求用户做出别扭的非自然姿势。
G2-4不假定通用直觉应当
一句话:手势含义靠目标用户验证,不靠设计者觉得自然。
适用定义或修改手势语义映射的产品。
规则手势与语义的绑定应当以目标用户群的实证为依据,不应当仅以设计团队的直觉判断"这个手势很自然"。产品应当考虑文化差异、惯用手差异,以及用户从既有设备(触摸屏、遥控器、鼠标)带来的既有预期对手势选择的影响。
依据与参考设计候选应纳入既有界面经验带来的预期,例如用户可能尝试在空中“点击”或“滑动”。既有经验会塑造用户预期,但这不构成对这些形态的跨设备优劣排名——候选手势的可理解性、可执行性、识别性与疲劳仍须在目标设备与目标人群上分别验证。因此实证的作用不是直接采纳用户提议,而是暴露设计者与用户之间的预期差。
设计应用把征引结果作为约束条件而非答案;用户高度一致提出的手势若不可用,至少要保证它不被绑定到相反语义上。
验证示例
- 用户侧:在目标用户中测试候选手势的语义猜测一致率与首次执行成功率。
- 实现侧:记录每个手势的选择依据与实证来源。
反例做不到——团队内部投票决定手势集,上线后发现主要用户群完全猜不到;做过头——把征引结果直接当规范,采用了一批做起来最累、识别最差的手势。
G2-5可自定义与可关闭应当
一句话:允许替换或关掉个别手势,但不能借此绕过后果约束。
适用手势集包含可能与用户日常动作冲突的条目,或面向差异较大用户群的产品。
规则产品应当允许用户关闭或重新映射个别手势。自定义不得改变动作本身的后果等级,也不得绕过 G6-1 对不可逆动作提交路径的要求;用户可以把删除换成另一个手势,但不得把它变成无需二次确认。关闭个别手势后,相应功能仍必须通过其他路径可达(见 G7-1)。
设计应用把"这个手势总是误触发"做成一次点击即可关闭的入口,而不是埋在设置深处。
验证示例
- 用户侧:让用户关闭一个高频误触发的手势,检查相应功能是否仍可用。
- 实现侧:检查自定义配置是否能突破后果等级映射与提交约束。
反例做不到——某个手势与用户的职业动作冲突,只能整体关闭手势功能;做过头——开放到用户可以把支付绑定在挥手上。
G2-6学习成本可重入应当
一句话:需要学的手势随时能再学一次,不靠首次引导讲完。
适用包含需要学习的姿势型手势的产品。
规则需要学习的手势应当有可随时重新进入的教学与练习入口,且该入口应当从使用现场可达,不要求用户中断任务去翻设置。教学应当提供做对与做错的即时区分,不只展示示意图。
规则(练习隔离):教学中的练习动作必须限定在演示对象或可恢复的练习环境内,禁止产生真实发送、付款、删除或权限变更。进入与退出练习必须可感知,退出后不得把未完成练习手势接续为真实命令。
验证补充:练习确认手势后立即返回任务,检查真实对象与外部系统是否保持原状。
设计应用在识别连续失败时就地提供"看一下怎么做",而不是仅在首次启动时播放一遍。
验证示例
- 用户侧:让用户在使用一周后重新找到某个不常用手势的学习入口,记录耗时。
- 实现侧:检查教学入口在主要使用场景中的可达步数。
反例做不到——首次启动播放一段引导视频,之后再也找不到;做过头——每次进入应用都强制重放教学。
3.3 G3 身体代价有预算
在隔空手势里,输入设备是用户的身体。它会累,精度有上限,形态因人而异,而且这些代价不会出现在任何日志里——它表现为用户悄悄不再使用这个功能。本原则把身体的可承受量当作硬约束,与延迟预算、内存预算同等对待。
G3-1主路径不依赖疲劳性动作必须
一句话:高频操作不要求抬臂过肩或长时间悬停。
适用所有以隔空手势作为常规输入的产品。
规则高频操作的主路径禁止要求抬手超过肩部高度、要求手臂在无支撑状态下长时间保持姿势,或要求大幅度全臂运动。产品必须为主路径声明动作预算(幅度、高度、单次保持时长),并在目标使用时长下验证其可持续性。
运动本身构成活动内容的情形另作评估(体感训练、康复、运动评估、演奏):其身体负荷按该活动自身的目标与安全要求判定,不适用本条对"命令快捷操作"的预算;但进入、暂停与退出这些活动的控制动作仍适用本条,不得要求额外的疲劳性动作。
依据与参考悬臂疲劳(gorilla arm)不是耐力问题而是设计问题——无支撑悬臂可能导致疲劳与精度下降,其程度受姿势、动作负荷、任务时长与个体差异影响。有效对策是设计允许手臂获得支撑的动作(贴近身体的小幅动作、肘部有依托的姿势),而不是要求用户坚持。
设计应用把高频操作设计为在身体前方、肘部自然下垂位置即可完成的小幅动作;把需要大动作的手势留给低频操作。
验证示例
- 用户侧:让用户按典型使用强度连续操作,测量主观疲劳与后半程的执行成功率衰减。
- 实现侧:核对主路径的动作预算声明与实际交互所需动作是否一致。
反例做不到——每翻一页都要举手过肩挥动,用户十分钟后放弃;做过头——把所有动作压缩到极小幅度,导致识别不稳定、用户不敢动。
G3-2精度要求与人的能力相称必须
一句话:别把鼠标级精度要求搬到没有支撑的空中。
适用涉及目标选取、数值调节或位置控制的产品。
规则目标尺寸、稳定性要求与调节分辨率,必须在用户实际所处的支撑条件下可达成。产品必须声明主路径所要求的精度档位,无支撑条件下禁止把点级精度选取作为主路径。精度不足时,必须通过增大目标、提供吸附、改用相对调节或分级调节解决,禁止通过要求用户保持更稳来解决。
设计应用远距指向的角度抖动会随距离放大,同一手部抖动在近场可接受、在远场不可接受;近场直接操作与远距指向应当采用不同的目标尺寸标准。
验证示例
- 用户侧:在真实距离与姿势下测量目标选取成功率与耗时,含站立与就座两种姿势。
- 实现侧:检查目标尺寸是否随交互距离与输入模型(近场/远场)变化。
反例做不到——把桌面级的小控件原样搬进空中,用户反复选错相邻项;做过头——所有控件都放大到屏幕的四分之一,一屏放不下三个功能。
G3-3单手可完成应当
一句话:核心路径单手能走完,且不假定惯用手。
适用可能在用户另一只手被占用的场景中使用的产品。
规则核心任务路径应当可以单手完成,且不应当假定用户使用特定的惯用手。需要双手的手势应当限于确有必要的操作(如双手缩放),并应当有单手替代路径。
设计应用识别模型与交互布局都需要支持左右手对称;不要把左手的镜像动作识别为另一个语义(除非该语义差异是显式设计并对用户可见,见 G2-2)。
验证示例
- 用户侧:让用户一手持物完成核心任务;分别用左右手各测一次。
- 实现侧:检查是否存在只在某一只手上识别率显著下降的手势。
反例做不到——抱着孩子的用户无法使用任何功能;做过头——为保证单手可用,取消了双手缩放这类明显更好用的交互。
G3-4连续使用有上限并可休息应当
一句话:长任务提供可支撑的姿势或替代模态,不要求持续保持。
适用预期单次使用时长超过数分钟的产品。
规则产品应当为连续手势使用声明时长上限,并在接近或超过时提供可支撑姿势、分段完成方式或替代模态。禁止设计要求用户在整个任务期间持续保持某一姿势的交互——保持姿势的成本随时间非线性上升,且用户无法中途放下手。
设计应用把长过程拆成可暂停的段落,允许用户放下手而不丢失进度(状态延续要求见 G5-1)。
验证示例
- 用户侧:让用户完成一次完整的典型长任务,记录中途放弃与主动切换模态的次数。
- 实现侧:检查是否存在必须保持姿势才能维持的状态。
反例做不到——要求用户全程保持捏合姿势直到上传完成;做过头——每两分钟弹出一次"建议休息"打断工作。
G3-5身体差异不构成排除必须
一句话:手小、震颤、缺指、义肢的人也要能完成任务。
适用所有以隔空手势作为输入通道的产品。
规则手部尺寸、关节活动范围、震颤、指节缺失、义肢或佩戴物(手套、饰品、绷带)导致的识别与执行差异,不得使用户无法完成任务。产品必须验证在这些条件下的可用性;识别层面无法覆盖的情况,必须由 G7-1 的非手势路径保证功能可达,且该路径不得是功能受限的替代品。
边界条件本条不要求手势识别覆盖全部身体条件——那不现实。它要求的是:识别覆盖不到的地方,功能仍然可达。这也是 G7-1 存在的原因之一。
设计应用把可调参数(手势幅度容差、防抖强度、停留时长)开放给用户,而不是只提供一套按平均手型标定的配置。
验证示例
- 用户侧:在包含相关身体条件的用户中测试核心任务完成率。
- 实现侧:检查识别失败时是否自动、可感知地暴露非手势路径。
反例做不到——震颤用户始终无法完成停留确认,且没有别的入口;做过头——把所有阈值放宽到人人可用,误触发率随之失控(应当用可调参数解决,不用统一放宽解决)。
3.4 G4 状态可感知
手势交互没有机械反馈:手指按下去有阻力、鼠标点击有声响,这些在空中都不存在。用户对系统状态的全部判断,来自产品主动给出的反馈。反馈缺失时,用户的默认策略是重复动作——这会同时放大误触发与挫败感。
G4-1三态各有反馈必须
一句话:在范围、已锁定、已提交,三种状态要分得开。
适用所有以隔空手势作为输入通道的产品。
规则系统必须让用户区分适用的三个反馈层次:在范围(手部处于产品有效交互区且输入可用)、已锁定(当前候选目标或全局命令已明确,但尚未生效)、已提交(动作已经生效)。采集到手不等于已参与,参与状态按 G1-1 表达;全局手势没有空间目标时,锁定的是命令,不得虚构目标选中。某层次确实不存在时记录不适用,不得为了凑齐三态人为加入停留或确认步骤。反馈形式不限,只要目标用户能稳定区分。
规则(结果状态):三态是反馈层次,不是完整状态机。存在异步执行时,必须另外区分处理中、失败、结果未知与已取消;请求发出或收到回执不等于动作已生效。已提交反馈必须来自真实结果;未决或失败状态不得被历史成功提示遮蔽。结果未知时的核对与防重见 G6-2。
依据与参考反馈层次缺失会造成如下可预见的失败:用户不知道是"没看见我"、"看见了但没选中"还是"选中了但没成",只能反复重做。对存在这些阶段的任务,三者对应不同的下一步动作;混同可能诱发错误重试。这是本规范的交互模型,不是平台统一标准。
设计应用三态可以分配在不同通道上——在范围用光标或手部可视化,已锁定用对象高亮或吸附,已提交用声音加对象的实际变化。
下表是包含候选与异步提交的任务示例;简单本地操作可直接从有效输入进入结果,不人为等待。参与状态与执行结果分别管理,退出参与不抹掉已发生的结果。
| 当前阶段 | 进入条件与可信事实 | 用户反馈与可用控制 | 退出、失效或恢复 |
|---|---|---|---|
| 未参与 / 输入可用 | 能力就绪,但尚未满足参与条件 | 手势入口、是否接收输入;可关闭 | 满足进入条件才解释命令;不从“看见手”推断参与 |
| 候选 | 已参与,存在候选目标或命令,尚未确定 | 候选提示;可取消 | 低置信不显示已锁定;换目标清零 |
| 已锁定 | 主体、目标或命令已确定,操作尚未生效 | 明确作用对象;适用时显示停留或保持进度 | 目标消失、内容改变、取消或失活使候选失效 |
| 连续操作 | 有效数据、映射与控制保持条件同时成立 | 当前对象或数值;可取消、离合或切换 | 依约释放后完成;失效进入挂起,不把丢失当释放 |
| 挂起 / 输入失效 | 已确认数据失效、系统中断或反馈无法支持控制 | 已保留的值、已知原因或原因未知、替代入口 | 不累计隐藏位移与确认进度;校验同一主体和目标后重建基准,或取消 |
| 请求处理中 | 提交条件已通过且请求已发出,尚无结果证据 | 请求已收到;仅暴露实际可用的取消或查询 | 不把受理当成功;超时且无法判定结果时进入未知 |
| 结果未知 | 缺少足以判定成败的回执或查询结果 | 待核对;可查询、退出输入、使用不冲突功能 | 核对原操作;重复手势不能创建第二次相同副作用 |
| 已生效 / 失败 / 已取消 | 生效证据、明确未生效证据或取消生效回执 | 真实结果;可用的撤销、补救或重新开始 | 退出参与不抹掉结果;新操作不复用旧进度 |
规则(状态事实与竞争):输入参与、数据有效性、操作阶段与执行结果必须分别判定。界面必须能把反馈关联到当前操作的主体、目标、动作、事件顺序与真实结果;这些是运行事实,不是 Token。取消、失活或数据失效与尚未生效的提交竞争时,必须先拦截不再满足条件的提交;若外部后果已经发生,则反馈实际结果并提供真实可用的撤销或补救,禁止声称“已取消”。迟到的旧操作回执不得覆盖新操作状态,已确认的失败或未决结果不得被“重新跟踪到手”清除。
验证示例
- 用户侧:在每种状态下暂停,让用户描述系统当前的状态与自己的下一步。
- 实现侧:检查三态是否有独立的可观察表现,可使用同一元素的形态、文字或对比度变化,但必须通过辨识验证。
反例做不到——只有一个小圆点,用户永远在猜;做过头——三态各配一套动画加音效,操作一次响三声。
G4-2反馈延迟有上限必须
一句话:反馈慢到破坏因果感时,降级为离散反馈而不是没反馈。
适用所有提供动作反馈的产品。
规则产品必须为反馈声明端到端延迟预算(自动作发生至用户可感知反馈)。延迟超出预算时,必须降级为明确的离散反馈(如"正在处理"的状态指示),禁止表现为无反馈。跟随性反馈(手部可视化、光标)的延迟一旦超出预算,禁止继续以跟随形式呈现——滞后的跟随比没有跟随更具误导性,用户会据此调整动作,导致过冲与震荡。
降级不得只停显示而继续累计输入:若此时无法向用户提供可供闭环判断的当前量,必须暂停该连续控制的新增业务更新,并明确已保留的值、尚未生效的部分与可用的退出方式;恢复时重新建立控制基准。仍有经验证可靠的对象自身反馈通道时可以继续——单一显示通道失效不等于整体反馈失效。
设计应用分别测量跟随反馈与结果反馈;前者参与连续动作纠正,后者用于判断是否生效,不用一个平均值代替两者的预算。
验证示例
- 用户侧:人为注入延迟,观察用户是否出现过冲、反复修正或重复执行。
- 实现侧:测量各类反馈的端到端延迟分布(不只是均值),检查超限时的降级行为是否触发。
反例做不到——手部光标滞后半秒,用户越修正越偏;做过头——为压低延迟牺牲识别质量,反馈快但经常是错的。
G4-3连续动作有连续反馈必须
一句话:拖动缩放时持续显示当前值,不是结束才告诉结果。
适用包含拖动、缩放、旋转、滑动调节等连续控制的产品。
规则连续控制在动作进行期间必须持续反馈当前值或当前位置,使用户能够在提交前判断是否达到目标并据此调整。禁止仅在动作结束后一次性呈现结果。连续控制必须有明确的释放语义,且释放的判定对用户可感知(起止判定见 G1-2)。
设计应用把被操作对象本身作为反馈载体优于额外的数值显示——对象跟着手动,用户不需要在两处之间分配注意力。
验证示例
- 用户侧:让用户把数值调到指定目标,记录过冲次数与修正次数。
- 实现侧:测量当前值与反馈的一致性、端到端延迟、尾部卡顿、过冲与修正次数;不以"刷新率与采样率相等"作为通过标准——两者不必相等,判据是端到端可闭环。
反例做不到——挥手调音量,松手后才知道调到了多少;做过头——在手边浮动一个精确到小数点后两位的数值面板,遮住了被调节的内容。
G4-4反馈不独占视觉应当
一句话:主要状态至少有一条非视觉通道。
适用用户视线可能不在显示区域的产品。
规则主要状态反馈应当至少有一条非视觉通道(听觉、触觉、中空触觉,或被控物理对象自身的可感变化)。在用户视线必须投向别处的场景中(驾驶、烹饪、手术、大屏远距操作),非视觉反馈为必须(见 G7-6)。
依据与参考隔空手势最有价值的场景恰恰是手不方便碰、眼睛不方便看的场景——而这类场景对视觉反馈的依赖是自相矛盾的。中空触觉是这一缺口的直接解法,但受设备与作用范围限制;听觉在多数场景中是更现实的选择。
设计应用非视觉通道不必承载全部信息,承载状态切换即可——"锁定了"与"提交了"用两种短促、可区分的声音就能覆盖大部分需求。
验证示例
- 用户侧:让用户在不看屏幕的条件下完成核心任务。
- 实现侧:检查静音条件下是否仍有可区分的状态反馈,或产品是否明确声明该场景不适用。
反例做不到——车载手势控制的全部反馈都在中控屏上,用户必须低头确认;做过头——每个微小动作都伴随提示音,副驾驶要求关掉整个功能。
G4-5边界可感知必须
一句话:快出界、已出界,用户要在发生时知道,不是靠没反应推断。
适用交互区存在有效空间边界的产品(即绝大多数产品)。
规则用户接近交互区边界、以及已经离开交互区,必须可被感知。已离开的反馈必须与"系统故障"和"动作未被识别"相区分——三者要求用户采取的下一步动作完全不同。禁止以无反应表示越界。
能确定原因时给出对应的提示;只能确定"输入当前不可用"而无法确定原因时,必须如实表达原因未知,并给出稳妥的恢复或切换入口——禁止在原因未知时虚构"太远""光线不足"一类确定诊断。本条要求区分的是已知事实,不要求传感器具备它并不具备的诊断能力。
设计应用接近边界时给出渐进式提示(手部可视化渐隐、方向指示),而不是在越界瞬间才突然失效。
验证示例
- 用户侧:让用户主动把手移出交互区再移回,观察其能否说出发生了什么以及如何恢复。
- 实现侧:检查越界、跟踪丢失(G5-1)与识别失败三种情况是否有区分的表现。
反例做不到——用户站得稍远,所有手势都没反应,以为功能坏了;做过头——手每靠近边缘一点就弹出一个警告框。
G4-6反馈不过载应当
一句话:反馈强度配得上动作后果,不对每次微动都大声提示。
适用所有提供动作反馈的产品。
规则反馈的强度与显著程度应当与动作的后果相称。高频低后果的操作应当使用轻量、可被忽略的反馈;醒目反馈应当留给状态切换与高后果动作。产品不应当为满足 G4-1 而对每一次微小位置变化施加醒目提示。
依据与参考本条是 G4-1 的配平项。三态反馈被做过头的典型结果是:所有反馈同等醒目,于是全部沦为背景噪声,真正重要的那次提交确认被忽略——这与告警疲劳是同一机制。
验证示例
- 用户侧:连续使用后询问用户是否注意到某次关键状态变化。
- 实现侧:清点单位时间内的反馈事件数与其中醒目级别的占比。
反例做不到——提交与移动用同一种弱提示,用户不知道自己已经提交;做过头——每帧位置更新都伴随音效与动画。
3.5 G5 识别不确定性显式化
手势识别可能输出标签、分数或概率估计,均不等同于用户意图事实。产品必须显式决定如何处理这种不确定性:偏向哪一侧、多不确定时停下来、丢失时怎么办、能力下降时往哪退。这些决定不做,就会被默认值代替——而默认值往往是"取最高分类结果并执行",这在高后果动作上是不可接受的。
G5-1跟踪丢失是正常状态必须
一句话:丢失时的行为预先定义且安全,禁止拿最后一帧继续推进。
适用所有依赖持续跟踪的产品。
规则跟踪丢失必须作为正常运行状态处理,而非异常分支。产品必须为每类进行中的操作定义丢失时的行为,且该行为必须是安全的默认:冻结当前值并等待、回滚到操作开始前状态,或按已定义的宽限时长等待重获。禁止以最后一帧的数据继续推进操作;禁止在丢失后自动提交进行中的动作。丢失必须对用户可感知(见 G4-5),且重获跟踪后的接续行为必须明确定义,不得静默跳变。
依据与参考持续跟踪失效会破坏连续控制所依赖的位置与动作证据。手离开视野时,最后一帧的速度矢量若被外推,会产生一次用户完全没有做出的大幅动作——在拖动、删除、滑动确认类交互上,这直接造成不可预期的后果。遮挡(另一只手、身体、持物)、光照突变、超出范围都会产生同一现象,且在真实环境中频繁发生。
规则(数据资格):产品必须声明每类操作所依赖的数据及其有效性判据:所需的关节或方向、时间新鲜度上限、平台提供的有效性与跟踪标记如何解读、以及部分丢失时的处置。有数值不等于跟踪有效——坐标存在但所需数据无效或过期时,不构成可用输入;平台另有主动跟踪标记时,须声明其与有效标记的组合判据。缺少某类标记的 API 使用其实际提供的姿态有效性或标准输入事件,不伪造标记,也不默认旧坐标有效。失效之后的平滑、旧值沿用与外推只能用于显示,不恢复操作资格,也不构成提交依据;已通过平台与产品有效性判断的正常姿态估计不因其为"估计"而一概禁止。
规则(重获):允许接续时,必须核对仍为同一主体、目标与操作,并重新建立当前手位置与对象位置的控制关系;无法核对时取消候选或要求重新开始。
设计应用为连续操作准备操作起点快照,使回滚成为可选项;宽限时长按操作类型分别设定,不用统一值。
验证示例
- 用户侧:在拖动过程中把手移出视野再移回,观察对象是否发生用户未预期的位移或提交。
- 实现侧:注入跟踪中断,检查是否发生外推;检查重获后的位置是否发生跳变;改变输入主体或目标后,旧操作是否被错误接续。
反例做不到——手被遮挡瞬间,被拖动的对象飞到屏幕外并提交;做过头——任何一帧丢失都立即整体回滚,正常使用中操作不断被打断(可按操作后果采用有限宽限,期间不继续更新)。
G5-2偏置方向显式且分级必须
一句话:识别基础值可以共享,后果放行策略必须分级验证。
适用所有基于分类或阈值判定手势的产品。
规则产品必须显式声明识别的偏置方向(宁可漏识别还是宁可误触发),且该声明必须按动作后果等级分级,禁止仅凭一个未验证的全局阈值放行所有后果。识别器可以共享基础阈值,但各等级的放行策略与误触发验收必须独立定义;额外确认不得被高置信替代。不可逆、对外产生影响或涉及资金的动作,禁止采用偏灵敏的设置。偏置方向的选择必须作为设计决定记录,并可随场景(见 G7-5)调整。
依据与参考在识别器和数据分布固定时,调整判定阈值通常带来误触发与漏识别的权衡;改进模型、数据或参与机制可能同时改善两者,不能断言二者无法同时优化。分数也不天然是校准后的概率。scikit-learn 阈值调优文档 将统计预测与行动决策分开,并要求避免在训练数据上直接调阈值;它支持方法,不提供手势产品的阈值。
设计应用把阈值与后果等级映射绑定(见 Design Token 的 gesture.recognition.confidence.threshold 与 gesture.commitment.risk.mapping),而不是在代码里散落若干魔数。
验证示例
- 用户侧:分别在高后果与低后果动作上测量误触发与漏识别的实际发生率与用户反应。
- 实现侧:检查每个后果等级是否有明确的放行策略与验证记录,是否用高分绕过确认。
反例做不到——所有手势共用一个置信阈值,删除和翻页一样容易被误触发;做过头——为压制误触发把全部阈值调到极高,正常操作十次有三次没反应。
G5-3低置信不冒充确定必须
一句话:拿不准时不执行高后果动作,也不静默猜一个。
适用识别结果附带置信信息的产品。
规则识别置信低于该动作对应阈值时,禁止直接执行高后果动作。系统必须采取以下之一:维持原状并给出可感知提示、呈现候选供用户选择、或要求补充确认。禁止静默采用最高分候选执行,也禁止把低置信结果呈现为已确定的识别结果。
边界条件本条不要求向用户暴露置信数值。它要求的是行为上的差别对待——用户不需要知道是 0.6 还是 0.9,需要知道的是"系统不太确定,请再来一次"和"系统确定了"。
设计应用已绑定目标时,可保持当前值并提示等待辨识;命令尚未确定时,显示候选或提供选择,不能称为“已锁定”。只在需要用户判断时请求确认。
验证示例
- 用户侧:制造模糊手势输入,观察系统是否执行了用户未预期的动作。
- 实现侧:检查高后果动作路径上是否存在绕过置信判定的分支。
反例做不到——模糊动作被判为删除并直接执行;做过头——稍有不确定就弹确认框,正常使用中确认框不断(应按是否已有有效目标选择维持、候选或取消,见设计应用)。
G5-4识别条件可被知道并改善应当
一句话:识别变差时告诉用户原因,且是他能动手改的原因。
适用识别质量受环境条件显著影响的产品。
规则当光照、遮挡、距离、动作速度、佩戴物等条件导致识别质量下降时,产品应当以用户可采取行动的方式告知。提示应当指向具体的改善动作(靠近一点、把手抬高一点、避开逆光),不应当只呈现"识别失败"或技术性错误码。
设计应用把提示与 G4-5 的边界提示统一在同一套反馈语言里,避免用户需要学习两套错误表现。
验证示例
- 用户侧:在逆光、部分遮挡、过远三种条件下,观察用户能否自行恢复到可用状态。
- 实现侧:检查各类识别下降是否被区分,还是统一归为一种失败。
反例做不到——始终只显示"未识别到手势",用户不知道该往前走还是该开灯;做过头——持续显示一个识别质量仪表盘,用户被迫时刻监控传感器状态。
G5-5降级路径预先定义必须
一句话:能力下降时怎么退,提前定好顺序,不在运行时临时决定。
适用识别能力可能在运行中下降的产品(即绝大多数产品)。
规则产品必须预先定义识别能力下降时的降级顺序,可选层级包括降低精度要求、缩小同时有效的手势集、切换到更粗粒度的交互、切换模态与停止手势输入。降级必须对用户可感知,且降级后仍可达的功能范围必须明确。禁止在能力不足时继续以完整手势集运行并依赖用户反复重试。
边界条件本条不要求产品实现全部降级层级;它要求所采用的层级是预先定义的、有顺序的,并且最末一级落到 G7-1 的非手势路径上。
设计应用把降级触发条件(连续失败次数、持续丢失时长、环境条件)与降级动作在配置层显式绑定(见 Design Token 的 gesture.recognition.degradation.order 与 gesture.fallback.auto_fallback.trigger)。
验证示例
- 用户侧:逐步恶化识别条件,观察用户是否在每一级都仍能完成任务或明确知道该改用什么。
- 实现侧:遮挡摄像头,检查系统是否进入已定义的降级态而非持续报错。
反例做不到——摄像头被挡住后应用完全无响应,也不提示还能怎么操作;做过头——识别稍有波动就直接切到语音,用户被反复切换模态。
3.6 G6 后果与手势解耦
误识别在这个模态里是常态。因此规范真正要保护的不是识别准确率,而是误识别的后果规模。本原则管的是手势与其造成后果之间的耦合强度:后果越重,这条链路上就越不能只有一个手势。
G6-1不可逆动作不由单次手势提交必须
一句话:删除、发送、支付不能一挥手就成立。
适用可通过手势触发不可逆动作、对外产生影响的动作或涉及资金的动作的产品。
规则不可逆动作、对外发送或发布、支付与资金转移、权限变更,禁止由单次手势直接提交。此类动作必须经过异模态的第二通道确认(语音、按键、触摸或人工操作),或与被确认对象显式绑定的二次手势确认。外部结果已发生后可做补救,不等于从未产生过后果,不得以此豁免确认。确认必须绑定具体对象、内容、当前状态与后果,不得是泛化的"确定吗";等待确认时关键条件改变或确认失效,必须重新确认。确认不替代平台身份验证与权限检查。
依据与参考无意动作可能触发外部后果。二次确认用于让用户判断具体对象与后果;只有识别分数更高、动作更久或更累,都不能代替这次判断。
设计应用可完整恢复且无外部影响的低后果动作可以直接生效并提供撤销;对外发送与付款等动作先确认。倒计时发送期间的按钮是取消尚未发送的请求,不是撤销已发送的消息。
验证示例
- 用户侧:让用户在有旁人干扰的环境中使用五分钟,检查是否发生非预期的不可逆动作。
- 实现侧:清点所有不可逆动作的触发路径,检查是否存在单手势直达的分支。
反例做不到——挥手即删除邮件,且无法恢复;做过头——连切换歌曲都要求二次确认。
G6-2撤销可达必须
一句话:可恢复的改变有真实撤销,且撤销不只依赖手势;不可恢复的后果不冒称可撤。
适用手势可触发状态改变的产品。
规则对于可恢复的状态改变,产品必须提供真实有效的撤销,且撤销路径不得仅依赖手势输入本身——如果识别正在失效,用户恰恰无法用手势撤销。撤销窗口的时长必须显式定义,可按动作类别分别设定。已提交且确实不可撤销的动作,必须在提交前被 G6-1 覆盖;提交后不得以撤销入口暗示可以恢复。
规则(结果未知与恢复):异步操作超时或回执丢失时,必须先核对实际结果;未确认失败且无法保证不重复生效时,禁止把用户重复手势当作新的相同请求直接重发。取消未提交动作、撤销已生效改变与补救外部影响必须分开反馈。撤销必须说明范围,并保护其他用户或入口在此后产生的有效修改。
验证补充:模拟动作已生效但回执丢失,再重复手势;检查是否只生效一次。用其他入口修改对象后撤销手势操作,检查后续修改是否被抹掉。
设计应用把撤销放在非手势通道上(物理按键、语音、屏幕控件);即使手势识别完全失效,撤销仍然可用。
验证示例
- 用户侧:在识别质量恶化的条件下,让用户撤销刚才的误操作。
- 实现侧:检查撤销入口是否依赖手势;检查界面上的撤销提示与实际可撤销范围是否一致。
反例做不到——误触发了删除,撤销手势也识别不出来,用户只能眼睁睁看着;做过头——为所有操作维护无限撤销栈,性能与存储代价失控。
G6-3误触发成本有上限必须
一句话:单次误识别的后果有上限,反复误触发要能被察觉并收敛。
适用所有以隔空手势作为输入通道的产品。
规则单次误识别可造成的后果规模必须有明确上限,并作为设计决定记录(数量、金额、影响范围、可见性)。产品必须声明连续操作的累计影响上限、统计窗口与超限行为,且不得靠重新参与或切换模态绕过。产品必须具备察觉反复误触发的机制,并在达到阈值后采取收敛动作:提高识别阈值、缩小手势集、提示切换模态或暂停手势输入。禁止把误触发的识别与处理完全交给用户。
依据与参考单次可接受的影响,重复累积后可能不可接受。持续遮挡、干扰或日常交流动作可能导致成簇误触发,因此需要同时限制单次影响与累计影响。
设计应用把"用户连续撤销三次同类操作"当作误触发信号,而不是等待用户去设置里关闭功能。
验证示例
- 用户侧:制造持续误触发条件,观察系统是否在用户抱怨前自行收敛。
- 实现侧:检查是否存在单次即可造成大规模影响的手势路径;检查收敛机制的触发阈值是否可解析到具体值。
反例做不到——一个误识别的手势清空了整个列表;做过头——一次误触发就永久禁用该手势,用户不知道功能去哪了。
G6-4确认动作不与常用动作同形必须
一句话:用来确认的手势,形态上要和高频手势明显分开。
适用使用手势作为确认通道的产品。
规则用于确认高后果动作的手势,与高频操作手势之间必须有显著形态差异(差异判据见 G2-3),且不得是日常活动中容易偶然构成的姿势。确认手势禁止是高频手势的延续、重复或轻微变体——用户在连续操作的动作流中很容易自然地走到那个形态上。
设计应用让确认动作在动作维度上与常用动作正交——常用动作若是水平方向的,确认就不要也是水平方向的变体。
验证示例
- 用户侧:让用户连续快速执行高频操作,统计是否偶然触发确认。
- 实现侧:测量确认手势与其最近邻高频手势的混淆率,以及在自然活动录像中的偶然出现率。
反例做不到——单指点是选择、双指点是确认删除,用户手抖一下就删了;做过头——确认手势设计得极其罕见和别扭,用户每次都要试三遍。
G6-5后果分级决定交互形态应当
一句话:保护强度配得上后果,不以动作更累或耗时更长证明更安全。
适用包含多个后果等级动作的产品。
规则动作的后果等级应当决定其提交路径的保护强度:后果越重,越应当采用清晰对象预览、显式确认或第二通道。增加停留时长或动作幅度不天然提高安全性,且仍受 G3 的身体预算约束。禁止为设计一致性而给所有动作统一提交形态——统一到低成本一侧会违反 G6-1,统一到高成本一侧会让高频操作不可用。
设计应用把后果等级作为手势集的一个维度显式建模(见 Design Token 的 gesture.commitment.risk.mapping),让交互形态从等级派生,而不是逐个功能拍板。
验证示例
- 用户侧:验证各等级的错误提交率、后果范围和恢复成本,并测量额外确认是否妨碍正常任务;不以耗时更长证明更安全。
- 实现侧:检查是否存在后果等级与提交成本倒挂的动作。
反例做不到——所有操作都是"指一下就执行",包括清空回收站;做过头——所有操作都套用最高等级的三步确认,产品慢到不能用。
3.7 G7 情境与他人
隔空手势发生在开放的物理空间里:有旁人、有变化的光线、有被占用的双手、有正在开车的主任务。这些不是"边缘场景",而是这个模态的常态使用条件。本原则管的是交互所处的环境,以及环境中不是用户的那些人。
G7-1非手势路径必须存在必须
一句话:每个功能都有不用手势也能到达的入口。
适用所有以隔空手势作为输入通道的产品。
规则手势可达的每一项功能,必须存在至少一条不依赖手势的可达路径。该路径必须同时满足三类情况的需要:身体条件导致手势不可用(见 G3-5)、双手被占用、识别能力失效(见 G5-5)。非手势路径不得是功能受限的替代品——允许操作效率不同,不允许功能缺失。手势输入必须可被用户完全关闭,关闭后全部功能仍然可达。
边界条件本条的功能等价针对以动作发出命令的任务。手部运动测量本身构成活动本质时(如动作评估),不要求用按钮伪造同等测量结果;必须说明不适用条件,并为进入、暂停、退出及结果访问保留可用入口。
规则(可用的替代):替代路径必须在目标情境下实际可用;例如双手被占用时,只有触摸按钮不足以覆盖该条件。切换入口必须在识别失效时可发现、可操作,并保留仍有效的对象与进度;无法接续的部分必须说明。
依据与参考WCAG 2.5.4 Motion Actuation 明确涉及对摄像头做出的手势,要求替代控件与可关闭,并列出辅助接口和本质性活动例外。它直接适用于 Web;本规范对其他产品的采用属于设计要求,不等于取得 WCAG 合规证明。WCAG 2.5.7 另要求适用的拖动功能提供无需拖动的单指针操作,不能仅以“换一只手拖动”作为替代。
设计应用把非手势路径当作主路径设计、把手势当作加速器,而不是相反。
验证示例
- 用户侧:完全关闭手势输入,让用户完成全部核心任务。
- 实现侧:清点功能矩阵,检查是否存在仅手势可达的功能。
反例做不到——某项设置只能通过一个特定手势打开;做过头——为保证等价,把每个手势都在界面上配一个等价按钮,界面被按钮淹没(等价路径不要求同一入口形态)。
G7-2采集状态可见必须
一句话:传感器什么时候在采集,用户能知道,且关不掉这个指示。
适用使用摄像头、雷达、深度传感器或麦克风阵列进行手势采集的产品。
规则传感器处于采集状态时,必须存在对在场人员可感知的指示,且该指示不得被产品配置或应用关闭。采集范围、采集内容类别与保留策略必须可查询。手势识别所需的原始感知数据,其保留期限必须独立于产品的其他数据保留策略明确声明。
规则(最小采集):能够由平台标准输入事件完成的功能,不得仅为实现同一功能而额外索取原始图像或完整手部骨架。确需这些数据时,必须说明用途、处理位置、接收方、授权拒绝或撤回后的行为。骨架与派生特征不因未保存图像而被视为匿名;用于诊断、个性化或训练的留存须分别声明,不继承“允许本次交互”的许可。
依据与参考WebXR Hand Input 的隐私与安全章节 将手部数据作为具有隐私风险的输入处理。这里的最小采集与用途区分是产品设计要求,不把该工作草案的 API 行为套用到所有设备。
边界条件本条不要求指示形式为特定形态(指示灯、屏幕图标、物理遮蔽件均可),要求的是在场人员可感知且不可被关闭。
设计应用物理级指示(硬件联动的指示灯、机械快门)优于软件绘制的图标——后者的可信度取决于软件本身。
验证示例
- 用户侧:让在场的非用户判断设备当前是否在采集。
- 实现侧:检查是否存在任何配置路径可以关闭指示;检查原始数据的实际保留期与声明是否一致。
反例做不到——一个常开摄像头,没有任何在采集的迹象;做过头——屏幕上常驻一个大幅的隐私横幅,遮挡内容且用户很快学会忽略。
G7-3第三方不被当作用户必须
一句话:路过的人不触发命令,也不被默默留存。
适用采集范围可能覆盖非用户人员的产品。
规则出现在采集范围内的非用户人员,其动作禁止被识别为命令(归属判定见 G1-5),且其可识别的个人信息不得在无明确依据的情况下留存。产品必须声明第三方进入采集范围时的处置方式。共享或公共场所部署的产品,必须在部署环境中提供采集范围的可知方式,使非用户能够知道自己是否处于采集中。
依据与参考本条与 G1-5 的规范对象不同:G1-5 管"输入算谁的"(系统判定),本条管"不是用户的人被采集了怎么办"(第三方权益)。前者错了是功能问题,后者错了是权益问题。
设计应用把非用户的检测结果用于抑制误触发(他们的动作不作为输入),而不是用于识别他们是谁。
验证示例
- 用户侧:让第二人在用户身后活动,观察是否影响交互。
- 实现侧:检查非归属主体的数据是否进入持久存储;检查采集范围在部署环境中是否可被在场者知晓。
反例做不到——身后走过的人挥手换掉了正在播放的内容;做过头——为区分用户与旁人而对所有在场者做人脸识别与建档。
G7-4社会可接受度纳入设计应当
一句话:公共场合的手势不让人做起来觉得尴尬或让旁人误解。
适用可能在公共或共享场所使用的产品。
规则面向公共或共享场所的手势,其动作幅度与形态应当考虑执行者的社会成本:不应当要求用户做出在该场景中显得异常、引人注目或可能被旁人误解的动作。同一功能在私人与公共场景中应当允许不同的手势幅度(场景适配见 G7-5)。
依据与参考社会可接受度不是舒适度问题而是可用性问题——用户不会在公共场合做让自己尴尬的动作,该功能事实上不可用,且这不会体现在实验室测试中。
设计应用把公共场景的手势设计成贴近身体的小幅动作,把大幅动作留给私人场景。
验证示例
- 用户侧:在真实公共环境(而非实验室)中观察用户是否实际使用该手势。
- 实现侧:检查是否为公共场景提供了幅度更小的替代手势。
反例做不到——在地铁上要求用户举手过头挥动;做过头——把所有手势都缩小到公共场景标准,私人场景下识别率反而下降。
G7-5环境变化触发适配应当
一句话:光线、噪声、姿势变了,配置跟着变,不是一套走天下。
适用使用环境条件会显著变化的产品。
规则产品应当根据环境条件(亮度、噪声、空间尺寸、用户姿势、是否手持物品)调整识别参数、反馈通道与有效手势集。适配的触发条件与调整内容应当预先定义,并对用户可感知;禁止在用户不知情的情况下改变手势的语义映射(见 G2-2)——调整参数与调整语义是两件事。
设计应用环境适配应当作用在阈值、反馈通道和手势集大小上,不作用在手势含义上。
验证示例
- 用户侧:在明暗、安静与嘈杂条件间切换,观察用户是否需要改变自己的操作方式,以及是否被告知。
- 实现侧:检查适配是否改变了任何手势的语义绑定。
反例做不到——白天可用,晚上开灯前完全不能用,且没有提示;做过头——环境略有变化就切换整套手势集,用户永远不知道现在哪些手势有效。
G7-6不与安全关键任务争注意力必须
一句话:驾驶等场景下,手势不得要求看屏幕或长时间脱离主任务。
适用在驾驶、操作机械、医疗操作等安全关键场景中使用的产品。
规则本条保护的是正在进行的安全关键主任务,约束的是与之竞争注意力的次要手势任务。在此范围内,手势交互禁止要求用户将视觉注意力从主任务上移开,禁止要求双手同时脱离主任务控制,禁止要求持续保持超出短暂时长的姿势。此类场景的反馈必须包含非视觉通道(见 G4-4)。可用手势集必须限制在无需视觉确认即可完成的范围内;"需要选择目标"不构成统一禁令——判据是该选择是否分走主任务所需的资源(在影像判读这类本身即为视觉主任务的场合,选取目标可能并不使注意力离开主任务)。若手势直接承担安全关键主任务本身的控制,不属于本条的次要任务情形:须转由该领域的专门交互设计与功能安全评估处理,本规范不以"具备非视觉反馈"证明其适用。识别失败时,禁止要求用户持续重试;重试上限与降级条件必须由领域评估确定。无法证明重试可接受时,不追加重试,转到经评估可用的替代方式或推迟次要任务(见 G5-5)。
边界条件本条规定的是交互形态的必要条件,不替代该领域的分心评估、功能安全与法规合规专项——那些有各自的测量方法与限值,本条不给出具体的时长阈值。非视觉不等于没有认知负荷;应评估完整任务及失败恢复对主任务的影响。美国 NHTSA 官方指南目录 可定位视觉手动分心测试程序,但该指南是自愿性指导,不能直接充当所有法域或隔空手势的认证。
设计应用作为次要任务时,优先采用少量、粗粒度、无需移开主任务视线的动作;是否允许目标选择,依据完整任务对主任务注意力的影响判断。
验证示例
- 用户侧:在模拟主任务负荷条件下测量视线离开主任务的次数与时长,以及主任务绩效的变化。
- 实现侧:检查是否存在需要视觉确认才能完成的手势路径;检查失败重试策略。
反例做不到——驾驶中的手势菜单要求在中控屏上瞄准选项;做过头——提供冗长语音说明替代视觉菜单,虽然不要求看屏幕,仍持续占用主任务注意力。
4. 术语和定义
| 术语 | 本规范中的含义 |
|---|---|
| 隔空手势 | 用户在不接触输入设备的情况下,通过手部或上肢的姿势与运动向系统传达意图的输入方式。传感方案不限 |
| 参与状态(engagement) | 系统当前是否把用户的动作作为候选输入处理的状态。进入称参与,退出称脱离 |
| 分隔动作(delimiter) | 用于标记手势开始或结束的显式动作、姿势或事件,使系统能从连续运动中切分出离散命令 |
| 交互区(interaction zone) | 手势被有效采集与识别的空间体积,由传感器能力与产品设计共同决定;有边界,且边界对用户不可见 |
| 三态 | 适用的输入可用、候选锁定、动作生效三个反馈层次,不是互斥或穷尽的状态机(见 G4-1) |
| 锁定 | 当前操作的目标或全局命令已确定;具体绑定与释放时点由输入模型声明 |
| 结果未知 | 请求可能已经生效,但尚无可靠结果;不能等同失败或成功 |
| 取消 / 撤销 / 补救 | 分别阻止未提交操作、恢复可逆改变、处理已发生且无法完全恢复的后果 |
| 提交 | 动作实际生效、产生后果的时刻。提交回执必须反映实际生效的事实,而非请求发出的事实 |
| 跟踪丢失 | 系统暂时或持续无法获得有效手部数据的状态。本规范视其为正常运行状态(见 G5-1) |
| 误触发(false positive) | 用户未意图发出命令,系统识别出命令并执行 |
| 漏识别(false negative) | 用户意图发出命令,系统未识别 |
| 偏置方向 | 在误触发与漏识别之间的取舍方向。固定模型和数据下调阈值通常存在权衡,行动策略必须按后果等级显式选择(见 G5-2) |
| 米达斯之触(Midas touch) | 因缺乏输入界线,用户的一切动作都被解释为命令的失效模式。本规范以 G1 整条原则应对 |
| 悬臂疲劳(gorilla arm) | 手臂在无支撑条件下悬空操作产生的疲劳与精度衰减。本规范视其为设计约束而非用户耐力问题(见 G3-1) |
| 近场直接操作 | 用户在手可及范围内直接触碰、抓取、推动虚拟或被控对象的输入模型 |
| 远距指向 | 用户通过射线、光标或方向指示操作手不可及对象的输入模型。角度抖动随距离放大(见 G3-2) |
| 后果等级 | 对手势可触发动作的后果判断,至少考虑可逆性、影响范围、对外可见性、资金与法律承诺(见 G6-5) |
| 非手势路径 | 不依赖手势识别即可到达同一功能的入口。是无障碍底线、降级落点与产品风险兜底(见 G7-1) |
| 采集范围 | 传感器实际获取数据的空间范围。可能大于交互区,因此可能覆盖非用户(见 G7-2、G7-3) |
| 归属主体 | 当前输入被认定来自的人与手。归属的建立、保持与转移必须有显式条件(见 G1-5) |
附录 A:故障注入验证清单
对涉及识别可靠性与环境条件的规则,验证方式是故障注入:制造会破坏承诺的场景,测试失败即意味着相应承诺失效。写不出这类测试的候选规则不应进入规范。下表是示例子集而非穷尽清单。数字为故障注入样例,不是发布阈值;高后果动作只在沙盒、模拟器或测试对象上验证。
| 注入情境 | 主要检查什么 | 对应规则 |
|---|---|---|
| 用户在交互区内与他人交谈并自然比划 | 是否触发命令 | G1-4、G1-1 |
| 用户完成操作后转身静止两分钟 | 参与状态是否失活,静止是否被当作持续同意 | G1-3 |
| 连续执行同一手势三次 | 收手复位动作是否被误识别为反向命令 | G1-2 |
| 第二人走进采集范围并抬手 | 归属是否被劫持;其数据是否被留存 | G1-5、G7-3 |
| 拖动进行中把手移出视野再移回 | 是否发生外推位移或自动提交;重获后是否跳变 | G5-1 |
| 用另一只手或身体遮挡操作手 | 是否降级而非产生错误识别 | G5-1、G5-4 |
| 强逆光、暗光、频闪三种光照 | 提示是否指向用户可执行的改善动作 | G5-4、G7-5 |
| 摄像头被完全遮挡或断开 | 是否进入已定义的降级态并暴露非手势路径 | G5-5、G7-1 |
| 用户佩戴手套、有震颤或指节缺失 | 核心任务是否仍可完成 | G3-5、G7-1 |
| 在高后果手势前后紧接高频手势 | 是否被误提交 | G6-4、G6-1 |
| 静音条件下完成一次完整操作 | 三态是否仍可分辨 | G4-4、G4-1 |
| 注入接近与超过产品预算的反馈延迟 | 是否出现过冲与重复执行;是否降级为离散反馈 | G4-2 |
| 连续操作达到声明的时长上限 | 后半程执行成功率衰减与主观疲劳 | G3-1、G3-4 |
| 制造持续误触发条件(如反复经过的旁人或交流动作) | 是否在用户抱怨前自行收敛 | G6-3、G5-2 |
| 关闭全部手势输入 | 全部核心功能是否仍可达且非降级 | G7-1 |
| 在真实公共场所而非实验室观察使用 | 用户是否实际做出该手势 | G7-4 |
| 在模拟主任务负荷下使用(驾驶模拟器等) | 视线离开主任务的次数与主任务绩效变化 | G7-6 |
| 注视或指向 A 后开始手势,再移向 B | 同一次操作是否仍绑定原目标或明确取消 | G1-2、G4-1 |
| 停留中途换目标或遮挡手部 | 候选进度是否清零,丢失是否误当提交 | G1-2、G5-1 |
| 拿起控制器、失去焦点、系统菜单接管后返回 | 旧手势是否被补发,模态切换是否重复生效 | G1-5、G7-1 |
| 教学练习中执行确认手势并退出 | 是否触发真实外部后果 | G2-6 |
| 动作生效后丢弃回执,再重复确认 | 是否核对结果并防止重复生效 | G6-2 |
| 连续调节后退出再重入 | 累计影响是否绕过声明上限 | G6-3 |
| 显式关闭输入与提交条件在同一处理周期出现 | 尚未生效的操作被拦截;已发生后果如实报告 | G1-1、G4-1、G6-2 |
| 持续停留时调整时长或重新定位坐标锚 | 旧进度不直接满足新条件;恢复不跳变 | G1-2、G5-1、G7-5 |
| 同一次捏合产生选择事件、抓取事件及自定义识别结果 | 只由指定输入路径消费一次,不重复触发 | G1-5、G6-3 |
| 仅所需关节失效、坐标非空但过期、乱序帧到达 | 拒绝不合格数据,未知原因不伪装为确定诊断 | G5-1、G4-5 |
| 操作 A 的成功回执在操作 B 失败后到达 | 分别显示结果,不覆盖 B 的失败 | G4-1、G6-2 |
| 长距离操作中离合复位、双手操作丢失一手 | 不补算复位位移、不静默改变控制模型 | G1-2、G3-2 |
| 拒绝或撤回骨架数据访问、关闭诊断记录 | 标准输入可用时仍可用;无额外采集或留存 | G7-1、G7-2 |
| 高频低后果操作的完整路径计时 | 是否被停留确认与二次确认拖慢 | G4-6、G6-5、G1-6 |
最后一行不能省:否则产品可能通过全部防误触发测试,却慢到没人愿意用。除故障注入外,还应分别验证分类(不同评审者能否对具体要求独立得出相近归属)与用户价值(误触发是否真的下降、任务是否真的更快完成),三者不能互相替代。还应当用完整任务走查检验覆盖面——沿"靠近、进入交互、发现可用手势、执行、纠错、离开"过一个真实案例,检查是否存在重要设计要求无处归属。
A.1 指标与发布记录
阈值由目标产品预先定义;本表给出测量口径,不提供通用数字,也不构成一套已经通过用户验证的验收标准。
| 指标 | 测量口径 | 防止误读 |
|---|---|---|
| 自然活动误触发 | 无命令意图期间的误执行数 / 有效暴露小时;同时报告后果等级和样本时长 | 不能用“全部视频帧中的错误比例”稀释少数有害命令;零事件不证明零风险 |
| 漏识别与混淆 | 已标注的意图手势中未识别比例,以及含“无命令”类的命令混淆矩阵 | 训练、调参和最终验证数据分开;按用户隔离,避免相邻片段泄漏 |
| 任务达成与效率 | 从产生任务意图到结果确认的成功率、总时长、动作数与恢复次数 | 纳入教学、进入、误操作、重试和切换成本;与实际替代路径比较 |
| 端到端反馈 | 动作事件至可感知反馈的分布、尾部与超限比例;提交结果反馈单独测量 | 高识别帧率不等于低端到端延迟,均值不代表卡顿上限 |
| 累计体力 | 典型任务时长下的主观疲劳变化、后半程成功率与放弃情况 | 可辅以姿势与肩部负荷模型,但不能据此给出全人群安全时长 |
| 恢复与可访问性 | 丢失后恢复耗时、重复提交数、替代路径完成率与进度保留情况 | 单独覆盖左右手、坐姿、持物、目标身体差异与目标环境 |
Consumed Endurance(CHI 2014,作者机构页面) 提供基于姿势负荷估计手臂疲劳的方法;NICE(2023,作者机构摘要) 重新检验了 CE 的适用性。二者作测量方法参考,不能取代目标用户测试。
每次验证记录设备、SDK、实际配置快照、任务与用户样本、环境、预设门槛、实际结果、不适用项及处理责任人。识别器、词汇、输入路由或默认配置变化后,重验受影响旅程;不要仅用总体识别准确率作为发布依据。
A.2 验收记录与通过条件
每条适用义务分别记录:规则子句 → 场景与前置条件 → 注入事件 → 预期状态和后果 → 用户可见反馈 → 实测证据 → 结论与责任人。结论采用通过、未通过、不适用(附理由);未执行不计为通过。“应当”条款偏离时附理由与替代验证,不用总分抵消硬约束失败。
| 验证层 | 要证明什么 | 不能替代什么 |
|---|---|---|
| 文档与配置 | 适用性、字段、依赖、单位及状态转换一致 | 不证明硬件或实现已生效 |
| 实现与故障注入 | 取消、冻结、防重、数据资格和回退实际生效 | 不证明用户看懂了状态 |
| 目标用户与现场任务 | 用户能完成、纠错、退出,身体和注意力成本可接受 | 不能用一次演示代替持续使用或全部目标人群 |
自然活动误触发统计须报告暴露时间、参与人数、环境分层与不确定性,不以零事件直接宣称零风险。延迟测量注明采样事件、时钟对齐方法与终点;日志只保留证明行为所需的事实,不默认录制完整感知流。支持判断的事实不足、依赖缺失或硬约束失败时,限制或停用受影响能力;证据只对已测的设备、输入模型、用户和任务范围成立。
附录 B:论证边界与适用范围
B.1 约束词的判据
标「必须」的唯一依据是必要性:缺了这条要求,产品对用户的某条承诺会在可预见的情境下失效。判断一条规则用三类论证:
| 论证类型 | 回答的问题 | 决定什么 |
|---|---|---|
| 必要性推导 | 缺了它,哪条承诺在什么情境下失效 | 是否入选、是否标「必须」——强制性的唯一来源 |
| 失败记录 | 问题在什么条件下真实发生过 | 增强论据、校准适用条件 |
| 实现参考 | 有哪些已被验证的做法 | 证明可行、提供示例,不决定强制性 |
只有必要性论证成立的规则才标「必须」;只满足质量或效率的降为「应当」或逐出规范。具体识别算法、传感器选型与性能工程不进入规范。
B.2 适用范围与已知弱处
本规范的适用范围是:以手部或上肢的隔空动作作为输入通道之一的交互式产品,涵盖头显、车载、大屏、公共终端、家电与工业场景。它不覆盖:手势识别算法与传感器工程、手势形态本身的标准化(见 ISO/IEC 30113 系列与 ISO/IEC 14754)、无障碍专项评估、隐私与数据保护合规、车载分心的测量与限值、功能安全与领域法规。G7-6 规定交互形态的必要条件,不给出时长阈值——那属于领域专项。
如实说明三点弱处:
-
本规范未给出任何具体数值阈值。停留时长、延迟预算、置信阈值、交互区尺寸都写成"必须显式声明并验证",而不是给出数字。原因是这些值强依赖传感方案、使用距离、用户姿势与场景,现有资料不足以支持跨产品统一数值;引用的厂商数值绑定特定硬件与输入模型(见
reference.md)。这是有意的取舍,代价是本规范不能直接当作验收表使用——数值必须由各产品自行确定并纳入 Design Token。 -
失败论证主要是可预见反例、平台警告与场景研究。未取得足以支撑项目失败归因的一手复盘,不把产品退场归因于某一交互缺陷,也不把模拟反例写成已发生事故。来源及读取范围见
reference.md。 -
本规范的原则切分未经外部评审者的分类检验。互斥与穷尽目前仍是待检验的主张。已知的两处高风险边界:G1-5(输入归属)与 G7-3(第三方处置)的划分、G4-5(边界可感知)与 G5-4(识别条件告知)的划分。这两处在实际评审中若反复出现归属分歧,应当调整原则切分而非增加交叉引用。
B.3 待验证议题
以下问题尚需完整任务走查检验,不作为独立规则:
- 手势集跨产品一致性:平台内的既有约定与冲突复核已由 G2-3、G2-4 承载;现有资料不足以支持跨所有平台的统一手势词典。
- 多用户同时反馈:暂由 G1-5 与 G4-1 共同承载。仅在明确支持多人同时交互的产品中才成为独立义务。
- 误触发后果的对外可见性:暂由 G6-3 的后果上限承载。走查发现承载不足时按附录 A 的分类检验升格。
外部来源对照见同目录 reference.md。
实施验收场景
以下场景把已有条款转成可复核的验收输入,不另设通用性能阈值。按产品适用能力选取,补充真实设备、用户、输入序列和证据;不适用记录原因,未执行不得记为通过。
| 条款 | 测试输入与异常 | 预期行为与失败判据 |
|---|---|---|
| G1-5 | A 锁定目标后 B 的手进入;A 的手短暂丢失。 | B 不继承控制,A 恢复时重新核对当前操作。 |
| G5-1 | 最后一帧仍指向按钮,但追踪已断流。 | 冻结或取消受影响操作,不继续积累提交条件。 |
| G3-4 | 持续任务中加入休息、支持姿势及非手势替代。 | 分别记录疲劳与任务完成,不以短时识别率代替长任务验证。 |
每个场景分别核对配置的有效值、执行记录与用户可理解的结果。保留版本、目标、事件时点、失败范围和恢复结果;外部结果未知不填作成功或失败。
使用说明
本字典把隔空手势产品必须作出的交互决策写成可配置、可解析、可交付给工程的字段。它配套《隔空手势交互设计规范》(同目录 Design-Guidelines.md,下称"规范"):规范规定行为性质,本字典规定这些性质在产品中被表达为哪些具体决定。
本字典与视觉 Design Token 是两类东西。颜色、字号、间距描述的是渲染结果;这里的字段描述的是交互契约——什么算输入、多不确定时停下、丢失时怎么办、什么后果不能由一个手势承担。DTCG Format Module 已定义 number、动画 duration 等基础类型,但没有定义参与、仲裁、取消与后果放行的业务语义。本字典是交互契约词汇表,并非现成的 DTCG 兼容 Schema;基础数值可按语义适配,结构与枚举仍需产品定义 Schema、校验及分发方式。
十类速览
| 类别 | 前缀 | 必选 | 可选 | 合计 | 负责什么 |
|---|---|---|---|---|---|
| 参与 | gesture.engagement | 3 | 6 | 9 | 什么时候开始听、什么时候不再听、听谁的 |
| 交互区 | gesture.zone | 3 | 2 | 5 | 在哪块空间里有效、边界怎么表现 |
| 手势集 | gesture.vocabulary | 2 | 7 | 9 | 有哪些手势、各自什么意思、能不能改 |
| 识别 | gesture.recognition | 4 | 4 | 8 | 多不确定算不确定、往哪边偏、丢了怎么办 |
| 时间 | gesture.timing | 3 | 5 | 8 | 多快算响应、多久算确认、多久算一次 |
| 反馈 | gesture.feedback | 3 | 4 | 7 | 三态各用什么通道、多快、多响 |
| 体力 | gesture.effort | 2 | 3 | 5 | 允许用户付出多少身体代价 |
| 后果 | gesture.commitment | 4 | 3 | 7 | 哪些动作能由手势直接提交、错了怎么收 |
| 回退 | gesture.fallback | 2 | 3 | 5 | 不用手势怎么办、什么时候自动退 |
| 情境 | gesture.context | 3 | 4 | 7 | 在什么场景下适用、旁人怎么处置 |
共 70 个字段:29 个基础必选,41 个按能力选用;可选字段启用后仍须满足其必填条件。计数只统计十类字段表,不把结构成员与运行事实算作新字段。
必选与可选
| 级别 | 含义 | 配置方式 |
|---|---|---|
| 必选 | 适用的产品或场景必须明确的基础决策。 | 可以继承产品预设,也可以用合法的关闭、空范围或单一取值表达限制;不要求用户逐项填写。 |
| 可选 | 仅在特定能力或差异化需求下采用的参数。 | 无对应能力时不配置;启用能力后,必要依赖必须有明确值或可执行的继承规则(见第十一节)。 |
数值约定
本字典不提供任何推荐数值。停留时长、延迟预算、置信阈值、交互区尺寸都强依赖传感方案、使用距离、用户姿势与场景,现有依据不足以支持跨产品通用值。字段规定的是"必须有一个可解析的值"以及该值的合法形态与约束关系,具体数字由各产品自行确定并验证(测量口径见规范附录 A.1)。平台数值须记录来源、适用条件与输入模型,不直接迁移为全设备默认值。
时长带单位;距离与角度带单位与参考坐标系;频率带单位。集合不默认全选。多个硬限制同时生效时取共同允许的范围,不按"后配置覆盖前配置"放宽保护;取交集为空时明确停用该能力或转入替代路径,不在各层取值之间随意选一个。
每份配置须记录:适用的设备/SDK/输入模型、决策责任人、每个值的来源或标定记录、覆盖来源,以及生效点。运行中的操作关联实际使用的配置快照,不能只保留一份后来已被覆盖的设置。
生效点按变更性质分三档:普通偏好在下一次操作生效;保护性收紧(关闭手势输入、缩小可用集、提高确认要求)立即生效,并阻止尚未生效的动作;会改变识别判据或空间基准的调整(阈值、保持时长、坐标锚、体积)取消受影响的候选,或明确要求重新建立基准——不得让旧的进度在配置改变后自动满足新的提交条件。
五种情况分别表达,不互相代替:缺失(条件必选而未配置 → 拒绝启用受影响能力);显式关闭(取该字段定义的合法关闭值);不适用(给出适用性证据);平台托管(引用可核对的平台输入合同,并声明本产品无法独立解析的部分);未知或未验证(限制相应能力,不伪装为默认值)。
决策权与解析顺序
| 决策来源 | 可以决定什么 | 生效与限制 |
|---|---|---|
| 设备与平台输入合同 | 数据有效性、保留手势、能力范围 | 不可由产品或用户偏好覆盖;变化后重新核验能力 |
| 产品预设 | 按场景选择手势、映射、反馈和恢复策略 | 给出选择依据,不要求用户填写整份字典 |
| 部署约束 | 可用区域、旁观者处置、任务后果与硬上限 | 对硬限制取交集,冲突则停用受影响能力 |
| 用户偏好 | 惯用手、可达幅度、节奏、已支持的反馈通道 | 在已验证范围内调整,不绕过确认和真实后果限制 |
| 本次操作 | 对象、输入归属和当前场景 | 是运行事实,依照策略求值,不能改写规则 |
先检查适用能力和平台约束,再解析继承及硬限制,最后在允许范围内采用用户偏好。引用无目标、引用成环、同层冲突、类型错误或未知字段均应报告具体位置并拒绝启用受影响能力,不静默回落到较宽松默认值。普通调整在下一次操作生效;关闭输入等保护收紧立即拦截尚未生效操作,已发生的后果仍按实际状态处理。
机器表示与非数值状态
完整字段名是键;时长采用 { "value": 300, "unit": "ms" } 这类量值结构,距离与角度附坐标参照;数值必须有限,NaN、无穷值及把 "300ms" 当任意文本均不满足量值约定。此处数字仅解释表示方式。枚举和结构需建立明确的机器值映射,不能让工程从自然语言自由猜测。
字段外的配置记录使用 status 区分 resolved(已解析)、not_applicable(不适用)、managed(平台托管)、unverified(未验证);它们不是新增 Token。resolved 附 value,其余分别附理由、可核对的合同或待验证项;禁止用 null 同时代表这几种情况。合法的关闭值仍是 resolved,例如 dwell.duration 的“不使用”;缺失则没有记录,不等于合法关闭。影响本次任务的 unverified 项未解决前不得启用相关能力。
运行事实(当前目标、手坐标、置信分数、已累计停留时长和结果回执)不存入 Token 默认值。保留期、进度重置规则和结果显示策略才是可配置决定。
后果等级:贯穿全字典的分级轴
多个类别的字段按后果等级分档,而不是取单一全局值。产品必须先定义后果等级,其余分档字段才有意义。最小可用的三级划分:
| 等级 | 判据 | 典型动作 |
|---|---|---|
| L1 可逆低影响 | 产品内可完整恢复,仅影响用户当前本地操作,不对其他人、外部系统或现实设备产生重要影响 | 翻页、音量、滚动、切换视图 |
| L2 可逆高影响 | 可恢复但恢复有成本,或本地影响范围较大,且不满足 L3 条件 | 批量选择、移动文件、修改设置 |
| L3 不可逆或对外 | 产品内不可完整恢复,或向其他人、外部系统提交结果、改变权限或产生不可轻易撤回的现实影响 | 删除、发送、发布、支付、权限变更 |
同一功能在不同情境下可能分级不同:例如个人播放器调音量与公共广播调音量的外部影响不同;“用户能看到对象移动”本身不算对外提交,可恢复删除与永久删除也不同。先按具体后果分级,不按动词硬编码。
产品可以细分更多等级,但必须能把每个手势条目所指向的实际动作在当前情境下映射到某一级(见 gesture.commitment.risk.mapping)。
状态与对象的边界
| 对象 | 负责什么 | 关键边界 |
|---|---|---|
| 参与状态 | 系统当前是否把用户动作作为候选输入 | 与"手是否在采集范围内"不是同一件事;参与会过期(见规范 G1-3) |
| 归属主体 | 当前输入被认定来自哪个人、哪只手 | 与"采集范围内有几个人"不是同一件事;非归属主体不作为输入源(见规范 G7-3) |
| 交互区 | 手势有效的空间体积 | 通常小于采集范围;边界对用户不可见,因此必须被反馈(见规范 G4-5) |
| 采集范围 | 传感器实际获取数据的空间范围 | 可能覆盖非用户;其可见性与保留策略独立配置(见 gesture.context) |
| 三态 | 适用的输入可用/目标或命令锁定/动作生效三个反馈层次 | 不是完整状态机;全局命令与没有候选阶段的交互按规范 G4-1 声明适用性 |
| 操作实例 | 一次操作的主体、目标、内容快照、阶段与结果 | 标识、时间戳、原始分数及当前进度是运行数据,不是 Token |
| 异步结果 | 处理中、成功、失败、未知、已取消 | 请求收到不等于生效;结果未知先核对,防重见规范 G6-2 |
字段读取约定
每节前缀与表中的字段拼接为完整名称,例如 gesture.timing 与 dwell.duration 组成 gesture.timing.dwell.duration。十类统一使用 级别、设计决定、字段、类型与合法取值、适用条件与作用 五列。
一、参与:什么时候开始听、什么时候不再听、听谁的
前缀:gesture.engagement
| 级别 | 设计决定 | Token 字段 | 类型与合法取值 | 适用条件与作用 |
|---|---|---|---|---|
| 必选 | 进入条件 | enter.trigger | 集合:显式分隔动作/进入指定空间体积/注意力锚(注视或身体朝向)/异模态触发(语音、按键、触摸)/低后果免显式进入。多项必须声明 all/any/明确布尔组合,不默认任一满足即可。取"低后果免显式进入"时:该能力可以持续可用,但每一次命令仍须满足已定义的空间、分段与主体条件,形成操作级的参与——不得存在恒真的进入条件;此时若不存在跨动作的参与会话,idle.timeout 记"不适用";commitment.direct_commit.allow 中的动作在当前条件下必须全部判为 L1。用户显式关闭手势输入优先于一切自动进入。 | 定义什么条件下系统开始把动作当作候选输入。这是抑制误触发最有效的一层,不能靠提高识别阈值替代。 |
| 必选 | 脱离条件 | exit.trigger | 集合:显式分隔动作/离开交互区/无有效动作超时/注意力离开/切换到其他模态。必须至少包含一项用户可主动执行的方式,存在跨动作参与会话时必须包含超时;仅操作级参与时由 timing.gesture.timeout 终止未完成动作。 | 定义什么条件下系统停止接收。缺少用户可主动执行的方式,用户就无法"下班"。 |
| 必选 | 参与超时 | idle.timeout | 正时长,或按后果等级分档的时长集合;不存在跨动作参与会话时记"不适用";其余情况下无上限或缺省不合法。存在参与会话时,超时必须真正失活:重新进入须重新满足已定义的进入条件,不得因旧条件恒真而在下一帧自动恢复,失活前的候选与连续操作一并作废。 | 无有效动作后自动脱离的时限。静止不等于持续同意(规范 G1-3)。 |
| 可选 | 注意力锚要求 | attention.required | 枚举:不要求/进入时要求/持续要求。取"持续要求"时必须同时声明注意力丢失的宽限时长。 | 需要用注视或身体朝向作为命令判据时配置。显著降低误触发,但提高使用成本。 |
| 可选 | 归属仲裁 | subject.arbitration | 枚举:不支持多人(第二人出现时不转移归属)/首个进入者优先/最近显式进入者优先/绑定指定主体。禁止取"距离最近者自动优先"这类隐式转移。 | 采集范围可能出现多人时配置。归属转移必须有显式条件(规范 G1-5)。 |
| 可选 | 手别绑定 | hand.binding | 枚举:任一手(每次操作绑定一只)/绑定单手直到脱离/双手独立/主手加辅手。取"绑定单手"时,另一只手的动作在绑定期间不作为输入。 | 双手可能同时进入交互区时配置。避免系统在两只手之间跳变。 |
| 可选 | 重入宽限 | reenter.grace | 正时长,或不启用。启用时该时长必须有限且显式。 | 短时内允许简化进入步骤,但不省略主体、目标与当前授权校验,也不恢复旧确认进度。降低反复参与的成本,但延长了误触发的暴露窗口。 |
| 可选 | 输入角色与仲裁 | input.routing | 结构:各模态及平台事件/自定义识别负责的目标选择/操作/确认角色、同一物理动作的事件归一、竞争优先级、切换条件与同一意图防重规则。 | 多模态同时可用或同一动作有多个事件源时必填;不以最近输入自动夺取正在操作的目标(规范 G1-5)。 |
| 可选 | 生命周期中断 | suspend.policy | 映射:失去焦点/系统接管/休眠/权限撤回 → 取消候选或挂起连续操作;含恢复前主体、目标与参与条件校验。禁止补发旧提交事件。 | 平台可中断应用时必填;范围含重入宽限,后者不能绕过重新校验。 |
边界:进入与脱离决定输入的界线;归属与手别决定这条界线之内听谁的。任何"始终接收"的配置都必须由 gesture.commitment 一侧的约束兜底。
二、交互区:在哪块空间里有效、边界怎么表现
前缀:gesture.zone
| 级别 | 设计决定 | Token 字段 | 类型与合法取值 | 适用条件与作用 |
|---|---|---|---|---|
| 必选 | 有效体积 | volume | 结构:原点、轴向、单位、形状及其参数、最近与最远距离、水平与垂直角度或尺寸范围、边界是否含等号、随锚移动与重定位时的处置,附参考坐标系。须可解析到具体数值,不接受"传感器视场内"这类引用;由平台托管标准输入而应用无法取得具体有效体积时,引用"平台+标准组件或输入合同"并如实声明不能独立数值解析的部分——但不得据此伪造一个传感器范围。 | 定义手势有效的空间。与传感器规格不是同一件事——产品可以、且通常应当小于传感器能力上限。 |
| 必选 | 坐标锚 | anchor | 枚举:设备锚/身体锚(头、躯干或肩)/世界锚/被操作对象锚。 | 决定交互区随什么移动。用户转身或走动时的行为完全由这一项决定,选错会表现为"有时能用有时不能用"。 |
| 必选 | 边缘行为 | edge.behavior | 枚举:渐进提示后脱离/硬边界立即脱离并提示/边缘吸附保持。三者均须伴随可感知反馈;禁止静默失效。取"硬边界立即脱离"时,接近边界的提前提示由 feedback.edge.warning 承担,不因本档为"立即"而免除。取"边缘吸附保持"时,吸附只在跟踪仍然有效的范围内成立,或仅冻结显示;真实的跟踪丢失优先按 recognition.tracking_loss.behavior 与 G5-1 处理,吸附不得据此继续推进操作。 | 定义接近与越过边界时发生什么。越界与识别失败必须可区分(规范 G4-5)。 |
| 可选 | 舒适子区 | comfort_volume | 结构,格式同 volume,且必须是 volume 的子集(允许相等)。 | 声明高频操作应落入的子体积,用于校验主路径未把常用操作放在体积边缘或需要伸展的位置(配合 effort.primary.budget)。 |
| 可选 | 近远场阈值 | near_far.threshold | 结构:被测距离、坐标参照、进入近场的正距离阈值及比较符、退回远场的正距离阈值及比较符;进入近场阈值必须小于退出近场阈值,中间区域保持原模型。与 timing.hysteresis 引用同一判据,不维护两套数值。 | 提供近场直接操作与远距指向两种输入模型时配置。缺少滞回会在阈值附近反复切换模型。 |
边界:体积与坐标锚决定"在哪里有效";边缘行为决定"不再有效时用户怎么知道"。舒适子区不改变有效范围,只用于校验主路径。
三、手势集:有哪些手势、各自什么意思、能不能改
前缀:gesture.vocabulary
| 级别 | 设计决定 | Token 字段 | 类型与合法取值 | 适用条件与作用 |
|---|---|---|---|---|
| 必选 | 手势条目 | items | 集合;每项含标识、形态描述、语义绑定、适用情境、起止与复位条件、后果等级引用、发现方式(对象可供性/教学/文档)。主路径手势的发现方式不得取"文档"。 | 手势集的定义本身。后果等级引用使本表与 commitment.risk.mapping 保持一致。 |
| 必选 | 同时有效上限 | size.max | 正整数;指同一情境下同时有效的手势数量上限,不是全产品手势总数。 | 记忆预算的硬约束。超出上限意味着未满足声明的学习与识别预算(规范 G2-1)。 |
| 可选 | 情境复用 | context.overloading | 结构:允许复用的形态列表,每项须声明用户可感知的情境区分依据。区分依据不得仅为"用户记得当前模式"。 | 同一形态在不同情境承担不同语义时配置。这是模式混淆的主要来源,必须显式登记。 |
| 可选 | 同义手势 | aliases | 映射:多个形态指向同一语义。同义项之间的后果等级必须一致;同时有效的不同形态均计入 size.max。 | 为身体条件或习惯差异提供多种做法时配置。不减少同时有效形态的计数。 |
| 可选 | 自定义范围 | customization.scope | 枚举:不可改/可关闭个别手势/可重映射/可新增。任何取值均不得降低同一实际后果所对应的等级,也不得绕过 commitment 的约束;新增或重映射形态不改变其所引用的业务动作等级。 | 手势与用户日常动作冲突时的出口。关闭后功能仍须由 fallback.alternative.path 保证可达。 |
| 可选 | 教学重入 | tutorial.reentry | 枚举:无/仅首次引导/使用现场可随时重入。含姿势型手势的产品不应取前两者。 | 需要学习的手势的再学习入口。识别连续失败是自然的触发时机。 |
| 可选 | 目标绑定与取消 | target.binding | 按操作类型声明:目标来源、绑定时点、释放与取消条件、目标消失或变更处置;全局命令显式声明无空间目标。 | 面向对象的操作或含候选阶段时必填;手势途中不静默换目标,停留累计不跨目标(规范 G1-2)。 |
| 可选 | 平台冲突约束 | platform.conflicts | 结构:平台及输入模型、系统保留手势及冲突清单、冲突处置与复核条件。 | 自定义或重映射时必填;不拦截系统退出、接管或辅助技术控制(规范 G2-3)。 |
| 可选 | 连续控制映射 | control.mapping | 按动作声明位置/位移/速度控制、坐标参照与轴向、单位、增益或曲线、限幅、死区与吸附(不使用也需明确)、生效时点、有效释放后的停止或惯性、离合复位与重建基准;双手操作附角色及单手丢失策略。平台托管时引用对应输入合同与可观测行为。 | 存在连续控制时必填;与 target.binding 共享目标,跟踪丢失仍由 recognition.tracking_loss.* 处理,不把松手复位位移或丢失当成有效提交(规范 G1-2)。 |
边界:条目与上限决定手势集的规模;情境复用与自定义决定它在运行时如何变化。形态的变化不改变业务动作的后果等级——等级由第八节的 risk.mapping 按当前动作、对象与累计影响解析,同一手势在不同情境下可能解析到不同等级。
四、识别:多不确定算不确定、往哪边偏、丢了怎么办
前缀:gesture.recognition
| 级别 | 设计决定 | Token 字段 | 类型与合法取值 | 适用条件与作用 |
|---|---|---|---|---|
| 必选 | 输入有效性判据 | input.validity.policy | 结构:按操作类型声明所需的信号(关节、方向或标准输入事件)、平台有效性与跟踪标记如何解读、数据的最大可接受年龄、部分丢失时的处置、依据来源与适用条件。有数值不等于有效;失效后的平滑、旧值与外推只用于显示,不恢复操作或提交资格;已通过有效性判断的正常姿态估计不因其为估计而被禁止。平台未提供某类标记时,引用真实提供的数据有效性或标准事件合同,不伪造标记。实际标记、采样时刻与关节位置是运行事实,不作为本字典的取值。 | 决定"什么数据算数";缺此项时实现只能凭坐标是否非空判断(规范 G5-1、G4-5)。 |
| 必选 | 置信阈值与分级放行 | confidence.threshold | 按后果等级引用识别器标识与适用条件、分数定义、阈值或平台判定、额外确认策略与验证记录。可共享基础阈值,但不得以未经验证的全局阈值放行全部后果。低置信时的表现按状态分别声明:已绑定目标的操作可维持当前值待辨识,尚未确定命令的候选不得被呈现为"已锁定",可保持为候选或转入显式选择。 | 原始分数不能跨模型比较;更高阈值不等于更低业务风险,L3 仍需确认(规范 G5-2)。 |
| 必选 | 偏置方向 | bias | 按后果等级分档的枚举:偏保守(宁可漏)/中性/偏灵敏(宁可误)。L3 禁止取偏灵敏。 | 误触发与漏识别之间的取舍。这是设计决定,不能仅由算法默认值代替(规范 G5-2)。 |
| 必选 | 跟踪丢失行为 | tracking_loss.behavior | 按操作类型分档的枚举:冻结当前值并提示/回滚到操作起点/在宽限时长内等待重获。禁止取"以最后帧数据继续推进";禁止在丢失后自动提交。 | 丢失是常态而非异常。外推最后一帧会产生用户完全没做出的大幅动作(规范 G5-1)。 |
| 可选 | 丢失宽限 | tracking_loss.grace | 正时长,可按操作类型分档。tracking_loss.behavior 取"等待重获"时为必填。 | 短暂遮挡与真正离开的分界。过短会频繁打断,过长会延长不确定状态。 |
| 可选 | 降级顺序 | degradation.order | 有序集合:降低精度要求/缩小同时有效手势集/改用粗粒度手势/切换模态/停止手势输入。末级必须落在 fallback.alternative.path 上。仅含"停止手势输入 → 转可用替代"的路径也是合法配置,不要求实现全部层级;可引用平台既有的降级策略。 | 识别能力可能下降的产品必须配置(即绝大多数):必须预先定义顺序,不在运行时临时决定;没有自动模态切换不等于不需要降级定义(规范 G5-5)。 |
| 可选 | 识别条件提示 | condition.hints | 集合:光照不足/逆光/遮挡/过近/过远/动作过快/佩戴物。每项须绑定可核对的诊断依据和一条用户可执行的改善动作;无法确定原因时只报输入不可用或原因未知。空集合不取消规范 G5-4 的告知要求。 | 让识别下降的原因变成用户能动手改的事,而不是一句"未识别到手势"。 |
| 可选 | 重获接续 | tracking_loss.resume | 枚举:取消并重新开始/同一主体与目标校验后重新建立控制基准;含宽限到期处置。禁止沿用旧位移基准导致跳变。 | 支持丢失后接续时必填;恢复跟踪不自动恢复提交资格(规范 G5-1)。 |
边界:阈值与偏置决定"信不信这次识别";丢失行为与降级顺序决定"信不了的时候做什么"。按后果或操作类型明确决策,允许继承相同基础值,但不能省略适用性与后果分级验证。
五、时间:多快算响应、多久算确认、多久算一次
前缀:gesture.timing
本类是全字典中最直接可被工程消费的一类——由可标定的数值与时间/状态策略共同构成(dwell.reset、hysteresis 与 gesture.timeout 为结构化策略,不是单一数字)。
| 级别 | 设计决定 | Token 字段 | 类型与合法取值 | 适用条件与作用 |
|---|---|---|---|---|
| 必选 | 反馈延迟预算 | latency.budget | 按反馈类型分档的正时长:跟随性反馈/状态切换反馈/提交确认反馈。分别定义事件起点、反馈终点与超限判据,按输入模型验证。 | 自动作发生至用户可感知反馈的端到端上限。超限时的行为由 feedback.latency.overrun 定义。 |
| 必选 | 防抖窗口 | debounce.window | 非负时长,可按手势条目分档;须声明起计事件、作用域(同一主体、同一命令类别);取消、关闭与安全退出不受冷却阻塞。允许 0,表示不设额外冷却,但不因此取消 G1-2 的分段与防重义务。 | 同一手势被再次识别前的最短间隔,用于抑制单次动作被切分为多次命令。反向的收手动作属于另一类别,由分段与复位条件处理,本字段不承诺阻止它。 |
| 必选 | 手势超时 | gesture.timeout | 结构:候选时限、连续控制时长预算与到期处置,时限均为正时长;须区分两类:未完成候选的识别时限(到期即作废),与已进入有效连续控制的时长预算(到期按本字段声明的暂停或取消策略处理)。同一到期事件不得自动提交一次连续操作。 | 一次手势开始后未完成即作废的时限。缺少此项会让未完成的动作无限期挂起,与后续动作粘连。 |
| 可选 | 停留时长 | dwell.duration | 正时长或不使用。使用时配置可感知进度及 dwell.reset;按目标用户可调整,且不得绕过高后果确认。 | 停留判定须限定参与条件,不把普通观察默认当成命令(规范 G1-2、G3-5)。 |
| 可选 | 保持确认时长 | hold.duration | 正时长,仅为保持确认的时间参数。启用时须一并绑定:确认对象、进入保持状态的独立意图事件、计时起点、姿态容差、取消/失活/跟踪丢失时的重置规则、以及可感知的进度反馈。 | 采用保持方式确认时配置,不要求高后果动作一律保持。时长本身不独立证明意图——持续姿势也可能来自持物或休息;不得仅以延长一个高频姿势来满足 G6-1 与 G6-4。 |
| 可选 | 重复速率 | repeat.rate | 结构:非负首次触发延迟 + 正重复间隔或正频率、最大连续次数或累计影响限制、结束条件;退出、取消、失效时停止重复,不把保持重复映射为高后果确认。 | 支持按住连发类交互时配置(连续滚动、连续调节)。 |
| 可选 | 状态滞回 | hysteresis | 集合;每项含:状态对、被测量的量、量纲、参考坐标、进入的比较符与阈值、退出的比较符与阈值、初始状态及中间区域行为——滞回区间由两个阈值算出,而不是只给一个差值(差值不能确定在哪个绝对值上切换、也不能确定增大还是减小时进入)。仅当存在阈值边界且选择以滞回抑制抖动时必填;采用其他已验证去抖机制的可引用其策略,不硬塞一个数值差。 | 在阈值附近抑制状态抖动。未采用滞回或其他稳定机制时,边界可能反复切换,涉及 zone.near_far.threshold、三态切换与置信阈值。 |
| 可选 | 停留重置 | dwell.reset | 结构:离开目标、目标变更、取消、失活或跟踪丢失时清零;若允许短暂抖动宽限,须限定同一主体与目标、定义宽限且期间暂停累计。 | 启用停留时必填,避免跨目标继承进度或遮挡时仍倒计时。 |
边界:延迟预算约束系统的响应速度;停留、保持与重复约束用户的付出时间。两者都需同时验证识别质量、可用性与后果,不能单独优化一个数字。
六、反馈:三态各用什么通道、多快、多响
前缀:gesture.feedback
| 级别 | 设计决定 | Token 字段 | 类型与合法取值 | 适用条件与作用 |
|---|---|---|---|---|
| 必选 | 反馈层次通道分配 | state.channels | 为适用的在范围/已锁定/已提交分配视觉/听觉/触觉/中空触觉/对象变化;不适用项附理由,不虚构停留步骤。形式以目标用户可辨识性验证,不限制为不同元素。 | 输入可用不等于已参与;异步任务另配 result.channels,详见规范 G4-1。 |
| 必选 | 超限行为 | latency.overrun | 按反馈类别的结构:display_action(显示侧如何降级:离散状态指示/暂停跟随并提示)、control_action(业务侧是否继续接受新增更新)、pending_delta(超限期间的位移如何处置:丢弃,或保留并声明其范围)、recovery_condition(恢复的判据与是否重建控制基准)。禁止取"无反馈";跟随性反馈超限时禁止继续以跟随形式呈现。无法提供可供闭环判断的当前量时,control_action 必须为"暂停新增业务更新"——不得只停显示而继续累计不可见输入;仍有经验证可靠的对象自身反馈通道时可继续。 | 延迟超出 timing.latency.budget 时做什么。滞后的跟随比没有跟随更具误导性。 |
| 必选 | 非视觉通道要求 | nonvisual.required | 枚举:不要求/要求至少一条/要求可完全脱离视觉完成。产品声明允许用户在视线不在显示区域时完成某项操作的,该操作实际所需的每一项状态都必须有可用的非视觉通道——"至少一条"不满足只覆盖起始音效而仍要求看目标的情形。context.safety_critical.mode 为"限制手势集且禁止视觉依赖"时,禁止取"不要求",并须另行校验整条任务无需视觉依赖;完全禁用手势时不强迫配置手势反馈。 | 用户视线不在显示区域时的可用性。隔空手势最有价值的场景恰恰对视觉反馈依赖最低。 |
| 可选 | 连续量读出 | continuous.readout | 枚举:无/相对量/绝对值/被控对象自身;注明读出表示预览值还是实际生效值。存在连续控制时不得取"无"。 | 拖动、缩放、调节期间的当前值反馈。缺失会导致用户只能靠试错逼近目标。 |
| 可选 | 边界提示 | edge.warning | 结构:提前量(距离或时长)+ 通道 + 是否指示方向。 | 接近交互区边界时的渐进提示。与越界后的 zone.edge.behavior 是两件事,前者在发生前,后者在发生时。 |
| 可选 | 反馈强度分档 | intensity | 按后果等级分档的强度值。醒目级别的占比应有上限并可校验。 | 让醒目反馈留给真正重要的状态切换。全部同等醒目等于全部沦为背景噪声(规范 G4-6)。 |
| 可选 | 结果状态反馈 | result.channels | 为处理中/失败/未知/已取消/成功声明反馈、可用控制与优先级;未决状态不能被旧成功覆盖。 | 存在异步执行时必填;成功基于真实结果,未知不伪装失败以诱导重试。 |
边界:通道分配与超限行为保证状态可感知;强度分档保证可感知不等于被淹没。两者是同一原则的两侧,配置时必须一起看。
七、体力:允许用户付出多少身体代价
前缀:gesture.effort
| 级别 | 设计决定 | Token 字段 | 类型与合法取值 | 适用条件与作用 |
|---|---|---|---|---|
| 必选 | 主路径动作预算 | primary.budget | 结构:单次动作最大幅度、抬手高度上限(相对肩部)、是否允许过肩、单次姿势保持时长上限、幅度与高度的测量基准、预计重复频率及使用时长。高频主路径的 allow_above_shoulder 必须为假;低频动作若确需更大幅度,按动作类别显式分开声明其独立预算。高频操作不得超出该预算。本字典不给出角度或时长数值。 | 把身体代价当作与延迟预算同级的硬约束。悬臂疲劳是设计问题,不是用户耐力问题(规范 G3-1)。 |
| 必选 | 精度档位 | precision.level | 按输入模型(近场/远场)分档的枚举:粗(区域级)/中(大目标)/细(点级)。每一档须引用本产品的目标尺寸、最小间距、允许误差与其验证结果——档位名称本身不构成规格。无支撑条件下禁止把"细"作为主路径。 | 目标尺寸与调节分辨率的上位约束。远距指向的角度抖动随距离放大,同一档位在两种模型下含义不同。 |
| 可选 | 单手可完成 | one_handed | 布尔。为真时全部主路径单手可达,且左右手对称可用。 | 用户另一只手可能被占用时配置。验证左右手均可完成;不要求每只手使用完全相同的底层数值。 |
| 可选 | 连续使用上限 | session.max_duration | 正时长。超过时须触发支撑姿势提示、分段完成或模态切换之一。 | 长时任务的疲劳边界。禁止存在必须持续保持姿势才能维持的状态(规范 G3-4)。 |
| 可选 | 支撑姿势 | supported_posture | 枚举:不支持/允许肘部支撑/允许贴近身体的小幅动作/二者皆可。 | 允许用户以更省力的姿势操作时配置。同时约束识别模型必须覆盖这些姿势下的手部朝向。 |
边界:动作预算与精度档位约束单次成本;连续上限与支撑姿势约束累计成本。两者都不可由"用户可以适应"来豁免。
八、后果:哪些动作能由手势直接提交、错了怎么收
前缀:gesture.commitment
| 级别 | 设计决定 | Token 字段 | 类型与合法取值 | 适用条件与作用 |
|---|---|---|---|---|
| 必选 | 后果等级映射 | risk.mapping | 结构:以业务动作及其后果条件为主键的分级规则;vocabulary.items 中的条目引用该规则,而不是由手势形态唯一决定等级。执行前按当前动作、当前对象或上下文、以及累计影响解析出有效等级。后果固定的动作可用常量映射;后果随情境变化的须列出判据(个人播放对公共广播、可恢复删除对永久删除)。规则缺失、多条规则重叠冲突或无法判定时,不得按最低等级直接提交,转入已定义的确认或替代路径。不得留空;新增手势必须同时给出其所引用的规则。自定义与重映射不得降低同一实际后果的等级。 | 全字典的分级基准。识别阈值、偏置方向、反馈强度、提交路径都由它派生。 |
| 必选 | 直接提交白名单 | direct_commit.allow | 集合:允许由单次手势直接提交的动作标识或策略引用(L1/L2/L3 是准入条件,不是本集合的元素,不与动作标识混列)。集合中的动作在当前条件下须判为 L1,或判为 L2 且有与其后果相称的防误触发、影响上限和恢复验证;L2 不因可撤销而默认入选;L3 动作在任何条件下禁止进入该集合;缺少 risk.mapping 规则的动作不得进入该集合。不替代平台身份验证与权限检查。 | 手势与后果之间的耦合强度。误触发在这个模态里是常态,因此保护的是后果规模而非识别准确率。 |
| 必选 | 撤销窗口与范围 | undo.window | 按动作分档的正时长、恢复范围与非手势入口;确实不可撤销时声明不适用,并由 second_channel 覆盖提交前确认。 | 区分未生效请求的取消与已生效改变的撤销;保护其他入口的后续有效修改(规范 G6-2)。 |
| 可选 | 确认通道 | second_channel | 按动作分档:无/同模态显式确认手势/异模态(语音、按键、触摸)/人工操作。L3 不得取无;确认绑定对象、内容、当前状态、后果及失效条件。 | L3 能力启用时必填;手势确认与高频手势的形态差异须经测量,真实撤销不能豁免外部后果的确认。 |
| 可选 | 误触发监测预算 | false_positive.budget | 结构:观测信号、单位暴露时间的误触发门槛、统计窗口、收敛动作与恢复条件。在线可用连续撤销等代理信号,但须与标注后的真实误触发区分。 | 启用命令手势时必须解析;单次及累计影响硬上限由 impact.limits 承担。 |
| 必选 | 影响上限 | impact.limits | 结构:按动作的单次与累计上限、指标单位、主体与资源范围、时间窗口及达到上限的处置。重新参与或切换模态不能清空累计账目。 | 将规范 G6-3 的后果上限落实成配置;观测到的误触发率不能替代影响限幅。 |
| 可选 | 未知结果与重复输入 | result.recovery | 结构:核对入口、结果查询时限、防重复生效规则、无法核对时的停止与交接路径。 | 存在异步副作用时必填;请求超时不能直接判作失败并重发(规范 G6-2)。 |
边界:等级映射决定放行策略;直接提交与确认控制生效前的边界,撤销与结果核对处理生效后的情况,影响上限约束单次及累计后果。它们不能互相替代。
九、回退:不用手势怎么办、什么时候自动退
前缀:gesture.fallback
| 级别 | 设计决定 | Token 字段 | 类型与合法取值 | 适用条件与作用 |
|---|---|---|---|---|
| 必选 | 非手势路径 | alternative.path | 结构:每项功能对应的非手势入口。不得为空;命令功能不得仅手势可达,且替代路径不是功能受限的替代品。运动本身构成活动本质时,按规范 G7-1 登记例外及进入、暂停、退出和结果入口。 | 无障碍底线、降级落点与产品风险兜底三者合一。它同时是对"手势作为唯一输入"这一决策的直接否定(规范 G7-1)。 |
| 必选 | 可完全关闭 | disable.allowed | 布尔,恒为真。关闭命令手势后,适用功能仍可达;本质性运动活动的边界见规范 G7-1。 | 这不是一个可以取假的开关,列为字段是为了让"关闭后是否仍可用"进入验收范围。 |
| 可选 | 模态回退顺序 | modality.order | 有序集合:手势/语音/注视/触摸/物理控件。须与 recognition.degradation.order 的末级衔接。 | 定义识别不可用时优先切到哪个通道。顺序取决于场景,不存在通用最优。 |
| 可选 | 自动回退触发 | auto_fallback.trigger | 集合:连续识别失败达阈值/持续跟踪丢失达时长/环境条件不满足/用户显式请求。次数或时长类条件须附具体阈值;用户显式请求无需数值阈值。 | 何时不再让用户重试。安全关键场景下(见第十节)重试上限由领域评估确定,不能仅配置“更低”。 |
| 可选 | 回退状态延续 | state_continuity | 枚举:保留当前对象与有效进度/保留可用成果并重新开始受影响操作;含不能接续部分的说明。禁止静默丢弃有效进度或补发旧输入。 | 发生模态回退时必填;正常切换和跟踪失效后的切换均需覆盖。 |
边界:非手势路径与可完全关闭是底线,任何配置不得使其失效;回退顺序与自动触发决定这条底线什么时候被启用。
十、情境:在什么场景下适用、旁人怎么处置
前缀:gesture.context
| 级别 | 设计决定 | Token 字段 | 类型与合法取值 | 适用条件与作用 |
|---|---|---|---|---|
| 必选 | 适用场景声明 | applicability | 结构:产品声明手势输入适用的场景与明确不适用的场景。空集合不合法;"全部场景适用"须给出支撑依据。 | 隔空手势不是通用输入。把适用边界写进配置,是避免它被当作万能入口的第一道约束。 |
| 必选 | 采集指示 | capture.indicator | 结构:指示形式(物理指示灯/机械遮蔽/屏幕元素)+ 可见条件。不得存在任何配置路径将其关闭。 | 在场人员知道传感器是否在采集。物理级指示的可信度高于软件绘制的图标。 |
| 必选 | 第三方处置 | bystander.policy | 结构:非用户进入采集范围时的行为(不作为输入源 + 可识别信息的处置:不留存,或明确保留期与用途)。 | 采集范围可能大于交互区并覆盖非用户。这是权益问题,与 engagement.subject.arbitration 的功能问题分属两处。 |
| 可选 | 环境适配 | environment.adaptation | 集合:亮度/噪声/空间尺寸/用户姿势(站立、就座、驾驶、手持物)触发的配置切换;每项须声明触发条件与被调整的字段。被调整字段不得包含 vocabulary.items 的语义绑定。 | 让参数随环境变化,但语义绑定不变。调整参数与调整语义是两件事(规范 G7-5)。 |
| 可选 | 安全关键模式 | safety_critical.mode | 枚举:不适用/限制手势集且禁止视觉依赖/完全禁用。启用受限手势时须有非视觉反馈、经评估的重试上限和替代路径;完全禁用不要求配置手势反馈。 | 非视觉也可能占用认知资源;没有可用性证据时推迟次要任务,不以“无需看屏幕”证明安全(规范 G7-6)。 |
| 可选 | 社会场景 | social.setting | 枚举:私人/共享/公共。影响 effort.primary.budget 的幅度上限与音频反馈默认值。 | 用户不会在公共场合做让自己尴尬的动作。这不是舒适度问题,是该功能事实上不可用(规范 G7-4)。 |
| 可选 | 感知数据保留 | capture.retention | 按原始图像/深度/骨架/派生事件区分采集必要性、用途、处理位置、接收方、访问范围、授权条件、拒绝或撤回后的行为、有限保留期或不留存;用户与第三方分别声明。诊断与训练另列用途;骨架和派生特征不默认匿名。 | 发生处理或留存时须明确,平台托管可引用可核对的平台政策;脱离手势参与不等于停止传感器采集(规范 G7-2/G7-3)。 |
边界:适用场景声明限定整套配置的有效范围;采集指示与第三方处置是不可关闭的底线;环境与社会场景决定适配方式,感知数据保留独立说明处理与留存边界。
十一、可选项的联动要求
能力可以不启用;启用后,依赖必须完整。下表不新增字段或第三种级别,相关值可由产品规则继承。表内省略共同前缀 gesture.。字段表中的“可选”表示能力可选,适用后标为必填的字段不得省略。
| 能力或承诺 | 必须明确的依赖 | 未满足时 |
|---|---|---|
| 低后果免显式进入 | commitment.direct_commit.allow 为空集,或其中动作在当前条件下均判为 L1;commitment.false_positive.budget 有效;免显式进入的动作按 G5-2 独立验证偏置策略;每次命令仍须满足已定义的空间、分段与主体条件。 | 回到显式参与条件;不以"用户会撤销"替代提交约束。 |
| 停留确认 | timing.dwell.duration、timing.dwell.reset 与可感知进度同时有效;目标绑定由 vocabulary.target.binding 定义。 | 不使用停留作为提交方式;无进度指示的停留等同于无反馈的延迟。 |
| 保持确认 | timing.hold.duration 及其绑定项(确认对象、独立意图事件、计时起点、姿态容差、重置规则、进度反馈)同时有效。 | 不以保持作为提交方式;不得以延长一个高频姿势的时长充当高后果确认。 |
| 连续控制(拖动、缩放、调节) | feedback.continuous.readout 非"无";recognition.tracking_loss.behavior 对该操作类型有明确取值;允许接续时 recognition.tracking_loss.resume 有效;feedback.latency.overrun 已声明该控制在无可靠当前量时的处置;vocabulary.control.mapping 明确;存在阈值型状态切换时,用 timing.hysteresis 或可核验的其他稳定策略覆盖,不把滞回作为唯一实现。 | 不提供连续控制;不以离散步进冒充连续控制。 |
| 近远场自动切换 | zone.near_far.threshold 的双阈值有效;effort.precision.level 满足实际距离与支撑条件;目标尺寸、间距与容差已验证;切换时维持有效目标或取消候选,不继承旧模型的未完成输入。 | 固定为已验证的单一输入模型;可以是近场或远场,不要求为了缺少切换配置而禁用纯远场。 |
| 多人同时在场 | engagement.subject.arbitration 有效,允许“单人交互、其他人不接管”;context.bystander.policy 有效;当前归属对在场者可见。 | 声明单人使用,并保证第二人出现时不发生归属转移与误识别。 |
| 手势自定义 | vocabulary.customization.scope 有效;vocabulary.platform.conflicts 明确;自定义后 commitment.risk.mapping 仍完整;fallback.alternative.path 覆盖被关闭的手势。 | 不开放自定义;不以自定义替代对冲突手势的设计修正。 |
| 自动模态回退 | fallback.modality.order、fallback.auto_fallback.trigger(次数与时长类含具体阈值)、fallback.state_continuity 均有效,且与 recognition.degradation.order 末级衔接。 | 不自动回退;由用户显式切换,且切换入口在识别失效时仍可达。 |
| 中空触觉或其他触觉反馈 | 中空触觉声明设备作用范围与 zone.volume 的交集;接触或可穿戴触觉声明接触、佩戴与连接条件。仅在通道实际可用时承诺触觉反馈,其他条件下 feedback.state.channels 有通道兜底。 | 不把触觉列入三态通道分配;不承诺用户在整个交互区都能感知到。 |
| 安全关键场景使用 | context.safety_critical.mode 为“限制手势集且禁止视觉依赖”;feedback.nonvisual.required 覆盖该任务所需的每项状态,且完整操作和恢复无需离开主任务视线;fallback.auto_fallback.trigger 的重试上限有领域评估依据;vocabulary.size.max 相应收紧。 | 声明该场景不适用,并在该场景中禁用手势输入。 |
| 环境自适应 | context.environment.adaptation 每项的触发条件与被调整字段可解析;调整对用户可感知;语义绑定不在被调整字段中。 | 采用单一固定配置,并在条件不满足时按降级顺序退让。 |
| 手势触发 L3 动作 | commitment.second_channel 在该动作非“无”,绑定当前对象、内容、当前状态与后果;recognition.confidence.threshold 的分级策略有验证记录;只有采用手势确认时才需形态差异测量。 | 该动作不由手势触发,改由 fallback.alternative.path 承担。 |
| 感知数据处理与留存 | context.capture.indicator 有效且不可关闭;context.bystander.policy 明确非用户数据的处置;context.capture.retention 对各类数据独立声明保留策略。 | 不得启用缺少用途与处理边界声明的采集;保留实际可用的替代入口。 |
| 多模态竞争与平台中断 | 多模态启用或同一动作有多个事件源时 engagement.input.routing 明确;平台中断可能发生时 engagement.suspend.policy 明确;连续操作的目标、有效进度与取消边界同步。 | 限制到可可靠路由的输入模型;不允许多入口竞争提交。 |
| 存在副作用的异步执行 | feedback.result.channels、commitment.result.recovery 有效;取消、撤销与结果核对分开。 | 不承诺可靠的异步手势提交,改用已具备核对与防重的入口。 |
| 教学练习 | vocabulary.tutorial.reentry 定义入口;练习对象隔离于真实副作用,退出时丢弃未完成候选。 | 只展示示意,不让练习动作进入真实提交路径。 |
"继承默认"必须能解析到明确的值、来源与适用条件,不能只是一句说明。
十二、固定底线:不能通过配置关闭
输入的界线。参与状态必须有失活条件,静止、转身、离开或与他人交谈不构成持续同意。任一时刻输入有明确归属主体,归属转移有显式条件,非归属主体的动作不作为输入。手势的起止可判定,过渡与复位动作不构成命令。任何配置不得使"手出现在采集范围内"直接等同于"用户希望交互",除非该动作的后果已被第八节约束到 L1。
不确定性的处置。识别标签、分数或概率估计不等同于意图事实。识别基础值可共享,放行策略与偏置方向按后果等级验证,L3 动作禁止偏灵敏。跟踪丢失是正常状态:丢失时禁止以最后帧数据继续推进,禁止自动提交进行中的动作。低置信时不执行高后果动作,也不静默采用最高分候选。能力下降时按预先定义的顺序降级,末级落在非手势路径上。
后果的耦合。不可逆、对外发送或发布、支付与资金转移、权限变更,禁止由单次手势直接提交。确认绑定当前对象、内容、当前状态与后果,不替代身份验证与权限检查。撤销路径不得仅依赖手势输入。单次误识别的后果规模有上限,反复误触发有察觉与收敛机制。确认手势与高频手势在形态上显著区分,且不是高频手势的延续或变体。自定义与情境适配不得降低同一业务后果的等级;情境实际后果变化时按当前风险重新判定。结果未知先核对,不盲目重发。
状态的可感知。参与、数据有效性与执行结果分别判定;旧操作回执不覆盖当前操作,恢复跟踪不抹掉未决结果。取消与尚未生效的提交竞争时先拦截,已发生后果如实反馈。在范围、已锁定、已提交为适用的反馈层次,不强迫不存在的候选阶段;异步执行另有处理中、失败、未知与已取消,提交回执反映实际生效的事实,不是请求发出的事实。交互区边界、跟踪丢失与识别失败三者的表现可区分,禁止以无反应表示其中任何一种。反馈延迟超出预算时降级为离散反馈,禁止无反馈,禁止继续以滞后的跟随形式呈现;没有可靠当前量时暂停新增业务更新,恢复时重建基准。
身体与退路。高频操作不要求抬手过肩、长时间无支撑保持姿势或大幅全臂运动。无支撑条件下不把点级精度作为主路径。手部尺寸、活动范围、震颤、指节缺失、义肢或佩戴物不得使用户无法完成任务。命令功能有实际可用的非手势路径,且不是功能受限的替代品;手势输入可被完全关闭。运动本身构成活动本质时按规范 G7-1 声明例外,不伪造测量等价性。切换入口保留有效进度。
环境与他人。标准输入已足以完成功能时,不额外索取原始图像或完整骨架;确需感知数据时分别声明必要性、用途、处理和留存,骨架与派生特征不默认匿名。传感器采集状态对在场人员可感知,该指示不可被配置关闭。非用户人员的动作不被识别为命令,其可识别信息不在无明确依据的情况下留存。安全关键场景中,手势不要求视觉注意力、不要求双手同时脱离主任务、不要求长时间保持姿势。
以上承接《隔空手势交互设计规范》的适用要求;本字典不替代整套规范,也不构成无障碍、隐私、分心或功能安全的合规证明。
十三、配置片段与验收案例
任务:大屏上的私人布局重排。用户点选卡片后以手部相对位移拖动,有效释放后本地保存;离合按钮只暂停控制以放下手,再次抓取时重建基准。没有发布、共享或删除功能。候选和预览不改变已保存布局;丢失时冻结预览,明确取消则恢复操作起点;保存后可由非手势按钮撤销。
13.1 从决定到字段
| 设计决定 | 配置位置 | 所需实现或测量证据 |
|---|---|---|
| 每次操作绑定一个人、一只手和一张卡片 | engagement.subject.arbitration、hand.binding、vocabulary.target.binding | 第二人进入、换手与看向其他卡片不会接管 |
| 用位移控制预览,离合复位不移动对象 | vocabulary.control.mapping | 轴向与单位一致;离合、重定位、重获均无跳变 |
| 数据失效就冻结,不认为松手已完成 | recognition.input.validity.policy、tracking_loss.behavior、tracking_loss.resume | 遮挡与有效释放产生不同事件;冻结期间不累计输入 |
| 本地保存一次,保存后提供撤销 | commitment.risk.mapping、direct_commit.allow、undo.window | 当前条件判为 L1;撤销不覆盖其他入口之后的修改 |
| 关闭手势仍可完成重排 | fallback.alternative.path、state_continuity | “选择卡片 → 移到位置”按钮可用,无需拖动或持续保持 |
这张表是决策切片,不是完整预设。启用前还需解析适用的全部基础字段、输入范围、反馈、体力和数据处置;不得仅凭此表声称配置可运行。
13.2 量值与滞回的 JSON 表示示例
下面仅示范两个字段的机器表示。假设使用指尖距离判定捏合,数值是人为构造的格式样例,未经设备标定或用户验证,不是推荐值,也不能直接启用。records、basis 和 validation 属于配置记录,不是 Token 命名空间;结构成员由此示例明确约定。
{
"purpose": "format_example_only",
"records": {
"gesture.timing.debounce.window": {
"status": "resolved",
"value": {
"duration": { "value": 0, "unit": "ms" },
"start_event": "command_accepted",
"scope": ["subject", "command"],
"exempt": ["cancel", "disable", "exit"]
},
"basis": "illustrative",
"validation": "not_tested"
},
"gesture.timing.hysteresis": {
"status": "unverified",
"candidate_value": [
{
"states": ["open", "pinching"],
"quantity": "thumb_index_tip_distance",
"reference_frame": "tracking_space",
"enter": { "operator": "<=", "value": 0.02, "unit": "m" },
"exit": { "operator": ">=", "value": 0.03, "unit": "m" },
"initial_state": "open",
"between_thresholds": "keep_previous_state"
}
],
"reason": "thresholds_require_device_and_user_validation"
}
}
}
较小距离进入捏合、较大距离退出捏合,中间保持原状态;如果改用“值越大越像捏合”的分数,比较方向也要相应改变,不能照抄距离阈值的大小关系。有效性检查先于滞回:丢失时冻结或取消操作,禁止把距离设为零或无穷大来模拟捏合或释放。标准 SDK 托管时引用其判定合同,不叠加一套竞争的捏合事件。
此片段的预期校验结果为:JSON 语法合法、非负冷却合法、距离阈值关系自洽;因存在未验证字段且缺少完整任务配置,拒绝启用任务能力。可解析不等于可用。
13.3 配置校验用例
| 输入或场景 | 预期结果 |
|---|---|
debounce.window 为 0,起计事件、作用域和取消豁免完整 | 合法;仍须验证分段、防重及收手复位 |
启用连续控制但缺 control.mapping 或当前量反馈 | 拒绝连续控制,指出缺失路径 |
| 声明平台托管却无输入合同与可观察限制 | 拒绝托管声明,不伪造数值 |
L3 动作出现在 direct_commit.allow | 拒绝该动作的直接提交配置 |
| 近场进入阈值大于等于退出阈值 | 拒绝双阈值配置 |
| 停留中改时长、坐标锚或目标 | 取消受影响候选或显式重建基准,不继承进度自动完成 |
| 用户偏好与设备硬限制交集为空 | 停用受影响能力并提供替代入口 |
| 关闭手势与有效释放同时到达 | 拦截尚未生效动作;已生效结果仍如实呈现 |
字典定义校验语义,不提供生产运行时校验器或经过实测的通用预设。工程交付须同时包含字段解析、约束检查、运行事实和规范附录 A 的验证证据。
配置交付与校验
注意力锚是输入参与条件,不是身份认证或业务授权。取持续要求时须补齐丢失宽限与到期行为;该示例只演示进入时要求,不能代表完整可用手势配置。关闭与撤权优先拦截候选,重入不恢复旧确认。
随附的可执行样例只覆盖 gesture.engagement.attention.required,其余字段按本字典逐项校验;未覆盖不等于不适用或已通过。样例是所选字段的格式正反例,不是可直接启用全部能力的产品预设。完整产品交付另外包含适用性、依赖、证据、执行映射及进行中操作的生效边界。
字段名、类型或含义变更时更新引用方与验收样例;仅修改说明且不改变合法行为的,保留已有字段名。调用方读取解析后的有效配置,不由 UI 控件、动画或模型文字反推权限、测量或完成事实。参见对应场景。
参考来源
本文支撑同目录的设计规范和Design Token。来源用于解释问题、提供方法与平台实现参考;规范中的强制性来自对产品承诺的必要性判断,不由引用数量决定。
“正文”表示读取了相关公开章节,不代表复现了实验;“摘要”只支持摘要明确陈述的结论。来源中的设备参数不得直接作为跨平台默认值。
一、输入、可访问性与控制
| 来源与读取范围 | 支持的设计决定 | 对应规则 / 字段 | 使用边界 |
|---|---|---|---|
| W3C:Motion Actuation,官方解释正文 | 摄像头动作输入也需考虑替代控件和关闭入口 | G3-5、G7-1;fallback.alternative.path、disable.allowed | 直接适用 Web;包含辅助接口与活动本质性例外,不能无条件套用到运动测量 |
| W3C:Pointer Cancellation,官方解释正文 | 输入开始、取消、释放和撤销分别设计 | G1-2、G6-2;vocabulary.target.binding | 对象是单指针操作;隔空手势的取消阶段是设计推导,不要求所有动作一律释放触发 |
| W3C:Dragging Movements,官方解释正文 | 拖动提供无需拖动的单指针替代 | G7-1;fallback.alternative.path | 键盘可达与单指针替代是不同检查项;换手或改成另一种拖动不自动满足要求 |
| W3C:XR Accessibility User Requirements,多模态、输入切换与精细动作相关正文 | 多输入可切换、目标大小与间距、避免同时执行多个动作成为唯一入口 | G1-5、G3-2/G3-5、G7-1 | 属用户需求说明(Working Group Note),不是可直接认证的测试标准;不能由此推出所有产品必须具备每一种模态 |
| Microsoft:Instinctual interactions,相关正文 | 先确定输入模型,处理混合模型的竞争线索 | G1-5;engagement.input.routing | 平台方法参考;不规定本规范的事件去重实现 |
| Microsoft:Point and commit with hands,相关正文 | 指向与操作反馈分开,近远场保持一致心智模型 | G3-2、G4-1;zone.near_far.threshold | 不据此给出通用近远场距离或目标尺寸 |
| Apple:Design for spatial input,官方讲座文字稿 | 标准输入优先、自定义手势避开系统与日常手势冲突;支撑姿势降低持续操作负担 | G2-3/G2-4、G3-1/G3-2 | 面向特定平台;手势、目标尺度及输入隐私行为不能直接外推至大屏、雷达或所有头显 |
二、跟踪、识别与数据处理
| 来源与读取范围 | 支持的设计决定 | 对应规则 / 字段 | 使用边界 |
|---|---|---|---|
| Ultraleap:Design principles,相关正文 | 手势可发现、反馈可辨识、舒适与交互区约束 | G2-1、G3-1、G4-5 | 设备参数属于其硬件条件,不是本规范的全设备阈值 |
| Ultraleap:Virtual hands,跟踪与显示相关正文 | 跟踪丢失时需要明确的手部显示处理 | G4-5、G5-1;recognition.tracking_loss.* | 冻结或渐隐可视化不等于业务操作可以继续;业务停止与恢复由本规范另作约束 |
| Ultraleap:PinchDetector,API 描述正文 | 用不同捏合进入、退出阈值形成滞回 | G1-2、G5-2;timing.hysteresis | 这里只支持双阈值方法;不证明具体阈值适用于所有手型,也不把冷却、停留和滞回当作同一机制 |
| W3C:WebXR Hand Input,Physical Hand Input Sources、Frame Loop、Privacy & Security 章节 | 同一捏合可能关联不同输入事件;关节姿态可能不可用;手部数据有隐私风险 | G1-5、G5-1、G7-2/G7-3;input.routing、input.validity.policy、capture.retention | 属 Working Draft。该 API 对同一只手的关节不可用有自身约定,不能据此假定所有 SDK 都逐关节返回,也不能把骨架数据默认视为匿名。防重、最大数据年龄和最小采集是本规范推导 |
| scikit-learn:Tuning the decision threshold,方法正文 | 区分预测分数与行动决策;调参与最终验证数据分离 | G5-2;recognition.confidence.threshold | 通用分类方法,不提供手势阈值或跨模型可比的置信分数;业务后果分级由产品决定 |
跟踪数据资格依赖所选 API 实际提供的字段。未取得可读 OpenXR 正文,因此不以其具体有效性标记语义作为这里的证据;项目采用该接口时,仍需核对所用输入合同。标准事件托管与直接处理骨架是不同输入模型,不要求托管应用虚构其无法访问的数据。
三、工效学、范围与格式
| 来源与读取范围 | 用途 | 限制 |
|---|---|---|
| Consumed Endurance,作者机构论文条目与摘要 | 为 G3-1/G3-4、附录 A.1 提供姿势与手臂疲劳量化方法线索 | 未复现实验;不能直接给出全人群安全使用时长 |
| Revisiting consumed endurance: NICE,作者机构摘要 | 提醒疲劳模型需要针对任务检验 | 不替代目标用户持续使用测试;不据此断言所有姿势或任务效果相同 |
| ISO 9241-960,官方公开摘要 | 手势选择、设计过程、参数与文档化的范围 | 摘要明确不规定系统响应;未读付费正文,不能推出整个领域缺少响应规范 |
| ISO/IEC 30113-1,官方公开摘要 | 跨设备手势描述及功能的框架背景 | 非隔空专用;未读付费正文,不用摘要论证具体交互条款 |
| DTCG Format Module,基础类型相关正文 | 区分可复用量值类型与自定义行为结构 | 不是本字典全部业务语义的 Schema;使用 JSON 不等于 DTCG 兼容,也不等于配置语义有效 |
| NHTSA 指导文件目录及美国交通部发布说明,目录与摘要 | 为 G7-6 定位视觉手动分心评估资料 | 指导具有自愿性;未执行测试,不能据此认证隔空交互或外推到全部法域与安全关键领域 |
四、来源之外仍需验证什么
- 产品数值:停留、宽限、反馈延迟、区域、增益、死区与阈值均需设备与用户测量。格式示例中的数字不提供经验依据。
- 必要性推导:目标绑定、离合复位、迟到回执隔离、确认失效、结果未知防重和累计影响控制,是为避免可预见失败而制定的行为要求,不声称来源逐字规定了这些规则。
- 目标人群:左右手、手部差异、震颤、义肢、佩戴物、坐站姿与支撑条件需按产品范围测试;没有用户数据不能宣称覆盖。
- 现场条件:多人、遮挡、光照、社会接受度、持续使用与主任务负荷需现场或有代表性的模拟验证。
- 隐私与领域要求:数据处理应有用途和边界;这份来源表不构成法律或功能安全评估。
- 符合性证据:文档一致、机制生效、用户理解分别验证。反例与故障注入是测试设计,不是已发生事故或已通过产品测试的证明。