KoshurOCR-CRNN: Optical Character Recognition for Kashmiri Script
KoshurOCR is a two-stage hybrid optical character recognition pipeline designed for reading document images in the Kashmiri language (Perso-Arabic script, ISO 639-3: kas).
Instead of attempting single-pass whole-line recognition—which suffers from severe character drift in Nastaliq script—KoshurOCR combines a YOLOv8 object detector for word segmentation with a ResNet-34 + BiLSTM + CTC neural network for character sequence recognition.
End-to-End Pipeline Architecture
The full page recognition pipeline operates in six sequential stages:
Model Details
- Model Identifier:
KoshurOCR-CRNN-v1 - Developer: Faizan Iqbal
- Pipeline Type: Two-Stage Hybrid (YOLOv8 Bounding Box Detector + CRNN Sequence Recognizer)
- Word Detector Component: YOLOv8 Object Detector (
yolo_word_detector.pt) - Word Recognizer Component: ResNet-34 Feature Extractor + 2-Layer Bidirectional LSTM + CTC Head (
best_model_ft_linecrops.pth) - Parameter Count: 9,656,385 trainable parameters (CRNN Recognizer)
- Input Specification: Grayscale image crop, height normalized to 32px (padded to 256×64)
Empirical Benchmark Performance
Evaluation metrics across distinct dataset categories and document types:
| Evaluation Dataset / Material Category | Character Error Rate (CER) ↓ | Sequence Accuracy (%) ↑ |
|---|---|---|
| Clean Synthetic Modern Print Suite | 10.00% | 98.15% |
| Digital Naskh Test Benchmark | 13.52% | 92.40% |
| Printed Typeset Book Evaluation Set | 18.45% | 85.20% |
| Degraded Historical Document Set | 49.80% | 61.10% |
Note: Character Error Rate (CER) is calculated using normalized Levenshtein edit distance on logical Unicode character strings.
Example Model Outputs
Example OCR predictions across printed book pages and document crops. Recognition quality varies with scan quality, typography, and diacritic density.
Example 1: Printed Book Page (Transliterated Names & Classics)
Target text contains transliterated literary names (Shakespeare, Bernard Shaw, Oscar Wilde, Samuel Beckett, T.S. Eliot, Hamlet, Othello, Macbeth, Romeo & Juliet).
| Document Image | Model Prediction |
|---|---|
|
سلہ ہان پٕنۍ ہیڈ تی تان پُھ سُ سٗٛگِۍ ٲمٕ یٗنٛ مُلر پمۍ جُرا ہس سھڑنٹ ں ذِژ پہٕ ِس نریس ک
خاح سن ٘ سو سبی بسس قسور بنُہہ سن تُند خیاں پُھ تِھۍ سر یم کنۍ ہَ ہھٕ سن جند تٕش کَِ جِوِنٛ چھِ ک چُھن لۍ شد یٔمس منز پتچپوٕھ پنہِ ی عم نفہِ لتن گنہہ یتا سٹھ ہ۪ٹیخ تِ ہیٚہِ سِ مُفہٕ یہر ہی ک کٲٔہ سنۍ پٔڑِس ڈِنی تِ جہمنَن مز بس منز ہیہٕ پِتھ سہٕ بتھ ز اِھ تہٕ چُھِتھ ہَمہِ منی رجَچ ننن ریہس حدس تزٛ پنہٕ نِن منَس تتھِ رچ تہٕ ضذب س تنٛرس منٗوت ہُس سٔرِھ ھ سسلس منز ہَیہِ پُپس ُرمنچ شال پی ٕ یِتھ گمیٛی لر ی رہن ہٕ مسلس منز پُھ یٛ ہِ ر۰ ٲئل بَِرمۍ سہِ تُمہٕ سن رہن پچر سُڈ تِ پغہٕ تہِ شہرج پ أنمر یۍ ببس منز تہِ چھ ہُرٕچ ککھ یٹھ رایذ م جن۔ باہس منز تُ رارنَ کہٕ تِ چھِ چِمتنف رن منز سٹ پٔڈۍ َرپِ بِدۍ ہٕنز یَمن منز ہیمُ پٗسیر ہر کٚ چر کرسنر ر جرج برنُ شاہن ک جنسن ہٕ پ۪ بیٹی ۲ سر یل٘ پمل مَڈ نٛ سس ییڈ سمرسڈ سڈ ۲۷ جان گنز ری َٔرٕ سھ ہشہر چھِ جَٗحسیر ز کیئہ سیٹی چھِ ہمِڈ جھیو کنک یر ہَیھ ریو جلیخ ٛٲر ک ہندتاس منز تہِ چھٚ رچ سیٹھا پنزٛ رایت یتھ غِ یہٗنٛ ریٚو سٛ کنہہ ٹھ چُھ سنگرظ چھ ہند شعچ ک کھ پنزٛ زبن سنصرش منز چھ ُزہٕ رٗ پۍ لظ ستل پُد مُۅ پٚمیٗ مڑلہ جنبہٕ ہَرر یِ سفیغ ت ژھ ککھ ک گڑرٲئل پی سٕ فز پُھ نأمگ پُھ ہم سہٕ ز ہٛسمٕ کھ کھنسرع َمسٕ شلت سرہٕ م ھِ تہٕ پٗنٛ کتاہ چھ ہرع ک مَنن ٚنٛ نایہ شاسۍ یھ منز مُگ یڈُ رمُٕ کھرھٲیل مورت بہِ پِن چھٚ تدِ عغہ کنۍ پُھ با چرۍ نن تِ سہِ کزز سژھن جند یہٕ نۍ پٔٗ زنٛگیہ ہٕنہٕ شتڑ ج ژنرئر ہہٕ ٹَرپہ سم غِ یِ پھہِ نہرن گاپکان ہٕنز ملہِ یہٕ بفترٕ کنز سٔنِھ پُلہِ ہُچھہٕ ٹہِ پَھ نن بِنصرش منز نزہِ تہِ چھِ ُٕ سہِ چہِ ملِعثت غے ہِتھی تسریے غہٕ ہتۍ یم یٗ ہنزٛ فسن سِۍ رٗن چھِ قہٕ ن چھِ کگ کگ جں فرژھٗن تہٕ نشرن ِش کک کِس نۅہِ شژ بفہٕ اسس ۲ہمتۍ یٚمہِ سنۍ یہِ کتھ صانگ چھُ سدن زِ ہِراچھُ ننن مٕز کھنگری ہندِتنس منز چھِ ہِروجہِ ریٗو ہٕندۍ آر ین منز رہِ یِ نن بھم سِ بوٚ ِس رورس منز تہِ پُھ تہٕ سہٕ غِ ہظہ ھسہٕ بہاغ تہٕ شرنٗ تان بز غِ لبز ۲ہٕ ۂگ ہٲٛ بر۔ تھین تائن مُہ تذ ن یَمن منزُ ر۰ ہٗٔر فرسہٕ سہِ ہن ہند ہندز جھرٕ کۍ یُ پٔٗۍ چھِ ژٚ پڈۍ رشینز س عہٕ ہٕژ یم چھِ کٗ یَی ریت یت ٹِ رہن مُد ر رہٕ ڈہِ جد ید ر کٗ یَی ررس منز ہ شاتر پنسَرع رہاہن ہُند عرج یَمن منز کہٕ ریشن قین قہٕ شلت ہُر سَھہٕ یِ کِد غِ چھِ ۲تۍ کئ س پُھ سیٹھ رنرظ ڈر نڑر ٕ نن بَتو پُھ سنٛمہرہٕ رہ۔ مہِ ُر۰ ہۍ کینٛے مر چھِ پھوۍیس منز عیِ مُند حل ہِ چُھ ین مہِ ہہِ سنٛ پھ پہِ دٕ یِن تسن ییٛہہ غہٕ سیہہُ تلت ۳سہِ چ نٔعیِ |
Example 2: Prose Paragraph Crop
| Document Image | Model Prediction |
|---|---|
|
اندے لبنہٕ یوان چھُ۔ کوٹ چھُ اکھ زند کردار، یُس پنز پچان دوان چھُ، ونان بہٕ گس چھس تہٕ کتیک چھس۔ اتھ اندر مس تہٕ
نمبر مس تضادس منز چھُ اکھ موصوم انسان کاٹھس کھسان۔ یس نہٕ کاَنہہ خطا چھُ مگر سزا تہٕ چھُ سہُ تلان تکیازِ تہمز غلطی چھےٚ بس یہِ زسہُ بدلیو وینیہِ ہند خاطر، بییہِ ہنزِ خوشی خاطر۔ پنز عادات، پنز روایت مشرن۔ یہِ ڈراما چھُ سانہِ سماجی زندگی ہند ٲنہٕ تہٕ۔ اتھ منز رشتن ہند مچھر تہٕ چھُ تہٕ سہُ سوچ تہِ یُس سانہِ سماجی زندگی ہند لبِ لباب چھُ۔ مختصر لفظن منز ونو زِ یہِ ڈراما چھُ اکھ المناک طربیہ۔ |
Pipeline Preprocessing & Load-Bearing Rules
- YOLO Word Detection: Bounding boxes are detected using YOLOv8 with Non-Maximum Suppression (IoU threshold = 0.45, Confidence threshold = 0.35).
- Horizontal & Vertical Crop Padding: Word crops extracted from YOLO bounding boxes require 30px horizontal and 20px vertical padding prior to spatial resizing. Unpadded crops increase CER from 18.5% to 37.0%.
- Right-to-Left (RTL) Box Ordering: Bounding boxes within each line are sorted right-to-left based on their horizontal centroid coordinates to preserve Perso-Arabic reading order.
- No Reshaper / BiDi Re-ordering: Avoid using
arabic_reshaperorbidireordering packages, as they strip Kashmiri diacritics (such as kasraU+0650).
Dataset & Training Details
- Dataset Volume: ~673,000 annotated Kashmiri word and line crops (special thanks to
Omarrran/600k_KS_OCR_Word_Segmented_Datasetfor the foundational dataset). - Typefaces: Multi-font dataset covering Naskh, Nastaliq, and regional fonts (Noto Nastaliq Urdu, Gulmarg Nastaleeq, Afan Koshur Naksh, Narqalam).
- Augmentations: Geometric rotation, Gaussian blur, contrast jitter, line noise, and character spacing variation.
- Optimizer: AdamW (Learning Rate = 3e-4, Weight Decay = 1e-5)
- Hardware: NVIDIA Tesla T4 / RTX 3050 Accelerator Nodes
Usage
pip install torch torchvision ultralytics pillow opencv-python numpy scipy
import torch
import koshur_ocr
# Initialize full pipeline (YOLOv8 Word Detector + KashmiriCRNN Recognizer)
ocr = koshur_ocr.KoshurOCR(
reader_ckpt="best_model_ft_linecrops.pth",
detector_ckpt="models/yolo_word_detector.pt"
)
text = ocr.predict_image("document_sample.jpg")
print(text)
Citation
@article{iqbal2026koshurocr,
title={KoshurOCR: Optical Character Recognition for Kashmiri Perso-Arabic Script},
author={Iqbal, Faizan},
year={2026},
publisher={Hugging Face},
url={https://huggingface.co/Faizaniqbal/KoshurOCR-CRNN-Baseline}
}