OCR for Ethiopic Ge'ez Script Documents
9 min read · updated August 11, 2026
Ethiopic OCR is usually described as under-resourced, which is true and incomplete. The script’s structure gives it an error profile unlike an alphabetic script’s — more classes, confusions concentrated within families, and errors that preserve the consonant and change the vowel. That last property is the one worth building around.
The structure of the script
The Ethiopic script — Fidäl, used for Ge’ez, Amharic, Tigrinya and several other languages — is a syllabary in the practical sense that each written symbol represents a consonant plus a vowel. It is not an alphabet with separate vowel letters, and it is not an abugida in the Brahmic sense where vowels are attached as separable marks.
Each consonant heads a family of seven forms, one per vowel order. The vowel is indicated by modifying the consonant’s own shape: adding a small leg to the side, shortening one stroke, adding a ring or a horizontal bar, or bending the base. The modification is small relative to the glyph, and it is what carries the vowel.
The class count follows directly. Amharic uses roughly 33 base consonants, and 33 × 7 is 231 symbols before anything else is counted. Labiovelar series add further members to some families, taking the working set past 270. Unicode reserves the block U+1200 to U+137F for Ethiopic — 384 code points — with additional characters in the Ethiopic Supplement, Ethiopic Extended, Extended-A and Extended-B blocks for other languages that use the script.
Several hundred classes, confusable in families
Set that against a Latin-script recogniser, which is choosing among roughly seventy classes: upper and lower case, ten digits, and punctuation. The Ethiopic recogniser is choosing among several hundred.
More classes alone is not the problem — Chinese OCR handles thousands. The problem is where the classes sit relative to each other. In Latin type, most confusable pairs are accidental (rn and m, l and 1 and I, 0 and O) and the rest of the alphabet is well separated. In Ethiopic the confusability is systematic: the seven members of a family are by construction near-identical, differing by one appendage that may be a few pixels wide at ordinary print sizes. Every character on the page has six close neighbours.
That makes resolution and print quality matter more than the class count suggests, for the same reason as in Chinese at low resolution: the distinguishing feature is at the scale of one stroke, and it disappears before the glyph does. It also means that binarisation and despeckling settings tuned on Latin text are actively harmful, since a vowel-marking ring is exactly the sort of small connected feature a despeckle filter removes.
A distinctive error profile
Here is the property that changes what you can do. Because the confusions are within-family, a recognition error usually keeps the consonant and changes the vowel. The output is a word with the right consonant skeleton and a wrong vowel somewhere in it.
Contrast Latin OCR, where an error substitutes an unrelated letter and the damage is unstructured. Contrast Chinese, where an error produces an unrelated character with an unrelated meaning. In Ethiopic the error is constrained to a seven-way choice within a known family, which means:
- Correction is a much narrower task. A model correcting Ethiopic OCR is choosing among seven candidates per position with the consonant given, not reconstructing arbitrary text. If your recogniser can emit the family rather than only its top choice, hand that candidate set to the correction stage rather than the flattened string.
- Consonant-skeleton matching is a useful retrieval fallback. Indexing a normalised form that keeps consonants and drops vowel order gives you a search that survives the dominant error class, at the cost of some false matches. For a document archive where recall matters more than precision this is often the right trade.
- Error rate understates the damage differently. A wrong vowel order is one character error and can change the word entirely, including its grammatical role, because Amharic verb morphology is carried in exactly those vowels.
There is a related normalisation issue that is not an OCR error at all and is often mistaken for one. Several Ethiopic characters represent sounds that merged in Amharic, so different symbols spell the same word and both spellings occur in real published text. A search index that does not fold those variants together will miss documents for reasons that have nothing to do with recognition quality. Decide on a normalisation and apply it to queries and documents alike.
Word separators, numerals and manuscripts
Three pipeline traps specific to this script, each of which produces output that looks fine and behaves badly.
The word separator. Traditional Ethiopic text separates words with a two-dot mark rather than a space — the Ethiopic wordspace, U+1361 — and ends sentences with a four-dot full stop, U+1362. Modern Amharic increasingly uses ordinary spaces, but older printing and manuscript material does not. A tokeniser splitting on whitespace over such a document produces one enormous token per line, and every downstream stage silently degrades. Normalise the separator before tokenising, and decide deliberately whether to preserve it in the stored text.
The numerals. Ethiopic has its own digit symbols in the range U+1369 onward, and the system is not positional and has no zero: numbers are composed additively from symbols for units, tens, hundreds and ten-thousands. Extracted Ethiopic numerals therefore cannot be parsed by any ordinary numeric parser, and a pipeline that tries will either error or, worse, silently produce a wrong integer. Convert explicitly.
Manuscripts. Ge’ez liturgical manuscripts are hand-copied on parchment, with no consistent baseline, variable letter size, and rubrication — divine names and headings written in red ink within black text. That colour distinction is structural information, and binarising the page destroys it. Where you are processing manuscripts rather than print, keep the colour channels and treat the red text as a separate stream.
What to do about it
- Scan at a resolution that leaves the vowel-marking features several pixels wide, and disable despeckling and aggressive binarisation before concluding an engine cannot read the script.
- Score a confusion matrix and check whether errors are within-family. If they are, the problem is feature-scale and the fix is image quality. If they are across families, the problem is the model.
- Report character error rate per vowel order as well as overall. A single order that fails everywhere usually points at one visual feature the recogniser is missing.
- Normalise the word separator and the merged-sound character variants before indexing, and apply the same normalisation to queries.
- Convert Ethiopic numerals explicitly rather than letting a parser meet them.
- Add a correction pass and give it the constraint: the consonant is probably right, the vowel is probably the error.