come funziona l'ocr
Come l'OCR trasforma una scansione in testo
L'OCR non è un'operazione. È una catena di cinque, e quasi ogni risultato deludente si può ricondurre a quale fase è andata storta.
01
Fase uno: ripulire l'immagine
Il riconoscimento lavora sulle forme, quindi tutto ciò che le distorce deve sparire per primo. La pagina viene raddrizzata — una scansione è di rado in squadra, e una rotazione di due gradi basta a sbavare la ricerca delle righe che viene dopo. Poi viene binarizzata: ogni pixel diventa bianco o nero, con la soglia scelta in modo adattivo perché una pagina più chiara su un bordo che sull'altro non perda metà del testo.
Poi la rimozione dei granelli toglie le macchioline isolate di rumore, che altrimenti verrebbero riconosciute come punti e virgole.
Questa fase è il motivo per cui la qualità della scansione domina l'accuratezza dell'OCR molto più del riconoscitore. Un'ombra sulla pagina manda in crisi la sogliatura, e una pagina incurvata da un libro rilegato non si può raddrizzare perché la distorsione non è una rotazione.
02
Fase due: capire l'impaginato
Il motore trova le componenti connesse — tratti contigui di pixel neri — e le raggruppa. Componenti vicine su una linea di base condivisa diventano una parola; parole in fila diventano una riga; righe impilate con spaziatura costante diventano un blocco di testo. Ampi corridoi bianchi dividono la pagina in colonne.
È anche qui che immagini, filetti e tabelle vengono individuati e messi da parte, così al riconoscitore non si chiede di leggere una fotografia come se fosse testo.
L'analisi dell'impaginato decide l'ordine di lettura, e l'ordine di lettura è ciò che la maggior parte delle persone nota quando fallisce. Un notiziario con una citazione in rilievo in mezzo a una colonna, o una fattura in cui i totali stanno in un riquadro flottante, è dove un motore tarato su una pagina di prosa comincia a produrre testo in un ordine che nessuno ha scritto.
03
Fase tre: riconoscere i caratteri
L'OCR di una volta confrontava la forma di ogni carattere con una libreria di modelli, caratteristica per caratteristica: contare i buchi, trovare gli incroci dei tratti, misurare le proporzioni. Era veloce, fragile e richiedeva un insieme di modelli distinto per ogni carattere tipografico.
I motori moderni fanno passare una rete neurale sull'intera riga — tipicamente una LSTM, che legge una sequenza di sottili fette verticali da sinistra a destra ed emette una sequenza di caratteri. Questo conta perché elimina la necessità di segmentare i caratteri prima di riconoscerli. Decidere dove finisce una lettera e comincia la successiva è di per sé difficile: `rn` e `m` sono quasi identici a bassa risoluzione, e lettere che si toccano in un font stretto non hanno alcun varco dove tagliare. Un modello di sequenza aggira il problema semplicemente non facendo mai quel taglio.
Ogni carattere esce con un punteggio di confidenza, che è ciò che un buon strumento di OCR espone e ciò che la fase successiva usa.
04
Fase quattro: usare la lingua per correggere ciò che la vista ha sbagliato
Il riconoscitore vede forme e nient'altro, quindi restituirà con sicurezza `l\/lanager`, `0ffice` o `rnoderno`. Un dizionario e un modello di sequenza di caratteri intercettano questi casi: il motore sa che in italiano `rn` a inizio parola è rarissimo mentre `m` è comune, e sa che `moderno` è una parola mentre `rnoderno` non lo è.
È per questo che impostare la lingua giusta conta tanto, ed è la singola regolazione più efficace a disposizione. Un motore impostato sull'inglese che legge una pagina italiana ha un dizionario che combatte ogni accento. Ed è anche per questo che nomi propri, codici articolo, numeri di serie e indirizzi sono le cose meno accurate di qualsiasi pagina — sono esattamente le stringhe con cui il modello linguistico non può aiutare, e a volte le corregge attivamente in qualcosa di sbagliato.
05
Fase cinque: riscriverlo in modo invisibile
Ecco la parte che fa funzionare un PDF ricercabile, ed è un trucco davvero elegante.
Il PDF ha un operatore per la modalità di resa del testo, `Tr`. La modalità 0 riempie i glifi normalmente. La modalità 3 non disegna nulla — il testo viene posato sulla pagina, occupa la sua posizione ed è completamente invisibile.
Quindi l'uscita dell'OCR viene scritta nella pagina come testo vero in modalità 3, posizionato in modo che ogni parola riconosciuta stia esattamente sopra i pixel da cui proviene, con l'immagine scansionata originale ancora disegnata sotto. La pagina appare precisamente com'era prima. Ma la ricerca trova le parole, la selezione le evidenzia nei punti giusti, la copia restituisce caratteri veri e un lettore di schermo può leggere il documento ad alta voce.
È per questo che una scansione ricercabile è appena più grande della scansione da cui viene: lo strato di testo aggiunto è di qualche kilobyte contro megabyte di immagine. Ed è per questo che selezionare il testo su una scansione passata all'OCR a volte evidenzia un rettangolo leggermente sbagliato — la parola invisibile è posizionata secondo la stima del riconoscitore su dove fossero i pixel.
- L'immagine resta
- Conservi l'aspetto esatto della scansione originale. Nulla viene ridisegnato.
- Il testo è vero
- Ricerca, copia, selezione e lettori di schermo funzionano tutti su di esso.
- Gli errori restano nascosti
- Una parola riconosciuta male è invisibile, quindi la pagina non sembra mai sbagliata — semplicemente non viene trovata dalla ricerca.
- La dimensione cambia appena
- Kilobyte di testo contro megabyte di immagine.