Skip to content

Latest commit

 

History

History
73 lines (58 loc) · 6.21 KB

File metadata and controls

73 lines (58 loc) · 6.21 KB

v0.2.0 — 第二阶段:系统实时捕获链路

状态: 实施完成(2026-08-18,代码/测试/前端已交付;模型下载与真机验收待执行) 目标: 打通"实时捕获 → 流式转写/字幕识别 → 双源融合 → 会话落库"的课堂实时链路,替代 v0.1.0 的文件导入路径成为主入口。 关联: 需求池 v0.2.0 · ADR-001 · ADR-002 · ADR-003 · ADR-004 · ADR-005

一、阶段目标

在 v0.1.0 文件导入链路(已验收)基础上,验证实时捕获链路的四个能力:

  1. 系统音频捕获可用:WASAPI 端点环回捕获系统声音(Rust 原生,无第三方运行时)
  2. 屏幕/窗口捕获可用:DXGI Desktop Duplication 按目标窗口抓帧,变化检测去重
  3. 流式 ASR 可用:Zipformer 流式实时转写 + Silero VAD 端点断句,边讲边出
  4. 字幕优先转写可用:字幕区 OCR 为主体、ASR 补全/校对的双源融合,摆脱 ASR CER 天花板
  5. 会话管理可用:每次学习 = 一个会话,列表/详情/检索可追溯

本阶段不做:视频文件导入与字幕探测(REQ-015~018,v0.3.0)、闪卡 SM-2(REQ-019/020,v0.3.0)、AI 多轮问答(REQ-024,V1.0)。

二、范围(需求追溯)

REQ 内容 验收要点
REQ-007 系统音频捕获:WASAPI 端点环回(Rust) 捕获系统输出声音 → 16kHz 单声道 PCM 块流入会话管线;无声源时给出可操作提示
REQ-008 屏幕/窗口捕获:关键帧采样 + 变化检测 按目标窗口抓帧(DXGI),变化检测去重后送 OCR;可配采样间隔
REQ-009 流式 ASR:Zipformer + Silero VAD 实时转写 边说边出(partial 节流推送);端点断句产出 final 段;静音期低 CPU
REQ-010 会话管理:列表/详情/检索 会话 CRUD + 转写段/OCR 块关联存储;按标题/时间检索
REQ-011 实时字幕 OCR:字幕区识别 + 时间窗去重 底部区域启发式裁剪 → OCR;时间窗去重避免重复字幕刷屏
REQ-012 双源转写融合:字幕为主,ASR 补全/校对 有字幕时段以字幕为准;无字幕时段回退 ASR;融合结果落会话

三、技术方案

模块 方案 决策依据
音频捕获 windows crate 0.61 手写 WASAPI(IAudioClient + LOOPBACK) ADR-001;与现有依赖一致,无新 crate 风险
屏幕捕获 windows crate 0.61 手写 DXGI Desktop Duplication ADR-002;GPU 直取性能最优,按窗口句柄约束输出区域
变化检测 分块采样 hash 对比(移植原项目算法为 Rust 纯函数) 原项目已验证:8 块 × 60 字节采样,≥2 块变化才判定,过滤鼠标微动
流式 ASR sherpa-onnx OnlineRecognizer(zipformer 中文 fp16 2025-06-30 新版 + Silero VAD) ADR-003;参考原项目 streamingAsr.ts 流程(端点断句/partial 节流/尾句 flush)
模型分发 应用内一键下载 + 脚本,hf-mirror.com 国内镜像;模型目录 models/streaming-zipformer/ ADR-003;2026-08 升级为 2025-06-30 新版(替代 2023-02-20 旧双语包)
会话数据 SQLite:sessions / session_segments / session_ocr_blocks 表 ADR-004;与 notes 解耦,产物可一键转笔记
字幕 OCR 底部 1/4 区域裁剪 + oar-ocr 识别 + 时间窗去重(纯函数) ADR-005;复用 v0.1.0 OCR 引擎
双源融合 纯规则:字幕段权威 → ASR 段补缝;文本相似度对齐校对 ADR-005;无 LLM 依赖(本地优先降级路径)

四、验收标准

  • 选择一个目标窗口 → 点击开始 → 捕获其音频(若正在播放)+ 屏幕关键帧(代码已交付,真机待验)
  • 流式 ASR 边讲边出字幕(partial 节流推送;静音隔块喂入降 CPU;端点断句)——代码已交付,模型下载后真机验收
  • 带字幕视频(B站/网课)→ 字幕区 OCR 文本与画面字幕一致(底部 1/4 裁剪 + 去重 + 滚动检测已实现,真机待验)
  • 融合转写:字幕为主 + ASR 补缝,无字幕时段自动回退 ASR(fusion.rs 四规则 + 21 项单测)
  • 停止后会话可检索(标题/时间),转写段与 OCR 块时间轴对齐(sessions 三表 + 列表/详情页)
  • 会话产物可一键转为笔记(session_to_note 复用拼接)
  • cargo test 全绿(86 项:会话 CRUD/变化检测/字幕去重/融合/重采样/重打分)
  • 捕获中应用退出/窗口关闭 → 无泄漏、无崩溃(真机验收项;Drop 释放与崩溃恢复已实现)

五、里程碑

步骤 内容 产出
M1 会话管理数据层(REQ-010) sessions 三表 + CRUD command + 单测
M2 WASAPI 端点环回 spike + 实现(REQ-007) capture 模块:音频块流出 + 降级提示
M3 DXGI 屏幕捕获 + 变化检测(REQ-008) frame 采样器 + 变化检测纯函数 + 单测
M4 流式 ASR + VAD(REQ-009) streaming_asr 模块:partial/final 事件流
M5 字幕 OCR + 时间窗去重(REQ-011) 字幕区裁剪 + 去重纯函数 + 单测
M6 双源融合(REQ-012) 融合纯函数 + 单测(字幕权威/ASR 补缝)
M7 实时会话编排 + 前端 UI + 端到端验收 ClassroomPage 实时模式:开始/停止/会话列表

六、开放问题 / 风险

  • WASAPI 环回捕获不到静音设备(无输出设备时)的处理:需设备枚举 + 可操作提示
  • DXGI Desktop Duplication 在远程桌面/锁屏会话下不可用:需降级路径(GDI BitBlt 或提示用户)
  • Zipformer 模型 ~650MB 下载体验:下载脚本需断点续传 + 进度提示 + 校验和
  • 流式 Zipformer 中文 CER 实测:需自建课堂样本评测(SenseVoice 重打分作为质量兜底)
  • 双速率字幕采样(字幕区高频 / 非字幕区低频)的帧率组合需实测调参
  • 字幕 OCR 误识别(滚动字幕/弹幕混入):时间窗去重 + 区域过滤规则需实测校准