摘要
这个项目要从玩家自己录下的游戏录像中读出战斗信息:英雄属性、生物面板、法术说明、战斗日志等。录像一秒 30 帧,大部分帧要么在动(单位移动、攻击特效、翻书、面板开合),要么和前一帧几乎一样。直接按固定间隔抽帧,常会抽到模糊的过渡画面。
本实验(内部编号 B033)做一个“稳定片段挖掘器”:先判断一小段画面是否“落稳”,再在每个稳定片段里只留一张最清晰的代表图,作为下游识别任务的候选关键帧(关键帧:值得送去做较重识别的截图)。
主要结论:
- 用 96 组人工/助手审核的五帧样本训练的分类器,在 30 秒视频片段上把 900 帧缩成 68 张候选(减少 92.44%),抽查没有看到明显模糊或开合中的废帧。判定为“够用”,停止调参。
- 后续针对短暂界面的检查发现:五段窗口里 7 次清楚的生物面板只留下 3 次,其余 4 次根本没有被接受的窗口——面板显示时间太短(只有 2–3 个采样点)。
- 在同样窗口上每 0.2 秒固定取一张图,7 次面板全部命中,但也多出 14 张半透明的过渡图。
- 之后的多轮“供样”(为别的识别任务找训练图)都沿用原筛选器,不再调它。
所有数据来自已经看过的开发录像,不是独立验收集,没有报告整体召回率。
要回答的问题
- 能否用一个便宜的分类器区分“五帧内容稳定”和“正在变化”?
- 在连续长视频上,它能把截图数量压缩多少?候选图能不能用?
- 只出现很短时间的提示框、面板(短悬浮)会不会被漏掉?用 10 fps 是否比 5 fps 好?
- 固定频率补采能否找回漏掉的短面板?代价是什么?
术语:
- 五帧窗口:连续 5 个采样点(5 fps 时首尾相隔 0.8 秒,10 fps 时 0.4 秒)。
- STILL / CHANGED:五帧里“任务内容不变”还是“变了”。背景微动、生物原地呼吸、计时数字递减不算变化;单位跨格移动、翻页、面板开关、新悬浮说明出现算变化。
- 稳定 ≠ 可用:五帧持续被遮挡也算稳定,但不能用来识别被遮挡的东西。
- OPAQUE / TRANSLUCENT:面板外观清楚不透明 / 半透明(正在淡入淡出)。
数据与来源
- 96 组五帧样本,来自 7 段开发录像,共 480 张 2560×1440 原图。前 64 组由用户确认(24 稳定 / 40 变化),后 32 组由助手审核(28 稳定 / 4 变化),合计 52 稳定 / 44 变化。新增 32 组专门补了裸战场待机(洞穴、雪地、草地、火山)、稳定魔法书和持续悬浮说明等正例。
- 长视频演示:一段约 38 分 29 秒的录像。
- 实用检查:2 个开发来源的 6 段 × 30 秒视频。
- 短悬浮对照:四段已曝光录像的八个 60 秒片段,共 480 秒。
- 面板开关审计:五段各 4 秒窗口,共 200 个 10 fps 采样点,逐点人工标外观。
- 之后多轮供样窗口(三来源、录像中段、按索引定位的状态悬浮、稀缺符号、状态条遮挡、新来源面板),全部来自已曝光的开发录像;两段预留的 9 月 12 日验收录像始终没有打开。
方法
稳定分类器
把每张截图缩成 320×180 灰度并轻微模糊,在 6 个区域和 8×6 个小块上统计帧间变化,得到 43 维特征。左右上角的计时器和头像区域被屏蔽(它们一直在变,但不代表画面没稳),行动条和技能栏保留。不依赖场景分类或 OCR。
比较三种方法:全图帧差、局部特征逻辑回归、局部特征 Extra Trees(一种随机森林变体)。评估用“留一个视频”交叉验证:每次拿一整段视频当验证,其余训练,避免同一视频的相似片段既训练又测试。选择代价设为“动态帧被误放进来 × 3 + 稳定帧被漏掉 × 1”(工程假设),比较阈值 0.5 和 0.8。
长视频选帧
5 fps 滑动五帧窗口,每个窗口打分;被拒绝的窗口把片段切开,相邻接受窗口合并成稳定段。第二版(V2)额外比较“当前画面与段起点的外观差”,差异超过 0.065 就切成新段,防止长魔法书段混进新的提示。每段只导出一张最清晰的原尺寸图。另有一条不经过稳定门的密集变化分支,读 30 fps 小图,只把变化处作为“边界提示/困难样本”保留。
固定频率补采
在原生 10 fps 采样序列上,每隔固定步长取一张(2、5、10 fps),完全不看像素或标签,只按序号选。实际送 OCR 的固定为 5 fps、起点 0。这只是“恢复输入”,不保证选到的图稳定或可读。
设置
- 分类器只在开发数据上比较和选模型,没有独立测试。
- 短悬浮对照的三个方案(5 fps 五帧、10 fps 五帧、10 fps 加局部细节保护)共享同一份 640×360 解码缓存,来源和阈值事先固定。
- 面板开关审计先逐点标外观、保存参考,再运行真正的生产选帧入口;诊断重算与生产输出逐项一致后才评分。
- 补采协议在运行前冻结;OCR 用既有 PP-OCRv6 配方,不调参。
结果
分类器(96 组,阈值 0.5)
| 方法 | 判对 /96 | 稳定精确率 | 稳定召回 | 动态误放 | 稳定漏掉 |
|---|---|---|---|---|---|
| 全图帧差 | 86 | 44/46 | 44/52 | 2 | 8 |
| 局部逻辑回归 | 88 | 50/56 | 50/52 | 6 | 2 |
| 局部 Extra Trees | 89 | 47/49 | 47/52 | 2 | 5 |
选 Extra Trees、阈值 0.5,代价 11;阈值 0.8 误放 1、漏 12,代价 15。分数不是校准过的概率。模型选择用的是同一批开发结果,不是独立测试成绩。
长视频与实用检查
38 分钟录像的 5 fps 输入有 11,547 张,V2 得到 318 个稳定段(减少 97.25%),密集分支另产 198 张缩略预览。V2 在开头菜单背景动画处明显过度切分,约 200 秒产生大量相似菜单帧。
实用检查:6 段 30 秒共 900 帧,稳定分支保留 68 张(每段 11、7、22、10、9、9 张),平均每分钟 22.67 张。68 张里 0 张落在已标注的 38 个“过渡未就绪”范围,0 张落在 2 个“部分可读”范围;参考机会覆盖 30/44,漏掉的主要是短面板。助手看了全部 68 张总览,原尺寸复核最短的 9 段,没有看到明显废帧。这只说明“候选大致可用”。
速度(12 核 CPU):常驻模型预测约 0.040 毫秒/窗口(不含特征计算);V2 全视频处理 64.387 秒(已有缓存)。
短悬浮:5 fps 与 10 fps
| 方案 | 首尾间隔 | 候选图 | 13 个检查机会保留 |
|---|---|---|---|
| 5 fps 五帧 | 0.8 s | 148 | 8 |
| 10 fps 五帧 | 0.4 s | 235 | 11 |
| 10 fps 加细节保护 | 0.4 s | 1,814 | 11 |
13 个机会是助手看接触表找的,不是穷尽清单。两个极短法术提示三种方案都漏。细节保护因待机动画产生大量额外候选,不采用。决定:后续离线采集用 10 fps 五帧。
面板开关审计
| 外观 | 采样点 | 完整五帧中心 | 被接受中心 | 代表图 |
|---|---|---|---|---|
| 无中央面板 | 123 | 104 | 74 | 13 |
| 清楚面板 | 52 | 52 | 28 | 4 |
| 半透明 | 25 | 24 | 0 | 0 |
好消息:24 个可判的半透明中心 0 个被接受,17 张代表图里没有半透明图。坏消息:7 次清楚面板只覆盖 3 次,另 4 次没有任何被接受的中心——最短三次只有 2、2、3 个采样点是清楚的,任何五点窗口都会跨到过渡帧。这是“窗口本身太长”,不是去重丢掉的。
固定频率补采
| 方法(起点 0) | 时间点 | 清楚面板命中 /7 | 清楚图 | 半透明图 | 无面板图 |
|---|---|---|---|---|---|
| 原稳定代表 | 17 | 3 | 4 | 0 | 13 |
| 2 fps 固定 | 40 | 5 | 10 | 7 | 23 |
| 5 fps 固定 | 100 | 7 | 25 | 14 | 61 |
| 10 fps 全部 | 200 | 7 | 52 | 25 | 123 |
117 张图全部 OCR。七张图上 75 个稀疏文字参考(助手看原图写的)73 个一致;一处 -1 读成 1,一处无穷符号 ∞ 读成 8。后续对这 117 张做自动局部裁剪重读(392 个裁剪,两个 OCR 模型各两种放大方式共 1,568 次读取),PaddleOCR-VL 原尺寸 74/75 一致、负号读回、∞ 仍错;放大 4 倍并不总是更好。
新来源供样
在三段录像的十个窗口(144 秒)用原筛选器得到 100 张代表图并全部 OCR。六张原图 79 个参考里整屏 OCR 76 个唯一一致。局部读取链中,VL 原尺寸对已送达的 54 个字段全对,但有 11 个字段被默认面板质量门整体拒绝(一张长能力说明遮住左侧列表),端到端 65 项中只有 54 项拿到裁剪——不能说成 100% 准确。
其他供样轮次(三来源 97 张、录像中段 158 张、索引定位 88 张、稀缺符号 41 张、状态条 66 张)主要是为下游的生物面板、状态图标等任务补训练材料,它们的读取结果属于各自的下游实验。
失败与负结果
- 分类器误放了一次英雄悬浮高亮和一次行动范围变化,漏掉 5 组稳定样本。
- V2 在菜单背景动画处过度切分;最长候选段 222.6 秒未完整审计。
- 短面板漏采:7 次只留 3 次。
- 补采多收 14 张半透明图,其中 2 张还通过了旧的单图质量门——补采不能修复质量门本身的问题。
- “越往录像后段越容易看到状态悬浮”的假设不成立:录像中段 158 张里一张状态悬浮都没有,其中一段其实是下一局的选技能画面。
- 局部重读评分程序曾用错字段名,错报 14 个缺失裁剪;修正映射后重出报告,首轮输出保留。
- 无穷符号
∞在所有局部读法下都没读对。
局限
- 所有来源都参与过开发;没有执行原计划中“24 段 / 8 来源组、先冻结参考再盲跑”的独立审计,因此不能声称达到其中 95% 精确率 / 90% 覆盖的候选目标。
- 13 个、7 次之类的机会数是定向挑选的,不是随机或穷尽,不能换算成全局召回率。
- 参考多数是助手看图(模型目视核对),待用户确认,不是人工审核。
- 时间戳是名义媒体时间,不是精确原始帧时间。
- 软件测试通过数(例如 Perception 全套 2,973 项通过)只证明程序合同,不是识别准确率。
- 在线(实时)调度和“检测到动作后再去读日志”的双路径设计只停留在设计,本实验没有实现。
结论与下一步
作为“先挡掉明显运动和过渡、再把相似稳定画面压成少量候选”的离线工具,当前 5 fps / 五帧 / Extra Trees 0.5 已够用,不再继续调。它的已知弱点是只出现零点几秒的短面板,对此采用“短窗口、明确标注身份的固定频率补采”作为离线补充,但不自动对所有视频做 5 fps 全量 OCR。后续重点回到字段本身:按字段区域判断可读性(而不是整块面板一刀切),继续收集异源的小字、负号和 ∞ 样本。
Comments