|
Download README.md from M2key1/deepocr-v3: direct link, hf CLI and curl.
- Browser
- Download file 2.8 kB
-
https://huggingface.co/M2key1/deepocr-v3/resolve/main/README.md
- Command line
-
hf download hf://M2key1/deepocr-v3/README.md
-
curl -L -o README.md https://huggingface.co/M2key1/deepocr-v3/resolve/main/README.md
2.8 kB
| license: apache-2.0 | |
| library_name: pytorch | |
| pipeline_tag: image-to-text | |
| tags: | |
| - ocr | |
| - htr | |
| - handwritten-text-recognition | |
| - historical-documents | |
| # DeepOCR v3 | |
| A line-level text recognition model for historical print and handwriting: Fraktur, Antiqua, Kurrent, and medieval and modern Latin script, in one checkpoint. Code, training and architecture: [DeepOCR](https://github.com/m2key1/DeepOCR). | |
| ## Files | |
| | File | What it is | | |
| |---|---| | |
| | `deepocr-v3.pt` | The model weights (EMA), with every architecture setting stored inside | | |
| | `union_bytes_v3.bin` | Byte-level 6-gram KenLM, fused into the beam search | | |
| | `union_bytes_v3.dict` | The LM's token list, index-parallel to the model's 261-token byte vocabulary | | |
| The LM belongs to this checkpoint. Do not pair it with another one. | |
| ## Use | |
| ```python | |
| from pathlib import Path | |
| import torch | |
| from PIL import Image | |
| import infer | |
| from infer import load_model, transcribe_beam | |
| infer.KENLM_PATH = Path('union_bytes_v3.bin') | |
| infer.LM_DICT_PATH = Path('union_bytes_v3.dict') | |
| infer.LM_WEIGHT = 1.0 | |
| infer.BEAM_WIDTH = 10 | |
| device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') | |
| model, tokenizer = load_model('deepocr-v3.pt', device) | |
| print(transcribe_beam(model, tokenizer, [Image.open('line.png')], device)[0]) | |
| ``` | |
| Input is one text line as an RGB image; it is scaled to 256 px high and read up to 6144 px wide. Three flags choose the transcription convention: `long_s` (ſ), `oblique_hyphen` (⸗) and `typographic_punctuation`. Set them in `infer.CONVENTION`; all off by default. | |
| The model is also the OCR builtin of [DeepLabel](https://github.com/m2key1/DeepLabel). | |
| ## Model | |
| 170.5M parameters. A grouped CNN backbone feeds four mixture-of-experts transformer layers (64 experts, 8 active per column, plus one shared expert) and a CTC head over bytes, so it can emit any Unicode character. Trained from scratch. | |
| ## Evaluation | |
| CER on the held-out validation split, 25,000 lines: | |
| | Decoding | CER | | |
| |---|---| | |
| | Greedy | 3.68% | | |
| | Beam 10 | 3.57% | | |
| | Beam 10 + KenLM, weight 1.0 | 3.03% | | |
| ## Training data | |
| Public datasets of historical print and handwriting. The language model was built from the same training split. | |
| ## Limitations | |
| - Reads single lines only; it needs a line detector or segmentation in front of it. | |
| - Reads best on material like its training data: European print and handwriting from the medieval to the modern period. Accuracy drops on other scripts and unusual hands. | |
| - The language model favours the training text; for mostly numeric or tabular text, lower `LM_WEIGHT` or decode without it. | |
| ## License | |
| Apache-2.0. | |
| ## Citation | |
| ```bibtex | |
| @software{fleischhacker_deepocr, | |
| author = {Fleischhacker, David}, | |
| title = {DeepOCR}, | |
| year = {2026}, | |
| url = {https://github.com/m2key1/DeepOCR} | |
| } | |
| ``` | |