摘要
战场上每支部队脚下有一块小牌子,牌面颜色(红/蓝)区分阵营,牌上的数字是这支部队当前剩余的单位数量。读出这个数字,才能计算每次攻击后死了多少个。
本实验在冻结协议后,用 CPU 对 4 张开发截图跑一次完整基线:先用三种已有的几何配方在整图上提出“数量牌在哪”,按事先定好的规则选出最好的一种,再对它的全部提议做唯一一次 OCR。结果:选定配方提出 40 个牌、没有漏掉任何可读数量;38 个可读数量中 35 个读对(92.11%)、2 个未知、1 个错误;所有可读数量都读对的整图只有 1/4。主要问题已经从“找牌”转到“读字”:两遍 OCR 都把 38 读成了 384。
要回答的问题
在只给原图、不给任何身体检测或参考信息的条件下,现有的数量牌算法能找到多少牌、读对多少数字?主要错误在哪一步?
数据与来源
- 4 张原生 2560×1440 截图(来自 2 段录像),是已曝光的开发回归数据:两张战场、两张布阵画面。
- 人工参考:38 个可读数量(提取分母)、4 个不可读数量单独计;41 个可读颜色、1 个颜色不可见。参考里的“数量框”是手估的字面区域,含一些背景,不是精确的牌边界。
- 推理进程只拿到原图和一个空的身体列表;身体、数字、颜色、面板、卡片、场景标签都不参与。只有事后的评分程序读取参考。
方法
- 几何提议: 按声明顺序对每张图调用三种已有配方(连通区域 v1、水平救援 v2、暖色轨迹加字形证据 v3),共 12 次整图调用,CPU、OpenCV 线程 ≤2。
- 匹配: 提议框覆盖参考字面区域 ≥50%、且字面中心落在提议框内,才算一条候选边;再做确定性的一对一最大匹配。这里测的是位置,不是精确牌边界,也不是身体 IoU。
- 选择: 先选可读目标匹配最多的配方,平局选提议更少者;在 OCR 之前写下选择。
- 唯一一次 OCR: 对选定配方的全部提议(包括多余的)做识别,不用参考框删提议。沿用现有数量识别器,只用原图和 3 倍三次插值两种变体,原 0.80 门槛和两遍一致策略;本地缓存模型,禁止联网和换模型;超时、失败都不重试。
设置
协议、来源列表和代码在首次调用前冻结;几何评分和选择先保存,随后约 45 秒内开始并完成唯一的 OCR 运行。
结果
三种几何配方:
| 配方 | 提议数 | 可读数字匹配 /38 | 可见字面框匹配 /41 | 颜色 正确/漏提议(/41) | 额外非目标 |
|---|---|---|---|---|---|
| 连通区域 v1 | 40 | 36 | 39 | 39 / 2 | 1 |
| 水平救援 v2 | 42 | 38 | 41 | 41 / 0 | 1 |
| 暖色轨迹 v3 | 40 | 38 | 40 | 40 / 1 | 0 |
v1 漏掉两个可读的 38(绿色轨迹和生物身体颜色连在一起),v2 用水平开运算救回。v1/v2 唯一的额外提议在同一位置:一块青色生物美术上,逐图审阅为非目标。v3 用字形证据排除了它,同时放弃了一块不可读的牌。按规则选中 v3 的全部 40 个提议。
唯一 OCR 结果:
| 图 | 可读数字 | 正确 | 未知 | 错误 | 全部可读都对 |
|---|---|---|---|---|---|
| 草地战场 | 13 | 12 | 1 | 0 | 否 |
| 雪地战场 | 12 | 12 | 0 | 0 | 是 |
| 草地布阵 | 7 | 6 | 0 | 1 | 否 |
| 雪地布阵 | 6 | 5 | 1 | 0 | 否 |
| 合计 | 38 | 35 | 2 | 1 | 1/4 |
| 失败 | 原图读数 / 分数 | 3 倍放大读数 / 分数 | 输出 |
|---|---|---|---|
| 草地战场,真值 200 | 200 / 0.995 | 2008 / 0.805 | 两遍不一致 → 未知 |
| 草地布阵,真值 38 | 384 / 0.840 | 384 / 0.870 | 一致却错误 → 384 |
| 雪地布阵,真值 15 | 15 / 0.894 | 15 / 0.710 | 放大分数低于 0.80 → 未知 |
40 个输出中 37 个给出数字(35 对、1 错、1 不可核验),3 个拒读。全部数字输出的正确率下界为 35/37 = 94.59%;去掉不可核验项后为 35/36 = 97.22%。主指标仍是 38 个可读目标上的 92.11%,输出精度不能替代它。已知脚牌颜色 40 正确、1 漏提议、0 错误;颜色整图全对 3/4。
耗时: 4 图共享首次解码 0.146 秒;v1/v2/v3 四图检测分别 0.078/0.126/0.135 秒。OCR 导入加载 8.700 秒、子进程重新解码 0.167 秒、两种变体识别 4.747 秒,子进程总计 13.634 秒。0.135 秒的检测时间不能当作完整助手时延。
失败与负结果
- 38 被读成 384: 草地布阵那块牌周围有浅色特效笔画,OCR 框把它们一并纳入,模型把它们连成了第三位。这个“特效污染”解释来自看图,没有用新变体验证因果。没有降低阈值、只取单遍或人工截掉一位来改写成绩。
- 4 个不可读参考全部保留: 一块被攻击预览遮住;一块末位重叠、v3 未提议;一块首位有歧义,模型两遍高分读成 48,但无法核验,不升为真值;一块首位被光标挡住,读成“To”被拒。没有用卡片或面板上的数字去回填。
局限
- 只有 4 张已曝光图、2 个来源,不是独立的 95% 验收。
- 没有身体检测输入,所有“牌属于哪个身体”的关联都未解决。
- 12 项无媒体软件检查和结果重算验证通过,只证明流程和评分正确,不证明视觉正确。
结论与下一步
数量牌的定位在这批图上已经可靠(v3 零漏提议),主要瓶颈是字面 OCR 被背景笔画污染。本轮只提出一个后续私有候选:在算法牌框内部按红/蓝牌面区域约束字面窗口,隔离背景和特效的浅色笔画——它可能损失被特效盖住的真实字符,必须在新的固定来源上同时检验错误、拒读和整图指标。本轮预算已用完,没有扫参数或补跑。另附一份未获批准的最小公共观察格式提案:身体、数量牌和两者关系分开记录,颜色不等于我方/敌方,空数组不证明没有部队。
Comments