摘要

游戏的战斗日志(Logs)是一个可以打开的面板,按时间列出“谁攻击了谁、造成多少伤害、谁施放了什么法术”。程序从录像里读日志时,为了省 OCR 时间,会用像素变化“去重”:如果下一帧和已选中的帧差不多,就不再读。

本实验(内部编号 B071)原本想回答:日志一直开着、不断出现新行时,程序能否保留每一条新事件,等多久才能读到? 可是在训练来源里没找到“持续开页、自然追加新行”的片段,只找到两段反复滚动查看历史的日志。原设想的完整事件覆盖和等待统计没有完成。

但这两段滚动日志暴露了一个具体风险:一张较淡的帧已经被选中,OCR 读错了 4 个玩家名;200 毫秒后内容相同、更清楚的帧却被局部去重判为“重复”而跳过。保留了一帧,不等于已经读对它。

要回答的问题

  1. 日志持续打开时,两种像素筛选策略能否保留每次新内容?
  2. 同内容的重复帧会不会被反复读取?
  3. 从第一次清楚可读到被选中要等多久?
  4. 选中帧的实际 OCR 结果如何?

数据与来源

  • 先在五个已知日志画面附近按 2 fps 检查 210 帧,自动找出 27 张日志,大多是短暂开页、静止或中途关页,不足以验证持续追加。
  • 改从 12 份已有的场景识别缓存里检索 37 个日志打开区间,选出两个最长的(31.4 秒和 13.6 秒),扩大为 34 秒和 16 秒窗口,都属于训练来源。冻结的验收来源没有打开。
  • 两窗口 2 fps 初筛 100 帧,再按 10 fps 原生回放 500 帧。
  • 实际内容主要是滚动查看历史日志,不是新战斗事件发生。
范围 数量 审核程度
稠密原生采样 500 帧 完整输出,未逐帧精标
两策略选中并集 46 张 全部原生 OCR,41 张文字仍是草稿
原生文字精标 5 张 / 143 条完整行 时钟、玩家名、正文逐行核对(89 条不同内容)
裁切未知 1 条事件行、1 个回合标题 不用相邻帧补全

方法

用已冻结的面板检测器定位日志(不传入真值框),比较两种之前实验里的像素筛选组件:

  • 均值变化组件:整块日志区域平均像素变化够大就选。
  • 局部变化组件:看局部小块的最大变化,变化小于阈值 20 就判为重复。

筛选回放中的“可用”只表示帧被留下,不代表 OCR 正确。OCR 在之后单独串行运行。评分只做 NFKC 和空白规范化,不修字、不按游戏资料替换名字。

设置

本轮没有训练、选模型、改阈值或改生产代码。玩家名中的方框字符只标可见的样子,不猜原名,也不判断敌我。

结果

窗口 均值组件选中 局部组件选中
长访问 1 22 22
长访问 2 24 23

46 张选中图共返回 1,307 条候选行(草稿,不算正确数)。五张精标原图:

原图 完整行 时钟对 玩家名对 正文对 三项全对
长访问 2 第 15 帧(较淡) 29 29 25 29 25
长访问 2 第 17 帧(同内容更清楚) 29 29 29 29 29
长访问 1 第 82 帧(第一回合页) 28 28 28 27 27
长访问 1 第 195 帧(滚出四条新行) 29 29 29 29 29
长访问 2 第 111 帧(较早历史) 28 28 28 27 27

合计 143 行:时钟 143、玩家名 139、正文 141,三项全对 137。这是挑选的训练诊断样本,不能用来宣称 95% 目标达成;两个策略的总正确率也不能直接比,因为多选一整页会改变分母。

热身后,从打开文件到已有检测框内的日志结果 p95 约 0.421 秒、最大 0.868 秒,不含面板检测、视频解码和 App 排队。

失败与负结果

  • 主问题没回答:没有找到持续追加事件的片段,完整事件覆盖和“首次清楚 → 被选中”的等待统计都没做。
  • 关键反例:较淡帧(解码时刻约 1,130.5 秒)29 行正文都对,但 4 个玩家名错(漏方框、多出变音符、右括号误成 5)。约 200 毫秒后同内容的清楚帧 29 行全对,却被局部组件判为重复(局部差 16.77 < 20);均值组件则会再选它。少读一次在这里丢掉了修复机会。
  • 不能靠调低阈值或固定等一会儿解决:首张原图 OCR 约 361 毫秒,比两帧间隔 200 毫秒还长,等 OCR 失败再要下一帧时清楚帧可能已经过去。
  • 另两条正文错误:一处漏了“死亡单位”的“位”;一处把透过半透明日志显示的“敌方回合”并入施法句——等动画结束也消除不了这种持久的背景透字。

局限

  • 只覆盖日志滚动,没有覆盖开页期间的自然追加。
  • 500 帧没有全部精标,不能报告选帧召回率或逐事件等待 p95。
  • 这是训练来源诊断,不是盲测;更多相邻帧不等于更多独立对局。
  • 观察到的是“候选组合的风险”,不是默认 App 已有此行为的证明。
  • 之前完整测试套件里的 2 个旧失败仍未修复。

结论与下一步

“稳定”“可读”“读对”是三件不同的事,只靠两帧像素相同不能确认读取成功。下一步把重点放在“选帧—读取反馈—有界重试/去重”的组合上:读取质量不好时,保留后续已到达的更清楚候选,再在其他来源上冻结评估。项目的十场独立对局、逐字段 95%、App 热 p95 ≤3 秒目标都没有完成。