Benchmark di precisione

Aggiornamento motore OCR: PP-OCRv5 → PP-OCRv6

Misurato il 2026-07-09 su una GPU RTX 3090 locale con l'immagine di produzione (paddleocr==3.7.0, CUDA 12.9). Oggetti: un documento fotografato reale in HEIC da 24 MP (testo polacco, riferimento trascritto da una persona) e i PDF di esempio di fatture/ricevute del repository (riferimento pdftotext). La valutazione usa richiamo e precisione di multinsieme indipendenti dall'ordine.

La configurazione distribuita è PP-OCRv6 medium con text_det_box_thresh=0.5. La soglia più bassa per i riquadri recupera linee deboli nelle aree con riflessi o prospettiva delle foto (+20 punti di richiamo delle parole), senza regressioni sulle pagine pulite sottoposte a rendering.

Metrica PP-OCRv5 (precedente) PP-OCRv6 medium + box_thresh 0.5 (attuale)
Richiamo parole (foto fotocamera) 0.670 0.865 (+29 %)
Richiamo diacritici polacchi (foto fotocamera) 0.562 0.775 (+38 %)
Precisione parole (foto fotocamera) 0.986 0.955
Richiamo numerico (ricevuta) 0.818 1.000 (+22 %)
Fattura stampata densa (richiamo/precisione parole) 1.000 / 1.000 1.000 / 1.000
Latenza GPU a caldo (RTX 3090, pagina densa) ~0.55 s ~1.13 s

Il richiamo delle parole sulle pagine stampate sottoposte a rendering (PDF di fatture e ricevute) è 1,000 in entrambe le versioni del motore: il miglioramento è concentrato sulle foto, in cui prospettiva, riflessi e compressione mettono alla prova il rilevatore. Il richiamo numerico (importi, date, identificatori) è l'indicatore più vicino all'accuratezza dell'estrazione dei campi, poiché i campi vengono associati a questi token.

Motore fotografico: pre-elaborazione documenti fotocamera

Misurato il 2026-07-09 (stesso hardware e immagine del benchmark del motore OCR). Il motore fotografico applica il raddrizzamento geometrico e la classificazione dell'orientamento ai caricamenti dalla fotocamera prima dell'OCR. Si è scelto di abilitarlo solo per i caricamenti IMAGE: il raddrizzamento applicato a pagine già piane e sottoposte a rendering causa una regressione del richiamo delle parole da 1,000 a 0,635, distorcendo i pixel allineati.

Metrica Senza pre-elaborazione (riferimento) Con raddrizzamento (caricamenti fotocamera)
Richiamo parole (foto fotocamera) 0.865 0.921 (+6.6 %)
Richiamo diacritici polacchi (foto fotocamera) 0.775 0.854 (+10.2 %)
Precisione parole (foto fotocamera) 0.955 0.961
Richiamo parole. Pagina densa stampata 1.000 0.635 (regressione. Solo per foto per design)

Il miglioramento dovuto al raddrizzamento è reale, ma richiede che il servizio OCR restituisca l'immagine della pagina trasformata, affinché i riquadri delimitatori siano disegnati nello spazio di coordinate corretto, cioè trasformato. La limitazione alle sole foto evita la regressione sulle pagine dense. La funzionalità è controllata dalla variabile d'ambiente OCR_PHOTO_TRANSFORMS_ENABLED.

Rilevamento suddivisione PDF multi-fattura

Misurato il 2026-07-21 con il set di valutazione sintetico etichettato generato da scripts/gen_split_eval.py e valutato da scripts/eval_doc_split.py. Il rilevatore usa il livello di testo incorporato (pdftotext) per individuare segnali di confine tra pagine, quali intestazioni delle fatture, schemi di etichette di data e parole chiave del tipo di documento, prima di qualsiasi chiamata OCR o LLM; pertanto il rilevamento dei confini non comporta costi.

Condizione Precisione dei confini Richiamo dei confini F1 Documenti valutati
Testo pulito (senza rumore OCR) 1.000 1.000 1.000 660
Rumore OCR a livello di caratteri: 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.

Note metodologiche

Domande sulla metodologia o sui risultati: hello@synairo.com