Skip to content

Latest commit

 

History

History
178 lines (138 loc) · 23.3 KB

File metadata and controls

178 lines (138 loc) · 23.3 KB

v0.4.0 — 第四阶段:课堂助手本地模式完成 + 实时性/准确性/资源三维优化

状态: 已完成(2026-08,M0–M7 全部实施:TD-033 已偿;M1 EP 改 CUDA(ADR-009);M2 动态 ROI;M3 静默修正 + hash 短路;M4 预算制 + 降级 + OCR 缓存;M5 词表闭环 + 课件预热;M6 预处理链 + 声道选优;M7 降级链 + 巡检 + 诊断;REQ-033 真机验收待用户执行——关闭保护/音频重连/DXGI 重建三项与 GPU 卸载实际生效需真机验证) 目标: 完成课堂助手本地模式的代码构建——实时链路(WASAPI+DXGI+流式 ASR+VAD+字幕 OCR+融合)与文件链路(导入+字幕优先)全本地闭环、无云依赖;落地本轮架构评审确定的优化(GPU 卸载、动态字幕区域、流式先行、资源预算、热词闭环)与头脑风暴采纳增量(音频前端、韧性与可观测)。 关联: 需求池 v0.4.0 · ADR-009(M1 产出)· ADR-005(动态 ROI 扩展)· 头脑风暴 T3/P1/P8 · 机制整合版 v2([ ] 已归档,采纳增量 REQ-036~042 已实施)· 技术债清单

一、阶段目标

  1. 本地模式代码构建完成:课堂助手两条链路(实时捕获/文件导入)全部本地化闭环,v0.3.0 遗留收尾(REQ-033 真机验收、TD-033)
  2. 资源维度:OCR 推理 GPU 卸载(DirectML EP + 能力检测自动选择 + 回退链);采样预算制 + 高负载自动降级
  3. 准确性维度:动态字幕区域检测(替代硬编码底部 1/4);热词/替换词表 + OCR→ASR hotwords 闭环
  4. 实时性维度:流式 partial 先行上屏 + SenseVoice 异步静默修正(Fast First, Correct Later)
  5. 音频前端与信号增强(REQ-041,头脑风暴整合版 v2 采纳):可选 RNNoise/AGC 预处理链 + 声道策略 + 窗口标题信号
  6. 韧性与可观测性(REQ-042,头脑风暴整合版 v2 采纳):ASR 三级降级链 + 资源健康监测 + 静默失败可见化 + 本地诊断面板 + 启动加速

本阶段不做:闪卡(REQ-019/020,用户决策 2026-08 再次顺延:v0.4.0 聚焦课堂助手);时间轴回放与可编辑(REQ-023,V1.0);AI 问答与云端精修(REQ-024/025,V1.0);零拷贝(已裁决:当前负载下无收益);ASR GPU(架构预留 DeviceConfig 扩展位,不换 sherpa-onnx 构建);声学模型本地微调(已否决:sherpa-onnx 无训练能力,见整合版 §7)。

二、范围(需求追溯)

