摘要

在游戏里右键一个生物,会弹出生物面板,上面有名称、阶级、攻击、防御、伤害、生命、士气、幸运等字段。读取器原来按固定位置去每个字段的区域做 OCR。上一轮审计发现,有 8 张训练截图上 74 个本可读的字段根本没被请求读取:其中 7 张没有检测到面板,1 张没通过“面板底边固定”检查。查看已缓存的 OCR 文字后发现,原因是面板弹出动画让上方文字整体下移了约 10–25 像素。

本实验不降低面板检测门槛,也不假造一个完整面板框,而是用当前截图里已经读到的标题、阶级和主动能力文字的位置,推算上方信息区的实际位置,再把 11 个字段的搜索区域整体平移过去读取。训练来源的局部字段正确数从 575 增加到 662,漏读从 74 降到 3,没有新增误读。但在最新数据的补充面板上有一处回归,因此它仍是默认关闭的显式选项。

要回答的问题

面板随动画移动时,能否只靠当前截图里的文字锚点找到正确的读取位置,并且不影响其它已经正确的观察?

数据与来源

  • 训练来源:42 张原图(来自 6 个来源组)+ 45 张相邻帧(来自其中 4 组,含两张与种子重复的图),包括 14 张没有面板的对照。
  • 局部参考:每张生物场景 11 个字段格,分为完整可读、完整值不可判、位置不存在三种;不可判和不存在的位置单独计数,不算对也不算错。
  • 回归:重新完整运行 210 张训练/校准图、45 张邻域图和 71 张“最新”图(一个曝光过的连续来源组,共 5 局)。冻结的历史来源没有打开。

方法

  1. 从当前截图已有的 OCR 文字行里,找到标题、阶级、能力标签等直接文字证据,确定上方信息行的垂直位移。
  2. 保留原来的界面检测框,不虚构面板边界、所属方或整页可读性;只平移 11 个字段的搜索区。
  3. 生命值允许使用当前检测到的完整文字行,修复固定框把 250/250 截成 250/25 的问题;不拆分合并文字,不用目录真值或前后帧补字。
  4. 两项保护:移动后的行如果和灰度增强后的高分两遍读数矛盾,两者都拒判;弱读数不投票,也不把未知提升为已知。
  5. 为了不扰动其它字段,最终实现先按原批次读完整图,静止字段复用原观察,只把移动过的生物字段单独补读;原观察另存。

设置

规则在训练来源上冻结后,才运行校准和最新数据;最新数据上没有调任何阈值。计时为原生 2560×1440 文件 → 界面 → OCR → JSON,常驻热启动,不含 App 截图和显示。

结果

同一局部参考范围 之前正确 本轮正确 拒判 漏读 误读
原 42 张训练图(428 个完整值) 387 418(97.66%) 10 0 0
45 张训练邻域图(266 个完整值) 188 244(91.73%) 19 3 0

合计 575→662,净增 87 个正确字段;原来正确的字段没有丢失。另有 109 个不可判、154 个不存在位置保持未知。邻域含重复种子,这 87 个不是独立场景,也不是盲测。

训练诊断的三个阶段(按修正后的标注计分,分母都是 694 个完整值):

阶段 正确 误读 拒判 漏读
第一版平移 666 5 20 3
第二版平移 667 2 22 3
最终完整截图 662 0 29 3

最终版用保守的冲突规则换掉了误读:损失了 5 个本可恢复的正确值,同时挡住了 2 次同图漏负号的错误。

对照:165 个原训练场景中 38 次触发了定位,全部发生在 42 个生物场景里;其余 123 个场景和 14 张无面板邻域都没有误触发。这些有限对照不能证明在新来源上零误报。

326 张完整截图回归:原有界面、身份、占用、场景和日志结果完全保持;2851 个非生物数值字段连原始分数都逐项一致;新增 77 次生物字段请求,0 次读取失败。原较窄的声明字段:训练 927→929/934;校准 280/280 保持;最新 356/363 保持。热启动 p95 0.976 秒(最大 1.153 秒),冷启动界面 2.739 秒、OCR 5.016 秒。

失败与负结果

  • 标注错误。 逐像素复查后,前一轮把一张图(及其完全重复的邻帧)的士气标成 1,实际能看到负号,应为 −1。这条更正单独记录,旧标注和旧分数保留;先前“无误读”的说法撤回。
  • 第一版会引入背景数字。 生命截断成 250/25、灰度增强把幸运 1 读成 51;第二版限定完整生命行并关闭移动行的未知值救援。早期结果都保留。
  • 第一次回归失败。 首次完整跑 210+45 张时,虽然英雄界面数值没变,但 OCR 批次组合变了,导致原始分数变化,严格回归不通过;最终改为保持原批次、只补读移动字段。
  • 最新数据的一处回归。 补充面板 32 个完整字段从 31 正确/1 拒判变为 30 正确/2 拒判:一张图的生命值 55/55 两遍都读对,但平移 4 像素后背景检查测得跨度 9,超过冻结阈值 8,于是拒判(旧框跨度 5)。没有拿这张最新图去调规则。
  • 全套 Perception 测试 7241 通过、2 个既有导入顺序测试失败、6 跳过,不是全绿。

局限

  • 结果来自训练来源的开发评估;最新数据是 1 个曝光过的来源组,不是 5 个独立来源。
  • 逐场景逐字段 95% 的目标没有达到。
  • 剩余 3 个漏读格没有足够的文字锚点,仍未解决。

结论与下一步

“按当前文字定位”确实补回了大量因面板动画而漏读的字段,且没有引入误读;但因为最新数据上的一处误拒,它保持为实验开关,不改默认。下一步转向局部数值完整性和质量拒判:在训练来源补生命值背景边界、负号、完整数量和兵槽小数字的清楚/遮挡对照,而不是在最新图上降低阈值。