摘要

游戏魔法书上每个法术槽的左下角有一个罗马数字角标(I、II、III、IV),表示法术的等级。这个角标很小,项目用“字形分离 + 模板匹配”读取:先把裁区里的笔画分开,过滤掉圆框、背景等不像笔画的部分,再与模板比对。

上一轮完整分母审计(B106)发现一个错误:一个 III 的右边那一笔碰到了裁区边缘,旧逻辑把它当作“不完整的东西”删掉,然后对剩下的两笔高分给出 II。读错比读不出更糟。本实验(内部编号 B107)只改一条规则:如果一个满足“笔画”条件的成分碰到裁区边缘,就拒绝整个字形,而不是删掉它再接受剩下的部分。

结果:那个错误变成了“未知”,没有引入新错误,但读对的数量没有增加——这是减少错误接受,不是恢复正确值。

要回答的问题

改用“碰边即拒”的规则后,能否消除截断导致的错读,同时不丢失任何原本读对的角标、不增加负例误收?

数据与来源

  • 训练验证:早先实验(B077)4 个训练来源组的 320 个已有裁图和原冻结模板。
  • 开发回放:B106 的 14 页魔法书完整输出(已曝光,提出这个机制假设本身就用过其中的失败,所以只是回归,不是盲测)。
  • 额外回归:早先 28 次完整截图输出的字形回放,以及 18 张完整截图的实际重读(14 书页 + 4 其他场景控制)。

方法

保留原来的笔画判定条件(高度、宽度、面积、垂直中心位置)。新规则:符合这些条件、却触碰裁区边界的成分出现时,拒绝整个字形,保留原 OCR 尝试、原生裁区和“未知”状态。普通整高的圆框仍能被正常分离;空图和其他负例行为不变。

不扩大裁区、不改定位、不改模板库和门槛、不用法术名称或身份来修正罗马数字。

设置

规则先在训练 320 个裁图上验证,冻结后才做开发回放;此后不再根据开发图调整规则。

结果

  • 训练 320 裁图:原 55 正确、14 未知、251 负例拒绝,全部保持,0 个接受变化。
  • 开发 14 页:只有一个字段变化——那个 III 从错误的 II 变为未知。罗马数字从 140 对 / 7 未知 / 1 错,变为 140 对 / 8 未知 / 0 错,原 140 个正确都没有丢。
  • 28 次完整截图字形回放:0 个字段变化。
  • 18 张完整截图实际重读(重新运行检测和 OCR):除计时外,所有观察与预期完全一致,包括名称、图案身份、角标、中央数字和面板范围。
  • 同槽字面仍 134/148;身份和字面都对仍 120/148;48 个空槽控制保持。
  • 24 个相关测试文件 356 项通过,其中包括“完整笔画旁边有截断笔画”的四个方向合成回归。

失败与负结果

真正的问题——角标裁区本身偏了——没有解决,那个 III 没有被读回来。当前流程用小角标的霍夫圆(一种找圆的图像算法)给文字定裁区,只对“没找到圆”的情况用全页共同偏移重试;已经找到、但位置或半径不准的圆不会被修正。这解释了为什么已有的偏移校正仍不能保证裁区完整。

局限

开发 14 页已曝光,新规则是否普遍减少截字还需要其他来源证据。没有重跑全仓测试,没有测时延。

结论与下一步

“宁可不读也不读错”在这里落实为一条简单规则,且没有任何副作用。下一步按用户建议,利用魔法书页边框和法术大圆框作为独立几何锚点,在训练集上检验能否校正小圆的中心和半径(先只检验共同平移,不给每个槽任意位移),再在原图上重新裁字;证据不足时不补内容,翻页、模糊的画面等待稳定帧。