摘要

用户反馈:一个按时间排列的截图文件夹(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”:法术书与我方的关联还待查。

结论与下一步

英雄窗口在不同画面上只是位置不同,用固定图标条配准后就能复用现成读取器,让“已有数据也能较好分析”。下一步补主技能选择页、查清法术书与我方的关联,并对已有窗口截图做逐字段标注来统计准确率。