摘要

要让程序认出游戏里的各种魔法、操作、状态效果和战斗日志,训练集里必须先有它们的截图和标注。用户的要求是:不同的魔法类型、操作类型、移动类型,以及技能效果说明和冷却,都要在训练集里有对应样例。

本实验(B159)第一轮先做“盘点”:从当前安装的游戏文件生成一份“应该能识别的东西”的目标清单,再扫描历史录像里的生物面板页和战斗日志页,用 OCR 读出文字后与清单对照,统计每一项有没有截图样例。

结果:日志句式 29/37、状态说明 35/149、状态名 86/131、生物能力名 316/491、法术名 31/88 有自动匹配的样例。这些是未复核的标注建议,不是标签。另外事后发现,采集时没有按数据池过滤,混入了测试池和冻结评估的录像。

要回答的问题

现有录像里,各类日志句式、状态、能力和法术分别有没有可用的截图样例?缺哪些?

数据与来源

  • 目标清单(catalog.py):只读当前安装游戏的语言文本和状态(buff)配置,得到:战斗日志句式 37 条(带参数的)、法术 88、生物能力 491、状态 400 个(按说明模板去重为 149 个键、131 个状态名)、提示模板“能力消耗:{0}”。游戏更新后可重新生成。
  • 录像:已有 5 fps 场景扫描的 51 段录像(8 月 22 日至 10 月 9 日)。本轮只看两类画面:生物信息面板(CREATURE_INFO)和战斗日志(BATTLE_LOG);法术书、英雄面板、攻击预览还没采。

方法

  1. 采集:在上述片段里只取稳定帧。把画面缩成 320×180 的缩略图并按 10×10 像素分格,任意一格平均灰度变化超过 8 就再取一帧,用来抓住悬停说明的出现/消失和日志滚动。在一段录像上试过:20 像素的格只抓到一半的悬停切换,更细的格又会被会动的生物立绘带着每帧都取。
  2. OCR:每帧整图用 PP-OCRv6 读文字(与生产相同的面板 OCR),保存来源录像、毫秒时间、文字、分数和框。
  3. 匹配:文字做归一化(空格、引号、全角标点)后,与清单中的名字完全相同,或符合日志句式、状态说明模板(并提取 {0} 这类数值),就记一条自动匹配。日志行先去掉“[时:分:秒]玩家名:”前缀;原文相同的句式(例如英雄和部队都会“使用了…能力”)按参数区分:名字后带“(数量)”或是生物名的算部队。
  4. 覆盖统计分“8 月 28 日之后/之前”(游戏 8 月底更新,以之后为准)。

设置

51 段录像共挑出 4,210 帧,整帧 OCR 约 25 分钟(RTX 5080,游戏已关闭),得到 47,416 条自动匹配。

结果

类别 有样例 / 总数 说明
日志句式 29 / 37 缺:投石机攻击、物体被摧毁、失去专注值/专注蓄能、英雄主动能力被禁/解禁、魔法书被锁/解锁
状态说明(悬停文字) 35 / 149 已有的带确切数值,如“速度提升2”“先攻值提升4”“受到的任何伤害降低35%”
状态名 86 / 131 缺 45 个,例如嘲讽、狂暴、镜像分身、现实扭曲、空间圈套、各元素“觉醒 II”
生物能力名 316 / 491 大多来自面板上的能力列表;能力的悬停说明另需统计
法术名 31 / 88 只来自日志“施展了法术”;法术书还没采
“能力消耗:{0}”提示 1 / 1 出现 353 次

几乎所有样例都来自 8 月底更新之后的录像。

失败与负结果

数据卫生问题(事后补记):采集脚本取了所有扫描过的录像,没有按数据池过滤。4,210 帧里有 1,526 帧来自测试池的全部 12 段录像(包括验证/测试来源、预留审计录像,以及一对登记为“不训练、不调阈值”的冻结评估录像,这一对共 357 帧),另有一段来自另一个测试池。本实验只做了 OCR 和文字匹配,没有训练;但这些帧后来被别的实验用来调版面和匹配参数。因此:这 13 段录像对状态行、底栏版面相关的字段不再能当盲测材料,那对冻结评估录像的“不调阈值”约定已被违反,以后不能再称为冻结。之后的采集只按登记取训练池。

局限

  • 计数是匹配到的文字行,同一画面、同一局会重复计数,不是独立来源数。
  • 自动匹配是待复核的建议;OCR 读错的行匹配不上(漏),也可能有极少数误配。
  • 部分状态说明模板只差结尾附加文字,按开头匹配,结尾不计。

结论与下一步

第一轮盘点给出了清楚的缺口清单。下一步:采法术书和英雄面板,补法术名与说明,统计能力的悬停说明与冷却;按类别抽样做像素复核,形成真正的训练标签;把缺样例的项目(日志 8 种、状态 45 种、法术与能力缺项)交给用户补录。