--- license: mit language: - pl - en library_name: transformers pipeline_tag: image-to-text base_model: microsoft/trocr-base-printed tags: - trocr - ocr - polish - historical-print - experimental model-index: - name: trocr-pl-base results: - task: type: image-to-text name: OCR line recognition dataset: name: OCR Engine real-lines-v1 type: PiotrStyla/OCR_engine metrics: - type: cer value: 0.11108010047446273 name: CER - type: wer value: 0.3584 name: WER --- # TrOCR PL Base — experimental Eksperymentalny checkpoint `microsoft/trocr-base-printed` dostrojony metodą LoRA do drukowanego tekstu polskiego. Model przyjmuje obraz **pojedynczej linii**, a nie całą stronę dokumentu. ## Status **Experimental — nie jest jeszcze modelem produkcyjnym.** Checkpoint wyraźnie poprawia angielski baseline na polskich liniach, ale pełny pipeline stron jest ograniczony przez segmentację i nie powinien być oceniany wynikiem samego recognizera. ## Wyniki | Zbiór | Zakres | CER | WER | |---|---|---:|---:| | syntetyczny validation | 200 linii | 4,86% | 21,41% | | `real-lines-v1` | 75 ręcznie wyciętych realnych linii | **11,11%** | **35,84%** | | `real-lines-v1`, EN baseline | te same 75 linii | 81,91% | 100,16% | | `print-pilot-v1` | 2 pełne strony z OpenCV segmentacją | 66,17% | 86,08% | Realne cropy pochodzą z dwóch historycznych polskich stron public domain. Referencje przygotował jeden autor bez niezależnej drugiej weryfikacji. Pełny wynik stron obejmuje detekcję, segmentację, kolejność i rozpoznawanie; nie jest wynikiem samego checkpointu. Benchmark i predykcje: [OCR_engine/benchmarks/real-lines-v1](https://github.com/PiotrStyla/OCR_engine/tree/main/benchmarks/real-lines-v1) oraz [experiments/2026-09-13](https://github.com/PiotrStyla/OCR_engine/tree/main/experiments/2026-09-13). ## Trening - baza: `microsoft/trocr-base-printed`, rewizja `93450be3f1ed40a930690d951ef3932687cc1892`, - dane: [PiotrSty/ocr-pl-lines](https://huggingface.co/datasets/PiotrSty/ocr-pl-lines), 2000 syntetycznych linii train + 200 validation, - 3 epoki, batch 8 na T4 x2, - LoRA dekodera attention (`q_proj`, `k_proj`, `v_proj`, `out_proj`), - 3 047 424 trenowanych parametrów (0,9044%), - najlepszy checkpoint wybrany po CER: epoka 3, - Transformers 4.57.6, PEFT 0.19.1, - jawnie wyrównana strata tokenowa, bez podwójnego przesunięcia etykiet. Pełna proweniencja, hashe próbek i wersje pakietów znajdują się w `run.json`. Adapter LoRA jest zachowany w `adapter/`; model główny jest scalony i można go ładować bez PEFT. ## Użycie ```python from PIL import Image from transformers import TrOCRProcessor, VisionEncoderDecoderModel model_id = "PiotrSty/trocr-pl-base" processor = TrOCRProcessor.from_pretrained(model_id) model = VisionEncoderDecoderModel.from_pretrained(model_id) image = Image.open("line.png").convert("RGB") pixel_values = processor(image, return_tensors="pt").pixel_values ids = model.generate(pixel_values, max_new_tokens=128) print(processor.batch_decode(ids, skip_special_tokens=True)[0]) ``` W silniku OCR model należy włączyć jawnie: ```python from ocr import OcrConfig, OcrEngine config = OcrConfig(recognizer_pl="PiotrSty/trocr-pl-base", force_language="pl") with OcrEngine(config) as engine: result = engine.recognize("document.png") ``` ## Ograniczenia - trenowany głównie na danych syntetycznych; - przetestowany tylko na małym pilocie historycznego druku; - niezweryfikowany na piśmie ręcznym, tabelach, formularzach i szerokim przekroju współczesnych dokumentów; - wymaga poprawnych cropów pojedynczych linii; - może degenerować na krótkich, zaszumionych liniach i znakach interpunkcyjnych; - confidence jest sygnałem niepewności, a nie skalibrowanym prawdopodobieństwem.