P41 · 视觉场景补充 · 实验记录与相关篇目
P41 · 视觉场景补充离线基线与分层审核已实现

9 月 15 日新增距离差对照:视觉战场候选704→1210,非战场误收不增,但过渡放行增加。仅接短悬浮离线对照,旧默认不变;独立新视频和在线路由未验收。

加载插画、进度条和战场边栏很容易被人识别,却未必包含能唯一标识场景的文字。我们希望利用整体画面辅助文字规则,先把“现在看到了什么”分清,再决定去哪里找生物、数值或说明。

做法是把当前截图与已检查的画面比较,再用 OCR(文字识别)检查两者是否矛盾。这样已经能帮助整理场景数据;下面先看它怎样判断一张图,再检查为什么整体页面认对了,小提示仍会漏掉。

flowchart LR
 A[Original frame] --> B[Color, edge and SVM]
 A --> C[Full-frame OCR]
 B --> D[Compare labels and evidence]
 C --> D
 D --> E[Visual review or candidate]
 E --> F[Scene, subscene and condition]

图 1:三种视觉方法与文字证据互相检查;一致只能形成算法候选,不能变成人亲眼看过的标注。

B020 最新视频接线只复用本文的颜色、边缘参考方法来补充战场候选;不是本文全部视觉方法和审核流程都已成为运行时系统。

1. 场景看得清,不代表每个提示框都看得清

输入是一张完整截图,输出分三层。例如“战场”是主场景,“魔法书”是内部页面,也就是子场景;过渡、遮挡或小提示另记在 Other 条件中。打开魔法书时,背景仍可能读到“战斗开始”;不能让这行文字否定前景已经打开的面板。

下面保留早期 OCR 没认出的七张原图,但按标注网站的最新分类整理。例如,写着“正面效果”、提供法术强度与知识奖励的页面属于属性选择,不是选择生物;打开日志的战场也要保留“战斗日志”子场景。每张图都注明审核来源,旧预测和旧草稿放在折叠记录中,不再充当图片标题。

加载页的布局、战场的两侧 HUD 和顶部行动条都提供视觉线索。但技能栏边一个很小的悬浮提示,缩小全图后可能消失。这解释了为什么“场景正确”和“每个局部都可读”必须分开检查。

2. 先比较便宜的全图方法

三种视觉方法都直接读取全图,不需要预先知道场景。近邻方法找与已检查图片最相近的例子;支持向量机(SVM)则从同一批参考学习类别分界。

例如一张魔法书画面,三个视觉方法都建议“战场 / 魔法书”,OCR 又读到书页相关文字,可以进入一致候选;如果有方法认为它还是普通战场,就回到原图检查。三个模型共用开发参考,不是三份独立真值。

方法 实际输入与处理 主要限制
颜色近邻 缩为 24×14 的 BGR 图,比较归一化像素差 容易记住地图和背景颜色
边缘近邻 灰度图的横/纵梯度,各缩为 40×24 后比较 比较外形,但也会丢掉小提示
RBF SVM 拼接颜色和加权边缘,类别平衡,C=10 得分未校准,不是正确概率
OCR 规则 全图文字、位置与场景词汇 没读到提示文字不代表提示不存在

全图 OCR 使用 PP-OCRv6 medium,分别读原图与 1.5 倍局部对比度增强图。640 条复用了兼容缓存,另外 6,795 条重跑;来源包含高清图与 640 像素宽的旧缩略图,不能混称高清数据。后来的 B024 高精度整屏扫描是另一批输入和选型,不把两批数量相加当成去重全库规模。

3. 7,435 条记录怎样分层审核?

这批来源来自 23 个录屏标识,7,435 是记录数,不是去重图片数,也不是按录像隔离的独立测试集。最后候选模型使用 1,202 条逐图参考;不一致或与 OCR 冲突的 1,188 条再看原图,剩余一致候选再抽查。没有把聚类中心的人工结论自动传播成整组已审。

最终来源等级 有效记录
用户确认 30
助手逐图检查 2,626
算法交叉核对 4,779
未处理 0

实际看过 2,630 条不同来源,其中 4 条与用户确认重合,用户标签优先。因此“全部处理过”不等于“全部人工逐图审核”,更不表示每张图的生物和文字都标全了。

这些结果已经接入现有场景审核网站。每条保留原图、标签和审核来源;源图变化、OCR 不完整、模型冲突或标签组合不合法时,不能直接导入为一致候选。

4. 最容易漏掉的仍是小浮层

冻结候选和抽样顺序后,分别检查 120 张按类别与录屏挑选的压力样本,以及剩余池的随机 120 张。下面比较的是修正前预测与助手逐图检查,不是最终标注与自身的比较。

