Skip to content

feat(core): L3 内数字锚点 + 附属符号绑定(不依赖手画 L4) #83

Description

@loootte

背景

当前分层识别中:

  • L1–L3(页面 / 谱行 / 小节)矩形区域已较可用
  • L3 内部要素准确率低:小节线、音高数字、增/减时线、高/低音点、升降号、和弦、歌词等
  • 若先造 L4 区域框 再识别,框选成本接近「从头手写音符」,不可持续
  • 数字 OCR 本身已相对可用;短板主要在 时值线、点、小节线等图形符号及其与数字的绑定

结论:L4 应作为 组装结果,而不是识别的前置输入。


目标

单个 L3 小节 ROI 内实现:

  1. 数字锚点 为主定位音符柱
  2. 在锚点相对邻域内检测:高/低音点、减时线(下划线)、增时线/附点、升降号(能做多少做多少)
  3. 局部 OCR 仅用于锚点上的 音高数字
  4. 按阅读顺序组装为音符对象列表,并写入 Score 对应小节
  5. 不依赖 人工绘制 L4 框

成功时:双谱对照下,小节内音符位置与附属符号关系明显好于「整页 OCR + 事后猜结构」。


非目标

  • 不要求本 Issue 一次解决多声部、复杂反复、完美歌词对齐
  • 不强制上大检测模型或大规模手标 L4
  • 不替换现有 L1–L3 管线(以其输出为输入)
  • 完整和弦语法、装饰音全集可后续迭代

方案概要

核心原则

L3 小节图
  → 数字状锚点(连通域 / 投影柱)
  → 每锚点相对 ROI:上点 / 下点 / 下划线 / 左侧升降
  → 锚点小图 OCR → 音高
  → 绑定为 Note 对象(隐式 L4)
  → 写入该 L3 对应的 Score measure

建议流水线(L3 内)

  1. 预处理(小节级)
    二值化、轻度去噪;尺寸相对谱行高度归一(阈值用相对量,少用绝对像素)。

  2. 小节线(可选先做)
    在 L3 内检通高竖线,与 L3 左右边界区分;用于核验,不靠 OCR。

  3. 数字锚点

    • 连通域或垂直投影峰 → 候选柱
    • 用高宽比、面积、与谱行中线关系过滤
    • 输出:有序 anchors[](中心 x/y、bbox)
  4. 附属符号(按锚点 ROI)

    • 上 ROI:高音点(小近圆 blob)
    • 下 ROI:低音点 + 水平减时线(条数 → 时值等级)
    • 左 ROI:升降号候选(小连通域或模板)
    • 右/贴边:附点等(能做则做)
      阈值全部相对「锚点高度 / 谱行高度」。
  5. 音高 OCR
    仅裁剪锚点 bbox(可略 padding)送现有 PaddleOCR/数字通路;失败则标记低置信。

  6. 组装
    Note { pitch, octaves, duration_lines, accidental, bbox, confidence }
    按 x 排序写入该 measure;JSON 中可带 source: "anchor_bind"

  7. 调试
    叠图输出:锚点框、点、下划线、小节线,便于和双谱 UI 对照。


数据与监督(避免手画 L4)

手段 用途
程序化合成小节图 自动 GT:点上下、下划线条数、数字类别
现有 pitch 序列 GT 弱监督:锚点 OCR 序列与 GT 的 LCS/对齐率
少量点选(可选) 只点子中心,不画框,用于难例

优先合成 + 现有 eval 序列,不新增重标注流水线。


任务清单

  • 定义 L3 输入接口与小节级调试叠图输出
  • 实现数字锚点检测 + 单测(合成图)
  • 实现相对 ROI 的高/低音点、减时线检测 + 条数统计
  • 锚点局部 OCR 接入现有引擎
  • 绑定组装 Note → 写入 Score measure(与 L3 小节对齐)
  • 合成集回归:点/线召回、下划线条数准确率
  • 真实样张:对比 legacy/当前路径的双谱观感与 measure 内音高对齐
  • 文档:更新 architecture / 与 L1–L5 重构 Issue 的关系说明

验收标准

  1. 主路径在 L3 可用样张上 无需手画 L4 即可产出小节内音符列表。
  2. 合成小节:减时线条数、高低音点有可复现指标(在 Issue 或 eval 报告中给出基线数字)。
  3. 音高:在锚点通路下,print_clear / 现有评测的 Pitch 相关指标 不显著低于 当前基线门槛。
  4. 与 L3 对齐:音符写入的 measure 与几何 L3 一致(承接「Score 小节与 L3 对齐」相关工作)。
  5. 提供至少一种调试叠图,证明锚点与附属符号位置可读。

风险与缓解

风险 缓解
数字粘连、锚点切分失败 投影+连通域双通路;难例进低置信,供 UI 标红
阈值随分辨率变化 一律相对谱行高度 / 锚点高度
无下划线时值(空心/其它记法) 先覆盖常见减时线;其余标记 unknown duration
与旧 OCR 整页路径冲突 engine=anchor_bind 开关,并行对比

相关


Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions