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.6.0.tar.gz (235.6 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.6.0-py3-none-any.whl (49.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: tetrak_hy_trainer-0.6.0.tar.gz
  • Upload date:
  • Size: 235.6 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.6.0.tar.gz
Algorithm Hash digest
SHA256 dcea42b826fcb8f9541e75d18b0b34b4d79417fa277d31f58198a2ffaaf4456f
MD5 54497640876e8fce756955a04549b9a0
BLAKE2b-256 bf2d5d67b16ea70685e99f96dad6084b0fc887354fe3ae03371e0a883675da9e

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetrak_hy_trainer-0.6.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.6.0-py3-none-any.whl.

File metadata

File hashes

Hashes for tetrak_hy_trainer-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e93f8b66667041280f9b2648730b6b4a66f4143e363087455d4cbf2922df9a21
MD5 790694a5027e3e94a4a76731a474c8db
BLAKE2b-256 c3a0b282be1b6f7b80ea6c5ecaa6020c8912166b91b86ddf8359220c2f0bd01c

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetrak_hy_trainer-0.6.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

This release

0.6.0 This release

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

0.2.0

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