Skip to content

Commit 98a8895

Browse files
committed
docs(ocr): v0.7.3 屏卡体系排期(REQ-155~161 转已排期+版本文档)
1 parent 1545bea commit 98a8895

3 files changed

Lines changed: 78 additions & 11 deletions

File tree

‎docs/archive/2026-08-20/README.md‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
1-
# 归档索引:2026-08-20(v0.7.2 课堂助手深化批次)
1+
# 归档索引:2026-08-20(v0.7.2 课堂助手深化批次 + v0.7.3 屏卡体系设计)
22

33
> 归档判定见 [archive README](../README.md)。本日归档夹为技术债滚动快照(唯一权威清单)。
44
55
## 归档清单
66

7-
**本日无文档归档**——v0.7.2 批次产生的文档均属活跃状态,不符合归档判定:
7+
**本日无文档归档**——本批产生的文档均属活跃状态,不符合归档判定:
88

99
| 文档 | 不归档原因 |
1010
|------|-----------|
1111
| `docs/versions/v0.7.2.md` | versions/ 内容(规则明确不归档,持续活跃) |
12+
| `docs/versions/v0.7.3.md` | versions/ 内容(v0.7.3 屏卡体系已排期——活跃) |
1213
| `docs/Foresight/brainstorming-video-profile-detection.md` | 部分已立项(合集/自适应已实施)但检测准确度整体仍搁置待议——活跃 |
1314
| `docs/Foresight/video-data-extraction-inventory.md` | 部分已立项(说话人/信息面板已实施)其余待裁决——活跃 |
15+
| `docs/archive/2026-08-20/brainstorming-ocr-screen-cards.md` | 已裁决立项(v0.7.3 REQ-155~161 + ADR-015 引用)——活跃 |
1416
| `docs/product/classroom-assistant-guide.md` | 课堂助手使用说明——持续维护的活跃文档 |
1517
| `docs/product/requirements-pool.md` | 需求池——持续活跃 |
1618

@@ -19,6 +21,7 @@
1921
- **v0.7.2 四深化落地**(REQ-148~154):三连体验(最近画面时序/ASR 未沉淀多行+按句拆行/未知档案)、采集信息面板(平台/时长/合集/字幕,全本地)、合集检测联动(系列名投票/记忆系列键/课程分组)、语速停顿自适应(动态合并阈值/骤变事件)、说话人分离弱化版(引擎接线/离线分析/会话详情展示/使用说明)
2022
- **新增代码七维审查**:五处即修(平台表单一来源/中文数字判定去重/暂停后语速基准重置/拆行标点过滤/讲者分析异步化+暂停态探测),提交 751b9c6
2123
- **验证**:1016 单测全绿 + clippy 干净 + 前端构建通过 + docs-check 通过;提交 9097e8f~751b9c6 已推送 rebuild
24+
- **v0.7.3 画面要点屏卡体系设计**(REQ-155~161 + ADR-015):会话29 实证(175 块/12 时间戳重复/UI 污染/无 bbox)→ 头脑风暴裁决(路线 A+B+D,屏段落+配图)→ 设计规格 + ADR + 需求登记,提交 1545bea
2225

2326
## 技术债摘要
2427

‎docs/product/requirements-pool.md‎

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -198,21 +198,21 @@
198198
| REQ-146 | 多版本真机验收总清(M0 前置):v0.5.0 M9 / v0.6.0 M7 / v0.7.0 M4 / v0.7.1 验收清单系统执行 + 缺陷清零 | P1 | 已排期 | v0.8.0 | AI 线不盖在未验收地基上;未通过不启动 AI 开发 |
199199
| REQ-147 | AI 链路契约测试:AiRefine/AiEnrich schema 强校验 + mock 适配器全链路 + 降级四路径 + 提示词 golden 冒烟回归 | P2 | 已排期 | v0.8.0 | 前端无 Vitest 基建维持真机手动清单 |
200200

201-
### 待排期 · 画面要点屏卡体系(2026-08-20 头脑风暴裁决)
201+
### v0.7.3 · 画面要点屏卡体系(2026-08-20 头脑风暴裁决)
202202

