Supervised learning project for Amharic/Ethiopic character recognition using PyTorch.
Ethiopic: A Supervised Learning Pipeline
From labeled Ethiopic pixels to locally trained character, word, and sentence OCR
An educational, end-to-end Amharic and Ethiopic Optical Character Recognition (OCR) ecosystem built with Python, PyTorch, OpenCV, Pillow, and CustomTkinter, specifically designed as a hands-on foundation for supervised learning, AI model training, and algorithmic development.
The application recognizes a single printed character with a locally trained 290-class convolutional neural network (CNN). It can also segment a printed word or line into character crops, classify every crop with that same CNN, restore reading order, and optionally translate the reconstructed Amharic text into English.
> Mature OCR and translation systems already exist. This project is educational and experimental: I am building the recognition pipeline myself to understand supervised learning, neural-network training, computer vision, CNNs, evaluation, generalization, OCR segmentation, and the engineering needed to turn trained intelligence into a usable application.
The goal is not to call an existing OCR model as a black box. The goal is to understand how machine intelligence is trained.
## Current status
The repository now supports three explicit recognition paths:
| Mode | Pipeline | Status |
| --- | --- | --- |
| Character | image → shared preprocessing → local CNN → Ethiopic class | Implemented |
| Word OCR | image → OpenCV character segmentation → local CNN → word | Implemented for clean printed text |
| Sentence OCR | line image → relative gap analysis → words/characters → local CNN → text | Implemented for clean printed lines |
| Translation | reconstructed Amharic text → replaceable external provider → English | Optional; OCR remains usable offline |
The active checkpoint and all earlier learning artifacts are preserved. Word and sentence recognition reuse the existing CNN; no word-level model has replaced it.
## Technology stack
The stack is intention …