REQ 内容 验收要点 规划状态
REQ-036 OCR GPU 卸载 + ORT 运行时调优:CUDA EP(spike 结论:ORT 1.28 无官方 DirectML 构建,用户指示改 CUDA)+ 能力检测自动选择 + 回退链 + 线程/图优化级别 独显(NVIDIA)机器 OCR 走 CUDA(状态可查);无 NVIDIA/驱动过旧自动 CPU;ForceGpu 失败降级 CPU 并提示;可校准;调优后单帧延迟基准对比 已实施(ADR-009)
REQ-037 动态字幕区域检测:播放区域检测 + det 驱动 ROI 锁定 + 周期重扫 + 滚动字幕强过滤 非底部字幕(全屏游戏/侧边字幕)锁定正确 ROI;非全屏/网页播放器(含 UI 干扰)锁定播放区域内字幕;弹幕被滚动过滤;ROI 失效触发全帧重扫并更新 已实施(spike:oar-ocr 0.9.1 TextRegion 暴露 bounding_box,坐标过滤/ROI 锁定精确路径成立)
REQ-038 实时字幕体验:流式先行上屏 + 异步静默修正 + 哈希去重快速通道 partial 先上屏(识别中样式),重打分完成静默替换无闪烁;同文本 hash 短路不重复识别 已实施(partial 节流 150ms 已有;灰→黑原位修正落地;投票器 identical 短路落地)
REQ-039 采样预算与自动降级:QoS 预算制 + 高负载/电池降级 + VAD 采样旋钮 + OCR 结果缓存(LRU) 字幕区 ≤2fps / 全帧 ≤0.5fps 封顶;高负载自动降档;参数化旋钮生效;PPT 翻页往返不重复识别 已实施(预算封顶校验、降级档、VAD 旋钮、aHash+LRU 缓存、负载监测)
REQ-040 热词/替换词表 + OCR→ASR hotwords 闭环 + 课件预热(REQ-025 本地部分提前) 词表 CRUD;ASR 命中率提升;OCR 替换词纠错生效;OCR 高频词可一键加入热词;PPT/PDF 导入自动生成热词候选 已实施(词表 JSON 持久化 + ASR 注入端点生效 + OCR 纠错 + OCR 高频建议 + 课件候选 pptx/txt/md;PDF 文本提取留 v0.5 完整版)
REQ-041 音频前端与信号增强:RNNoise+AGC 预处理链(可开关)/声道策略/窗口标题信号 预处理开关生效 + 微基准(CER 对比);声道选优生效;标题信号入库 已实施(AGC/削波检测/动态静音阈值 DSP 链默认关 + 声道 RMS 选优接入环回 + source_window 标题已入库;RNNoise 评估留 v0.5,微基准样本留真机)
REQ-042 韧性与可观测性:ASR 三级降级链/资源健康监测/静默失败可见化/本地诊断面板/启动加速 流式引擎失败自动降级不丢流 + UI 提示;磁盘/模型巡检徽标;面板可查帧率/延迟/CPU 已实施(降级链状态机 + live:asr-degraded 提示;磁盘/模型/心跳巡检徽标;失败计数/缓存命中率/后端诊断命令 + 前端面板;引擎常驻启动即加载满足"双击能录"基线;帧率曲线数据源留日志)
REQ-019/020 闪卡 SM-2 + 笔记→闪卡一键生成 — 顺延(用户决策 2026-08:v0.4.0 聚焦课堂助手本地模式)

三、技术方案

M0 v0.3.0 收尾(前置)

  • REQ-033 真机验收:关闭保护 / 音频指数退避重连 / DXGI 周期重建三项验收执行(代码已交付 2026-08-18)
  • TD-033 修复:DxgiState 保存输出 DesktopCoordinates,窗口中心越界立即触发重建(替换最长 30s 空窗的周期重建等待)
  • 技术债清零核对:TD-040(ffmpeg 捆绑)维持 deliberate 观察,本版不处理
  • v0.3.0 发布:CHANGELOG + 版本文档沉淀,进入 v0.4.0 开发基线

M1 OCR GPU 卸载(REQ-036,设计已评审确认 → 产出 ADR-009)

实施修正(2026-08 spike 结论 + 用户指示):EP 由 DirectML 改为 CUDA——ORT 1.28 无任何官方 DirectML 构建(GitHub v1.25+ 停发、NuGet 止于 1.24.4),与 ort-sys rc.13(ABI 1.28)不兼容;CUDA 官方 gpu_cuda12 运行时存在且链接验证通过。原 DirectML 细节均以 CUDA 等价物落地,完整决策见 ADR-009。

