Skip to content

Commit 765b62a

Browse files
committed
docs(ocr): v0.7.3 屏卡体系实施状态与校准注记
1 parent df8d3be commit 765b62a

2 files changed

Lines changed: 11 additions & 8 deletions

File tree

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
- **新增代码七维审查**:五处即修(平台表单一来源/中文数字判定去重/暂停后语速基准重置/拆行标点过滤/讲者分析异步化+暂停态探测),提交 751b9c6
2323
- **验证**:1016 单测全绿 + clippy 干净 + 前端构建通过 + docs-check 通过;提交 9097e8f~751b9c6 已推送 rebuild
2424
- **v0.7.3 画面要点屏卡体系设计**(REQ-155~161 + ADR-015):会话29 实证(175 块/12 时间戳重复/UI 污染/无 bbox)→ 头脑风暴裁决(路线 A+B+D,屏段落+配图)→ 设计规格 + ADR + 需求登记,提交 1545bea
25+
- **v0.7.3 屏卡体系代码建设**(M1-M5):屏聚合纯函数(screen_merge/screens)+ bbox/screen_id 落库迁移 + 在线屏分配(ScreenTracker)+ 采集治理(前台过滤/直播 UI 黑名单)+ 消费端(原料屏卡流/笔记屏段落配图/大纲检索按屏/实时面板按屏)+ 结构识别接线(停止后自动精修/屏卡渲染精修产物);1053 单测全绿 + clippy 新代码零警告 + 前端构建通过;提交 1536222/8e9e889/d84ad14/df8d3be
2526

2627
## 技术债摘要
2728

‎docs/versions/v0.7.3.md‎

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# v0.7.3 — 画面要点屏卡体系(OCR 碎片化治理 + 屏级组织 + 结构识别接线)
22

3-
> **状态**: 已排期(2026-08-20 头脑风暴裁决完成:路线 A+B+D,笔记形态=屏段落+配图;实施待启动)
3+
> **状态**: 开发中(2026-08-20 头脑风暴裁决完成;M1-M5 代码建设已提交——屏聚合纯函数/落库/在线屏分配/消费端/结构接线,1053 单测全绿;真机验收待执行)
44
> **目标**: 画面要点从"块流"升级为"屏卡"——屏级时间区间(00:02–03:23)+ 屏内版面组织(标题/正文/图注标签)+ 采集治理(前台过滤/平台 UI 黑名单)+ 结构识别接线(表格/公式/代码)
55
> **关联**: [头脑风暴 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)
66
> **触发**: 用户反馈"画面要点(OCR)提取的内容零碎(时间整理和识别内容)";会话29 实证(175 块 OCR / 12 时间戳重复 / 平台 UI+其他窗口污染 / 无 bbox 落库)
@@ -30,15 +30,17 @@
3030

3131
1. **屏 = 派生视图而非新表**:屏 first/last_seen/成员块 = `GROUP BY screen_id` 聚合;旧数据(screen_id NULL)走 `cluster_blocks_into_screens` 聚类兜底——零冗余、可逆(ADR-006 派生视图传统,ADR-015 决策 2)。
3232
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 链路)零改动;停止后批量精修;失败降级徽标保留。
33+
3. **屏边界**:版面指纹变化(layout_cache 现成)= 新屏;同屏内容相似 → 续屏(更新 last_seen 不新增行);翻回旧页间隔>2 分钟 = 新屏。
34+
- **实现校准(2026-08-20)**:`CLUSTER_GAP_MS` 初版 3s 与 OCR 帧间隔(强制兜底 15s + 事件驱动,会话29 实测 5-58s)冲突导致同屏续帧误分屏——按实测校准为 **120s**;`TITLE_HEIGHT_RATIO` 初版 4% 把正文/标签(30px/626px 屏高 ≈4.8%)误判为标题——校准为 **6%**(只命中 PPT 大标题)。
35+
4. **行合并保守阈值**:bbox y 中心差 ≤ 行高×0.6 且 x 间隔 ≤ 字高×0.5 → 同行拼接;跨帧同位置块先经 `dedupe_blocks` 去重(防多帧重复识别被 line_merge 误拼);屏卡可展开块级明细复查(原料不动)。
36+
5. **采集治理**:前台≠目标窗口期间画面要点不落库(复用 REQ-084 foreground_foreign);平台 UI 黑名单扩充(LiveUi 类别:正在看/人在看/人看过/发送/下载/预约/回放/分享/直播)+ 持久元素自学习(第二波)。
37+
6. **结构识别**:只补消费端接线(`refine_screen_structures` 纯函数匹配 artifact_blocks 精修产物),识别内核(SLANet/FormulaNet/refine 链路)零改动;**停止后自动精修**(stop_live_session 检测 table/formula 区域块 → 后台 run_refine,模型未就绪内部降级跳过);失败降级徽标保留。
3738
7. **降级四级链**:新数据全能力屏卡 → 旧数据聚类屏(无行合并/角色/结构)→ refine 失败徽标 → 现行文本列表兜底(零回归)。
39+
8. **导入链路口径**(REQ-156 实现注记):bbox 反算回帧坐标系落库(裁剪图坐标 + 等比缩放 + 顶部偏移,TD-046 同思路);screen_id 不分配(None)——视图层聚类兜底与在线 ScreenTracker 共用同一套纯函数,结果等价。
3840

