背景
当前分层识别中:
- L1–L3(页面 / 谱行 / 小节)矩形区域已较可用
- L3 内部要素准确率低:小节线、音高数字、增/减时线、高/低音点、升降号、和弦、歌词等
- 若先造 L4 区域框 再识别,框选成本接近「从头手写音符」,不可持续
- 数字 OCR 本身已相对可用;短板主要在 时值线、点、小节线等图形符号及其与数字的绑定
结论:L4 应作为 组装结果,而不是识别的前置输入。
目标
在 单个 L3 小节 ROI 内实现:
- 以 数字锚点 为主定位音符柱
- 在锚点相对邻域内检测:高/低音点、减时线(下划线)、增时线/附点、升降号(能做多少做多少)
- 局部 OCR 仅用于锚点上的 音高数字
- 按阅读顺序组装为音符对象列表,并写入 Score 对应小节
- 不依赖 人工绘制 L4 框
成功时:双谱对照下,小节内音符位置与附属符号关系明显好于「整页 OCR + 事后猜结构」。
非目标
- 不要求本 Issue 一次解决多声部、复杂反复、完美歌词对齐
- 不强制上大检测模型或大规模手标 L4
- 不替换现有 L1–L3 管线(以其输出为输入)
- 完整和弦语法、装饰音全集可后续迭代
方案概要
核心原则
L3 小节图
→ 数字状锚点(连通域 / 投影柱)
→ 每锚点相对 ROI:上点 / 下点 / 下划线 / 左侧升降
→ 锚点小图 OCR → 音高
→ 绑定为 Note 对象(隐式 L4)
→ 写入该 L3 对应的 Score measure
建议流水线(L3 内)
-
预处理(小节级)
二值化、轻度去噪;尺寸相对谱行高度归一(阈值用相对量,少用绝对像素)。
-
小节线(可选先做)
在 L3 内检通高竖线,与 L3 左右边界区分;用于核验,不靠 OCR。
-
数字锚点
- 连通域或垂直投影峰 → 候选柱
- 用高宽比、面积、与谱行中线关系过滤
- 输出:有序
anchors[](中心 x/y、bbox)
-
附属符号(按锚点 ROI)
- 上 ROI:高音点(小近圆 blob)
- 下 ROI:低音点 + 水平减时线(条数 → 时值等级)
- 左 ROI:升降号候选(小连通域或模板)
- 右/贴边:附点等(能做则做)
阈值全部相对「锚点高度 / 谱行高度」。
-
音高 OCR
仅裁剪锚点 bbox(可略 padding)送现有 PaddleOCR/数字通路;失败则标记低置信。
-
组装
Note { pitch, octaves, duration_lines, accidental, bbox, confidence }
按 x 排序写入该 measure;JSON 中可带 source: "anchor_bind"。
-
调试
叠图输出:锚点框、点、下划线、小节线,便于和双谱 UI 对照。
数据与监督(避免手画 L4)
| 手段 |
用途 |
| 程序化合成小节图 |
自动 GT:点上下、下划线条数、数字类别 |
| 现有 pitch 序列 GT |
弱监督:锚点 OCR 序列与 GT 的 LCS/对齐率 |
| 少量点选(可选) |
只点子中心,不画框,用于难例 |
优先合成 + 现有 eval 序列,不新增重标注流水线。
任务清单
验收标准
- 主路径在 L3 可用样张上 无需手画 L4 即可产出小节内音符列表。
- 合成小节:减时线条数、高低音点有可复现指标(在 Issue 或 eval 报告中给出基线数字)。
- 音高:在锚点通路下,print_clear / 现有评测的 Pitch 相关指标 不显著低于 当前基线门槛。
- 与 L3 对齐:音符写入的 measure 与几何 L3 一致(承接「Score 小节与 L3 对齐」相关工作)。
- 提供至少一种调试叠图,证明锚点与附属符号位置可读。
风险与缓解
| 风险 |
缓解 |
| 数字粘连、锚点切分失败 |
投影+连通域双通路;难例进低置信,供 UI 标红 |
| 阈值随分辨率变化 |
一律相对谱行高度 / 锚点高度 |
| 无下划线时值(空心/其它记法) |
先覆盖常见减时线;其余标记 unknown duration |
| 与旧 OCR 整页路径冲突 |
engine=anchor_bind 开关,并行对比 |
相关
背景
当前分层识别中:
结论:L4 应作为 组装结果,而不是识别的前置输入。
目标
在 单个 L3 小节 ROI 内实现:
成功时:双谱对照下,小节内音符位置与附属符号关系明显好于「整页 OCR + 事后猜结构」。
非目标
方案概要
核心原则
建议流水线(L3 内)
预处理(小节级)
二值化、轻度去噪;尺寸相对谱行高度归一(阈值用相对量,少用绝对像素)。
小节线(可选先做)
在 L3 内检通高竖线,与 L3 左右边界区分;用于核验,不靠 OCR。
数字锚点
anchors[](中心 x/y、bbox)附属符号(按锚点 ROI)
阈值全部相对「锚点高度 / 谱行高度」。
音高 OCR
仅裁剪锚点 bbox(可略 padding)送现有 PaddleOCR/数字通路;失败则标记低置信。
组装
Note { pitch, octaves, duration_lines, accidental, bbox, confidence }按 x 排序写入该 measure;JSON 中可带
source: "anchor_bind"。调试
叠图输出:锚点框、点、下划线、小节线,便于和双谱 UI 对照。
数据与监督(避免手画 L4)
优先合成 + 现有 eval 序列,不新增重标注流水线。
任务清单
验收标准
风险与缓解
engine=anchor_bind开关,并行对比相关
docs/eval-baseline.md