目标:能上 GPU 就上 GPU,让出 CPU 给 ASR/前端;决策零误判成本。

  1. ADR-009 编写(按 adr-template,含 spike/合规验证清单):
    • 范围:仅 OCR(det+rec)CUDA EP;不做零拷贝、不做 ASR GPU(DeviceConfig 预留扩展位)
    • 检测机制:混合三层——① DXGI 硬件门槛(无 NVIDIA/WARP → CPU);② ORT 原生回退([CUDA, CPU],oar-ocr 官方示例同款);③ 可选微基准校准("重新检测"按钮)
  2. device_probe.rs(新,~170 行):复用 windows crate Win32_Graphics_Dxgi——CreateDXGIFactory1 → EnumAdapters1 → GetDesc1,产出 AdapterInfo { index, description, vendor_id, dedicated_vram, is_software };纯函数 select_best(adapters) -> Option<usize>:非软件 + NVIDIA(0x10DE)+ 显存 ≥1GB 候选,取显存最大者(CUDA device_id 固定 0,多卡映射留 NVML)
  3. device_config.rs(新,~230 行):OcrDeviceMode { Auto | ForceGpu | ForceCpu }(默认 Auto)+ OcrDeviceConfig { mode, bench } JSON 原子写应用数据目录(路径可注入,测试用);纯函数 decide(mode, best_device, bench) -> OcrBackend { Cpu | Cuda { device_id } }——Auto:无候选 → Cpu;有候选且 bench 显示 GPU 优势 <10%(防抖动阈值)→ Cpu;否则 Cuda
  4. ocr.rs 修改:OcrEngine::load(models, params, backend)——CUDA 时经 OAROCRBuilder::ort_session(OrtSessionConfig::with_execution_providers([CUDA{device_id}, CPU])) 注入(oar-ocr 0.9.1 已确认暴露该 API,EP 顺序即回退顺序);构建失败自动回退 CPU 重建,记录 fallback_reason;E1 调优(intra_threads=2 + 优化级别 All)CPU/CUDA 统一注入
  5. engine.rs 修改:EnginePool::start 增加 backend 与共享状态参数;OCR worker 加载后回写 actual/fallback_reason;ocr_device_status 反映实际生效后端
  6. 分发:app/download-ort-cuda.ps1(PowerShell 下载 onnxruntime-win-x64-gpu_cuda12-1.28.0 到 ort/,.part 原子写入 + 校验,同 sherpa 模式绕 TLS;脚本须保持 ASCII-only——PS 5.1 无 BOM 时按 GBK 解析);.cargo/config.toml 的 ORT_LIB_LOCATION 指向 GPU 包 lib/(含 CPU EP,一套运行时双后端);build.rs 保持复制 onnxruntime.dll(压过 system32 旧版);CUDA 运行时数十个 DLL 不复制进 target——lib.rs setup 最早期 SetDefaultDllDirectories + AddDllDirectory(ORT_LIB_LOCATION)(Win32_System_LibraryLoader);Cargo.toml:oar-ocr features += cuda(经 ocr-cuda 开关默认开,关闭时 CUDA 请求显式失败回退)
  7. 命令与 UI:ocr_device_status / ocr_device_set_mode / ocr_device_recalibrate(后台临时 CPU+GPU 引擎各跑 3 帧真实 OCR 取中位数,持久化 bench);ClassroomPage 设置区加 OcrDeviceSetting 组件(模式下拉 + 当前后端 + 回退原因 + "重新检测"按钮 + 校准轮询);变更下次引擎启动生效并提示
  8. 测试:probe 分类/选择单测(注入 fake adapter 列表,NVIDIA 过滤);decide 决策矩阵(3 模式 × 探测 × bench);config 读写 roundtrip(tempfile);无 NVIDIA 环境 Auto → Cpu 全绿(CI 安全);真 GPU 集成测试标注
  9. ORT 运行时调优(E1,整合版 v2 采纳):intra-op 线程数(2,初始基准值)/ 图优化级别(All)随 EP 注入同一 OrtSessionConfig;调优前后单帧延迟基准对比(校准日志数据源)

M2 动态字幕区域 + 播放区域检测(REQ-037,评审 C 项 + 整合版 v2 采纳)

实施纪要(2026-08):① 前置 spike 确认 oar-ocr 0.9.1 TextRegion.bounding_box 暴露 bbox(含 dt_poly/rec_poly/word_boxes)——坐标过滤 + ROI 锁定精确路径成立,无需退化;② 滚动字幕过滤复用现有雏形(subtitle_ocr.rs is_scrolling LCS 比例 ≥60%,测试已覆盖弹幕/歌词场景)——"位移稳定"方向判定增量留待数据支撑;③ 落地:playback_region.rs(黑边扫描)+ region_tracker.rs(ROI 锁定/失效重扫状态机)+ OcrBlock 携带 bbox + live_session_frame 接入(先验=播放区域底部 1/4,无播放区域退化窗口坐标,零回归)。

