摘要
在游戏里,鼠标指向一个敌方单位准备攻击或施法时,目标旁边会出现伤害预览:一行是骷髅图标加“预计死亡数量”,下一行是伤害图标加“预计伤害”(固定值如 384,或范围如 257–334)。读出这两行能帮助推断对方单位的属性。
原有的整图数字读取经常出错:把图标当成数字、把旁边的兵力数量串进来,或者漏掉第二个目标。本实验(内部编号 B083)换一个思路:先在整张图里找到两个小图标,再在图标右侧分别裁出两行数字去读。经过三轮改进(图标定位、复用整图 OCR 的文字行框、细横线复核),两批已曝光训练来源的 193 个已知区域读对数从原方法的 170 提高到 189,没有新增退步。但范围伤害只有 49/53(92.45%),仍有 4 个已知失败,所以只作为显式开启的候选读取,不替换默认读取器。
要回答的问题
- 用图标模板定位预览,能否减少图标误当数字、兵量混入和第二目标漏选?
- 当数字发红、淡化或范围中间的横线很细时,怎样裁剪和复核才不出错?
- 能否接到“完整截图读取”工具里,不影响原有输出?
数据与来源
- 开发:10 月 4 日一个训练来源,77 张图(59 张代表 + 18 张控制),73 个人工已知的两行区域。
- 跨来源回归:10 月 3 日另一个已曝光的训练来源,134 张图(116 张代表 + 18 张控制),120 个已知区域。方法冻结后才运行,但该来源之前已经看过,不是盲测。
- 两批都有近邻重复帧,193 个区域不是 193 个独立样本。冻结的“来源 17–22”没有打开。
方法
第一版:图标模板 + 两行裁剪(v1/v2)
从一张清楚的训练图里裁出骷髅和伤害两个小模板。推断时在整张图(纵向 10%–86% 的战场区域)用 0.9/1.0/1.1 三种尺度匹配,相关度 ≥0.78;再按“骷髅在上、伤害图标在下约一行、横向接近”配对。每行从图标右侧找亮色字形列,遇到较大间隙停止,加边框放大 3 倍后用既有 OCR 读。目标框、场景答案、数量都不输入程序。
v1 要求每列至少两个亮像素,结果把一像素高的范围横线截断,只有 55/73。v2 允许单像素横线,得到 68/73,然后冻结跑跨来源。
第二版:借用整图 OCR 的文字行框
v2 的亮字裁剪遇到红底或淡化数字会拒绝。新做法复用当前整图 OCR 的文字行框决定数字行的范围(可以跨过发红的字),左边仍裁掉图标,然后对新裁图重新识别——不直接拿整图 OCR 的字符串当答案。同一对图标只配对一次,被抑制的候选单独保存。
第三版:细横线复核
剩下的错误多是范围 360–480 被读成整数 360480。先对比了多种图像处理:最近邻放大 69/73、加对比度 68、二值化加粗 52、横向拉伸 1.5/2/3/4 倍分别 68/67/56/25,都没有收益。最后的规则只对“原本读成整数”的候选工作:在原生像素里找 2–7 列宽、≤3 像素高的细桥,两侧都有足够高的数字笔画;然后分别读左右两段,只有拼起来与原数字串完全相同、构成合法的不下降范围、而且切法唯一时才输出新范围。不按伤害大小猜横线,不用相邻帧或游戏规则修正。
接入完整截图读取
新增显式参数 --preview-templates。开启时按“定位图标 → 整图 OCR 行框 → 两行分读 → 必要时横线复核”读取;找不到图标就输出“没有图标对”,不声称画面一定没有预览。每个候选的目标、归属、动作类型都留空——关联和动作分类没有实现。不开启时默认输出不变。
设置
每种改进都只在 10 月 4 日开发集上诊断,写入冻结协议后才跑 10 月 3 日来源,跨来源结果出来后不改参数。不用标签在两种方法之间挑正确答案。
结果
| 已知两行区域 | 原整图数字法 | 图标定位 v2 | 加文字行框 | 加横线复核 |
|---|---|---|---|---|
| 10 月 4 日开发,73 个 | 67 | 68 | 69 | 70 |
| 10 月 3 日跨来源,120 个 | 103 | 114 | 118 | 119 |
| 合计 193 个 | 170 | 182 | 187 | 189 |
注:原报告 103/119 只算了已提议的裁图;这里补入人工在整图里发现的一处漏区(0/41),所以基线是 103/120。
按伤害下行形态分开:固定值 140/140;范围 47/53 → 49/53(92.45%),未达 95%。
真实收益的例子:第二目标 0/41 原方法没选到,现在自动找到并读对;0→40/50、6→56、143→3143、283→3283 这类图标或数量混入被纠正;红底/淡化数字在加入文字行框后恢复。
控制:开发 27 张、跨来源 18 张负例/控制图都没有产生两行候选——这只是 45 张有限的图,不代表全视频零误报。
另外精标了三张图的目标关联和行动条:累计 7 条明确的“预览 → 目标生物”关系(5 帧),另 2 条无法判定;没有自动关联精度。
接线验证:13 张旧完整图在不开启预览时输出完全一致(只排除计时字段);18 张开启预览的图结果与已保存分支逐项一致。
失败与负结果
- v1 截断横线(55/73),保留为失败版本。
- v2 相对原方法有 4 处退步(红底/淡化数字被裁剪拒绝),一处背景误匹配产生重复候选(
1/unknown)——都在第二版修好。 - 剩余 4 个已知失败:两处范围仍被连成整数(
360–480、257–334),两处淡入的图标没有定位到。高 OCR 分数的错误读数说明分数不是校准置信度。 - 多尺度严格多数重读(2/3/4 倍)没有收益,不采用。
- 精标过程中纠正了两处人工草稿:一张卡初看误当红方单位,放大后确认是蓝方;一处底部头像备注撤回为“遮挡未知”。
局限
- 只验证了 2560×1440 素材;两个模板不是通用检测器。
- 两批都是已曝光训练来源,不是独立评估、整图定位召回或全视频覆盖。
- 目标关联、行动者、动作类型(攻击还是法术)都没有实现;“固定伤害”不等于法术,“多目标”不等于范围法术。
- 没有新的端到端 p95;离线批次耗时不能证明 App 3 秒目标。
- 完整测试套件的 2 个旧失败仍保留。
结论与下一步
“先找图标、再分行读”比整图找数字可靠得多,193 个已知区域里读对 189 个且无退步,已接入 Perception 的显式完整截图工具。但范围伤害仍不到 95%,并有淡入定位和横线连写问题,所以不晋升为默认。之后暂不围绕两张难图继续调参,优先转回子技能识别的跨来源数据;预览的目标关联还需要更多人工关系后再做自动化。
Comments