Downloads · 30 days
0
achimrabus/crnn-ctc-glagolitic
crnn-ctc-glagolitic is a machine learning model from achimrabus. Use it for the machine learning task on the model card, and read the license before you ship it in a product. It is set up for custom. The card lists the license as apache-2.0.
A Handwritten Text Recognition (HTR) model for 14th–15th century Croatian Glagolitic manuscripts, based on the CNN + BiLSTM + CTC architecture introduced in Puigcerver (2017) and used as the backbone of PyLaia and Tra…
Downloads · 30 days
0
Access
Public
Updated Oct 6, 2026
Repo size
42.7 MB
Likes
0
Public
Click a slice to open those files.
.pt42.7 MB · 100%
From the Hugging Face model README
A Handwritten Text Recognition (HTR) model for 14th–15th century Croatian Glagolitic manuscripts, based on the CNN + BiLSTM + CTC architecture introduced in Puigcerver (2017) and used as the backbone of PyLaia and Transkribus.
Important: This model reads Glagolitic handwriting and outputs Latin script transliteration, not Glagolitic Unicode characters. It handles ligatures and resolves the most common abbreviations.
This is a clean-room PyTorch reimplementation of that published architecture (PyLaia-inspired). It does not use the PyLaia Python package and is not loadable by it — training and inference run via plain PyTorch (see Usage below).
symbols.txt)| Metric | Value |
|---|---|
| Validation CER | 5.33% |
| Training epochs | 42 |
| Training lines | 23,203 |
| Validation lines | 1,361 |
Trained on Glagolitic handwriting images transcribed and exported from Transkribus (see the corresponding Transkribus model page). The dataset covers 14th–15th century Croatian Glagolitic handwriting.
Source manuscripts:
Ground truth data was kindly provided by Sanja Zubčić (Rijeka) and Jagoda and Guido Kappel (Vienna). Model trained and curated by Achim Rabus (Slavic Department, University of Freiburg). The Transkribus collection comprises 531 training pages and 31 validation pages (~31,035 lines in total). Our CRNN-CTC model was trained on 23,203 lines (training) and 1,361 lines (validation) from this export.
The inference code lives in polyscriptor and imports
other modules from it, so run it from a clone of the repository. Install into a fresh virtual
environment in one pip call; requirements-kraken.txt adds the Kraken segmentation used for full
pages below (for a GPU install, see the polyscriptor README):
git clone https://github.com/achimrabus/polyscriptor
cd polyscriptor
python3 -m venv htr_env && source htr_env/bin/activate
pip install -r requirements.txt -r requirements-kraken.txt
hf download achimrabus/crnn-ctc-glagolitic --local-dir models/crnn-ctc-glagolitic
From the root of the clone:
from inference_pylaia_native import PyLaiaInference
from PIL import Image
# Load model
model = PyLaiaInference(
checkpoint_path="models/crnn-ctc-glagolitic/best_model.pt",
syms_path="models/crnn-ctc-glagolitic/symbols.txt"
)
# Transcribe a line image
image = Image.open("line_image.jpg")
text, confidence = model.transcribe(image)
print(text, f"(confidence {confidence:.2f})") # Latin script transliteration
Note: Input should be a single text line image, not a full page. Preprocessing (grayscale conversion, height normalization, aspect ratio preservation) is handled automatically by
inference_pylaia_native.py.
For full-page inference with automatic line segmentation, use batch_processing.py. The neural
Kraken segmenter (kraken-blla) is strongly recommended; the default projection-based segmenter
(hpp) is fast but can miss most lines on complex pages:
python batch_processing.py \
--engine crnn-ctc \
--model-path models/crnn-ctc-glagolitic/best_model.pt \
--segmentation-method kraken-blla \
--input-folder images/ \
--output-folder output/
polyscriptor's main interface runs in the browser: upload page images or PDFs, segment them automatically (Kraken) or reuse existing PAGE XML, transcribe, correct lines inline and export TXT, CSV or PAGE XML. It runs on a laptop or on a remote server (via SSH tunnel), and CRNN-CTC models also work without a GPU.
The web interface picks up any folder under models/ that contains best_model.pt and
symbols.txt, so after the download above it only needs to be started:
uvicorn web.polyscriptor_server:app --host 0.0.0.0 --port 8765
# open http://localhost:8765 and choose the model under CRNN-CTC
polyscriptor also ships PyQt6 desktop interfaces: transcription_gui_plugin.py for interactive
single pages (automatic line segmentation, PAGE XML export) and polyscriptor_batch_gui.py for
whole folders (uses existing PAGE XML files, e.g. from Transkribus, when available).
If you use this model in your research, please cite the architecture paper, the publication describing the training data and recognition system, and this model:
@article{rabus2022glagolitic,
title = {Handwritten Text Recognition for Croatian Glagolitic},
author = {Rabus, Achim},
journal = {Slovo: časopis Staroslavenskoga instituta u Zagrebu},
volume = {72},
pages = {181--192},
year = {2022},
doi = {10.31745/s.72.5},
url = {https://doi.org/10.31745/s.72.5}
}
@article{puigcerver2017multidimensional,
title = {Are Multidimensional Recurrent Layers Really Necessary for Handwritten Text Recognition?},
author = {Puigcerver, Joan},
journal = {Proceedings of the 14th IAPR International Conference on Document Analysis and Recognition (ICDAR)},
year = {2017},
url = {https://www.jpuigcerver.net/pubs/jpuigcerver_icdar2017.pdf}
}
@misc{rabus2026polyscriptor,
title = {Polyscriptor: Multi-Engine HTR Training \& Comparison Tool},
author = {Rabus, Achim},
year = {2026},
url = {https://github.com/achimrabus/polyscriptor}
}