动机:ADR-005 的底部 1/4 硬编码在全屏游戏/非标准布局(弹幕、侧边字幕)下失效;且在非全屏/网页播放器(B站/网课平台)场景下,窗口底部 1/4 常被播放器控制栏/推荐列表/评论区占据——字幕 ROI 必须在"实际视频播放区域"坐标系内计算(必要性论证见下方第 2 项)。

  1. 前置 spike:确认 oar-ocr 的 OcrBlock 是否暴露 bbox 坐标(当前只有 text/score)——暴露则坐标过滤 + ROI 锁定;不暴露退化为"区域规则 + 裁剪输入"(ADR-005 已有回退路径,可接受)
  2. 播放区域检测(新,纯规则,成本极低;启动期执行 + 周期性重扫):
    • 必要性论证:全屏播放器播放区域≈窗口(此场景收益低);窗口化/网页播放器窗口含大量 UI 干扰(控制栏/侧边栏/评论区/推荐流)——字幕区启发式在此坐标系下失效,OCR 噪声高、推理浪费大(UI 文字被反复识别)。课堂主场景为网课网页播放器,属高收益侧,必要。
    • 黑边扫描:顶部/底部/左右逐行(列)像素方差阈值判定 black-bar → 得视频矩形(letterbox 场景,主流方法)
    • 退化启发式:无黑边场景(浅色 UI 底色/海报帧)退化为"窗口内文本密度最低外缘带"判定
    • 回退链:检测失败 → 沿用窗口坐标系(现状行为),静默回退不阻断会话
    • 边界:弹幕叠加在播放区域内,播放区域裁剪不能滤弹幕——与滚动字幕过滤(第 4 项)互补而非替代
  3. region_tracker.rs(新,纯逻辑可单测):
    • 启动期:全帧 det 跑 3 帧,播放区域内文本高密度区域(bbox 聚类/密度统计)锁定为 ROI
    • 运行期:仅对 ROI 裁剪 OCR;ROI 内文本消失/低置信超过阈值(如连续 N 帧)→ 触发全帧重扫并更新 ROI(适应场景切换)
    • 初始先验:播放区域内底部 1/4 作为首帧优先区域(避免首帧全帧 det 延迟)
  4. 滚动字幕/弹幕强过滤(B7,整合版 v2 采纳):长公共子串检测 + 滚动方向判定(连续 N 帧共享长公共子串且位移稳定 → 标记滚动字幕丢弃),强化现有雏形
  5. 衔接:播放区域检测 → ROI 裁剪(区域内)→ B2 缩小(>960px 最近邻)→ B1 投票(M3 的 hash 短路前置)

M3 实时字幕体验(REQ-038,评审 A/F 项)

动机:流式链路已存在(ADR-003:partial 节流推送 + SenseVoice 一致性校验重打分),缺的是 UI 层"Fast First, Correct Later"。

  1. 流式先行:partial 事件(≥150ms 节流)上屏,样式标记"识别中"(灰色)
  2. 静默修正:SenseVoice 重打分完成且一致性校验通过 → 前端静默替换文本(灰→黑),无闪烁无跳动;校验不通过保持原文
  3. 哈希去重快速通道:B1 投票器前加精确 hash 短路(同文本直接跳过字符级投票计算),降低重复帧开销
  4. 实现以纯前端为主 + subtitle_ocr.rs 小改

M4 采样预算与自动降级(REQ-039,Foresight P1/P8 + 评审 E 项)

动机:资源利用率维度——现有 DualRateScheduler(ADR-002)为固定双速率,升级为预算制 + 可降级。

  1. 采样预算制(P1):字幕区 ≤2fps、全帧 ≤0.5fps 封顶,模块向调度器申请预算(DualRateScheduler 扩展为预算分配,超预算排队/丢弃)
  2. VAD 驱动采样旋钮(评审 E 项):复用 B3 的 speech_active(RMS 标志)——语音期字幕区为主、静音期全帧提频(板书要点关键期);帧率档位参数化可配;不做"静音降频"(与笔记目标相悖,已裁决)
  3. 自动降级(P8):高负载/电池模式 → 全帧 0.2→0.1fps、关闭次要功能,保 ASR 主链路;资源监测(CPU 占用采样)
  4. OCR 结果缓存(E5,整合版 v2 采纳):区域感知哈希(区域 + 缩略哈希)→ LRU 结果缓存;A→B→A 帧往返(PPT 翻页/窗口抖动)复用缓存零推理;与变化检测构成两级过滤(变化检测滤"无变化"帧,缓存滤"变回去了"的帧)
  5. 调度决策为纯函数,单测覆盖预算分配/降级触发/缓存命中

M5 热词/替换词表闭环(REQ-040,Foresight T3 + REQ-025 本地部分提前)

