P66 · 战斗日志 · 实验记录与相关篇目
44 张候选帧和逐行 OCR 可验收;日志面板简单分类器在 15 张来源隔离 holdout 上为 86.67%。尚未跨帧合并成行动事件。
在回合制战斗里,漏掉一帧动作通常不是灾难:玩家有较长思考时间,而且战斗日志会留下文字证据。真正有价值的不是逐帧无损复刻动画,而是从稳定、可读的画面中找到日志行,保留原文和位置,让后续程序或人判断发生了什么。
程序先找日志文字,再按明确句式拆出主体、效果和记载时长。新增 35 条效果日志中,固定的文字识别(OCR)与句式解析正确读出 33 条,另外 2 条没有把握,明确不输出结构化结果。这种保留原文但不猜答案的处理,下文简称“拒识”。
想先看它能读出什么,可跳到效果与时长实例。前面的历史数据实验分别检查“是否像日志面板”和“文字是否完整”,两者不能合成一个日志理解准确率。
flowchart LR
F[Stable battle frame] --> P[Log panel candidate]
P --> L[Line boxes]
L --> O[OCR text and reading quality]
O --> T[Strict text pattern]
T --> E[Fields or abstention, with original text]
图 1:单帧日志文本先成为可审核证据;只有跨帧去重和上下文核对后,才可能形成行动事件。
1. 先区分“日志打开”与“战场可见”
历史数据从 7 个视频选出 44 张战场候选:20 张标为“日志开”,24 张标为“日志关”。中央区域可能是普通战场、透明日志,也可能被生物详情遮住。
这两个简称有具体的筛选规则:至少找到三条带合法时间戳前缀的行,才产生 LOG_OPEN;没有日志行候选的战场帧才进入 LOG_CLOSED 抽样,其余排除。因此“关”只表示本帧没有取得合格日志行,不证明面板一定不存在。

图 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 条中文原文尚未逐字完成人工校对。
9 月 10 日第一轮参考:利用 OCR 检索重新查看 4 张既有原图,逐项转录了 46 个日志文字区域,并保留原生框、视频时间和审核来源。这些参考与旧 393 条候选分层显示,不把候选总数写成已审核数,也不意味着整页所有日志已经补齐。与 B025 面板补标合计 20 图、276 字段;固定 OCR 的合并开发检查精确读回 262/276,不能单独拿来当日志识别准确率。旧分类器与下面的留出成绩没有重训或重算。
效果与持续时间:能从日志读到什么?
战斗日志不仅写伤害和施法,还会写单位获得的效果。例如原图里有:
[21:27:18] banmumo: 圣骑兵(18)获得了“阿丽娜之触”效果。持续时间:7。
解析器分别保存主体“圣骑兵”、效果“阿丽娜之触”和记载时长 7。这里没有把 7 写成“当前剩余 7 回合”:旧日志可能已经在屏幕上停留了几个回合,而且这行原文没有写单位。显示名称也没有直接绑定到某个单位实例。
这轮先用文字检索找候选,再逐行看原生像素,整理了来自 6 个视频的 9 图、36 个文字框:8 张日志图的 35 条新增效果参考,以及 1 张能力说明里的既有时长标注。后者重新核对后作为反例复用,不计新增标签。效果包括阿丽娜之触、注能盔甲、寒冬循环、寒霜刺骨、英勇长啸和多里斯之潮。同一次效果影响多个单位会产生多条日志,不能把行数当成独立施法数。
| 固定 OCR 与新增句式的回放 | 实际结果 |
|---|---|
| 正确读出日志主体、效果与记载时长 | 33 / 35 |
| 拒绝解析的效果日志 | 2 / 35 |
| 接受了错误的结构字段 | 0 / 35 |
| 能力说明没有被当成效果事件 | 1 / 1 |
两条拒识都来自 OCR 漏掉时间戳括号。原图中能看见括号,但程序没有自行补字。能力说明写着“持续时间:2回合。”,却没有日志时间戳和“获得效果”的句式,因此只保留为说明文本。
这些是检索后挑选的开发图,不是独立新视频测试。本轮没有重跑或调整 OCR,回放使用冻结的选中读数;它与上面的“两路一致”训练候选口径不同。网页因此把人工参考与本地解析候选分层,明确标出“当前剩余:未知”,不把这批结果提升为已确认的当前状态。
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. 下一步把日志加入每帧完整标注
当前可以在语义时间线的“日志效果与持续时间”批次逐帧查看参考框,并切换“本地候选”检查原文与拒识。恢复后优先补不同效果、解除或消失、日志滚动截断和漏括号难例,另留未见来源作验收。状态图标不再只是弃用备选:P68已有定位、角标和悬浮说明实验,因为日志不保证给出当前剩余回合。两类证据分别保留;跨帧合并重复行仍未完成。
目标不是做一个庞大的日志专用模型,而是让本地算法能在新视频的每张关键帧上尽力读出可见日志,并对不确定文字明确拒识。这样两帧之间发生了什么,可以由多种证据共同推断。
Comments