摘要
用户反馈:一个按时间排列的截图文件夹(9 月 2 日第 3 局,16 张),App 连我方装备都没读出来。原因是 App 的截图路由只读“确认页”(开战前列出全部英雄配置的准备页);选卡页(选主技能、装备、法术、生物时的界面)被直接放弃,战斗中打开的英雄面板也只当战场画面读。而这些画面上其实都有同一个英雄窗口(英雄、技能与等级、子技能、14 个装备位、属性、部队),只是位置不同。
本实验先把英雄窗口在这些画面上的位置配准到确认页的布局,再复用确认页的字段读取器。在那一局的端到端回放里,“我的信息”从英雄、技能、装备全空,变成读出英雄埃斯里克、5 项技能、9 项子技能和 9/14 件装备,装备与截图逐个核对一致。
要回答的问题
能否在选卡页和战斗英雄面板上可靠地找到英雄窗口、读出我方构筑,并且在窗口被悬停提示挡住时不读出错误内容?
数据与来源
- 配准探针:在已有截图包上测平移量,选卡页 190 张、战斗英雄面板 156 张。
- 功能验证:用户指出的那一局训练截图(16 张),用真实路由器和 SE(状态估计:把读到的观察累积成对局状态和对手构筑的推断)进程做端到端回放。
方法
配准。 英雄窗口背包上方有一条固定的分类图标条,用它做模板。实测平移:选卡页 189/190 张为 (−760, +57),战斗英雄面板 147/156 张为 (+29, −1),确认页为 (0, 0)。只在这两个已知平移附近 ±40 像素搜索,分数 ≥0.6 且偏差 ≤6 像素才接受。
读取。 把图平移到确认页布局,复用确认页的字段读取(重构后 4 张真实确认页输出逐字节相同),不读法术栏;框再换回原图坐标。战斗英雄面板上的部队数量是当前数量,不当作开局数量。英雄名去掉末尾数字(顶部行动条数字会挤进名字框)。
遮挡。 悬停提示框常盖在英雄窗口上(标红最多的 24 张里有 7 张)。窗口里除名字和职业外只有数字,所以窗口内出现 ≥3 个汉字的 OCR 行就是提示框;如果它盖住技能、属性、装备或部队,这张图不作为构筑页(只盖背包则照读)。因为 SE 的规则是“最新一页整页采用、不借用旧值”,所以由视觉模块直接拒绝被挡的页,而不是在 SE 里逐字段补。
路由与下游。 选卡页归入准备页类;战斗英雄面板在战场之外加读准备页类,战场只读 HUD,并去掉攻击预览。SE 推断敌方时,我方基准改为所有准备页类读数按字段取最新已知值(英雄窗口没有法术栏,不再顶掉确认页的法术)。App 的英雄栏在切换我方/敌方页时立即刷新(原来最多 1 秒显示另一方的数)。
设置
端到端回放使用真实路由器和 SE 进程,在一局训练截图上比较改动前后。
结果
| 画面 | 改动前 | 改动后 |
|---|---|---|
| 选卡页 3 张 | 放弃 | 各读 33–39 个字段(英雄、技能、装备、属性) |
| 战斗英雄面板(第 8 张) | 只读战场 | 41 个字段 + 战场 HUD |
| 战斗英雄面板(第 10 张,提示框挡住技能) | 只读战场 | 不作为构筑页 + 战场 HUD |
| “我的信息” | 英雄、技能、装备全空 | 英雄埃斯里克;技能 5 项(全部专家/高级)、子技能 9 项;装备 9/14;英雄栏右侧 5/2/30 → 5/2/32 |
装备逐个与截图核对一致,空着的圣徽、主手、副手、鞋子、杂物 4 显示问号。
失败与负结果
曾尝试“固定格子与参考图对比”的方法检测遮挡,因背景亮度和背包内容差异太大而没有采用,改用“窗口内出现长汉字行”这一判据。
局限
- 这是一局训练截图上的功能验证,不是准确率测量;已有 156 + 190 张窗口的逐字段准确率还没统计(需要标注)。
- 主技能选择页只显示窗口上半部分,还没读。
- 这一局没有确认页,法术书读到了,但“我的信息”的魔法仍是“候选 0 / 未知 10”:法术书与我方的关联还待查。
结论与下一步
英雄窗口在不同画面上只是位置不同,用固定图标条配准后就能复用现成读取器,让“已有数据也能较好分析”。下一步补主技能选择页、查清法术书与我方的关联,并对已有窗口截图做逐字段标注来统计准确率。
Comments