动机:技能自学场景专业术语是 ASR/OCR 主要错误源;sherpa-onnx hotwords 已支持(TD-032 已防空热词崩溃),缺词表管理与闭环。

  1. 词表存储:热词/替换词表本地持久化(SQLite 表或 JSON,纯本地);CRUD 命令 + 前端词表管理 UI(增删改查 + 批量导入)
  2. ASR hotwords 注入:词表变更后重建流生效(create_stream_with_hotwords,无热词走 create_stream);热词加权生效验证
  3. 替换词表 OCR 后纠错:识别文本按替换词表修正("王者→主者"类错误),纯规则可单测
  4. OCR→ASR 闭环(T3):OCR 高频生僻词自动建议加入热词(用户确认后生效),口头复现时准确率提升
  5. 课件预热(A4 最小版,整合版 v2 采纳):课前导入 PPT/PDF → 本地文本提取 → 自动生成热词/替换词候选(用户确认后生效)→ 预热流;无课件不阻断;完整版(标题树大纲骨架)留 [v0.5]

M6 音频前端与信号增强(REQ-041,整合版 v2 采纳:A1/A2/A5)

动机:课堂环境噪声(键盘/风扇)与音量不均(多人发言)是 ASR 错误的主要环境来源;环回捕获的"成品音频"质量较高,故预处理一律可开关 + 微基准定默认。

  1. 音频预处理链(A1):采集后、VAD 前插入 DSP 纯函数——RNNoise 降噪(~3ms 延迟、低 CPU)+ AGC 自动增益 + 动态静音能量阈值(防轻声讲课被 VAD 截断)+ 削波检测;audio_loopback.rs 后处理;默认关,微基准(降噪开/关 CER 对比)后定默认值
  2. 声道策略(A2):立体声环回按 RMS 能量选优/合并(单声道混入杂音时另一声道更干净);不同播放器布局样本验证
  3. 窗口标题/元数据信号(A5):捕获目标窗口标题 → 章节语义暗示("PPT-第3章"/IDE 文件名)采集入库;为后续章节检测(v0.5 C1)提供投票信号,本期仅采集与存储
  4. 测试:预处理参数/声道选优纯函数单测(合成音频);微基准报告归档

M7 韧性与可观测性(REQ-042,整合版 v2 采纳:F5/F2/F3/G2/E3)

动机:防御性编程铁律 + "先测量后优化"原则——降级链、健康监测与诊断面板是 v0.4.0 三维优化的测量与兜底基础设施。

  1. ASR 引擎降级熔断链(F5):三级链正式化——流式 Zipformer → 离线 SenseVoice 按块转写(ADR-003 方案 B 从"保留"升为正式降级档)→ VAD+静音占位(不丢流);降级时 UI 明确提示准确率下降;决策为纯函数可单测
  2. 资源健康监测(F2):磁盘空间/模型文件完整性/引擎线程存活巡检 → 会话页状态徽标(磁盘写满崩溃是最常见隐性故障)
  3. 静默失败可见化(F3):OCR/ASR 失败计数 → 会话摘要提示(TD-001 笔记侧已有,扩展到会话详情)
  4. 本地诊断面板(G2):帧率/延迟/CPU 曲线/预算命中率/OCR 缓存命中率(开发期可见,可隐藏)——v0.4.0 优化项的实测依据,替代当前代码推断的开销排序
  5. 启动加速(E3):模型 mmap/预加载 + 首会话前后台预热 + WebView 懒加载;"双击到能录"体验
  6. 测试:降级链决策矩阵、巡检器状态机单测

M8 端到端验收 + 发布

  • 全链路验收(实时会话 + 文件导入 + 优化项回归);cargo test + cargo clippy 全绿
  • 更新 CHANGELOG;版本文档沉淀;需求池状态流转关闭

