Oemer vs homr:两大开源OMR乐谱识别工具深度对比与局限边界说明
【免费下载链接】oemerEnd-to-end Optical Music Recognition (OMR) system. Transcribe phone-taken music sheet image into MusicXML, which can be edited and converted to MIDI.项目地址: https://gitcode.com/gh_mirrors/oe/oemer
Omer 是一款免费开源的端到端光学乐谱识别(OMR)工具:它能把手机拍摄的五线谱照片直接转换成可编辑的MusicXML,进而导出 MIDI 播放或二次编辑;homr则是它更强大的改进版。本文用 3 分钟带你深度对比 Oemer 与 homr 的识别流程、效果、鲁棒性与能力边界,帮你避坑并快速选出适合"手机拍乐谱转 MusicXML"的场景。
一、什么是 OMR?Oemer 如何把手机拍的五线谱变成 MusicXML 🎼
光学乐谱识别(Optical Music Recognition,OMR)是把乐谱图像转换为结构化乐谱数据的 AI 技术。Oemer 的完整流程是:
手机拍照 → 倾斜/弯曲校正(Dewarp)→双 UNet 语义分割→ 规则引擎提取符头、和弦、小节线、休止符与升降号 → 节奏(符杠、附点)解析 → 生成 MusicXML
整个过程一条命令行驱动,入口在 oemer/ete.py。下面是真实乐谱的识别效果(左:原谱,右:Oemer 转写出的 MusicXML):
生成的 MusicXML 可用 MuseScore 等主流编辑器打开,直接编辑、回放并导出 MIDI。
二、Oemer 快速上手:一条命令完成乐谱识别
1. 安装步骤
# 从 PyPI 安装(最常用) pip install oemer # 可选:附带 Tensorflow 支持 pip install oemer[tf] # 或克隆仓库安装最新源码 git clone https://gitcode.com/gh_mirrors/oe/oemer2. 运行识别
oemer path/to/score.jpg会在当前目录输出.musicxml文件,以及一张已识别元素的可视化分析图。常用参数一览:
| 参数 | 作用 |
|---|---|
-o / --output-path | 指定输出目录(默认当前目录) |
--use-tf | 改用 TensorFlow 推理(默认 Onnxruntime) |
--save-cache | 缓存模型预测结果,下次无需再推理 |
-d / --without-deskew | 跳过倾斜校正,报错时优先尝试 |
⏱耗时参考:带 GPU 时通常3~5 分钟/首乐谱;首次运行会自动下载模型 checkpoint,视网络可能需要 10 分钟。
3. 先看效果再上手
仓库内置了 docs/index.html 演示页,包含多组"校正前后 / 原谱 vs 转写乐谱"的对比图与音频试听,非常适合先确认效果再本地运行。
三、Oemer 识别原理:双 UNet + 规则引擎,流程完全透明
Omer 的流水线可以概括为三层,全部位于开源的 oemer/ 目录,便于阅读与魔改:
- 深度学习层:两个 UNet 分割网络。第一个(oemer/checkpoints/unet_big/)分离"五线谱 vs 其他符号",第二个(oemer/checkpoints/seg_net/)再细分符头、谱号、符干、休止符与升降号。
- 机器学习层:oemer/sklearn_models/ 中的 SVM 模型(clef.model、rests.model、sfn.model)负责具体符号类型分类。
- 规则引擎层:纯算法提取模块——oemer/dewarp.py 校正、oemer/staffline_extraction.py 五线谱、oemer/rhythm_extraction.py 节奏、oemer/build_system.py 构建 MusicXML。
3.1 六步校正:把歪斜弯曲的手机拍乐谱变水平
手机拍摄的乐谱几乎都有弯曲变形,Oemer 的 OMR 校正流程分六步:Predict → Morph → Quantize → Group → Connect → Dewarp:
实际校正效果(左:原图,右:校正后五线谱恢复水平):
3.2 五线谱定位:逐行像素累计找峰
校正后,算法逐行累计正像素、挑选峰值,再叠加规则过滤得到真正的五线谱(图中红点)。线间距unit_size是后续所有音高与尺寸度量的基础:
3.3 节奏解析:符干、符杠与附点的规则推断
节奏是 OMR 中最易出错的部分。Omer 用"符号图"减去其他符号图得到符杠/符旗区域,与音符组关联并数符杠数量判定节奏型(八分、十六分等),必要时还会把和弦组拆分成多条旋律线:
再看一组真实乐谱识别演示(左:原谱,右:MusicXML 转写结果):
四、homr:Oemer 的强力改进版
homr 由 Christian Liebhardt 基于 Oemer 改进而来,原作者在 README 中给出了"特别推荐":
- 更专用、更强大的深度学习模型
- 对图像质量的鲁棒性更强:低质量照片下结果更稳
- 最终效果更讨喜
一句话总结:Oemer 胜在"透明可改"(每一步都是独立 Python 模块),homr 胜在"效果更强"(模型驱动)。如果只关心最终识别质量,homr 更值得优先尝试。
五、Oemer vs homr 核心差异对比表 ⚖️
| 维度 | Oemer | homr |
|---|---|---|
| 定位 | 端到端 OMR 基准实现 | Omer 的改进版 |
| 核心模型 | 双 UNet 分割 + SVM 分类 | 更专用、更强大的深度学习模型 |
| 图像鲁棒性 | 能处理倾斜/模糊照片,效果随画质波动 | 更强,低质量图像下更稳定 |
| 流程透明度 | 高,各步骤为独立模块,便于修改 | 模型驱动 |
| 支持的谱 | 印刷体西方五线谱 | 印刷体西方五线谱 |
| 输出 | MusicXML + 元素可视化分析图 | 可编辑乐谱数据 |
| 安装方式 | pip install oemer | pip install homr |
六、局限边界说明:这些场景别硬用 ⚠️
两者同源,共享同一个"能力圈",边界务必认清:
6.1 记谱类型边界
- ✅印刷体西方五线谱:训练数据来源,效果最好
- ❌手写谱:Oemer 官方明确"很可能无法转写",homr 同样聚焦印刷谱
- ❌简谱、和弦谱、吉他六线谱:不在支持范围内
6.2 图像质量边界
倾斜校正能应付中度倾斜与弯曲,但以下情况两者精度都会明显下降:
- 严重运动模糊、低光噪点
- 极端透视畸变(拍摄角度过大)
- 遮挡、折痕阴影、强反光
- 谱面过密、字号过小
6.3 音乐复杂度边界
复杂元素识别精度下降,生成的 MusicXML需要人工核对:
- 密集和弦、交叉节奏、多声部交织
- 装饰音、踏板标记、力度与表情记号
- 频繁转调、特殊排版布局
6.4 性能与工作流边界
- GPU 下约 3~5 分钟/首,纯 CPU 机器耗时显著更长
- 首次运行需下载 checkpoint,可用
--save-cache避免重复推理 - 多页乐谱需手动分页逐张处理,无内置切页功能
- 导出的 MIDI 一般可听,但建议听一遍并人工修正后再正式使用
七、选型建议:什么时候用 Oemer,什么时候选 homr?
- 🔬想学 OMR 原理、修改流水线、做研究基线→ 选Omer(代码透明、模块独立)
- 🎯追求识别质量、照片质量参差→ 选homr(鲁棒性更强)
- 📄手抄谱 / 简谱 / 六线谱→ 两者都不适用,建议专用工具或人工录入
- ⚡快速验证→ 都是 pip 一条命令安装,先看内置演示页效果再决定
八、常见问题 FAQ
Q:输入图片有什么要求?A:JPG/PNG 均可,越大越清晰越好;避免强反光与褶皱。
Q:能识别简谱或手抄谱吗?A:不能。两个模型都只针对西方五线谱(印刷体)训练。
Q:第一次运行报错怎么办?A:优先加-d / --without-deskew跳过倾斜校正再试;仍失败则按仓库 issue 模板提交问题。
Q:识别结果如何编辑?A:用 MuseScore 等编辑器打开.musicxml,可编辑、回放、导出 MIDI。
【免费下载链接】oemerEnd-to-end Optical Music Recognition (OMR) system. Transcribe phone-taken music sheet image into MusicXML, which can be edited and converted to MIDI.项目地址: https://gitcode.com/gh_mirrors/oe/oemer
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考