203203
> 用户反馈"画面要点(OCR)提取的内容零碎(时间整理和识别内容)";会话29 实证(175 块 OCR / 12 时间戳重复 / 平台 UI+其他窗口污染 / 无 bbox 落库)。
204-
> 设计规格 [头脑风暴 OCR 屏卡体系](../archive/2026-08-20/brainstorming-ocr-screen-cards.md) · 架构决策 [ADR-015](../adr/ADR-015-screen-cards-ocr.md)。
204+
> 设计规格 [头脑风暴 OCR 屏卡体系](../archive/2026-08-20/brainstorming-ocr-screen-cards.md) · 架构决策 [ADR-015](../adr/ADR-015-screen-cards-ocr.md) · [v0.7.3 版本文档](../versions/v0.7.3.md)。
205205
> 裁决:路线 A+B+D(采集治理+屏ID+屏级合并+bbox 落库+行合并/版面角色+结构识别接线);笔记形态=屏段落+配图;AI 精修留给 v0.8.0。
206206
207207
| ID | 需求 | 优先级 | 状态 | 目标版本 | 备注 |
208208
|----|------|--------|------|---------|------|
209-
| REQ-155 | 屏级聚合与去重:screen_merge 纯函数(normalize/similarity/cluster/line_merge/classify_roles)+ ScreenTracker 在线屏(版面指纹变化=新屏)+ 旧数据聚类兜底 | P1 | 待排期 | 待排期 | 在线/离线共用同一套纯函数(单管线双出口);翻回旧页间隔>3s=新屏 |
210-
| REQ-156 | bbox/screen_id 落库迁移:session_ocr_blocks 加列(ensure_column 幂等)+ 实时/导入双入口双写 | P1 | 待排期 | 待排期 | bbox JSON {x,y,w,h} 帧坐标系;NULL=旧数据;不建新表(GROUP BY 派生屏) |
211-
| REQ-157 | 采集治理:前台窗口过滤扩展全帧(复用 foreground_foreign,REQ-084 先例)+ ui_junk 直播互动元素扩充 | P1 | 待排期 | 待排期 | 根治会话29 平台 UI/IDE 污染;黑名单扩充+启发式兜底 |
212-
| REQ-158 | 屏内组织:line_merge 断行拼接 + classify_roles 版面角色(标题/正文/图注标签)+ SessionScreen 契约 | P1 | 待排期 | 待排期 | region_kind=table/formula/code 不参与行合并(徽标+精修入口) |
213-
| REQ-159 | 结构识别接线:refine_screen_structures 纯函数复用 commands_refine_inner(REQ-049/050 内核不动)+ 停止后批量精修 + 屏卡 Markdown/LaTeX/代码渲染 | P2 | 待排期 | 待排期 | 模型已本地就绪(pp-doclayout-l/formulanet/slanet);失败降级徽标 |
214-
| REQ-160 | 消费端:SessionDetail.screens + 原料屏卡流(可展开块级明细复查)+ 笔记屏段落配图(asset:// 本地图)+ 大纲/检索按屏 | P1 | 待排期 | 待排期 | 配图可开关;旧数据降级(聚类屏无行合并/角色);大纲无 bbox 回退文本启发式 |
215-
| REQ-161 | 实时面板按屏显示:live:ocr 事件带 screen_id,最近画面要点按屏摘要 | P2 | 待排期 | 待排期 | 一行=一屏摘要(区间+标题) |
209+
| REQ-155 | 屏级聚合与去重:screen_merge 纯函数(normalize/similarity/cluster/line_merge/classify_roles)+ ScreenTracker 在线屏(版面指纹变化=新屏)+ 旧数据聚类兜底 | P1 | 已排期 | v0.7.3 | 在线/离线共用同一套纯函数(单管线双出口);翻回旧页间隔>3s=新屏 |
210+
| REQ-156 | bbox/screen_id 落库迁移:session_ocr_blocks 加列(ensure_column 幂等)+ 实时/导入双入口双写 | P1 | 已排期 | v0.7.3 | bbox JSON {x,y,w,h} 帧坐标系(TD-046 反算复用);NULL=旧数据;不建新表(GROUP BY 派生屏) |
211+
| REQ-157 | 采集治理:前台窗口过滤扩展全帧(复用 foreground_foreign,REQ-084 先例)+ ui_junk 直播互动元素扩充 | P1 | 已排期 | v0.7.3 | 根治会话29 平台 UI/IDE 污染;黑名单扩充+启发式兜底 |
212+
| REQ-158 | 屏内组织:line_merge 断行拼接 + classify_roles 版面角色(标题/正文/图注标签)+ SessionScreen 契约 | P1 | 已排期 | v0.7.3 | region_kind=table/formula/code 不参与行合并(徽标+精修入口) |
213+
| REQ-159 | 结构识别接线:refine_screen_structures 纯函数复用 commands_refine_inner(REQ-049/050 内核不动)+ 停止后批量精修 + 屏卡 Markdown/LaTeX/代码渲染 | P2 | 已排期 | v0.7.3 | 模型已本地就绪(pp-doclayout-l/formulanet/slanet);失败降级徽标 |
214+
| REQ-160 | 消费端:SessionDetail.screens + 原料屏卡流(可展开块级明细复查)+ 笔记屏段落配图(asset:// 本地图)+ 大纲/检索按屏 | P1 | 已排期 | v0.7.3 | 配图可开关;旧数据降级(聚类屏无行合并/角色);大纲无 bbox 回退文本启发式 |
215+
| REQ-161 | 实时面板按屏显示:live:ocr 事件带 screen_id,最近画面要点按屏摘要 | P2 | 已排期 | v0.7.3 | 一行=一屏摘要(区间+标题) |
216216

217217
### V1.0 · 体验增强(远期)
218218

‎docs/versions/v0.7.3.md‎

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# v0.7.3 — 画面要点屏卡体系(OCR 碎片化治理 + 屏级组织 + 结构识别接线)
2+
3+
> **状态**: 已排期(2026-08-20 头脑风暴裁决完成:路线 A+B+D,笔记形态=屏段落+配图;实施待启动)
4+
> **目标**: 画面要点从"块流"升级为"屏卡"——屏级时间区间(00:02–03:23)+ 屏内版面组织(标题/正文/图注标签)+ 采集治理(前台过滤/平台 UI 黑名单)+ 结构识别接线(表格/公式/代码)
5+
> **关联**: [头脑风暴 OCR 屏卡体系](../archive/2026-08-20/brainstorming-ocr-screen-cards.md) · [ADR-015](../adr/ADR-015-screen-cards-ocr.md)(架构决策)· [需求池](../product/requirements-pool.md)(REQ-155~161)
6+
> **触发**: 用户反馈"画面要点(OCR)提取的内容零碎(时间整理和识别内容)";会话29 实证(175 块 OCR / 12 时间戳重复 / 平台 UI+其他窗口污染 / 无 bbox 落库)
7+
8+
## 一、阶段目标
9+
10+
1. **屏级聚合与去重(REQ-155)**:`screen_merge` 纯函数(normalize/similarity/cluster/line_merge/classify_roles)+ 在线 `ScreenTracker`(版面指纹变化=新屏,layout_cache 复用)+ 旧数据聚类兜底——175 块 → ~7 屏
11+
2. **bbox/screen_id 落库(REQ-156)**:`session_ocr_blocks` 加列(ensure_column 幂等),实时/导入双入口双写
12+
3. **采集治理(REQ-157)**:前台窗口过滤扩展全帧(foreground_foreign 复用,REQ-084 先例)+ ui_junk 直播互动元素扩充——根治平台 UI/IDE 污染
13+
4. **屏内组织(REQ-158)**:line_merge 断行拼接(治 det 切半句)+ classify_roles 版面角色 + `SessionScreen` 契约
14+
5. **结构识别接线(REQ-159)**:refine_screen_structures 复用 commands_refine_inner(REQ-049/050 内核不动)+ 停止后批量精修 + 屏卡 Markdown/LaTeX/代码渲染
15+
6. **消费端(REQ-160/161)**:原料屏卡流 + 笔记屏段落配图 + 大纲/检索按屏 + 实时面板按屏摘要
16+
17+
## 二、范围(需求追溯)
18+
19+
| REQ | 内容 | 验收要点 | 规划状态 |
20+
|-----|------|---------|---------|
21+
| REQ-155 | 屏级聚合与去重:screen_merge 纯函数 + ScreenTracker 在线屏 + 旧数据聚类兜底 | 在线/离线共用同一套纯函数(单管线双出口);翻回旧页间隔>3s=新屏;截断变体合并 | **已排期** |
22+
| REQ-156 | bbox/screen_id 落库迁移:session_ocr_blocks 加列 + 实时/导入双入口双写 | 加列幂等;旧库只读兼容;bbox JSON {x,y,w,h} 帧坐标系(TD-046 反算复用) | **已排期** |
23+
| REQ-157 | 采集治理:前台窗口过滤扩展全帧 + ui_junk 直播互动元素扩充 | 前台≠目标窗口期间画面要点不落库;`1人正在看`/`发送`/`X`/频道名/logo 乱码不进屏卡 | **已排期** |
24+
| REQ-158 | 屏内组织:line_merge 断行拼接 + classify_roles 版面角色 + SessionScreen 契约 | 会话29 断行合并成完整句;标题/正文/标签分类正确;region_kind 结构块不参与行合并 | **已排期** |
25+
| REQ-159 | 结构识别接线:refine_screen_structures + 停止后批量精修 + 屏卡渲染 | 表格→Markdown/公式→LaTeX/代码→等宽块;模型缺失降级徽标;内核零改动 | **已排期** |
26+
| REQ-160 | 消费端:SessionDetail.screens + 原料屏卡流 + 笔记屏段落配图 + 大纲/检索按屏 | 屏卡可展开块级明细复查(可逆);笔记配图 asset:// 可开关;旧数据降级聚类屏 | **已排期** |
27+
| REQ-161 | 实时面板按屏显示:live:ocr 带 screen_id | 最近画面要点一行=一屏摘要(区间+标题) | **已排期** |
28+
29+
## 三、关键设计决策
30+
31+
1. **屏 = 派生视图而非新表**:屏 first/last_seen/成员块 = `GROUP BY screen_id` 聚合;旧数据(screen_id NULL)走 `cluster_blocks_into_screens` 聚类兜底——零冗余、可逆(ADR-006 派生视图传统,ADR-015 决策 2)。
32+
2. **在线/离线共用纯函数**:`screen_merge.rs`(normalize/screen_similarity/cluster_blocks_into_screens/line_merge/classify_roles)——在线 ScreenTracker 与离线聚类同一套逻辑(单管线双出口,延续 REQ-081 原则)。
33+
3. **屏边界**:版面指纹变化(layout_cache 现成)= 新屏;同屏内容相似 → 续屏(更新 last_seen 不新增行);翻回旧页间隔>3s = 新屏。
34+
4. **行合并保守阈值**:bbox y 中心差 ≤ 行高×0.6 且 x 间隔 ≤ 半字宽 → 同行拼接;屏卡可展开块级明细复查(原料不动)。
35+
5. **采集治理**:前台≠目标窗口期间画面要点不落库(复用 REQ-084 foreground_foreign);平台 UI 黑名单扩充 + 持久元素自学习(第二波)。
36+
6. **结构识别**:只补消费端接线(抽 refine_screen_structures 纯函数),识别内核(SLANet/FormulaNet/refine 链路)零改动;停止后批量精修;失败降级徽标保留。
37+
7. **降级四级链**:新数据全能力屏卡 → 旧数据聚类屏(无行合并/角色/结构)→ refine 失败徽标 → 现行文本列表兜底(零回归)。
38+
39+
## 四、测试与验证
40+
41+
- **Rust 单测**:`screen_merge`(normalize/similarity 边界、cluster gap 分屏/相似合并/翻回旧页、line_merge 断行拼接/不同行不误并、classify_roles 标题/正文/标签);`ScreenTracker` mock 块流(新版面=新屏/同屏续屏/UI 变化不扰屏);迁移加列旧库可读新库可写;note_filter 屏段落输出/配图格式/旧数据降级
42+
- **前端**:`npm run build` 通过;屏卡流 UI 真机验证清单见下
43+
- **模型**:structure 模型已本地就绪(pp-doclayout-l / pp-formulanet-s / slanet_plus_v2),无新增下载
44+
45+
### 真机手动验证清单(实施完成后执行)
46+
47+
1. 会话29 重跑:原料视图 175 块 → ≤10 张屏卡,每卡带时间区间,无平台 UI/IDE 污染,断行已合并成完整句
48+
2. 旧会话(无 screen_id/bbox):聚类屏正常展示(降级 2 级),列表不劣化(零回归)
49+
3. 直播平台新会话:`1人正在看`/`发送`/频道名不进屏卡;切窗到 IDE 期间画面要点不落库
50+
4. 表格/公式屏:停止后自动精修,屏卡内 Markdown/LaTeX 渲染;模型缺失时徽标降级
51+
5. 转笔记:画面要点 = 屏段落+配图,数量与 full 图对应;预览过滤统计按屏口径
52+
53+
## 五、文件清单(实施中,按提交逐步更新)
54+
55+
**Rust**:`screen_merge.rs`(新:纯函数聚合/去重/行合并/角色)· `screen_tracker.rs`(新:在线屏状态机)· `db.rs`/`db_sessions.rs`(bbox/screen_id 列 + 双写 + 屏聚合查询)· `live_keyframes.rs`/`import_frame.rs`(落库双写 + 前台过滤)· `live_frame_process.rs`(ScreenTracker 挂载 + live:ocr 带屏号)· `ui_junk.rs`(直播元素扩充)· `types.rs`(SessionScreen 契约)· `commands_session.rs`/`db_sessions.rs`(SessionDetail.screens)· `note_filter.rs`(屏段落输出)· `refine_screen.rs`(新:refine_screen_structures)· `outline.rs`/`db_ocr_search.rs`(按屏)· `lib.rs`(注册)· 测试文件若干
56+
57+
**前端**:`types.ts`(SessionScreen/ScreenStructure)· `SessionDetailPanel.tsx`(屏卡流)· `NotePreviewView.tsx`(屏段落+配图)· `LiveActivityPanel.tsx`(按屏摘要)· `OutlinePanel`(大纲按屏)
58+
59+
## 六、后续批次(本版本不做)
60+
61+
- AI 精修屏内容(路线 C:OCR 文本走云端整理——留给 v0.8.0 REQ-141 管线对接,图像永不出本机)
62+
- 持久元素自学习(同 bbox 位置+长期不变小块自动标记 UI,第二波)
63+
- 章节检测升级(屏标题变化=精确章节边界,可选第二波)
64+
- 屏卡图注(C6 REQ-088 影子层接线,产物配图)

0 commit comments

Comments
 (0)