摘要
在这款回合制战棋游戏里,玩家把鼠标移到敌方单位上准备攻击或施法时,目标旁边会弹出一个小的“伤害预览”:上一行是骷髅图标加一个数字,下一行是预计伤害(固定值如 331,或范围值如 326–444)。这些小字对推断对手很有价值,但它们只在画面上停留很短时间,要训练一个能找到它们的检测器,首先得有足够多、框得准的样本。
本实验(内部批次号 B082)不训练模型,只解决“到哪里去找这些预览帧”的问题。我们在已允许用于训练的录像上试了三条互相独立的采集入口:
- 日志引导:战斗日志(Logs,游戏里滚动显示“谁对谁施了什么法、造成多少伤害”的文字面板)里出现施法或攻击时,回到它之前的一小段视频密集采样;
- 蓝量变化回查:屏幕顶部 HUD(英雄头像旁的属性条)里我方蓝量(法力值)下降,说明可能刚施过法,回看下降之前的画面;
- 连续战场扫描:不依赖任何线索,在粗分出的战斗区间里每秒取一帧做全图文字识别(OCR)。
三路都找到了真实预览,也各自暴露出误报和漏报。两段训练录像的连续扫描合计人工确认 154 帧、193 个两行预览区域。所有数据都只属于训练来源,不能当作独立测试结果。
要回答的问题
- 只靠“从日志倒推时间”找预览够不够?还有哪些可见预览会被漏掉?
- 用户新增要求:能否用我方蓝量下降去回查此前的数字提示?
- 已有的旧预览分类器(批次 B034 训练的二分类模型,判断一个裁图里有没有预览)能否直接拿来过滤候选?
- 这些样本能否做成可训练的、带紧框的数据?
数据与来源
- 主要来源:一段 10 月 4 日 22:15 的训练录像(原长 1987.8 秒),其中有两段战斗。
- 扩展来源:一段 10 月 3 日 20:26 的训练录像(原长 1540.09 秒),是 10 月 4 日之外最近的已准入训练录像。
- 10 月 5 日连续录制的一组保持为评估集,另有一组冻结测试来源(编号 17–22)完全不碰。不能因为“需要更多数据”就把评估来源改成训练来源;采集脚本在读取像素前就检查来源分组,评估或未知组直接拒绝。
- 同一录像里相邻帧、同一预览的重复画面都不算独立样本。
方法
入口一:日志引导密采。 上一轮(B081)已经从日志里读出 4 次施法和 2 次攻击的时间。对每个时间取前 15 秒、后 5 秒,合并重叠窗口,每秒 2 帧按原生帧解码,在原尺寸和 1.5 倍两个尺度上做完整 OCR,再用已有的“数字对”算法(沿用 B034,未调参数)提出“上下两行数字”候选。敌方回合和没打中的窗口也保留,不假定一定有可见预览。
入口二:蓝量变化回查。 复用连续扫描里两侧 HUD 的蓝量读数,记录读数变化、缺帧间隔、上限变化和回升。短时间内同方向的变化只聚合成一个“检索窗口”,不等于唯一一次施法;跨长时间缺帧的变化不并成一次数字动画;读不出的值记为未知,不当 0。对日志窗口没覆盖到的变化,取前 15 秒至后 3 秒,按每秒 4 帧再密采。哪一侧是“我方”只由这段录像底部操作栏、敌方回合提示和旗色的人工判断确定,不全局固定左右。
入口三:连续战场扫描。 把已有粗场景扫描中的“战斗进行中”区间按不超过 90 秒的间隔合并、前后各扩 5 秒,区间内每秒 1 帧做全图 OCR,不按面板或场景再过滤。这样能覆盖日志没显示的攻击、取消操作和另一段战斗。它仍是有间隔的采样,短于 1 秒的提示可能漏掉。
人工精审。 对候选图逐张看整图和原生放大裁图,给可见预览补“前景紧框”:包含左侧语义图标和两行数字,排除兵种本体、底部数量牌(单位脚下显示兵数的小牌)和地面指示;半透明黑底边界不清时按可见前景加 2 像素。同图多个预览全部标注;动作或目标不确定时明确保留不确定,不把施法后的实际伤害回填到预览,也不从规则模拟器反推文字真值。
设置
| 入口 | 采样 | 原生图 | 机器候选 | 离线耗时 |
|---|---|---|---|---|
| 日志引导(3 个合并窗口) | 2 Hz,两尺度 | 166 | 22 图 / 82 个数字对建议 | 153.15 秒 |
| 连续扫描(420.2–998.4 秒、1480.8–1938.4 秒,约 1035.8 秒) | 1 Hz,一尺度 | 1037 | 132 图 / 193 个建议 | 354.18 秒 |
| 蓝量变化(3 个日志外窗口) | 4 Hz | 240 | 14 图 / 21 个建议 | 106.53 秒 |
耗时包含启动、解码和 OCR,是离线采集成本,不是在线延迟。
结果
日志引导。 22 张候选图、82 个裁剪全部人工看过:21 张图里有 37 个真实预览区域,另 1 张是面板误报。两个尺度各自有 34 组文字完全读对,任一尺度读对算上为 35/37。326–444 在两帧里两尺度都读成 326444(丢了中间横线)。再对 38 个区域做 76 次 2 倍 / 4 倍局部重读,任一变体仍只覆盖 35/37,没有净改善。这是“候选里文字是否读对”的条件统计,不是整图定位精度或漏帧召回。
连续扫描(第一段录像)。 132 张候选中按文字和位置选出 59 张代表全部精审(112 张原生放大裁图),另看 18 张固定的“零提议”控制图:
| 审核项 | 结果 |
|---|---|
| 两行目标预览 | 49 帧、73 个区域 |
| 单行提示 | 1 帧(绿色人群标记 + 36),不是伤害数值 |
| 无预览的错误数字配对 | 9 帧、14 个建议,多为书页/面板装饰与兵数 |
| 18 张控制图 | 未见目标数字预览(只限这些帧) |
| 两行文字完全读对 | 67/73,6 组丢了范围横线 |
连续扫描(第二段录像)。 1473 帧、244 张候选、355 个数字对建议,离线 476.738 秒。抽 116 张代表、190 张裁图全部人工看过:
| 项目 | 数量 |
|---|---|
| 含可读预览的代表帧 | 105(另 10 帧错误配对、1 帧下行被遮挡) |
| 裁图内不同可读区域 | 119:95 个固定值、24 个范围值,14 帧多区域 |
| 两行文字完全读对 | 103/119 = 86.55%(仅已审候选内) |
| 整图补漏 | 766.018 秒另有 0/41,算法没有提出,人工补框 |
| 合并后 | 105 帧 120 区域:96 固定、24 范围、15 帧多预览 |
两次连续扫描人工确认的两行预览合计 154 帧、193 个区域(49/73 加 105/120),没有把日志引导等重叠集合再加一遍。两段录像共 2510 帧连续扫描,不等于 2510 张已精标图。
蓝量变化回查。 第一段录像两侧各有 1016 个可读蓝量、21 个未知;13 次相邻变化聚合成 7 组,14 个前后端点都看过原生 HUD 裁图,数字正确(全部 2032 个读数没有逐一精审)。
| 时间附近 | 一侧(人工判定) | 蓝量变化 | 回查结果 |
|---|---|---|---|
| 562–563 秒 | 我方 | 200→176 | 已审连锁闪电上下文的预览 31/1404,与日志相互定位,非因果证实 |
| 571–573 秒 | 我方 | 176→131 | 黑洞上下文的三个数字对 |
| 675–677 秒 | 对手 | 240→206 | 敌方回合,未提出数字对,不伪造敌方预览 |
| 684–686 秒 | 对手 | 206→182 | 同上 |
| 988–990 秒 | 我方 | 131→91 | 日志外新线索;附近未确认目标预览 |
| 1725–1728 秒 | 我方 | 300→276 | 变化前有绿色人群标记 + 白色单行 36 |
| 1919–1922 秒 | 对手 | 110→98 | 敌方回合,未确认敌方预览 |
第二段录像两侧各 1467 个可读、6 个未知,18 次变化聚合 10 组,20 个端点全部核实。
预览对应的目标。 对三张代表图逐一对照头像和立绘,补了 4 条“预览→受击生物”关系、3 个当前选中生物、全部 38 张行动条卡片(行动条 = 屏幕上按出手顺序排列的单位卡片)、双方属性/蓝量/时钟;另补漏图里 1 条关联,共 5 区域 / 4 帧。已有行动条算法在这三张图的 38 张卡上身份和颜色全部与人工一致,数量 OCR 35/38。这是训练来源上的条件检查。
失败与负结果
- 旧分类器不能直接接入。 B034 模型原来在三段 9 月录像上开发,历史留出 31 张裁图的结果是 10 真阳、3 漏检、18 真阴。固定模型和阈值,只换输入裁图方式:
| 输入方式 | 真阳 | 漏检 | 误报 | 真阴 |
|---|---|---|---|---|
| 直接输入当前紧裁图 | 0 | 93 | 0 | 14 |
| 沿用 B034 的 1.8 倍、最小 96 像素周边裁图 | 70 | 23 | 0 | 14 |
第二种条件召回 75.27%,仍漏 23 个完整预览,不能用来硬删候选。这说明裁图协议对结果影响很大,但不证明剩余错误都来自裁图。
- 蓝量窗口不能覆盖所有操作。 1672.804 秒有单行 36,附近却没检测到扣蓝;675–686 秒两次敌方扣蓝没找到敌方预览,但“预览完全缺席”未证实。
- 整图类别不能当过滤条件。 生物面板打开或淡出时,面板外仍可能有目标预览;808.207 秒预览和实际伤害跳字共存。1911.343 秒的红色
594/16是结算跳字,记为负例。 - 纯数字扫描噪声极大。 不要求两行配对的新数字线索在 240 图里给出 6518 条字面数字建议,其中大量是 HUD、数量牌和实际伤害,绝不等于 6518 个预览。
- 人工误标和工具问题也照记。 475.208 秒初审误沿用邻帧
11/936,复核只有31/936,已修正;第一次按随机 seek 恢复蓝量端点时,34.0123 秒返回的帧号 1001 与原扫描的 1002 不一致,严格检查拒绝并保留失败记录,改为从窗口起点顺序重放后 20 个端点帧号与时间全部一致。实验分组曾把“长缺帧后的变化”并作动画,修复后 7 组重算未变。 - 第二录像的主要识别错误:范围横线丢失、骷髅图标误读成 4/50、数量牌的 3 被接到伤害 143/283 前;732.006 秒下行被实际跳字遮挡,保持空值,不从邻帧或结算值补。
局限
- 全部来自已在项目中曝光的训练来源,不是独立盲测,也不是全片召回;连续扫描 1 Hz 可能漏掉短提示,且未覆盖全片。
- 文字匹配率只在已审候选内计算,不含漏帧和定位 IoU。
- “哪边是我方”是人工按本录像上下文判断的,不是自动分类器。
- 新框的定义与历史 B034 框不同,需统一后才能联合训练;所有新数据都还没有自动准入训练。
- 没有训练、没有独立评估、没有在线延迟测量,也没有改生产代码或 App。
结论与下一步
三条入口互相补充:日志引导精确但窄,蓝量回查能找到日志外的施法线索,连续扫描能找到其它操作和整段战斗;三者都会漏,也都会误报,因此需要逐图精审和整图补漏。本实验交付的是一批人工精审的预览区域、紧框和上下文,而不是一个更好的检测器。
下一步:补其余代表帧的目标关联、整图和控制图审核,把兵数混入、丢横线、图标误配和漏区做成冻结回归;继续扩到其它训练来源;统一框定义并冻结独立评估协议后再训练。后续补审(B083)已看完第二来源的 18 张控制图,均无两行预览;其整图标记法在原 120 区域读对 114(原 103),但有 4 处退步,未推广。
Comments