摘要
截图路由器(把一张截图分给各个读取器的程序)需要先判断“这是不是魔法书页”,才会派发法术读取。它的判断依据是 OCR 读到的法术名:之前(B156)的门槛是“同一排至少 2 个法术名”。可是有些英雄的魔法书只有一个法术,一页上就只有 1 个法术名,这种书页一直被漏掉。
直接把门槛降到“≥1 个法术名”能找到几乎所有书,但会把 47 个生物面板也当成书——因为生物面板上的能力名也是法术名,OCR 分不开。本实验(内部编号 B177)加了一个像素锚点:魔法书页面是羊皮纸颜色。之后又处理了另一类漏读:书页没歪、字都清楚,但右页整体比左页高几十个像素,被排版检查拒绝。
要回答的问题
- 能否用简单的像素特征区分魔法书和其他画面,从而安全地接收只有一个法术的书页?
- 对“右页整体偏高”的书,能否在不放松其他检查的前提下接收?
数据与来源
- 训练:训练截图包,复用 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 书模型轻微倾斜带来的误拒。剩余漏读主要是标题本身没读出或被横幅遮挡。
Comments