摘要

要理解一张游戏截图,第一步是知道它是哪个界面:菜单、加载页、选技能页,还是战场。最直接的办法是 OCR(光学字符识别,把图里的文字读出来)看界面上的文字,但很多画面没有足够的文字,比如战场。本实验(项目编号 B022)为“OCR 不够时”补一个视觉分支:用画面的颜色与边缘布局去找最相近的已标注参考图。

工作分四步:

  1. 2026-09-07:把 7,435 条截图来源全部标上场景,并用 OCR 与三种视觉方法交叉核对。冻结预测后由助手逐图检查 240 张,主场景和子场景全部一致,“其他条件”(如遮挡、过渡)有 12 张不一致。
  2. 2026-09-12:原规则要求两种视觉方法的场景、子场景和“其他条件”完全一致,导致一张明明是战场的画面只因“有没有遮挡”分歧被整张丢掉。放宽为容忍遮挡分歧后,视觉单独判出的战场从 608 增到 704(共 1,435 张战场参考),非战场误收仍为 0。
  3. 2026-09-15:把“与最近不同参考的距离差”改为只和“不同顶层场景”比较,战场 704→1,210,非战场误收仍为 0,但过渡画面放行 18→35。
  4. 2026-09-19:为战场生物面板再放宽一种历史过渡情形,战场 1,210→1,219,过渡放行 35→41。

所有新变体都只作为显式的离线选项,默认视频入口不改。这些都是在暴露过的开发资料上的比较,不是新视频的独立准确率。

要回答的问题

游戏是《魔法门之英雄无敌:上古纪元》。对局前有选英雄、选技能、选宝物、选魔法、选生物等界面,之后是加载页和战场。战场上两侧有英雄面板、顶部有行动顺序栏(行动条,显示接下来轮到哪个单位)、底部有操作栏。这些布局很稳定,但几乎没有能区分场景的文字。

问题是:当 OCR 读不出足够文字(或文字有冲突)时,能否只靠画面布局,可靠地给出“这是战场/这是加载页”的候选,并在不确定时拒绝回答?

本实验只判断场景。战场里每个生物的位置、身份和数量是另外的检测任务;判断出“这是战场”也不等于“画面内容已稳定、可以读字段”(项目里称 readiness,内容就绪)。

数据与来源

  • 7,435 条来源记录,来自 23 个录屏标识(两段开发录屏加既有跨视频场景来源)。这是来源记录数,不是去重后的图片数;同一视频和相邻画面同时出现在参考与检查队列中,因此不是独立测试集。
  • 最终标签来源:用户确认 30 条、助手逐图检查 2,626 条、算法交叉核对导入 4,779 条,未处理 0 条。实际看过 2,630 条不同来源,其中 4 条与用户确认重合,用户标签优先。
  • 主场景分布:战场及子面板 4,094、技能选择 887、魔法选择 494、等待连接/对手 455、宝物选择 327、菜单 279、生物选择 261、加载 215、战前收尾 159、英雄选择 137、对局设置 66、对局结果 31、父场景看不清 30。
  • “其他条件”:无 6,331、过渡 420、遮挡 606、暂停菜单 22、明确断线 27、非游戏 29。

后续三轮门控对照都复用同一份 2,630 条逐图参考:1,435 张战场、1,195 张非战场,另有 337 张“阻挡条件”参考(过渡 283、暂停 10、断线 16、非游戏 28;与战场参考有重叠,不能相加)。

方法

OCR:对整张原始截图运行 PP-OCRv6(每张原图加一张 1.5 倍对比度增强图),不需要先知道场景。新跑 6,795 条、复用 640 条兼容旧结果。

三种视觉方法(都以整帧为输入,在已标注参考中找最相近者):

方法 做法 限制
全局颜色近邻 缩成 24×14 的颜色小图,归一化后与参考计算均方根距离 容易混淆很小的提示框
全局边缘近邻 灰度梯度缩成 40×24 后比较 对颜色变化更稳,仍压缩细节
RBF SVM 拼接颜色与边缘特征训练分类器 输出的分差没有校准,不是概率

三者共用助手参考,不构成三份独立真值。

全量标注流程:多轮逐图检查补充参考;在 1,202 条参考上,三种方法互相不一致或与 OCR 冲突的 1,188 条全部重看原图并直接给出决定。剩余 5,019 条为一致候选池。冻结图片、预测和顺序后,从池中抽 120 张压力样本和 120 张随机样本逐张检查,最终 4,779 条按“三种视觉方法完整一致、OCR 无冲突、原图未变”自动导入。

战场门控的几个版本(都只把 OCR 判为“未知”的画面补成战场,不覆盖 OCR 已识别的其他场景,不声明内容就绪):

版本 规则要点
原规则 joint-v1 颜色与边缘的场景/子场景/其他条件全部一致;颜色距离 ≤ 0.10;与最近“不同完整标签”参考的距离差 ≥ 0.008;参考的其他条件必须为无
遮挡容错 v2 阈值不变;只要求场景与子场景一致;两边参考的其他条件可以是“无”或“遮挡”
只看顶层 v3 只要求两种方法都判战场;距离差改为与最近“不同顶层场景”比较
子场景+顶层差距 v4 保留 v2 的场景与子场景一致要求,只把距离差改为与不同顶层场景比较
生物面板局部尝试 v5 在 v4 上只多允许一种情况:两方法都判为战场生物面板,恰好一个历史近邻是“过渡”、另一个是“无”或“遮挡”

