Skip to content

v1.2.0 - OMR0002 横排题适配 + 3 类误识修复

Latest

Choose a tag to compare

@lengmodkx lengmodkx released this 08 Jun 07:22

答题卡智能识别系统 v1.2.0

v1.2.0 重点支持 OMR0002 蒙文答题卡的横排题版面,并修复 v1.1.0 遗留的 3 类识别误识(空卷、多涂、全卷异常降级)。

✨ 新增功能

📐 OMR0002 蒙文横排题版面适配 (option_axis)

OMR0002 等蒙文答题卡采用「题号横排、选项纵排」的特殊版面,v1.1.0 的标准模板(题号纵排、选项横排)无法处理:

  • GoldenTemplate._generate_grid 新增 option_axis 字段:
    • "x"(默认):标准模板,选项在 x 轴、题号在 y 轴
    • "y":横排题模板,选项在 y 轴、题号在 x 轴
  • _calibrate_positions 自动按 option_axis 切换 strict_axis(防被相邻题号/印刷线吸走)
  • Tab1 列框配置新增「选项轴」下拉,预览图按 option_axis 画水平/垂直分隔线
  • reverse_qoption_axis 联动:Q1 永远在题号轴起点

🐛 修复

1️⃣ 空卷被误识为 single(OMR0002 11A/12A)

  • 症状:11A/12A 实际无填涂,但 _classify_answer 把 ECC 偏后采样到的题号印刷笔画(暗度 206)误判为 single 答案
  • 根因:防线 1 仅当 best_val > 210 才判 empty;11A Q1 best_val=206 落到防线 3 误识
  • 修复:防线 1 加 best_val > 200 + best_delta < 15 二级条件,真填涂 best_val 都 < 200(暗),不会受影响

2️⃣ 真实多涂被误判为 uncertain(OMR0002 14A Q9)

  • 症状:14A Q9 学生填涂 A+C(暗度 156/159),被识别为 uncertain 而非 multi
  • 根因dark_count 阈值 v < 150 过严,A=156、C=159 都被排掉 → dark_count=0 → 落到防线 3 → 因 gap=3 不满足 single → uncertain
  • 修复dark_count 阈值 150 → 170abs_dark 阈值 140 → 160

3️⃣ 真填涂卷被降级为白卷(OMR0002 19A)

  • 症状:19A 学生填涂的 10 道题全部识别到,但与 gold 完全不同(可能故意错填);正确率 0% 触发全卷异常检测,10 题全降级为 uncertain,Tab3 显示 10 个「未识别」
  • 根因app.py 全卷异常检测条件「识别出 ≥3 题但正确率 < 10%」误伤「全题都识别但全错」的卡
  • 修复:加识别率门槛 identified_count < total_q * 0.3只对「几乎没识别出来」的扫描异常卡降级,放过「全题都识别但全错」的卡

🔧 杂项

  • .gitignore 增量忽略 5 个工具/会话产物目录:.claude/.codegraph/.cursor/.tmp/runs/
  • 物理清理已合入/已废弃的 13 个分支(3 本地 + 10 远程)

✅ 验证

  • 单元测试 9/9 边界用例通过(空卷/真填涂/真多涂/浅填涂/OMR0013 Q12/Q16/完全空题)
  • OMR0002 四卡综合:19A 10 题 single 全识别、11A empty=8、12A empty=6、14A Q9=AC/multi