开发抽查 主场景一致 子场景一致 Other 一致 三项同时一致
压力样本 120 120 120 112 112
随机样本 120 120 120 116 116
合计 240 240 240 228 228

12 处差异都是小提示遗漏或遮挡误报,已经逐条修正。早一轮另试了文字密度特征的条件 SVM 与 Extra Trees,Other 均为 220/240,没有改善当时基线,因此没有替换默认方法。早晚两轮不是同一队列,不能用 220 与 228 宣称提高了八张。

这轮检查说明,全图方法能帮助整理场景数据,却不擅长发现小浮层。到了真实视频流程,另一个问题出现了:程序有时已经认出了生物面板,却仍不让后面的字段读取运行。

5. 认出了战场,为什么还跳过检测?

下面这张图中央打开了生物属性面板,顶部行动条和两侧英雄仍然可见。新接入的高精度 OCR 已读到“阶级”和“主动能力”,但后面的英雄数字、行动条和面板字段模块全部被跳过。原因不在 OCR,而在决定“要不要运行后续模块”的场景检查。

生物属性面板打开,顶部行动条和两侧英雄仍可见。

图 2:两种视觉方法都给出“战场 / 生物面板”。一种认为没有额外遮挡,另一种认为有;旧规则要求三个标签完全一致,于是把整张图拦住了。这是已知开发失败图,不是未见测试样本。

最小的改法是:仍要求底层场景和面板类别一致,但容忍“有遮挡 / 没有遮挡”的分歧。距离太远、候选太接近,或已有文字明确指出菜单、过渡、暂停时,仍然拒绝。通过以后也只说“可以尝试战斗相关检测”,不说每个区域都能读清。

另一种更宽松的办法是只检查“是不是战场”。它连普通战斗和魔法书之间的分歧也容忍,并把距离差改为与最近的其他主场景比较。这样可能找回更多图,但会不会把不该处理的画面也带进来?

我们先固定这三种方案,再回放原来逐图检查过的 2,630 条来源。每次查询时,排除同录像的全部参考;两段已知连续对局也放在同一个排除组,共 22 组。这是按来源分组的开发比较,不是新视频盲测:这些资料曾参与历史标签整理,不能排除间接影响。

只比较视觉补充分支 战场中给出战场候选 / 1,435 非战场误判 / 1,195
三项完整一致 608 0
只容忍遮挡分歧 704 0
只判断顶层场景 1,221 2

保守改法多找回 96 张战场图,没有新增非战场误判。更宽松的顶层方案虽然找回更多,却把下面这样的外部软件窗口当成了可继续处理的游戏画面:两边确实还露着英雄,但中间已经是另一个程序。

外部竞技场助手窗口覆盖游戏中央,两侧仍露出英雄。

图 3:只看底层布局容易漏掉前景应用。两处新误判来自这个窗口的相邻画面,不是两个独立错误来源。

“非战场误判为零”也不是完全安全。另有 337 张参考带过渡、暂停、断线或非游戏条件,三种方案分别在其中 17、18、42 张上输出战场。这里可能仍是战场,只是不适合直接读取全部内容。保守方案也多放行了一张参考标为过渡的魔法书画面;我们保留这个失败,不把它算作成功找回。

真正接上已有 OCR 后,三种方案在 1,435 张战场中分别输出 739、827、1,276 张战场候选,非战场误判为 4、4、6。OCR 自己也会犯错,所以不能把上表的视觉分支成绩当成整条流程成绩。

因此,9月12日先把容忍遮挡分歧接为显式离线选项,旧默认和原始结果保留;只判断顶层的方案不进入视频入口。在当时两个一分钟片段的 53 张原图中,战场候选从 30 张变成 34 张,新增的是四张生物面板画面。这说明原来被跳过的模块有机会继续工作,不是说这 34 张已经标全或判断全对。

实际补跑也暴露了下一层问题:图 2 中的防御数字 25 已被多次读到,最终字段却仍因保守的合并检查而留空。后续字段合并与完整裁剪读取分别处理这些问题,不能只统计模块有没有运行。

不过,短悬浮说明接上后,六张已经有参考标注的图片仍被场景检查拦住。它们的两种视觉方法不仅都认为是战场,连面板类型也一致。这次到底卡在哪里?

6. 两个候选很接近,但它们其实都是战场

程序原来要求:最像的参考图,要比另一类别的参考图明显更像。这个“另一类别”包含了全部标签。因此,“战场 / 生物面板 / 有遮挡”和“战场 / 生物面板 / 无遮挡”也会互相竞争。两者得分接近,程序就拒绝整张图,尽管它们都支持继续检查战场内容。