四、验收标准

  • GPU 卸载:有独显机器 OCR 实际走 DirectML(ocr_device_status 验证);无 GPU/核显机器自动 CPU;ForceGpu 在 GPU 不可用时降级 CPU 且 UI 提示;"重新检测"校准后决策生效
  • 动态 ROI:非底部字幕视频(模拟全屏游戏/侧边字幕)锁定正确区域;ROI 文本消失触发全帧重扫并更新
  • 实时体验:字幕先灰后黑静默替换,无闪烁;同文本 hash 短路不重复识别(日志/耗时验证)
  • 采样预算:CPU 占用峰值下降(对比 v0.3.0 基线);高负载降级档位生效;旋钮参数可配
  • 热词闭环:热词表生效(ASR 术语命中率提升);替换词 OCR 纠错生效;OCR 高频词一键加入热词闭环
  • 回归:v0.3.0 验收项不劣化(字幕优先/融合/停止秒回/实时面板/韧性采集)
  • ORT 调优:单帧 OCR 延迟基准对比(调优前后,E1)
  • 播放区域检测:模拟网页播放器(窗口含 UI 干扰 + 黑边)锁定播放区域内字幕;无黑边场景静默回退不阻断(M2)
  • 滚动过滤:弹幕/歌词视频不产生字幕段(B7)
  • OCR 缓存:PPT 翻页往返不重复识别(日志/耗时验证,E5)
  • 课件预热:导入 PPT 后热词候选生成,确认后 ASR 术语命中率提升(M5)
  • 预处理链:开关生效 + 微基准 CER 对比报告归档,默认关(A1)
  • ASR 降级链:模拟流式引擎失败 → 自动降级离线按块转写 → 不丢流 + UI 提示(F5)
  • 诊断面板:帧率/延迟/CPU 曲线/预算命中率可查(G2)
  • cargo test 新增:probe 分类与选择、decide 决策矩阵、config roundtrip、播放区域检测、ROI 锁定/重扫决策、滚动过滤、缓存 LRU、预算分配/降级、词表加载/匹配/建议、降级链决策、预处理参数

五、里程碑

步骤 内容 产出
M0 v0.3.0 收尾(REQ-033 真机验收 + TD-033 + 发布) 干净基线
M1 OCR GPU 卸载 + ORT 调优(REQ-036) ADR-009 + device_probe/device_config + EP 注入 + 分发 + 状态 UI + 基准
M2 动态字幕区域 + 播放区域检测(REQ-037) region_tracker + 播放区域检测 + 滚动过滤 + spike 结论
M3 实时字幕体验(REQ-038) 流式先行 + 静默修正 + hash 短路
M4 采样预算 + OCR 缓存(REQ-039) 预算调度器 + 降级策略 + LRU 缓存
M5 热词闭环 + 课件预热(REQ-040) 词表管理 + hotwords 注入 + 替换纠错 + 预热
M6 音频前端与信号增强(REQ-041) 预处理链 + 声道策略 + 标题信号 + 微基准
M7 韧性与可观测性(REQ-042) ASR 降级链 + 健康监测 + 诊断面板 + 启动加速
M8 端到端验收 + 发布 v0.4.0

六、开放问题 / 风险

  • oar-ocr bbox 坐标暴露(M2 前置 spike):暴露则 ROI 锁定精确;不暴露退化为区域规则 + 裁剪输入(可接受,ADR-005 已有路径)
  • DML 运行时分发:~100-200MB 体积 + GitHub 下载源在 TLS 拦截环境的可用性(PS 脚本多镜像回退,同 ffmpeg 模式)
  • DirectML 算子覆盖:rec 模型 LSTM/CTC 节点在 DML 上真正执行还是回退 CPU(spike 决定收益上限)
  • 多 GPU 枚举序:DML device_id 与 DXGI 枚举序一致性(spike 验证;不一致则退化为 device_id=0)
  • GPU 卸载生效时机:配置变更下次引擎启动生效(不做热重启,避免中断进行中会话)
  • TD-040:生产安装包无捆绑 ffmpeg(deliberate,体积策略观察中)
  • 闪卡 REQ-019/020:状态待定(用户决策 2026-08 暂缓,v0.4.0 不纳入)
  • DirectML 与核显组合:新核显可能快于老独显——由"重新检测"校准兜底(Auto 默认仍走硬件门槛 + ORT 回退)
  • 播放区域检测可靠性(M2 新增):黑边扫描对无黑边视频(浅色 UI 底色/海报帧)的识别率需 spike(合成帧 + 真实站点样本);失败必须静默回退窗口坐标系
  • 弹幕与字幕同区域共存(M2):滚动过滤(B7)误杀正常字幕的阈值校准
  • RNNoise 净收益(REQ-041):环回捕获为成品音频,降噪可能损伤音质——微基准(开/关 CER 对比)决定默认值,默认关
  • 声道策略样本(REQ-041):不同播放器立体声布局(反向/单声道复制)下的选优行为需样本验证
  • sherpa-onnx SessionOptions 暴露面(E1):线程/arena/图优化可配置性核对(oar-ocr 已确认暴露,sherpa 侧待核)