{"id":26329074,"url":"https://github.com/neanes/byzantine-chant-ocr","last_synced_at":"2025-10-17T08:46:28.612Z","repository":{"id":270515485,"uuid":"902612261","full_name":"neanes/byzantine-chant-ocr","owner":"neanes","description":"An OCR toolset for Byzantine chant notation","archived":false,"fork":false,"pushed_at":"2025-03-13T16:26:56.000Z","size":24321,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-13T17:43:29.980Z","etag":null,"topics":["byzantine-chant","byzantine-notation","music","music-notation","ocr","opencv","pytorch"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/neanes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-12T23:08:19.000Z","updated_at":"2025-03-13T16:26:54.000Z","dependencies_parsed_at":null,"dependency_job_id":"cf91870c-f4fa-4248-bc70-2ba3e6fc4a54","html_url":"https://github.com/neanes/byzantine-chant-ocr","commit_stats":null,"previous_names":["neanes/byzantine-chant-ocr"],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neanes%2Fbyzantine-chant-ocr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neanes%2Fbyzantine-chant-ocr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neanes%2Fbyzantine-chant-ocr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neanes%2Fbyzantine-chant-ocr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/neanes","download_url":"https://codeload.github.com/neanes/byzantine-chant-ocr/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243790988,"owners_count":20348386,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["byzantine-chant","byzantine-notation","music","music-notation","ocr","opencv","pytorch"],"created_at":"2025-03-15T21:19:24.843Z","updated_at":"2025-10-17T08:46:28.529Z","avatar_url":"https://github.com/neanes.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Byzantine Chant OCR\n\nThis project is a toolset for performing optical character recognition (OCR) on Byzantine chant notation. It can process both PDFs and image files. Built in Python, the toolset uses OpenCV for image processing, PyTorch for deep learning, and a MobileNetV2 convolutional neural network (CNN) model for feature extraction and classification.\n\n## How-to\n\n### Download the app\n\nDownload the latest app version from the [Releases page](https://github.com/neanes/byzantine-chant-ocr/releases). Unzip the files to any directory.\n\n### Download the model\n\nDownload the latest model from the [Releases page](https://github.com/neanes/byzantine-chant-ocr/releases). Copy the files `current_model.onnx` and `metadata.json` to the same folder where the executable is located.\n\n### Run the app\n\nRun the app and select a file to perform OCR on. For PDF files, input a page range. Then press Go and choose a location to save the file.\n\n### Import into Neanes\n\nThe resulting `output.yaml` can be imported into [Neanes](https://github.com/neanes/neanes) using the import script found in `integrations/neanes`.\n\nFirst, install the LTS version of [Node.js](https://nodejs.org/en/download).\n\nNext, copy `output.yaml` to `integrations/neanes` and run the following commands.\n\n```bash\ncd integrations/neanes\ncorepack enable npm # only needed the first time you run the importer\nnpm install # only needed the first time you run the importer\nnpm run start\n```\n\nThis will convert `output.yaml` into a Neanes file called `output.byzx`.\n\nEventually, it will be possible to import directly into Neanes by opening the YAML file within Neanes. However, the import script is still under heavy development. Once the script stabilizes, it will be moved into Neanes.\n\n### The Neanes file is not as accurate as I would have hoped. What can I do?\n\nIt is generally expected that the OCR result will be at least 90% accurate for most common cases. You can use the martyria as a guide for finding and correcting errors. That is, if a martyria is not the expected value, then there must be an issue somewhere between the incorrect martyria and the last correct martyria.\n\nIf the resulting file is not sufficiently accurate, there are three possible causes.\n\n1. The image or PDF file is not clear, or contains a severe tilt or non-linear distortions (e.g. a picture of a curved page).\n2. There is a bug or inefficiency with the Neanes importer.\n3. The model needs more training.\n\nIf the font used for the neumes is significantly different from [the fonts that the model was trained with](./SOURCES.md), then the results will be less accurate. If you want to help make the model better, see the [contribution guide](./CONTRIBUTING.md). The maintainers of this repository will likely priortize training the model on fonts that are the most common and that will impact the most users. But if you want to train on a more obscure font or on handwritten works, pull requests are welcome.\n\nIf the image contains a lot of extraneous text that is not part of the lyrics, but that is also close to the neumes, the text removal process may fail to remove this text before performing OCR. In this case, the text may be misinterpreted as neumes belonging to the closest baseline. You can manually remove the text yourself from the image and try again.\n\nIf the YAML output is accurate, but the Neanes file is not, then this is possibly and issue with the Neanes importer and should be reported as such.\n\n## License\n\nThis project is licensed under the [GNU General Public License, version 3](./LICENSE).\n\n## Acknowledgements\n\nThis project was inspired by and builds upon concepts from the following paper:\n\nC. Dalitz, G.K. Michalakis, C. Pranzas: _[Optical Recognition of Psaltic Byzantine Chant Notation](https://lionel.kr.hs-niederrhein.de/~dalitz/data/publications/ijdar-psaltiki.pdf)_. International Journal of Document Analysis and Recognition, vol. 11, no. 3, pp. 143-158 (2008)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneanes%2Fbyzantine-chant-ocr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fneanes%2Fbyzantine-chant-ocr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneanes%2Fbyzantine-chant-ocr/lists"}