摘要

在游戏中点开一个兵堆会弹出生物面板,其中“数量”显示为“当前/最大”(例如 340/385)。一张 10 月 1 日训练局截图(媒体时间约 16:54.6)上的骷髅数量一直被读成 340/38——少了最后一个 5。

本实验先在当前的截图路由器(把一张截图分给各个读取器的程序)上复现这个错误,找到最早出错的步骤:整图 OCR 已经完整读到 340/385,但数量字段的固定局部裁框右边界只到 x=764,而文字实际延伸到 x=777。只读完全落在框内的整图文字行这一规则,让完整读法被排除;在被截断的小图上,局部 OCR 两次都高分读出 340/38(分数约 0.9999)。这是裁框问题,不是模型没认出来、也不是状态估计(SE)丢了数据。

要回答的问题

能否只修复这个已证实的裁框缺口,让完整数量进入后续流程,同时不改动其他字段、不把被遮挡的数量“猜”出来?

数据与来源

均为明确标记为训练来源的已有截图包(用户在 10 月 8 日允许训练使用),原生 2560×1440,不读视频:

画面 媒体秒 既有参考 用途
骷髅 1014.6 340/385 已知错值
弩兵 767.0 123/150 同布局三位数对照
蛊惑者 1484.4 16/29 两位数对照
拉索斯 1671.6 133/215 三位数和说明框对照

参考来自早先的助手像素复核(不是用户人工真值),本轮逐图复核后一致。另事先登记 3 张已知被遮挡的训练图作拒绝对照(后两张属于同一来源组)。参考值和阵营都不传给 OCR。

方法

修改只针对生物面板的数量字段,并且要同时满足:

  • 整图中检测到的完整分数文字唯一,中心仍在原格内,垂直范围在格内,整图分数 ≥0.90,整串可解析;
  • 向右扩展最多两格高的距离,且扩展范围内不能有另一条文字;
  • 仍用原来两次局部读取与完整整图字面的一致性检查,不把整图值直接抄成答案。

相邻/竞争文字、合并行、低分、其他方向越界或超过上限时,不再在截断的小图上继续 OCR,数量保持未知。其他格子(生命、攻击等)不扩大;身份、阵营、公共数据格式和规则模拟器都不改。

设置

修改前后对同样 4 张图完整运行当前路由器,修改后再加 3 张遮挡对照;CPU、8 核、串行,原图不改。另用当前 App 的结果校验和状态估计公开入口,检查读数能否进入 SE(不注入参考、不设阵营)。

结果

画面 原结果 新结果 其他面板字段
骷髅 340/38 340/385 保持
弩兵 123/150 123/150 保持
蛊惑者 16/29 16/29 保持
拉索斯 133/215 133/215 保持

新裁框为 [659,294,779,324],两次局部 OCR 原文都是 340/385。4 张图共 44 个面板字段,对照既有参考从 43 对 1 错变为 44 对 0 错。非数量字段连原始 OCR 尝试都不变,其他任务除耗时外完全相同。

遮挡对照:一张妖精巨龙的数量仍为未知,但生命 61/75、攻击 34、防御 24 等仍能读出;另两张因主要属性被说明框挡住,面板仍判为“未检测到”。

进入 SE:保存的 SE 请求数量从 [340,38] 变为 [340,385],其他字段不变。但现有的构筑推断并不使用数量,除运行 ID 和耗时外 SE 完整输出不变——这不是推断能力的提升。

软件测试:新增 13 个节点,修改前 12 失败 / 1 通过,修改后通过;8 个相关测试文件共 235 项通过。

失败与负结果

  • 第一次验证脚本把一个耗时字段当成语义字段比较,导致失败;失败目录保留,修正后才通过。
  • 外部审阅指出一个仍未解决的歧义:如果相邻格子的分数文字框也完全满足所有数量格条件,当前规则无法仅凭几何证明它属于哪个字段。审阅后补了一个负例(数量漏检、只有邻格合法分数 12/35 伸入原框但中心在框外,保持未知),但它不覆盖那种完全无法区分的情形,因此不能说已经全面防止串格。
  • 整图检测本身漏掉末位、没检测到跨框行、超过扩展上限、其他分辨率/布局,都未验证;缺检测时仍沿用原裁框。

局限

CPU 整帧读取每张约 26.6–40.8 秒(含系统其他负载),远不能证明整帧 ≤3 秒的目标。参考是助手复核,样本只有 4+3 张,不是独立准确率。安装版 App 未更新;旧的保存结果需要重新识别对应截图才能修正,只重算 SE 不会修 OCR。

结论与下一步

问题在裁框,修复也只在裁框,作用范围被严格限定在一个字段和一组几何条件内。下一步是让 SE 的条件历史使用完整的数量双分量(当前/最大)及其来源,同时保留“归属未知”和生命周期边界,而不是继续扩展裁框。