摘要
要理解一张游戏截图,第一步是知道它是哪个界面:菜单、加载页、选技能页,还是战场。最直接的办法是 OCR(光学字符识别,把图里的文字读出来)看界面上的文字,但很多画面没有足够的文字,比如战场。本实验(项目编号 B022)为“OCR 不够时”补一个视觉分支:用画面的颜色与边缘布局去找最相近的已标注参考图。
工作分四步:
- 2026-09-07:把 7,435 条截图来源全部标上场景,并用 OCR 与三种视觉方法交叉核对。冻结预测后由助手逐图检查 240 张,主场景和子场景全部一致,“其他条件”(如遮挡、过渡)有 12 张不一致。
- 2026-09-12:原规则要求两种视觉方法的场景、子场景和“其他条件”完全一致,导致一张明明是战场的画面只因“有没有遮挡”分歧被整张丢掉。放宽为容忍遮挡分歧后,视觉单独判出的战场从 608 增到 704(共 1,435 张战场参考),非战场误收仍为 0。
- 2026-09-15:把“与最近不同参考的距离差”改为只和“不同顶层场景”比较,战场 704→1,210,非战场误收仍为 0,但过渡画面放行 18→35。
- 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 不足时补出大量“这是战场”的候选,且在开发参考上没有新增非战场误收;但每次放宽都会放进更多过渡画面。因此默认入口保持原规则,新变体只作离线选项。项目决定不再继续放宽全图场景门槛,而是把精力转向局部问题:读出了原始文字却输出不了字段的合并与定位问题、状态图标与角标定位、局部遮挡负例,并在扩大来源后用新录像做独立验收。
Comments