Skip to main content

tetrak-hy-trainer

Training pipeline for an Armenian text recogniser — synthetic data generation, CTC model training, and packaging as an EasyOCR custom model.

Why

No mainstream local OCR engine reads Armenian well. EasyOCR and PaddleOCR do not list the language at all; Tesseract ships hye traineddata of unmeasured quality on archival material. Yet the architecture EasyOCR already uses — CRAFT text detection feeding a compact CTC recogniser — is proven on Armenian: a National Library of Armenia-adjacent system built on exactly these components reported character error rates better than Google Cloud Vision on dense newsprint.

Detection needs no training (CRAFT is script-agnostic). All the Armenian-specific work concentrates in one small trainable model, and EasyOCR has a documented custom-model mechanism to load it. This repository builds that model.

What it produces

Three files, loadable by stock EasyOCR:

File Contents
tetrak_hy.yaml Character list, language list, image height, network parameters
tetrak_hy.py The recognition network module (Model(num_class, **network_params))
tetrak_hy.pth Trained weights — published as GitHub Release assets, never committed
import easyocr

reader = easyocr.Reader(
    ["hy"],
    recog_network="tetrak_hy",
    user_network_directory="path/holding/yaml/and/py",
    model_storage_directory="path/holding/pth",
)
reader.readtext("scan.png")

The name is a Python module name (EasyOCR imports it), hence the underscore. The model uses a CTC head — EasyOCR's custom-model inference path is CTC-only.

Distribution happens through tetrak-easyocr-armenian, the installable library whose import package is the tetrak_hy network: this trainer's output — the yaml, the weights and their provenance — lands there as a pull request, and a weights release on that repo is what users install. The bundle-writing here remains the tool for local spikes and for producing that PR.

Status

Early scaffold. The pipeline stages, in order:

  1. Charsetsrc/tetrak_hy_trainer/charset.py, the single source of truth read by both the trainer and the packaging step. ✔ (two decisions deliberately open; see the module)
  2. Packaging — emit a valid tetrak_hy.yaml from the charset. ✔
  3. Spike — train a deliberately tiny model and prove the EasyOCR loading contract end to end. Not started.
  4. Synthetic data — Armenian corpus text rendered in Armenian fonts with archival degradations. Not started.
  5. Training — CTC pre-training on synthetic crops, fine-tuning on human-verified real crops. Not started.

Data and font licences

Recorded as sources are adopted:

Source Use Licence
Armenian Soviet Encyclopedia on Armenian Wikisource (13 volumes, 1974–1987) Corpus text for synthesis; paired page scans + transcripts for fine-tuning crops and evaluation CC BY-SA 3.0, as stated by the hosting Wikisource page

Two disciplines attach to the encyclopedia source:

  • Only proofread pages. Wikisource seeds unproofread pages with machine OCR; training on those would teach the model another engine's mistakes. Harvesting filters on ProofreadPage quality status (proofread/validated only), via the API.
  • Attribution and share-alike. BY is satisfied by this table and the provenance records shipped with weights. Whether SA obligations propagate to trained weights is a genuinely unsettled question; we record the source and licence with every release so the position is auditable either way.

Further candidates: Armenian Wikisource's public-domain period texts and Armenian Wikipedia (CC BY-SA 4.0) for corpus text; the Noto Armenian family, GHEA faces and Arian AMU (all OFL) for fonts.

Licence

Apache License 2.0 — see LICENSE and NOTICE. Training code will derive in part from EasyOCR's trainer (Apache 2.0), itself derived from NAVER's deep-text-recognition-benchmark (Apache 2.0).

A deliberate exclusion: this project was informed by studying portmind/armenian-ocr (CC BY-NC 4.0), whose approach it independently reproduces from permissively-licensed parts. No code, annotations or weights from that project are included here, and contributions derived from it cannot be accepted — its non-commercial licence is incompatible with this one.

Relationship to Tetrak

This is a satellite of Tetrak, a local-first transcription pipeline for archival material. Tetrak ships the inference files and consumes the released weights as its easyocr-hy backend; benchmark results against its evaluation corpus are published there.

Development

python3 -m venv .venv && source .venv/bin/activate
pip install -e '.[dev]'
pytest
ruff check src tests && ruff format --check src tests

Commits follow Conventional Commits, enforced by the hook in .githooks/ (git config core.hooksPath .githooks after cloning, or lefthook install). Releases and CHANGELOG.md are generated from those commits automatically on every push to main.

See CONTRIBUTING.md for the full workflow — checks, the dependency lockfile, and what the automation expects — and SECURITY.md for how to report a vulnerability.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tetrak_hy_trainer-0.2.0.tar.gz (153.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tetrak_hy_trainer-0.2.0-py3-none-any.whl (25.6 kB view details)

Uploaded Python 3

File details

Details for the file tetrak_hy_trainer-0.2.0.tar.gz.

File metadata

  • Download URL: tetrak_hy_trainer-0.2.0.tar.gz
  • Upload date:
  • Size: 153.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for tetrak_hy_trainer-0.2.0.tar.gz
Algorithm Hash digest
SHA256 43c196dd7c357dff1f21af41829203fc3884973521c61c7f27ceff831ff38205
MD5 6f92c9abd1118527792341e1701477d7
BLAKE2b-256 6875499a13b551be5bc0ad5fc9522e7afb7a69eeafa964eb5c198145c89144d4

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetrak_hy_trainer-0.2.0.tar.gz:

Publisher: release.yml on scattercode/tetrak-hy-trainer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tetrak_hy_trainer-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for tetrak_hy_trainer-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bd9d4438eb2c71d2c862fa52ef09a59539acda203158900d337971b547264817
MD5 13c21ecbb2797d299ce03eb852a3e4df
BLAKE2b-256 0a0905e1b621ae76590b98aa8f22cb685fdb11a3962e8d3b83a3583fdeb2539f

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetrak_hy_trainer-0.2.0-py3-none-any.whl:

Publisher: release.yml on scattercode/tetrak-hy-trainer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.6.0

2 files

0.5.2

2 files

0.5.1

2 files

0.5.0

2 files

0.4.0

2 files

0.3.0

2 files

This release

0.2.0 This release

2 files

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