3941
## 四、测试与验证
4042

41-
- **Rust 单测**:`screen_merge`(normalize/similarity 边界、cluster gap 分屏/相似合并/翻回旧页、line_merge 断行拼接/不同行不误并、classify_roles 标题/正文/标签);`ScreenTracker` mock 块流(新版面=新屏/同屏续屏/UI 变化不扰屏);迁移加列旧库可读新库可写;note_filter 屏段落输出/配图格式/旧数据降级
43+
- **Rust 单测**(M1-M5 已提交):`screen_merge`(normalize/similarity 边界、cluster gap 分屏/相似合并/翻回旧页/累积重置、line_merge 断行拼接/不同行不误并/位置去重、classify_roles 标题/正文/标签、dedupe 跨帧去重);`ScreenTracker` mock 块流(新版面=新屏/同屏续屏/gap 分屏/翻页分屏);`screens`(分组/聚类/混合/结构块/图匹配/精修产物匹配);迁移加列旧库可读新库可写;note_filter 屏段落输出/过滤口径回归——**1053 单测全绿 + clippy 新代码零警告**
4244
- **前端**:`npm run build` 通过;屏卡流 UI 真机验证清单见下
4345
- **模型**:structure 模型已本地就绪(pp-doclayout-l / pp-formulanet-s / slanet_plus_v2),无新增下载
4446

@@ -52,9 +54,9 @@
5254

5355
## 五、文件清单(实施中,按提交逐步更新)
5456

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`(注册)· 测试文件若干
57+
**Rust**:`screen_merge.rs`(新:纯函数聚合/去重/行合并/角色/dedupe)· `screen_tracker.rs`(新:在线屏状态机)· `screens.rs`(新:屏构建/可消费过滤/图匹配/精修产物匹配)· `db.rs`/`db_sessions.rs`/`db_sessions_rows.rs`(bbox/screen_id 列 + 双写 + 行映射)· `types.rs`(SessionScreen/ScreenStructure 契约)· `live_keyframes.rs`/`import_frame.rs`(落库双写 bbox + 屏号/导入反算)· `live_frame_process.rs`/`live_session_frame.rs`(ScreenTracker 挂载 + 前台过滤 + live:ocr 带屏号)· `ui_junk.rs`(LiveUi 直播元素扩充)· `commands_session.rs`(SessionDetail.screens + 笔记 attach 配图 + 大纲按屏)· `note_filter.rs`(屏段落渲染/refresh_screen_points)· `outline.rs`(detect_outline_smart 屏标题优先)· `db_ocr_search.rs`(命中带屏区间)· `commands_live.rs`(停止后自动精修触发)· `screens.rs`(refine_screen_structures)· 测试文件若干
5658

57-
**前端**:`types.ts`(SessionScreen/ScreenStructure)· `SessionDetailPanel.tsx`(屏卡流)· `NotePreviewView.tsx`(屏段落+配图)· `LiveActivityPanel.tsx`(按屏摘要)· `OutlinePanel`(大纲按屏)
59+
**前端**:`types.ts`(SessionScreen/ScreenStructure/ocrScreens/screenId)· `SessionDetailPanel.tsx`(屏卡流+块级明细+配图)· `NotePreviewView.tsx`(屏段落配图渲染)· `LiveActivityPanel.tsx`(按屏摘要)
5860

5961
## 六、后续批次(本版本不做)
6062

0 commit comments

Comments
 (0)