这次只改变比较对象:仍要求颜色与边缘同意战场及其子类型,但把差距与最近的非战场参考比较。 图片不能离参考太远,差距阈值也不变。与上节被否决的宽松方案不同,它没有放弃子类型检查;那两张外部窗口画面仍因“英雄面板 / 普通战斗”的分歧而被拒绝。

在相同的2,630条来源分组开发参考上,结果如下。设计时已经看过上述失败,所以这仍是开发改进,不能当新录像盲测。

视觉补充分支 找到战场 / 1,435 误收非战场 / 1,195 放行过渡 / 283
与不同完整标签比较 704 0 18
与非战场比较,保留子类型一致 1,210 0 35

新方案多找到506张战场,但也多放行17张过渡。逐张查看后,它们包括九张半透明生物面板、六张正在开关或翻动的魔法书、一张半透明英雄面板和一张半透明日志。下面是其中一个例子。

生物属性面板还呈半透明状态,底下的移动范围与战场能穿过面板看到。

图4:背景确实是战场,但面板还未完全显示。认出场景只能让局部检测开始,不能替代对面板可读性或稳定性的检查。原过渡标注保留,没有为了提高成绩而改成普通战斗。

真实流程还会先读OCR。加上历史OCR预测后,战场候选为827→1,271,非战场误判仍为4;其中OCR原有的误判不会被视觉补充分支自动消除。因此,这个版本只进入独立的短悬浮离线对照,不替换默认视频入口,也不宣称画面已经可安全操作。

找回图片后,真的多读到了什么?

我们把新规则用于四段较新的开发录像,复用403张图已有的OCR,没有重新解码或读取留出视频。完成面板流程的图片从206张增加到369张,另34张仍被场景检查跳过;整个采集清单中还有1,465张待OCR,网站继续显示这些状态。

原先被挡住的六张参考图全部进入了后续处理。在同一组13张图、158个文字或数字参考中,完全匹配项从46增至69,没有丢掉原来匹配的项。另有四段“描述+限制”合并文本匹配,单列报告,不拆成八项成功。

这离“全部内容读出来”仍有距离:66项角色尚不支持,11项拒识,4项没找到读取位置,8项属于刚才单列的合并文本。法术提示可以靠标题、学派与底部等级/魔力的布局定位;生物能力说明和状态效果常没有这一套布局,不能直接套用。

现在可以在新旧场景逐图对照查看收益和过渡失败,也能在语义时间线切换原入口、新候选和参考标注。这里保留当时的开发结果;后续局部入口和质量检查见 P40 组报告。

这轮修复把“不像其他场景”和“面板已经显示完整”分开了,确实增加了可读字段。补齐状态说明布局后,我们又遇到一个更具体的问题:历史参考的转场标签,是否应阻止当前文字进入OCR?

7. 像一张转场图,不等于眼前的字读不了

新采集的状态提示中,有三张文字清楚,颜色和边缘也都认作战场生物面板;只因边缘最近的旧参考标着“转场”,整帧就被跳过了。这里混淆了两件事:历史图是否在变化,以及当前局部能否读取。

新的离线对照只增加一条窄规则:两个方法都同意战场生物面板,其中一个参考是转场、另一个是普通或遮挡面板时,允许继续尝试局部读取。相似度阈值、当前OCR阻挡与局部质量检查不变。双方都是转场仍拒绝,更不会因为字读出来就允许游戏操作。

相同来源分组开发参考 原入口 生物面板离线尝试
视觉分支找到战场 / 1,435 1,210 1,219
视觉分支误收非战场 / 1,195 0 0
视觉分支放行过渡 / 283 35 41

新增九张已查看原图:四张面板半透明,两张右侧生物显示区仍是黑色,另三张带有悬浮说明。原标签全部保留。加上历史OCR的实际组合后,战场输出为1,271→1,280,非战场误收仍有旧的四张;这个修改没有解决那些OCR误判。

随后在新88张状态批上重跑,五张原场景跳过全部进入面板流程,其中三张补出了状态提示。固定13张正例的26项文字,原完整切块读法从20项匹配增至25项,局部重读则为26项匹配;六张相似负例均无状态提示。另158张含选秀、结算的控制批,处理/跳过结果未变化。

逐图场景对照保留2,630张参考与246张实际接线图;状态文章解释哪些文字被补回。设计已看过这些失败,因此不是独立测试。结果支持继续做离线数据采集,不支持将此规则改为线上“稳定且可操作”的判断;默认入口保持不变。