pashtoOCR / README.md
mhalimi3008's picture
Update README.md
1bd34f9 verified
|
Raw
History Blame Contribute Delete
1.74 kB
---
language: ps
license: mit
tags:
- ocr
- crnn
- ctc
- pashto
- image-to-text
metrics:
- cer
- wer
---
# Pashto OCR - CRNN + CTC (printed + handwritten)
Line-level Pashto OCR (CRNN: VGG-style CNN + 2-layer BiLSTM + CTC, ~12M params).
- `crnn.pt` - stage-1 weights: printed / on-screen text
(trained on [zirak-ai/PashtoOCR](https://huggingface.co/datasets/zirak-ai/PashtoOCR)).
Printed validation CER = 0.0368 / WER = 0.1210
- `crnn_pashtoOCR.pt` - stage-2 weights: fine-tuned on
[KPTI](https://github.com/rahmad77/KPTI) (17k real hand-scribed Pashto text lines).
Reads katib-style handwritten manuscripts as well as printed text. KPTI test CER = 0.0563 / WER = 0.2299.
- `charset.json` - character vocabulary + preprocessing config
## Preprocessing contract
Grayscale, dark-text-on-light (auto-invert dark themes), resized to height 48
(aspect preserved), normalized to [-1, 1], then **horizontally flipped**
(RTL script -> left-to-right CTC frames). Decode with greedy CTC
(collapse repeats, drop blank id 0).
## Usage
```python
import json, torch
from huggingface_hub import hf_hub_download
weights = hf_hub_download("mhalimi3008/pashtoOCR", "crnn_pashtoOCR.pt") # or crnn.pt
cfg = json.loads(open(hf_hub_download("mhalimi3008/pashtoOCR", "charset.json")).read())
model = CRNN(len(cfg["charset"]) + 1).eval() # CRNN class from the training notebook
model.load_state_dict(torch.load(weights, map_location="cpu"))
```
The training notebook (sections 5-6 and 10) contains the full inference code, including
projection-profile line segmentation and PDF support.
If you use the handwriting weights in research, cite:
*Ahmad et al., "KPTI: Katib's Pashto Text Imagebase and Deep Learning Benchmark", ICFHR 2016.*