摘要

截图路由器(把一张截图分给各个读取器的程序)需要先判断“这是不是魔法书页”,才会派发法术读取。它的判断依据是 OCR 读到的法术名:之前(B156)的门槛是“同一排至少 2 个法术名”。可是有些英雄的魔法书只有一个法术,一页上就只有 1 个法术名,这种书页一直被漏掉。

直接把门槛降到“≥1 个法术名”能找到几乎所有书,但会把 47 个生物面板也当成书——因为生物面板上的能力名也是法术名,OCR 分不开。本实验(内部编号 B177)加了一个像素锚点:魔法书页面是羊皮纸颜色。之后又处理了另一类漏读:书页没歪、字都清楚,但右页整体比左页高几十个像素,被排版检查拒绝。

要回答的问题

  1. 能否用简单的像素特征区分魔法书和其他画面,从而安全地接收只有一个法术的书页?
  2. 对“右页整体偏高”的书,能否在不放松其他检查的前提下接收?

数据与来源

  • 训练:训练截图包,复用 B156 缓存的整帧 OCR 和原图。
  • 测试:测试截图包(含早期冻结评测录像的图)共 626 帧,只用于最终评估,每一步只跑一次,不据此调整。

方法

第 1 步:羊皮纸占比

  • 在两页书的内部量羊皮纸颜色像素的比例(HSV 颜色空间:色相 8–32、饱和度 20–120、亮度 ≥140),取两页中较小的那个。
  • 规则:没定位到书、但羊皮纸占比 ≥0.2 时,“≥1 个法术名 + 书上的蓝量(法力)分数”也算书页。
  • 像素检查放在调用方(路由器的发现步骤和法术书读取器),定位模块本身仍只看 OCR,只多一个开关。

第 2 步:按页偏移

诊断被“布局或可见性不确定”拒绝的书:训练 8 张、测试 2 张是书已定位、被排版检查拒绝。训练里 5 张只是因为同一排标题高度差(0.012–0.016 个画面高,阈值 0.009)。按页拆开量,右页整体比左页高 6–27 像素,页内对齐良好——像 3D 书模型带了一点倾斜,字都清楚。

改动:只在原检查仅因高度失败时,按页各估一个垂直偏移(页内标题位置的中位数),用它重新量行距和同排高度差;两页偏移差 ≤0.025、页内各项仍用原阈值,才通过。槽位网格按槽所在的页加上该页偏移。原来就通过的书不受影响。

设置

训练上选择规则;测试只在最后各跑一次。逐项对照截图的核对由模型目视完成(CLAUDE_VISUAL),不是人工审核。

结果

羊皮纸占比在训练集上的分布:

场景 帧 占比 最小 / 中位 / 最大
法术书 167 0.449 / 0.670 / 0.944
生物面板 212 0.001 / 0.004 / 0.010
战场 266 0.000 / 0.002 / 0.015
英雄面板、日志、攻击/法术预览 253 最大 0.007

两类之间差距很大。“≥1 个法术名 + 蓝量 + 占比 ≥0.2”在训练上:书 165/167,其他画面 0 帧。

第 1 步后:训练里 6 张原来定位不到的稀疏页,4 张现在读出(甲壳 3、曙光盔甲 3、冰霜弩箭 3、内在光辉 2,与截图一致;其中一页有 3 个法术只读出 1 个),2 张仍定位不到。训练法术书场景 153 → 157/167。测试 626 帧中非法术书画面的占比最大 0.017(攻击预览),没有一帧达到 0.2,路由结果不变;测试法术书仍 79/82。

第 2 步后:

  • 训练:被拒的 8 张里 5 张读出(另 3 张标题少于 3 个、页内倾斜或行偏移过大,照旧拒绝)。两张逐项对照的书(9 个和 12 个法术)的名字、耗魔、等级全对,包括右页。训练法术书场景 157 → 162/167。
  • 测试:原来被拒的 2 张都读出,测试法术书场景 79 → 81/82。对照截图,读出的 21 个法术名、耗魔、等级全对,另有 3 个等级没读出(记为未知)。

失败与负结果

  • 一张 3 个法术的稀疏页只读出 1 个。
  • 训练还有 3 张因版式被拒,训练 2 张、测试 1 张定位不到(标题没读出,或被“敌方回合”横幅盖住)。
  • 原本 8 张“布局不确定”的书在第 1 步中没有变化,是另一个问题,需要第 2 步单独处理。

局限

正确性核对是模型目视,不是人工审核;测试 2 张恢复的书来自同一测试录像。羊皮纸颜色阈值只在当前界面和画质下验证。

结论与下一步

一个颜色占比特征就把“书页”和“生物面板”干净地分开,使低门槛的法术名规则可以安全使用;按页偏移解决了 3D 书模型轻微倾斜带来的误拒。剩余漏读主要是标题本身没读出或被横幅遮挡。