|
| 1 | +# v0.7.2 — 课堂助手实时体验深化(信息可见性 + 说话人 + 合集 + 断句自适应) |
| 2 | + |
| 3 | +> **状态**: 开发中(2026-08 用户需求批次;四项深化按序实施,三连体验已完成) |
| 4 | +> **目标**: 采集过程中右侧信息透明化(平台/时长/合集/字幕)· 说话人切换可见 · 合集识别与档案检测联动 · 断句随说话人语速停顿习惯自适应 |
| 5 | +> **关联**: [档案检测准确度头脑风暴](../Foresight/brainstorming-video-profile-detection.md) · [视频数据提取清单](../Foresight/video-data-extraction-inventory.md) · [需求池](../product/requirements-pool.md)(REQ-148~154) |
| 6 | +
|
| 7 | +## 一、阶段目标 |
| 8 | + |
| 9 | +1. **体验三连(已完成)**:最近画面按时间顺序排列;ASR 未沉淀行多行展示(识别中按句读拆行 + 已定稿并存);档案新增「未知」选项 |
| 10 | +2. **采集信息面板(REQ-151)**:采集过程右侧空白区显示播放平台、视频时长、是否合集及第几集、字幕情况(有无/内嵌/外部文件) |
| 11 | +3. **合集检测与联动(REQ-152)**:标题系列名/序号提取 → 档案检测系列名投票 + 记忆系列键 + 课程分组扩展 |
| 12 | +4. **说话人分离弱化版(REQ-153)**:SpeakerEmbeddingExtractor 引擎接线 + VAD 段馈入 + 讲者切换事件;课堂助手使用说明提醒 |
| 13 | +5. **语速停顿自适应(REQ-154)**:动态合并阈值 + 语速骤变事件 |
| 14 | + |
| 15 | +## 二、范围(需求追溯) |
| 16 | + |
| 17 | +| REQ | 内容 | 验收要点 | 规划状态 | |
| 18 | +|-----|------|---------|---------| |
| 19 | +| REQ-148 | 最近画面按时间先后排列(用户需求) | 缩略图条旧→新,新图追加末尾 | **已实现** | |
| 20 | +| REQ-149 | ASR 未沉淀行多行展示 + 识别中按句拆行(用户需求) | 识别中多句各占一行灰斜;连续定稿不覆盖丢失;定稿合并待沉淀 | **已实现** | |
| 21 | +| REQ-150 | 档案新增「未知」选项,无法识别时选中(用户需求) | 零信号命中→候选 unknown→自动选中生效;参数默认档零回归 | **已实现** | |
| 22 | +| REQ-151 | 采集信息面板:平台/时长/合集集号/字幕情况 | 采集 30-60s 内信息齐全;播放器 OCR 识别时间与分P文本;字幕检测状态如实 | **已排期** | |
| 23 | +| REQ-152 | 合集检测与联动:extract_series/normalize_title + 档案系列名投票 + 记忆系列键 + 课程分组 | 标题 P/集/EP/括号/数字后缀正确识别(反例不误判);P1 与 P5 投票一致;选一次整系列生效;B站合集自动归组 | **已排期** | |
| 24 | +| REQ-153 | 说话人分离弱化版:引擎接线 + VAD 段馈入 + 切换事件 + 使用说明提醒 | 访谈/会议会话产出讲者切换时间轴;模型缺失降级无标注;使用说明含提醒 | **已排期** | |
| 25 | +| REQ-154 | 语速停顿自适应:动态合并阈值 + 语速骤变事件 | 机关枪说话人不再整段挂起;慢速说话人半句不丢;语速骤变事件落库 | **已排期** | |
| 26 | + |
| 27 | +## 三、关键设计决策 |
| 28 | + |
| 29 | +1. **信息面板数据全本地**:平台=标题后缀规则(`normalize_title`,B站/YouTube/腾讯视频等剥离表);时长=播放器区域 OCR 时间文本(`播放器区域检测`已有,识别 `当前/总时长` 文本);合集=标题规则 + 播放器 OCR 分P文本(`P2/12`、`第2集`);字幕=`subtitle_detect` 实时状态。**零网络请求**。 |
| 30 | +2. **B站 p= 参数获取否决搜索接口**:标题→搜索 API 反查 bvid→pagelist 拿分P——性能可行(两次请求 <1s 后台)但无 cookie 高频 412 风控、接口签名随前端变动、标题外发违背本地优先精神、同名视频搜错。**替代=播放器 OCR(完全本地,顺带解决时长)**;搜索接口记为可选增强(需用户授权)。 |
| 31 | +3. **合集检测纯规则**:P/第X集/EP/括号/数字后缀五模式 + 边界反例(`Python3`/`2026`/`UP主` 不误判)+ 序号开头放弃(诚实降级);跨会话同系列 ≥2 确认合集。与 `course_of`(第X章前缀)合并为统一系列键。 |
| 32 | +4. **说话人分离弱化版**:不聚类身份、只标切换点(时间戳+置信度);sherpa-onnx `SpeakerEmbeddingExtractor`(A3 spike 已验证 1.13 可用)+ wespeaker 模型(Apache-2.0);**会话后离线分析**(session-audio WAV + VAD 段边界 → 每段 embedding → 相邻余弦,复用 `speaker_change.rs` 判定器);模型缺失 → 无讲者标注降级;产物/会话详情展示切换时间轴。 |
| 33 | +5. **断句自适应**:S-1 会话前段统计平均段前停顿(`pause_ms` 已落库)→ 合并 gap 从固定 600ms 参数化(`asr_merge` 阈值注入);S-2 `speech_rate` 已落库 → 段间骤变 → `session_events` 新事件(重点标注备数据,消费端后续接线)。 |
| 34 | + |
| 35 | +## 四、测试与验证 |
| 36 | + |
| 37 | +- **Rust 单测**(实施中):`series_detect` 五模式+反例矩阵、平台后缀剥离、`course_of` 回归(第X章行为不变)、检测系列名投票一致性、`ProfileMemory` 系列键跨集命中+旧 JSON 兼容、断句自适应阈值统计/注入、语速骤变事件 |
| 38 | +- **前端**:`npm run build` 通过(TS 类型检查 + 打包);信息面板 UI 真机验证清单见下 |
| 39 | +- **模型**:wespeaker 说话人 embedding 模型(开发期手动下载至 `models/`,不入库;生产期捆绑/首启下载) |
| 40 | + |
| 41 | +### 真机手动验证清单(实施完成后执行) |
| 42 | + |
| 43 | +1. 采集 B站视频:面板 30-60s 内显示平台=B站、总时长、合集集号(标题带 P 或播放器 OCR 识别) |
| 44 | +2. 采集无字幕视频:字幕状态显示"未检测到字幕";有字幕视频显示"内嵌/滚动字幕" |
| 45 | +3. 访谈/会议会话(模型就绪):会话详情出现讲者切换标记;模型缺失时无标记不报错 |
| 46 | +4. 机关枪讲课(停顿 <600ms):段落粒度改善(不再整段挂起/停止时才冒) |
| 47 | +5. P1/P2 两个会话:档案检测结果一致;确认一次后 P2 直接生效(记忆系列键) |
| 48 | + |
| 49 | +## 五、文件清单(实施中,按提交逐步更新) |
| 50 | + |
| 51 | +**Rust**:`series_detect.rs`(新:normalize_title/extract_series/normalize_episode)· `commands_session.rs`(course_of 扩展)· `video_profile.rs`(ProfileMemory 系列键 + ObservedSignals.is_series)· `commands_video.rs`(检测入口系列名)· `asr_merge.rs`/`live_session_persist.rs`(动态合并阈值注入)· `live_session_loop.rs`(语速骤变事件)· `live_session.rs`/`speaker_engine.rs`(新:embedding 引擎接线)· `session_events.rs`(新事件类型)· `commands_speaker.rs`(新:会话讲者分析命令)· `lib.rs`(注册)· 测试文件若干 |
| 52 | + |
| 53 | +**前端**:`types.ts`(信息面板/讲者切换事件类型)· `LiveActivityPanel.tsx`(信息卡 UI)· `SessionDetailPanel.tsx`(讲者切换时间轴标记)· `ProfileDetector.tsx`/`ClassroomPage.tsx`(系列联动) |
| 54 | + |
| 55 | +## 六、后续批次(本版本不做) |
| 56 | + |
| 57 | +- 讲者身份识别/聚类(A/B/C 时间轴归属,V1.0 模型分发波) |
| 58 | +- B站搜索接口反查(可选增强,需用户授权 + 降级设计) |
| 59 | +- 词级时间戳落库与"定位回听"(V1.0 升级 + schema 迁移) |
| 60 | +- 视频文件元数据提取展示(ffprobe 已捆绑,零成本,独立小批次) |
0 commit comments