Files
silver_pose/docs/ui/silver-pose-ui-ux-spec.md
T

111 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Silver Pose V1 UI/UX 原型规格
## 目标与边界
本规格定义一个用于客户演示的 Windows 桌面端视觉原型。它展示 V1 单路海康 RTSP 监控的操作闭环:人员姿态可见、正常状态可读、确认摔倒后有红色画面、一次性声音/弹窗提示和截图证据。
- 目标框架:Windows 上的 PyQt5;HTML 仅作离线交互视觉原型,不替代生产 UI。
- 默认窗口:1280 × 800 epx;支持最小 960 × 640、Windows Snap 宽度和 125%/150% 缩放。
- 语言:简体中文;数据均为虚构演示数据,不包含 RTSP 地址、账号、客户图像或真实事件。
- 范围:单路摄像头、实时监控、确认摔倒告警、连接异常提示、最近事件和非敏感设置的交互原型。
- 不在范围:真实 RTSP、模型推理、音频播放、文件系统写入、真实配置持久化、云端通知及历史事件库。
## 信息架构与窗口模型
使用一个主窗口和一个只在首次确认事件出现时显示的警报弹窗。主窗口以顶部水平双 Tab 在实时监控与设置之间切换;默认进入实时监控。当前只有两个固定目的地,顶部 Tab 比左侧导航更节省视频的横向空间。
```text
主窗口
├── 标题与来源栏:产品名、摄像头名称、连接状态、当前时间
├── 顶部 Tab:实时监控 / 设置
├── 实时监控:演示状态切换、视频占位、人员 ID、骨架、事件证据和最近事件
└── 设置:来源就绪状态、模型只读信息、事件参数、重连参数和配置应用状态
确认摔倒弹窗
├── 明确的“确认摔倒”标题和人员 ID
├── 确认时间、确认延迟、截图结果
└── “我已知晓”按钮;不产生新的事件或改变状态机
```
## 布局与响应式行为
大于等于 1008 epx 时,内容采用 8:4 双栏:左侧为固定 16:9 比例的实时画面,右侧为状态和证据卡;最近事件横跨底部。641–1007 epx 时,右栏缩窄并保留画面优先级;小于等于 640 epx 时,右栏移至画面下方,顶部操作换行,保证状态与主操作仍可见。
- 顶部栏高度 56 epx;使用系统标题栏相近的紧凑密度。
- Tab 位于标题栏下方,活动 Tab 同时用底边、文字和 aria-selected 表示;键盘左右方向键可在两个 Tab 间移动。
- 内容间距使用 4 epx 网格,常用间距为 8、12、16、24 epx。
- 状态切换按钮显式带文字,普通鼠标、触摸、键盘均可触发。
- 确认状态在画面上放置红色边框、文字标签和事件编号,不仅改变颜色。
- 连接异常不显示摔倒标签;画面保留最后一帧占位并覆盖“正在重连”的明确文字。
## 控件与命令
| 目的 | 原型控件 | 最终 PyQt5 对应 | 行为 |
| --- | --- | --- | --- |
| 切换展示状态 | 三个有文字的按钮 | `QPushButton` 组 | 鼠标、Enter/Space、数字键 1/2/3 切换。 |
| 启动/停止监控 | 主操作按钮 | `QPushButton` | 原型只变更按钮文案;正式版调用视频源线程。 |
| 查看截图位置 | 普通按钮 | `QPushButton` | 原型显示路径提示;正式版打开事件目录。 |
| 关闭告警弹窗 | “我已知晓” | `QDialogButtonBox` / `QPushButton` | 只关闭视图,不清除事件或停止报警记录。 |
| 最近事件 | 只读列表 | `QListView` 或轻量卡片 | 正式版读取 JSONL 摘要,不作为数据库表格。 |
## Tab 与设置控件
| 目的 | 原型控件 | 最终 PyQt5 对应 | 行为 |
| --- | --- | --- | --- |
| 切换顶层视图 | 两个顶部 Tab | QTabWidget 或 QToolButton 加 QStackedWidget | 实时监控默认显示;设置不抢占视频宽度。 |
| 编辑设置草稿 | 数字输入与只读状态卡 | QDoubleSpinBox、QSpinBox、QLabel | 修改立即标记为编辑中,不影响运行配置。 |
| 保存并用于下次启动 | 主操作按钮 | QPushButton | 校验通过后显示已保存待下次启动;不热改监控中的阈值。 |
## 视觉令牌
采用浅色 Windows 桌面主题:浅灰蓝色作为页面底色,白色作为卡片、工具栏和设置表面。最终 PyQt5 应将这些令牌集中到 QSS/主题资源,不在控件中散落硬编码色值。红色是确认摔倒的专属语义色,不得用于普通按钮、截图保存失败、设置校验或装饰。
| 语义 | 值 | 用途 |
| --- | --- | --- |
| `surface.base` | `#EAF1F8` | 浅灰蓝页面背景 |
| `surface.layer` | `#FFFFFF` | 白色卡片、工具栏和设置表面 |
| `surface.overlay` | `#F6F9FC` | 轻量浮层与视频信息层 |
| `text.primary` | `#1E293B` | 标题与正文 |
| `text.secondary` | `#52657C` | 辅助说明 |
| `stroke.control` | `#C8D4E3` | 控件、卡片和分隔线 |
| `status.success` | `#15803D` | 在线 / NORMAL |
| `status.caution` | `#B45309` | SUSPECT / 需要操作员注意 |
| `status.critical` | `#C62828` | 仅 CONFIRMED 摔倒事件 |
| `status.offline` | `#64748B` | 断流 / 不可用 |
| `accent.default` | `#2563EB` | 非危险主操作与键盘焦点 |
字体采用 `Segoe UI Variable`、`Microsoft YaHei UI`、sans-serif 回退;数字采用等宽特性。圆角为 8 epx,焦点描边为 2 epx 蓝色,不使用装饰性动效或 emoji 图标。
## 状态与交互矩阵
| 状态 | 画面 | 右栏 | 弹窗与声音 | 用户下一步 |
| --- | --- | --- | --- | --- |
| 正常监控 | 浅色界面中的视频占位、绿色骨架、`NORMAL` 标签 | 来源在线、人员 ID、FPS、无待处理事件 | 无 | 持续观察或切换展示状态。 |
| 确认摔倒 | 红色外框、红色骨架、`CONFIRMED` 与事件 ID | 显示证据、确认延迟、声音已触发、截图已保存 | 首次进入时显示一次弹窗;之后不重复 | 知晓警报、查看截图位置、继续监控。 |
| 连接异常 | 灰色画面与“正在重连”说明 | 显示重试计时与“不触发摔倒报警” | 无 | 等待或停止监控;恢复后回到正常。 |
切换展示状态不代表真正的算法判定;原型的页内说明必须明确“演示数据”。确认状态下关闭弹窗后,红色状态和事件证据仍保留,模拟事件状态的可追溯性。
## 无障碍与输入
- 顶部 Tab 使用标准 tablist、tab 和 tabpanel 语义;左右方向键切换顶部 Tab,切换后焦点停在新 Tab。
- Tab 顺序:顶部 Tab → 监控状态切换 → 启动/停止 → 查看截图 → 最近事件;设置 Tab 中按视觉顺序经过来源、模型、事件参数、保存操作。
- 所有状态同时包含颜色、图标形状和中文文字;状态文字对比度不低于 4.5:1。
- `1`、`2`、`3` 是原型专用演示快捷键;Escape 只关闭可关闭的弹窗。
- 状态变化通过 `aria-live="polite"` 说明;弹窗打开时焦点置于“我已知晓”,关闭后返回切换按钮。
- 按钮最小高度 40 epx;支持 200% 缩放下文字换行与内容垂直滚动。
## 实现与验收
原型输出为 `docs/ui/silver-pose-v1-prototype.html`,单文件、无网络依赖。CSS 令牌、示意画面 SVG 和 JavaScript 状态数据均内联;JavaScript 只负责状态切换、弹窗和快捷键,不能伪装成视频或模型推理。
验收条件:
1. 双击 HTML 可离线打开;默认显示正常监控。
2. 点击“确认摔倒”或按 `2` 后,显示红色画面、告警证据和一次弹窗;关闭弹窗后不丢失事件证据。
3. 点击“连接异常”或按 `3` 后,仅显示重连状态,且明确说明未触发报警。
4. 宽屏、约 900 epx 宽和约 600 epx 宽均不出现横向溢出或无法触达的主操作。
5. 仅用键盘可切换三种状态、关闭弹窗并看到可见焦点。
6. 点击设置 Tab 或按左右方向键可切换视图;设置页不显示来源地址或密码,编辑参数后显示已修改,保存后显示下次启动生效。
7. 默认视觉主题为浅灰蓝底和白色卡片;正常、疑似和连接异常均不使用红色,红色只在确认摔倒状态、其事件弹窗和事件证据上出现。