LV-ROVER banner

lv-rover-mlt

OCR for cropped paragraph images from Maltese PDF documents. Takes a PIL image, returns a clean joined paragraph string. Handles the full 30-letter Maltese alphabet including ċ ġ ħ ż għ ie, structural hyphens (il-kelb), and line-break rejoining.

Submitted to the DocEng 2026 Maltese OCR competition.

Results

Metric Value
Dev set CER, recognition-only (before post-processing) 0.01317
Dev set CER, after lead-marker normalisation 0.01294
Dev set CER, full convention-aligned pipeline 0.00700
Competition Tesseract baseline 0.0234
Total improvement 70% below baseline

Caveats: all CER figures are on the competition dev set (422 paragraphs); held-out real test CER is unknown at time of writing. Figures are measured with EasyOCR disabled.

The 70% improvement decomposes into two independent gains: 44% from better recognition (fine-tuned Tesseract LSTM on 68 validated fonts, soft Maltese lexicon voting, diacritic-preserving edit distance) and 26 percentage points from label-convention alignment (en-dash normalisation, apostrophe standardisation, structural hyphen preservation). Recognising both gains matters because they are additive and have different engineering implications.

Method: LV-ROVER

LV-ROVER (Lexicon-Voting ROVER) is a 5-stream Tesseract ensemble. Each stream runs a different fine-tuned LSTM checkpoint on the same image. Outputs are merged with ROVER voting augmented by a soft Maltese word-frequency lexicon and a diacritic-preserving edit distance constraint - if two candidates differ only in a Maltese canary character (ċ/c, ġ/g, ħ/h, ż/z), the lexicon score breaks the tie.

Post-processing applies six rule-based normalisation steps. The full post-processing block was validated with paired bootstrap and permutation tests. Individual deterministic rules were checked by leave-one-out dev and held-out synthetic point estimates, not by independent bootstrap confidence intervals.

No neural models. No GPU needed. Runs on CPU. Total footprint under 1 GB.

Licensing note

Released weights and code are Apache-2.0. The synthetic training text derives from korpus_malti, which is CC BY-NC-SA 4.0 (non-commercial, share-alike, gated). Whether share-alike/NC obligations propagate to fine-tuned weights is legally unsettled and flagged, not resolved.

Usage

from competition_transcriber import CompetitionTranscriber

t = CompetitionTranscriber()  # downloads weights from this repo
text = t.transcribe(pil_image)  # returns joined paragraph string

Canary characters

These four substitutions are the main diacritic error modes in Maltese OCR. LV-ROVER's lexicon voting and diacritic edit-distance constraint specifically target them:

Error Correct
c ċ
g ġ
h ħ
z ż

Links

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support