摘要

打开法术书时,每个法术图标旁有几个小角标,其中一个圆圈里印着罗马数字(I 到 V),表示法术等级。它们笔画细、尺寸小,通用 OCR 经常读不出来或把 I 读成 1、l。上一轮的结果里,稳定书页上 47 个罗马角标只读对 16 个。

本实验不改圆圈定位,只在“已经找到圆圈、但 OCR 没给出合法罗马字面”时,用当前圆圈里的像素做字形模板分类。分类器在 4 个训练来源组上做“留一组验证”选门槛,冻结后才读评估页。结果:评估稳定书页从 106/141 提升到 125/141,罗马角标 16/47→35/47,新增接受的值全部和逐像素精标一致,没有错值。剩下的未知主要是圆圈没有被定位到。

要回答的问题

只依据圆圈里的当前像素(不借法术类别、规则或其它字段),能否可靠地把小罗马数字分类成 I–V,并在不确定时拒判?

数据与来源

  • 沿用上一轮(B076)的 4 个训练来源组:69 个真实罗马圈内裁图作正例,149 个阿拉伯数字角标和 102 个空位置作负例。这是 320 个裁图,不是 320 帧或 320 局。
  • 其中 55 个罗马和 66 个负例能提取出完整笔画特征,其余直接拒判。
  • 评估:上一轮的三组历史曝光评估页,共 6 页(4 页稳定、2 页翻页过渡),仅作回归,不是盲测;另有被封存的来源没有打开。

方法

  1. 只有在原图里已找到圆圈、而原 OCR 低分或没有合法罗马字面时才启用补读;已有字面、无圈、局部质量拒绝和非罗马字段都不触发。高质量 OCR 与分类结果矛盾时保留冲突,不覆盖。
  2. 提取完整的深色笔画,保留字形的宽高比例,与训练中真实出现过的 I–V 模板以及一个“拒绝”类做相似度比较。
  3. 接受条件:余弦相似度 ≥ 门槛,且第一名比第二名高 ≥0.08。这些分数是未校准的模型分数。
  4. 不把 OCR 的 1/l 改写成 I,不靠法术身份或规则补答案。

设置

在训练来源上按 4 组轮流留出,门槛候选 0.80/0.82/0.84/0.86/0.88/0.90,类别差固定 0.08。选择保持 55 个留出正确的最高门槛 0.82(初始的 0.90 只有 41 个正确)。冻结模型和门槛后才运行评估;之后没有再改动。

结果

留一组验证:55/69 正确、14 拒判、251 个负例全部拒绝、没有接受错误类别。

完整截图重新读取(推理只收到原图和模型配置,不收到参考):

范围 上一轮 正确/可见 本轮 正确/可见 剩余未知 缺槽字段 接受错值
训练 8 页 193/234 217/234(92.74%) 17 0 0
训练稳定 6 页 156/183 174/183(95.08%) 9 0 0
评估 6 页 129/189 151/189(79.89%) 32 6 0
评估稳定 4 页 106/141 125/141(88.65%) 16 0 0
评估过渡 2 页 23/48 26/48(54.17%) 16 6 0

评估的全部罗马字面 18/63→40/63,稳定页 16/47→35/47。22 个新增接受逐个查看了裁图,都与原像素精标一致;上方和右下的阿拉伯数字没有变化;训练 102 个、评估 51 个“无字面”对照都没有误接受。

热启动整图(文件读入 → 识别 → JSON)p95:训练 1.158 秒、评估 1.340 秒,各只有 8/6 个样本;冷启动界面约 3 秒、文字模型约 4.8 秒另计。

失败与负结果

  • 一个单元测试发现:很细的“I”只占不到 10% 像素时会被错误拒绝;改为按像素分位数(p90−p2)判断对比度后修正,留组结果不变。v1/v2/v3 训练记录都保留。
  • 训练里 16 个“找不到圆圈”的字段逐个查看:按原霍夫圆检测参数复算,13 个其实检出了清楚的小圈,但离图标给出的提示中心超过 12 像素容许范围;另 3 个没有检出圈,都在翻页过渡页。
  • 第一次计时运行时机器上另有任务在跑全套测试,那两次的整帧耗时作废(记为空),等竞争进程结束后才重新计时。

局限

  • 评估页是历史曝光数据,不是新盲测;稳定页仍未到 95%。
  • 中央数字字段尚未实现,不计入三角标分母;整页印刷名称和资源数字也没有逐项验收。
  • 默认不加载这个模板库,App 和公共协议不变。

结论与下一步

基于当前像素的字形模板能安全地补回大部分漏读的罗马等级,剩余缺口集中在圆圈定位。下一步利用同一页上已经找到的多个圆圈来校验和修正定位提示,先在训练来源分析离群和错位负例,再冻结评估;不为每种翻页姿态单独加补救。