每一轮都先写好协议、固定阈值、不搜索参数,再运行比较。

设置

门控对照按录像做 22 折排除:查询某张图时,参考库排除同一录像(已知连续的两段对局合并为一组)的全部参考,每折参考 6,645–7,353 条。这样做是按来源分组的开发回放,但这些图曾参与历史标签构建,不是无间接影响的新视频盲测。两段保留作验收的录像像素从未读取。

报告分两条路线:只用视觉(把 OCR 顶层设为未知),以及“历史 OCR 投影 + 视觉”(复用当时 OCR 规则的结果,不是重跑 OCR)。

结果

全量标注的冻结检查(修正前的冻结预测与助手逐图检查的一致数,不是人工独立准确率):

检查范围 主场景 子场景 其他条件 三项同时一致
压力样本 120 120 120 112 112
随机样本 120 120 120 116 116
合计 240 240 240 228 228

12 个差异全部在“其他条件”:漏掉小悬浮提示框,或把没有提示框的相近布局误判为遮挡。新跑 OCR 每图两遍耗时中位 0.4831 秒、P95 0.908 秒(当前机器记录,不是受控速度基准)。

战场门控对照(2,630 条逐图参考):

路线 / 方法 战场输出 / 1,435 非战场误收 / 1,195 过渡放行 / 283
视觉 / joint-v1 608 0 —
视觉 / v2 704 0 18
视觉 / v3 1,221 2 —
视觉 / v4 1,210 0 35
视觉 / v5 1,219 0 41
OCR+视觉 / joint-v1 739 4 —
OCR+视觉 / v2 827 4 59
OCR+视觉 / v3 1,276 6 —
OCR+视觉 / v4 1,271 4 72
OCR+视觉 / v5 1,280 4 78

(9 月 12 日的表按“全部阻挡参考 337 张”计放行:joint-v1 视觉 17、v2 视觉 18、v3 视觉 42;“—”表示该轮没有单列过渡 283 张的数字。)

“输出战场”只说明顶层判为战场,不代表画面中各区域可读。

接到真实视频片段(两个 60 秒开发片段,53 张已做高精度 OCR 的图):v2 让顶层战场从 30 张增到 34 张,行动条槽位候选 360→408、面板候选包 92→108,无运行异常。但候选多了不等于字段读出来了:重点检查的那张图,生物面板七个字段仍全部没有给出最终数值。

接到悬浮提示采集(v4,1,868 张源图中 403 张已完成 OCR):完成面板流程的图从 206 增到 369,被场景检查挡掉的从 197 降到 34。在同一份 158 字段稀疏参考上,精确匹配从 46 增到 69,原来 46 个精确结果全部保留,没有错误接受。v5 在另一份 13 张正例、26 个标题/正文字段的参考上,整屏完整切块读法从 20 精确增到 25,局部重读 20→26。

失败与负结果

  • v3 只看顶层太松:新增 2 张非战场误收,都是同一外部助手程序窗口覆盖游戏的相邻帧——背景布局像战场,前景却是别的程序。因此 v3 不进入视频入口。
  • 过渡放行增加:v2 新增 1 张原标为过渡的魔法书画面;v4 视觉新增 17 张过渡,逐张看过:9 张半透明生物面板、6 张开关或翻动书页、1 张半透明英雄面板、1 张半透明日志。这说明背景是战场,但不说明前景已稳定。原标签不改,失败保留。
  • OCR 组合路线原有错误没被修好:历史 OCR 带来的非战场误收 4、断线/非游戏放行仍在。
  • 早一轮在 602 条参考上另试了基于 OCR 文字密度的条件 SVM 和 400 棵 ExtraTrees,“其他条件”都只有 220/240,没有改善,未替换默认方法。早晚两轮检查不是同一队列,不能用 219→228 宣称提升 9 张。
  • 一次真实视频运行最初漏传设备参数,在推理前退出;修正命令后完成,失败日志保留。

局限

  • 所有门控对照都受已知失败案例影响(设计时看过),属于暴露的开发资料,不是独立验证。
  • 标签主要由助手逐图检查,不是人工独立真值;“自动导入”只是三种方法一致的结果。
  • 场景通过不代表稳定、局部可读或可执行动作;悬浮参考是稀疏的,没有全帧穷尽标注,也没有阴性精确率。
  • 这些分类器尚未接成任意视频的在线跟踪系统。

结论与下一步

视觉布局确实能在 OCR 不足时补出大量“这是战场”的候选,且在开发参考上没有新增非战场误收;但每次放宽都会放进更多过渡画面。因此默认入口保持原规则,新变体只作离线选项。项目决定不再继续放宽全图场景门槛,而是把精力转向局部问题:读出了原始文字却输出不了字段的合并与定位问题、状态图标与角标定位、局部遮挡负例,并在扩大来源后用新录像做独立验收。