在回合制战斗里,漏掉一帧动作通常不是灾难:玩家有较长思考时间,而且战斗日志会留下文字证据。真正有价值的不是逐帧无损复刻动画,而是从稳定、可读的画面中找到日志行,保留原文和位置,让后续程序或人判断发生了什么。

B030 从 7 个视频整理 44 张候选帧:20 张日志打开,24 张日志关闭。打开帧里共有 393 个逐行框,其中 328 条作为干净文字候选,65 条保留为难例。另一个很小的分类器只负责筛“中央日志是否打开”,不负责理解行动。

flowchart LR
 F[Stable battle frame] --> P[Log panel candidate]
 P --> L[Line boxes]
 L --> O[Two OCR attempts]
 O --> Q[Clean or hard queue]
 Q --> T[Strict text pattern]
 T --> E[Pending temporal event]

图 1:单帧日志文本先成为可审核证据;只有跨帧去重和上下文核对后,才可能形成行动事件。

1. 先区分“日志打开”与“战场可见”

44 张图都来自战场候选,但中央区域可能是普通战场、透明日志,也可能被生物详情或其他面板覆盖。LOG_CLOSED 的工程含义是“这一帧没有找到合格日志行”,不是对 UI 内部状态的绝对证明。

日志打开与关闭候选的真实审核联系表

图 2:黄色边框表示日志打开,蓝灰边框表示日志关闭。联系表包含真实画面和帧标识,用来检查类别分布,而不是只看裁图。

人工已经查看全部 44 张面板联系表,没有发现开/关错标。原图不重复复制;标注记录保留视频来源、实际视频时间、框和 OCR attempts,方便回到时间线。

2. 两路 OCR 一致,才进入干净候选

20 张日志打开帧共有 393 个逐行 XYXY 框。两路 OCR 规范化文本完全一致、且最低置信度不低于 0.85 的 328 条进入 clean set;其余 65 条不一致、单路或低置信结果进入 hard set。难例没有被丢弃,也没有被猜一个更顺眼的答案。

严格句式解析器在 328 条干净候选中找到了这些可见文字类型:

解析候选 行数 含义边界
damage 83 画面上像伤害句式,不是独立伤害事件数
wait 61 等待文字候选
mana_loss / mana_restored 46 / 31 法力变化文字候选
spell_cast 32 施法句式候选
ability_used / attack 11 / 4 能力与攻击句式候选
summoned / destroyed 4 / 1 召唤与摧毁句式候选

同一行可能在连续多帧出现,所以这些数字统计的是“可见行”,不是行动次数。人工分布抽查 40 条 clean line,40 条都完整覆盖一条可读日志行;首张 18 条 hard case 也确实适合保留为难例。但 328 条中文原文尚未逐字完成人工校对。

3. 一个简单分类器足以先筛日志候选

基线对固定中央 ROI 提取 96×64 灰度 HOG 与 HSV 颜色直方图,再用 Extra Trees 分类 LOG_OPEN / LOG_CLOSED。按完整来源视频隔离,29 张训练,最新 3 个视频的 15 张留出。

留出真值 预测打开 预测关闭
打开,6 张 5 1
关闭,9 张 1 8

accuracy 为 13/15,即 86.67%;macro-F1 为 86.11%。两个错误都已看过:一个是透明日志打开帧,另一个是深色生物详情弹窗关闭帧。这说明外观分类器适合减少人工搜索,却不能代替逐行 OCR 和证据审核。

4. 日志文本还不是行动时间线

本轮没有滚动对应、跨帧去重、事件 ID、行动完整率或状态修改。即使一行文字可读,也可能是上一动作留下的旧行;即使日志暂时关闭,也不能证明这段时间没有动作。B030 的输出因此只叫 observation/candidate。

这种边界符合实际使用:偶尔漏掉动作动画可以接受,日志可以补充;但不能反过来把稀疏日志帧说成完整重放。训练数据与最终新视频评估也必须隔离,当前 15 张 holdout 只用于方向检查。

5. 下一步把日志加入每帧完整标注

先由用户在可视化网站验收 44 张面板和重点文字行。方向正确后,把日志开关、每行框、原文、解析候选与证据等级写入平衡精选关键帧;再用 B031 的相邻计时和其他 UI 变化帮助合并重复行。

目标不是做一个庞大的日志专用模型,而是让本地算法能在新视频的每张关键帧上尽力读出可见日志,并对不确定文字明确拒识。这样两帧之间发生了什么,可以由多种证据共同推断。