摘要

战斗记录 App(Battle Notes)分析一段对局后,会保存两样东西:视觉识别读到的观察(截图里的数字、名称、图标),以及状态估计(SE,把观察累积成对局状态和对手构筑推断的程序)给出的推断。之后 SE 的解释逻辑不断改进,例如修好了英雄和生物属性历史的解释,但用户导入旧分析时只能看到当时保存的旧推断。

本实验给 App 加了一个按钮“仅重算 SE 解释”:复用已保存的全部识别结果,用当前 SE 重新推断,另存一个新快照,并刷新所有结果页。它不重新识别图像、不处理视频,所以不会提高识别准确率,只让已有证据得到最新的解释。

要回答的问题

能否在不重跑视频和 OCR 的前提下,让旧分析获得最新的 SE 解释,同时保证原数据不被破坏、迟到或冲突的结果不被错误发布?

数据与来源

  • 真实验收输入:一段官方 AI 对局录像(10 月 9 日 08:38)早先保存的 8 帧分析结果。这是已曝光、用户明确保留的训练材料。只复制小型保存结果到隔离实验目录;原记录里录像只以文字 ID 关联,所以只在副本里把它指向同源、已正式保留的录像文件。
  • 没有处理新视频、运行 OCR、读取冻结材料或使用独立留出集。

方法

用户操作。 导入一个分析目录 → 点击“仅重算 SE 解释”(缺少完整请求、输入帧或会话上下文时按钮禁用并说明原因)→ 完成后切到新快照,简报、属性对照、构筑解释和全部 SE 结果同时更新。新快照存在同一次分析的快照目录下,旧快照保留,“最新”指针指向新结果。

实现要点:

  • 复用已有的后台证据任务,通过 App 内核的公开推断入口运行。原请求深复制后完整提交,不筛掉开局、不加默认值、不改对手模式。
  • 内核进程限 8 核、60 秒超时;取消只影响这次子进程;与导入、返回、其它补读共用已有的互斥入口;关闭窗口即取消。
  • 执行前后核对所选快照的请求、结果、会话、录像归属和原“最新”指针;任何一项变化都拒绝发布。成功后重建整个保存结果工作区,避免某些页还显示旧结论。
  • 新增一个私有记录文件,写明原快照、起止时间、帧数、所用内核,以及“没有重读图像或视频”。不改 SE、视觉识别或存储的严格格式,旧读取器会忽略这个新文件。

审阅后的补强。 外部审阅指出:原来的写入器只保证单个文件原子替换,没有保护“检查旧指针 → 写快照 → 发布”这整个过程。现在共用的快照写入使用 Qt 自带的每目录锁文件,在新文件写完、发布指针之前于锁内重新检查来源和指针。这只保护使用本写入器的调用;旧安装版或外部程序不参与这把锁。

设置

真实验收脚本通过生产的视频分析工作区按钮派发真实的内核子进程,保存、整页切换,再重新导入,在离屏 Qt 中运行。

结果

软件检查(不证明识别准确率、游戏规则完备性或安装版可用性):

批次 结果
新功能初版 12 通过
9 个相关文件(保存、导入、HTML、旧补读与控制) 98 通过(40.95 秒)
加录像归属变化负例 13 项定点全过(3.80 秒)
审阅后加 2 个发布竞态节点 新 15 项 + 保存 9 项共 24 通过(5.31 秒)
实时保存 / 敌方证据页 42 通过(21.56 秒)
累计(11 个文件) 143 个不同节点,不把重跑相加

新测试的 15 个节点覆盖:显式派发、完整输入、保存/重开、正常失败、坏输出、取消与迟到结果、来源请求/录像归属/最新指针变化、磁盘失败、旧附件隔离、串行操作、全部结果页切换、缺输入、窗口关闭;其中一个竞态负例用另一个真实子进程去抢写。

真实 8 帧样例:

检查 结果
原 8 帧请求和会话 完整保留;原目录所有文件逐字节未变
观察与全部攻击证据 原样(8 条关联、未知的命中条件、空查询)
新结果 vs 上一轮单独验证的 SE 结果 完全相等
与原快照的差别 只有推断说明(deduced)改变
页面显示 英雄 12→14、生物 19→21、其它净变化 0,以及明确的回溯假设和准备页的条件基线
重新导入、原图路径、HTML 核对报告 通过
单次按钮到新结果 约 2.031 秒;审阅补强后最终一次 2.103 秒

耗时是在有并行系统负载时测的单次时间,不是整帧 p95,也不是视频处理速度。新显示的解释没有升级成已认证的命中属性或唯一的技能排除。

失败与负结果

第一次验收在请求和结果比较都已通过之后,脚本误用了错误的字段名去读攻击关联,报错退出;失败目录保留,不把这一轮描述为成功。修正脚本后第二次完成,审阅补强后第三次再次完整通过。

局限

  • 源快照必须含完整的保存输入和会话;只剩结论的旧结果无法凭空重建。
  • 重算不提供新的可见信息:原识别错误仍需要真实修正,SE 里未知的身份和时序条件也不会自动消失。
  • 本轮没有安装到用户正在用的版本,旧安装版里找不到这个按钮。
  • 外部审阅只看了报告,没有独立运行代码或看原图。

结论与下一步

旧分析现在可以在不重新识别的情况下获得最新的 SE 解释,原数据和旧快照完整保留。后续又加入了从同一快照的原始识别输出中恢复旧版遗漏的攻击预览(只在来源、请求和人工更正都能核对时补入)。下一步是复用已有的人工更正机制:让用户核对并修正一条保存的观察后再重算 SE,保留原自动读数、更正来源和撤销;人工更正不计入自动识别准确率。