摘要

战斗画面顶部有一条行动条:从左到右排着一张张小卡片,每张卡是一个生物头像,带红色或蓝色边(双方队色)和一个数量(这堆兵还剩多少)。最左边是当前正在行动的单位,后面依次是将要行动的单位。读懂整条行动条,能知道双方每堆兵的数量变化。

之前的程序只读首位卡和底部当前行动者。本实验(内部编号 B123)把已有的几个能力——边框扫描找卡片、头像模板认物种、暗边框判队色、两次区域 OCR 同意才接受的数量读取——组合成一个显式开启的“读整条行动卡”功能。

在 11 张稳定截图的 141 张卡上:卡片全部找到;身份 114 对、27 未知、0 错;数量 137 对、4 未知、0 错;颜色 140 对。但一张卡三项同时都对的只有 110 张(78.0%),整条全对只有 2/11。另外,在用户要求下,当首位卡空缺(行动条正在切换)时,程序改为明确跳过这一帧,等下一张稳定画面。

要回答的问题

  1. 把已有能力组合起来,读整条行动卡能做到什么程度?
  2. 首位卡空缺时,应该补读后面的卡还是跳过?

数据与来源

  • 16 张已曝光训练原图,来自 5 个来源组:11 张是稳定行动条(141 张卡),1 张是切换中的瞬态画面(12 张卡),4 张是前景面板或过渡控制。
  • 助手逐图看原生顶部和规范头像图库做参考(模型目视核对),不是用户确认,也不是盲测。
  • 原计划在方案冻结后核对 21 张校准图,本轮没有执行。

方法

  • 定位与身份:已有边框扫描找卡片;与规范头像模板匹配,阈值 0.80、领先第二名至少 0.03 才接受。
  • 队色:看卡片的暗边框颜色。
  • 数量:在顶部数量带用两个略有不同的裁区各读一次 OCR,两次同意才接受(同一个模型,不算独立投票)。
  • 数量带修正:诊断发现若干正确的数字框上边在 y=83,被旧规则“y≥84”拒读,而且小头像纹理被当成短文字。新显式路径改用 y 范围 [80,130] 并要求文字框高度 ≥18;旧默认规则不变。
  • 瞬态跳过:在 10 月 4 日一段录像中,808.207 秒首位卡是空的,而前后 805.204 秒、810.209 秒首位都完整——说明 808 秒是行动条切换过程。之前的 v2 曾用检测器补读出后面 12 张卡,但这在产品上没必要。v3 在首位缺失时输出“跳过此帧 / 等待稳定帧”,不做身份、数量、当前行动者和时钟的深读。邻帧只用来核对,不改写这张图的读数。

设置

只在显式 --turn-cards 路径上新增输出;默认入口不变。顺序只表示屏幕左到右,不推断回合分隔或执行顺序;物种相同不代表同一个实例。没有重训模型或降低阈值。

结果

稳定 141 张卡 v1 实际读图 v3 同输入后处理回放
找到卡片 141 141
身份 对 / 未知 / 错 114 / 27 / 0 114 / 27 / 0
数量 对 / 未知 / 错 124 / 17 / 0 137 / 4 / 0
红蓝 对 / 未知 / 错 140 / 1 / 0 140 / 1 / 0
同卡三项全对 102 110
整条全对 2/11 2/11

v3 一列是对已缓存的区域 OCR 原文做后处理回放,不是新的推理;另外有 3 次真实文件调用验证了生产组合:12 张卡 → 跳过 → 12 张卡,中间帧行动条 OCR 调用 0 次。4 张前景/控制图都没有输出行动卡。

稳定数量 137/141(97.2%)看起来不错,但同卡完整只有 78.0%,不能宣称整条读取达到 95%。27 个身份拒判是最大的缺口。

失败与负结果

  • v2 的“补读切换帧”方案能定位但不采用,结果保留。
  • 初次人工转录把一张黑龙卡的红背景写成蓝,重看原图后更正,参考里记录原因;最初三个评分文件都保留。
  • 整条全对只有 2/11。

局限

  • 16 张图来自已曝光训练来源,不是盲测;近邻图和重复卡不增加独立对局数。
  • 单张图无法证明动画会持续多久;跳过守卫只在这一个事件和当前入口上验证过,不代表所有瞬态和自动采样调度都已解决,也没有改 App。
  • 来源隔离的校准没有执行(“没执行”不是“通过”);没有端到端时延测量。

结论与下一步

组合已有能力可以稳定地找到卡片、读出颜色和大多数数量,而且没有接受错值;首位缺失时跳过比补读更符合产品需要。下一步处理稳定卡上的 27 个身份拒判和 4 个数量未知,然后冻结方案做来源隔离验证。