摘要
战斗画面底部有一排技能槽(能力槽),有些技能图标中央会显示一个白色小数字,可能表示冷却回合或剩余次数——本实验不判断它的含义,只读这个数字。上一轮(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 成绩。
结论与下一步
对小字来说,“先确认这里确实有字,再读”比“直接读”可靠得多:漏读补回,图案误报消失。下一步补技能悬浮说明和冷却含义、更多来源和两位数样本,用冻结方案做来源隔离验证。
Comments