Skip to main content

homr

homr is an Optical Music Recognition (OMR) software designed to transform camera pictures of sheet music into machine-readable MusicXML format. The resulting MusicXML files can be further processed using tools such as musescore.

Open In Colab

You might also want to check out Andromr, an Android app for optical music recognition using homr.

Prerequisites

  • Python 3.11
  • Poetry
  • Optional: NVidia GPU with CUDA 12.1

Getting started (uv)

The easiest way to get started is using uvx (uv must be installed). Note that is does not make use of the GPU.

  • uvx homr <img>
  • The resulting MusicXML file will be saved in the same directory as the input image
  • To combine the MusicXML results from multiple images, you can use relieur

Getting started (poetry)

  • Clone the repository
  • Install dependencies for:
    • GPU (requires CUDA): poetry install --only main,gpu
    • CPU: poetry install --only main
    • Development: poetry install
  • Run the program using poetry run homr <image>
  • The resulting MusicXML file will be saved in the same directory as the input image
  • To combine the MusicXML results from multiple images, you can use relieur

Example

The example below provides an overview of the current performance of the implementation. While some errors are present in the output, the overall structure remains accurate.

Original Image homr Result
Go to https://github.com/liebharc/homr if this image isn't displayed

The homr result is obtained by processing the homr output and rendering it with musescore.

Limitations

The current implementation focuses on pitch and rhythm information on the bass or treble clef, neglecting dynamics, articulation, double sharps/flats, and other musical symbols.

Technical Details

homr uses a two-stage pipeline: segmentation for structural analysis followed by semantic symbol recognition via transformer models.

Stage 1: Image Segmentation and Structural Analysis

homr employs UNet-based segmentation models (adapted from oemer) to extract structural components from the sheet music image:

  • Staff lines and symbols: Detected via trained segmentation networks that identify:
    • Staff line fragments
    • Note heads
    • Stems and rests
    • Bar lines
    • Clefs and key signatures

The segmentation process generates bounding boxes for each detected element. These predictions serve as inputs for the staff detection algorithm.

Stage 2: Staff Detection and Merging

Using the segmentation outputs, homr constructs staffs through the following steps:

  1. Staff Anchor Detection: The algorithm identifies "staff anchors" (clefs and bar lines) that serve as reference points for accurate staff localization, even when symbols partially obscure staff lines.

  2. Unit Size Estimation: For each staff, the algorithm calculates the "unit size" (distance between staff lines). This accommodates camera perspective variations and non-uniform staff spacing.

  3. Staff Reconstruction: Around each anchor, five staff lines are located and the remaining staff structure is reconstructed using the estimated unit size.

  4. Grand Staff Merging: Braces and brackets are identified to merge related staffs, supporting:

    • Grand staffs (piano, organ)
    • Multiple voices on a single staff
    • Mixed instrument groups

Stage 3: Semantic Symbol Recognition via Transformer

Each staff is dewarped (perspective-corrected) and passed through a transformer-based model (based on Polyphonic-TrOMR) that performs end-to-end symbol sequence recognition. The model outputs:

  • Rhythm symbols: Note durations, rests, and tuplet information
  • Pitch information: Absolute pitch values with accidentals (sharps, flats, naturals)
  • Articulation marks: Accents, staccato, tenuto, and slur markers
  • Performance annotations: Dynamic expressions and other musical notation

The transformer model generates these predictions in sequence, processing the dewarped staff image to understand the spatial and temporal relationships between musical symbols.

Note: The transformer output provides the sequence of symbols but does not include explicit positional information (horizontal or vertical coordinates). However, the model computes the center of attention as a byproduct of the attention mechanism, which can be used to estimate the focus point on the staff image.

Stage 4: MusicXML Output

The symbol sequence is converted into MusicXML format and saved to disk. The resulting file can be processed with tools like musescore or relieur (for multi-image combinations).

Citation

If you use this code in your research work, please cite oemer and Polyphonic-TrOMR.

Name

The name "homr" stands for Homer's Optical Music Recognition (OMR), leaving the interpretation of "Homer" to the user's discretion, whether referring to the ancient poet Homer or the iconic character from The Simpsons.

Thanks

This project builds upon previous work, including:

Metadata

Release files for homr 0.7.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for homr 0.7.0
File Size Uploaded Provenance Actions
homr-0.7.0.tar.gz 83.3 kB Without provenance Details for homr-0.7.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for homr 0.7.0
File Interpreter ABI Platform Actions
homr-0.7.0-py3-none-any.whl Python 3 none any Details for homr-0.7.0-py3-none-any.whl

Total release size: 177.8 kB

Release files / homr-0.7.0.tar.gz

Download URL homr-0.7.0.tar.gz
Size 83.3 kB
Tags Source
SHA-256 checksum
How to use checksums
4078b9e70c16a1250288d92e065528bbd8712617339749407f057aebab9cfb7d
BLAKE2b-256 checksum
How to use checksums
250baa9b09fa55b7714af479051f49ce2c5f8a90fc5d3d29e9e63df30543f169
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.4.1 CPython/3.11.15 Linux/6.17.0-1018-azure

Release files / homr-0.7.0-py3-none-any.whl

Download URL homr-0.7.0-py3-none-any.whl
Size 94.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
84c6028df06e60b1aff158c9049d1876b22137144e319b61bacc41518842c4a9
BLAKE2b-256 checksum
How to use checksums
bdccc313f3309b541cf6a3816666a7d9f4e2fdc1d34627281205e126597b0fe5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.4.1 CPython/3.11.15 Linux/6.17.0-1018-azure

Security for homr 0.7.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page