摘要

战斗画面底部有一排技能槽(能力槽),有些技能图标中央会显示一个白色小数字,可能表示冷却回合或剩余次数——本实验不判断它的含义,只读这个数字。上一轮(B117)在请求的 8 个这类数字中只读出 5 个。

本实验(B118)发现:整片 HUD 的文字检测会漏掉这些清晰的小数字;但如果绕开检测、直接把中央裁图交给识别器,识别器又会从灰色/金色的技能图案里“读出”并不存在的数字。最终做法:先确认中央有符合文字形状的白色连通区域,才请求识别。结果:44 张整图里可读数字从 12/19 提高到 18/19,1 个未知、0 错,321 个没有数字的位置没有误报。

要回答的问题

能否补回技能槽中央的漏读小数字,同时不把技能图案误读成数字?

数据与来源

  • 只用已准入的训练(TRAIN)来源:B117 的 19 张图(全部 10 个技能位置、包括无数字图标和前景遮挡控制)作为诊断起点。
  • 之后从已有的 683 张原图池扩充:671 张满足旧 HUD 布局条件的图跑白色字形候选扫描(另 12 张布局不支持,只是不参与扫描,不算正确),命中 104 帧,按时间和槽位分散选 15 张全部 10 个位置精审,其中 4 张与 B117 重复、11 张为新图。
  • 参考在推理之后才读取;精审由助手完成,不是独立盲审。最终 44 张不同原图来自五个已曝光的训练组。

方法

先诊断两种直接识别

做法 9 个可读数字 图案误报
较大中央裁图(约 48×44)直接识别 7 对、1 错、1 漏 16
收紧到约 28×32 的中央 9/9 对 7

还检查了识别器内部的输入归一化:原生裁图和外部 3 倍放大后的裁图,最终都被缩放成 3×48×320 的张量,紧裁时有效文字只占约 43 列,其余是补边。所以外部 3 倍放大并没有带来三倍的有效分辨率;两次读数来自同一引擎,它们一致也不能算作独立的置信度。

新增可见性条件

复用已有技能角标的白色颜色范围(三个颜色通道都 ≥ 145,通道之间差 ≤ 55),要求中央有完整、居中、尺寸像字符的连通部分。只有满足时才请求识别;识别时两次读数原文必须一致、分数都 ≥ 0.9,字符数还要与可见字形数相容。字形掩膜只负责“放行”和字符数检查,输出的数字仍来自识别器。没有扫描阈值,也没有为任何单个漏读放宽门槛。

设置

  • 显式开关 --action-numerals,只补尚未读出的中央数字;默认行为、旧观察和失败处理不变。
  • 共用已驻留的 OCR 子进程,不额外启动模型进程。

结果

整图结果(所有可读数字都进分母,未知不排除):

数据部分 修改前 修改后 无数字位置误报
B117 原 19 图(15 张请求 HUD) 5/8 8/8 0/142
B116 去重后的 14 图(10 张请求 HUD) 1/1 1/1 0/99
新精审的 11 张图(9 张请求 HUD) 6/10 9/10,1 未知 0/80
整图合计 12/19 18/19(94.7%),1 未知、0 错 0/321

10 张前置面板/非完整 HUD 控制按规则跳过。旧的时钟、集能、行动者、图案和面板观察全部保持不变。

在精审的 15 张图上单独做区域读取:20 个可见中央数字中 19 个正确,无额外数字。

失败与负结果

  • 剩下的 1 个未知:一个清楚可见的白色“1”,原生分数 0.882(低于 0.9),3 倍图 0.937;不满足“两次都 ≥ 0.9”,保持未知,不为这一个例子降门槛。
  • 一个圆框位置仍漏 1 个,不能因为没有数字就算完整识别了技能。
  • 第一次验证在组装输入时失败(某个来源缺少解码时间字段),发生在推理之前、没有输出;修复为“缺时间则留空”后完成。
  • 在缓存的 OCR 里搜索冷却/次数关键词,只找到 10 帧关于反击次数和每场限用的说明,没有直接写冷却的文字,所以不能说中央数字就是冷却。

局限

  • 全部来自五个已曝光训练组,不是盲测,不代表总体 95%。
  • 正例里没有两位数,来源也不多;新增的“2”“1”“3”只覆盖少量来源。
  • 数字不等于已验证的技能身份或冷却含义;0 也不等于缺失。
  • 222 项相关测试通过,证明的是代码行为,不是识别准确率;没有新的延迟或 App 成绩。

结论与下一步

对小字来说,“先确认这里确实有字,再读”比“直接读”可靠得多:漏读补回,图案误报消失。下一步补技能悬浮说明和冷却含义、更多来源和两位数样本,用冻结方案做来源隔离验证。