摘要
在这款回合制战棋游戏里,玩家把鼠标停在生物面板(点开某个兵堆后显示其属性的窗口)上的技能图标上,会弹出一个“悬浮说明”(tooltip):技能名称、类型、一段描述正文,以及能力消耗、持续几回合、在哪个回合结束等信息。这些文字是推断对手生物能力的重要依据。
项目里早就有三块现成零件:一个说明框检测器(批次 B068 训练)、区域文字识别(OCR)、以及从技能说明中严格提取字段的规则(批次 B027)。但“读一张完整截图”的显式入口只返回普通面板、战斗日志等观察,没有把技能说明接进来。本实验(内部批次号 B120)只做接线:输入一张完整截图,输出名称、类型、正文、能力消耗、持续时间原文、结束回合原文和帮助行。
首次接线时 7 张真实说明只有 5 张得到字段;修复两个具体问题后变为 7/7,37 个要求字段里 36 个严格逐字正确,无能力说明的控制图都没有误报。
要回答的问题
- 把已有零件组合进完整截图入口后,真实说明能读出多少字段?
- 会不会在没有技能说明的截图上误报?
- 原有的其它观察(HUD、面板等)是否保持不变?
数据与来源
- 旧 B027 的 5 张技能说明开发图和 6 张明确没有技能说明的控制图,原参考不覆盖。它们都是已曝光的开发标签。
- 上一轮 B119 的 2 张训练来源说明图,作为新近回归。
- B119 两个校准组里的 21 张固定图,只在方案冻结后用来检查误报和旧结果保持,不能用来调整布局规则。这组只有负例。
- 一段 9 月 12 日的保留视频不读。
方法
- 用说明框检测器在整图上找到悬浮说明框;
- 在框内做区域 OCR,保留真实的原生坐标和请求框;框外文字、错误响应、低分和冲突结果都不静默接受,也不把区域 OCR 冒充全图 OCR,不编造视频时间;
- 用 B027 的字段规则提取名称、类型、正文、能力消耗、持续时间原文、结束回合原文和帮助行;
- 持续时间只是说明里的字面文字。当前冷却、剩余次数、所属单位等不在说明里,一律不猜填。
功能默认关闭,只有显式命令行参数开启;调用方只请求某个面板时,不会偷偷扫描整图找说明。评分从完整截图起算:定位漏掉或拒读都计入分母,“没有说明”和“没检测到”分开表述。人工参考不进入检测或读字。
设置
- 13 张图(5 正例 + 6 控制 + 2 回归)每张都走完整文件读取。
- 首次运行保留为第 1 版结果;只在看到具体问题后做窄修复,再重跑完整 13 张,之后才读 21 张冻结控制图。
结果
| 结果 | 首次接线 | 修复后 |
|---|---|---|
| 7 张真实说明获得结构化字段 | 5/7 | 7/7 |
| 37 个要求字段严格逐字正确 | 25/37 | 36/37 |
| 漏失字段 | 11 | 0 |
| 字面差异 | 1 | 1(保留) |
| 整块字段全部严格正确 | 4/7 | 6/7 |
| 6 张无说明控制图 | 5 张无误报、1 张跳过 | 6 张无误报 |
分字段看:7 个名称、7 个类型、7 个能力消耗、2 个持续时间原文、3 个结束回合原文、4 行帮助全部正确;7 段正文中 6 段严格一致。
剩下的一处差异是“寒冰尖刺”正文里的范围横线:参考是 105–147(长横线),OCR 读成 105-147(短横线)。数值一致,但仍按严格字面算差异,没有改参考来补分。
21 张冻结控制图:没有技能字段误报,旧的 HUD 和面板结果全部保持。图里有一个小的“魔法书”提示被检测到,但不满足技能说明结构,保留原 OCR,不伪造技能字段。
运行量:共 61 次实际完整文件调用(首次 26、修复后 13、冻结控制 21、命令行 1),最终 34 张不同输入的旧观察保持不变,命令行输出与直接调用一致。155 项相关软件测试通过(之前的 47 项和 63 项是这些测试的重叠子集,不能相加)。
失败与负结果
首次运行暴露两个接线问题,均做了窄修复:
- 布阵阶段被错误跳过。 初版要求画面里有普通战斗的行动条(按出手顺序排列单位卡片的那一条),于是布阵阶段生物面板里“英勇长啸”的说明被跳过。改为只依赖当前说明框内“标题 / 类型 / 正文 / 消耗”的共同结构判断。新入口的全局场景标为未知,不伪造“战斗中”标签;旧的全图入口的场景守卫不变。
- 带冒号的标题被拒。 “召唤仪式:巨大索斯”含冒号,被旧的标题字符规则拒绝。新入口接受一处冒号分隔的复合名称,不从规范目录生成 OCR 结果,也不放宽旧入口的默认标题规则。
局限
- 全部正例都是曝光过的开发样本,36/37 不是全项目 95% 验收;新来源只有负例,不能说新来源正例准确率。
- 当前冷却的正例不够;已有状态图标的角标材料只有字面参考,不能说“生物实例 → 效果 → 剩余回合”已经贯通。
- 没有做性能、App 或整体质量验收;默认设置、公共接口、App、状态估计和规则模拟器都没有改。
结论与下一步
已有零件组合后,技能悬浮说明可以在显式开启时从完整截图中读出结构化字段,且没有误报、没有破坏旧观察。
下一步转向生物面板的“当前状态行”:读出全部可见状态图标、数字或 ∞、对应的面板,以及同帧悬浮名称,原字面、未解析身份和明确未知分开交付。剩余回合的解释必须有直接的视觉或用户确认依据,不因为找不到写着“冷却”的说明就反复只加容易读的消耗字段。
Comments