摘要

鼠标悬停在生物面板的状态小图标上时,会弹出一个说明框,有金色标题(效果名)和正文(例如“先攻值提升 2,生命值上限提升 20%”)。上一轮已经能在单张截图里读出状态图标和角标;本实验(编号 B122)再把“读说明文字”和“说明对应哪个图标”接进同一个单图入口(需显式开启)。

首版只在“完整提示框检测器”给出区域时才读字,结果 16 张有提示的截图只读对 8/32 个字段——多数短提示根本没被检测器提出。第二版在检测器没给区域、但当前状态圆框存在时,到已登记的右侧提示带里搜索,达到 32/32;8 个有人工同帧位置参考的图标关联全部匹配;19 张控制图没有误报。代码复查时还发现并修复了一个“正文末行分数低时会被丢掉、错误接受半段正文”的缺陷。

要回答的问题

能否只用当前截图读出状态悬浮说明的标题和完整正文,并给出“这条说明对应同帧哪个状态图标”的候选,同时不误读、不把候选当确认?

数据与来源

  • 35 张既有曝光开发截图:16 张状态提示正例(来自三段九月旧录像、九种标题),19 张能力说明或其他场景控制。近邻重复不算独立事件。
  • 每张正例的标题与整段正文各算一个字段,共 32 个字段;比较前做 Unicode 规范化和空白归一,然后严格比较。
  • 8 张有既有的人工同帧位置参考(说明框对应哪个图标);其余 8 张的关系没有参考,不计入关联正确数。参考由助手精审,未经独立人工认证。
  • 冻结后另用较新来源:21 张校准控制图和 5 张较新生物面板(其中一张有状态图标但没有悬浮说明)。

方法

  1. 在当前自动检测到的生物面板里,复用文字锚点;如果完整提示检测器找到了提示区域,就在该区域读字。
  2. 第二版新增:如果检测器漏掉了短提示,但当前状态圆框存在,就扫描面板登记后的右侧状态提示带。输出明确标注“搜索区域”,不冒充检测到的边框;不向左侧能力区派发,不扩大到隐藏背景。
  3. 说明与图标的关联复用既有几何规则(水平差 210 像素、垂直差 32 像素、容差 12 像素)。唯一的几何候选也只是候选,不是确认效果;不用说明文字的内容倒推槽位。
  4. 每条输出包括标题、整段正文、原始 OCR、区域坐标、同帧图标候选及该图标的角标原文。单位实例、敌我、规范效果身份、剩余回合都不推断;说明里的基础时长、日志里的字面时长、图上的当前计数分别保存,不混为一项。

第二版结果之后冻结,不再对同一批调参。

设置

35 张图,每个版本各完整调用一次;之后对冻结版本做较新来源控制和命令行验证。共 134 次完整入口调用,涉及 61 张不同原图。

结果

35 张完整截图,16 正例 32 字段 第一版(只用完整框检测) 第二版(加提示带搜索)
标题 + 正文正确 8/32 32/32
缺失 / 拒读 24 0
错字被接受 0 0
两字段都完整的提示 4/16 16/16
8 个人工位置参考的关联匹配 2 8
关联未知 / 错误 6 / 0 0 / 0
19 张控制图的状态提示误报 0 0

分层:11 张清楚的提示 22/22 字段正确,5 张半透明但可读的提示 10/10;没有为半透明单独降低门槛。第二版补的是“定位与派发”链路,不是训练新的识字模型。

冻结后:26 张较新控制图都没有状态提示误报(包括那张有状态但无悬浮的面板——新增的局部搜索没有把生物模型或背景当成说明),旧的界面读取结果全部保持。真实命令行选了一张原检测器漏掉的单行“注能盔甲”提示,标题、正文和槽位候选与入口一致。最终 10 个相关测试文件 172 项通过。

失败与负结果

  • 第一版只有 8/32:多数短提示没有检测提案,根本没进入 OCR。
  • 截断正文缺陷:代码复查时加入一个两行正文的故障注入测试,首次就失败——当第二行“20%。”的 OCR 分数偏低时,旧的锚点选择忽略这一行,错误接受“生命值上限提升”作为正文。第三版让新入口把低分正文行也纳入完整性检查,整段拒读;高分标题仍可单独输出。旧的整图入口默认行为不变。之后对 27 条真正请求过区域 OCR 的记录用保存的 OCR 回放新解析器,文字与关系全部保持;回放不是新的质量样本。

局限

  • 关联分母只有 8 个同帧空间参考,不等于全部 16 条关系,也不是因果证明或状态追踪。
  • 冻结后的较新来源没有状态悬浮正例,不能称跨来源正例精度已达标。
  • 没有跑完整的重型测试集,没有新的整帧时延或 App 闭环验收。

结论与下一步

状态说明可以在单图入口完整读出,并与同帧图标形成可核对的候选关系。项目决定停止继续打磨这 16 张提示,下一步转向完整行动条(屏幕上显示接下来行动顺序的一排卡片:卡片顺序、生物身份候选、数量与队伍颜色)。较新训练来源的状态提示正例、共享图标、完整冷却与持续时间覆盖作为明确的数据缺口保留。