摘要
魔法书里每个法术格都有一个大的圆形外框(法术图案在里面),周围有三个小圆角标写着数字。上一轮审计(B106)发现,有些小角标没读出来,有些可能找到了但位置偏了。用户建议:用每个法术的大圆框作为参照来定位。本实验 B108 照此实现:先找大圆框,再用其他格子里“小圈相对大圈的位置”估计目标格的小圈应在哪,只对原来没读出或低分的角标补读一次。
做实验期间,用户澄清了字段含义:左下的罗马数字是法术固定等级,可从已有知识得到,不需要识别。于是实验增加了“只读所需字段”的入口。按新口径,14 页开发集 148 个可见法术中,所需字段同格完整从 142 提高到 143(96.62%),身份+所需字段同格完整 128→129(87.16%)。真正由新方法带来的净收益只有 1 个右下数字。
要回答的问题
用法术大圆框和其他格子的共同几何关系,能否找回漏读或偏移的小角标,同时不丢失原来正确的读数、不产生新的错误接受、不给空格添值?
数据与来源
- 训练/选参:之前用过的 4 个训练来源、8 张原图(6 张稳定页、2 张翻页过渡控制)及其原有输出。
- 开发回归:B106 的 14 页、148 个可见法术格(3 个已曝光来源组),冻结参数后才看。不是新的独立测试。
- 字段口径(用户在本轮说明,不是独立的游戏规则验证):
| 位置 | 用户说明的含义 | 是否需要读 |
|---|---|---|
| 上方数字 | 本次施法的魔法消耗 | 必须读 |
| 右下数字 | 法术当前阶数(一至四阶,效果不同) | 必须读 |
| 左下罗马数字 | 法术固定等级,已有知识可知 | 不要求识别 |
| 中央数字 | 剩余冷却回合 | 可见时必须读,没有就不填 0 |
Perception 只给当前读数,不计算施法次数、敌方属性或跨帧倒计时。名称和图案身份继续独立读取,不用目录回填。
方法
- 在检测到的格子周围用霍夫圆检测找大圆框(半径 55–90 像素,圆心距格子中心 ≤24 像素)。不新增或猜补格子。
- 从其他至少 3 个分布在不同位置的格子,估计同一角色小圈相对大圈的共同位移:5 像素内的一致点至少占 60%,横向跨度 ≥200、纵向 ≥150 像素。目标格自己不参与拟合。
- 在预测位置附近找实际的小圈:半径限定在其他格小圈半径中位数 ±3 像素、中心残差 ≤5 像素、必须唯一且不与其他字段共用。
- 只对原来“没找到圈”或“低分未知”的角标补读;原有的接受、冲突拒绝、局部质量拒绝和空格一律不覆盖。原框、原 OCR、支持锚点、新框、新 OCR 全部保留。读字门槛和截字检查完全不改。
- 新增
--spellbook-required-fields入口:读名称、上方耗蓝、右下阶数、中央冷却;左下保留兼容占位“未请求”,不送 OCR。旧接口照旧读三个角标。
第一版只改了提示位置,结果仍找到一个偏心、半径 24 像素的错误旧圈(失败版本保留);加入“用其他格的小圈半径作为范围限制”后,那里改为找到正确的 17 像素小圈。
设置
门槛预先写定:原正确不丢、新错误接受为 0、至少恢复一个可读的未知、空格不新增值。训练集上确认后冻结参数,再跑开发集。
结果
训练集(旧口径、三个角标都读):78 个有法术的格子全部找到大圈,另 22 个空格也找到了圈——所以“有圈”不能用来判断格子是否有法术。补读 229→231/234,两个恢复(II、V)都看原像素确认;原 229 个保持,102 个无字面对照没有误输出;稳定页 182→183/183。
开发集同一分母:
| 所需项目 | 原方法 | 新方法 | 剩余 |
|---|---|---|---|
| 格子与占用 | 196/196 | 196/196 | 无新增/孤立格 |
| 身份 | 134/139 可评分 | 134/139 | 5 未知,另 9 缺参考 |
| 名称 | 145/148 | 145/148 | 3 未知 |
| 上方耗蓝 | 148/148 | 148/148 | 无缺口 |
| 右下阶数 | 145/148 | 146/148 | 2 未知 |
| 中央冷却 | 5/5 可见 | 5/5 可见 | 阳性样本少 |
| 所需字段同格完整 | 142/148 | 143/148 | 5 格不完整 |
| 身份+所需字段同格完整 | 128/148 | 129/148 | 10 识别缺口 + 9 缺参考 |
| 所需字段整页完整 | 9/14 | 10/14 | — |
| 身份+所需字段整页完整 | 4/14 | 4/14 | — |
只看有身份参考的 139 格,身份+所需字段完整 129/139(92.81%)。48 个空格没有任何误输出,191 个无中央数字的位置没有被填数。新增的 5 个旧口径接受全部正确,没有新错误接受、没有丢失原正确、没有错绑。
关于收益的归属:按旧口径(三个角标都必须读),完整率是 120→125/148,其中 4 个是左下罗马数字的恢复。但用户随后说明左下不需要识别,所以新需求下的净收益只有右下的 1 项,不是 5 项。“排除不需要的字段导致分数变化”不能算作算法收益;旧基线和旧成绩都原样保留。
实际入口检查:26 张整图(8 训练、14 开发、4 其他场景对照)各跑原方法、新定位、所需字段三种模式,共 78 次真实检测/OCR;所有原接受值保持,新增值与冻结阶段一致。8 张训练图另做 4 种整数平移、共 32 个合成几何检查,大圈位置随之同移、结果不变——这只证明圆框定位对平移一致,不算 32 个新样本。
失败与负结果
- 第一版提示位置方案仍找到错误的旧圈,失败保留。
- 开发集剩余两个右下数字未知都在同一页:一个没有可靠的新圈,另一个裁区没有变化、原 OCR 也是低分。不因为知道答案是 4 就填值或反复投票。
- 2 张翻页过渡控制仍有 3 个未知,没有继续精修。
局限
- 3 个已曝光开发来源,不能当作十场独立验收;9 格缺身份参考。
- 书外框没有作为独立锚点实现;真实动态抖动/缩放、多分辨率都没验收。
- 25 个相关测试文件共 379 项通过;没有完整套件重跑,也没有延迟测量。
- 只改了 Perception 的文件读取工具,没有改用户正在运行的战斗记录 App。
结论与下一步
“用大圆框 + 其他格的共同几何找小圈”是一个可靠、保守的补救:没有引入任何新错误,但在新口径下收益很小。今后不再为左下固定等级花训练或补读预算。下一步回到中央冷却徽章遮挡下的图案身份识别和独立名称核对,为 9 个缺身份参考的格子补证据;之后推进整图伤害预览与目标关系。
Comments