Benchmarki dokładności

Aktualizacja silnika OCR: PP-OCRv5 → PP-OCRv6

Pomiar wykonano 2026-07-09 na lokalnym GPU RTX 3090 z obrazem produkcyjnym (paddleocr==3.7.0, CUDA 12.9). Badano rzeczywisty 24 MP dokument HEIC z aparatu (tekst polski, ręcznie sporządzona wartość referencyjna) oraz przykładowe PDF-y faktury i paragonu z repozytorium (wartość referencyjna z pdftotext). Ocena wykorzystuje niewrażliwą na kolejność kompletność i precyzję wielozbiorów.

Wdrożona konfiguracja to PP-OCRv6 medium z text_det_box_thresh=0.5. Niższy próg pól odzyskuje słabo widoczne wiersze z obszarów odblasków i perspektywy na zdjęciach z aparatu (+20 pkt proc. kompletności słów), bez regresji na czystych renderowanych stronach.

Metryka PP-OCRv5 (poprzedni) PP-OCRv6 medium + box_thresh 0.5 (aktualny)
Kompletność słów (zdjęcie z kamery) 0.670 0.865 (+29 %)
Kompletność diakrytyków polskich (zdjęcie z kamery) 0.562 0.775 (+38 %)
Precyzja słów (zdjęcie z kamery) 0.986 0.955
Kompletność liczb (paragon) 0.818 1.000 (+22 %)
Gęsto zadrukowana faktura (kompletność/precyzja słów) 1.000 / 1.000 1.000 / 1.000
Opóźnienie GPU w stanie ciepłym (RTX 3090, gęsta strona) ~0.55 s ~1.13 s

Kompletność słów na drukowanych renderowanych stronach (PDF-y faktur i paragonów) wynosi 1.000 dla obu wersji silnika. Poprawa dotyczy zdjęć z aparatu, gdzie perspektywa, odblaski i kompresja obciążają detektor. Kompletność liczb (kwot, dat i identyfikatorów) jest najbliższym wskaźnikiem dokładności ekstrakcji pól, ponieważ pola są dopasowywane na podstawie tych tokenów.

Silnik fotograficzny: wstępne przetwarzanie dokumentów z kamery

Pomiar wykonano 2026-07-09 (na tym samym sprzęcie i obrazie co test silnika OCR). Silnik zdjęć stosuje geometryczne prostowanie i klasyfikację orientacji przesłań z aparatu przed OCR. Został włączony wyłącznie dla przesłań IMAGE, ponieważ prostowanie zastosowane do już płaskich renderowanych stron powoduje regresję kompletności słów z 1.000 do 0.635 przez zniekształcenie wyrównanych pikseli.

Metryka Bez wstępnego przetwarzania (poziom bazowy) Z prostowaniem (przesyłanie z kamery)
Kompletność słów (zdjęcie z kamery) 0.865 0.921 (+6.6 %)
Kompletność diakrytyków polskich (zdjęcie z kamery) 0.775 0.854 (+10.2 %)
Precyzja słów (zdjęcie z kamery) 0.955 0.961
Kompletność słów. Gęsto zadrukowana strona 1.000 0.635 (regresja, zgodnie z założeniem tylko dla zdjęć)

Korzyść z prostowania jest rzeczywista, ale wymaga zwrócenia przez usługę OCR przekształconego obrazu strony, aby pola ograniczające były rysowane we właściwej, przekształconej przestrzeni współrzędnych. Ograniczenie do zdjęć zapobiega regresji dla gęstych stron. Funkcja jest kontrolowana przez zmienną środowiskową OCR_PHOTO_TRANSFORMS_ENABLED.

Wykrywanie podziału PDF z wieloma fakturami

Pomiar wykonano 2026-07-21 przy użyciu syntetycznego oznakowanego zbioru oceny wygenerowanego przez scripts/gen_split_eval.py i ocenionego przez scripts/eval_doc_split.py. Detektor używa osadzonej warstwy tekstowej (pdftotext) do wyszukiwania sygnałów granic stron (nagłówków faktur, wzorców etykiet dat i słów kluczowych typu dokumentu) przed wywołaniem OCR lub LLM, więc wykrywanie granic jest bezpłatne.

Warunek Precyzja granicy Kompletność granicy F1 Ocenione dokumenty
Czysty tekst (bez szumów OCR) 1.000 1.000 1.000 660
Szum OCR na poziomie znaków: 2 % - - 0.969 660

The eval set mixes multi-invoice PDFs with single-invoice negatives. Precision and recall are computed on exact page-index boundary matches. The 2 %% OCR noise model applies per-character confusion, dropping, and swapping (including colon loss, which breaks label regexes). At that noise level the detector achieves F1 0.969, which motivated the suggest-and-confirm UX: boundaries are offered to the user for review rather than applied silently.

Uwagi metodologiczne

Pytania dotyczące metodologii lub wyników: hello@synairo.com