Come eseguire l'OCR con Tesseract, OpenCV e Python PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Come eseguire l'OCR con Tesseract, OpenCV e Python

Come eseguire l'OCR con Tesseract, OpenCV e Python

In questo post del blog, cercheremo di spiegare la tecnologia alla base del motore Tesseract più utilizzato, che è stato aggiornato con le ultime conoscenze ricercate nel riconoscimento ottico dei caratteri. Questo articolo servirà anche come guida / tutorial su come implementare OCR in Python usando il motore Tesseract. Cammineremo attraverso i seguenti moduli:

  • Caratteristiche OCR di Tesseract
  • Preelaborazione per OCR utilizzando OpenCV
  • Esecuzione di Tesseract con CLI e Python
  • Limitazioni del motore Tesseract

Sommario

Introduzione

OC = Riconoscimento ottico dei caratteri. In altre parole, i sistemi OCR trasformano un'immagine di testo bidimensionale, che potrebbe contenere testo stampato o scritto a mano dalla sua rappresentazione dell'immagine in testo leggibile dalla macchina. L'OCR come processo consiste generalmente in diversi sottoprocessi da eseguire nel modo più accurato possibile. I sottoprocessi sono:

  • Preelaborazione dell'immagine
  • Localizzazione del testo
  • Segmentazione del personaggio
  • Riconoscimento dei personaggi
  • Post-processing

I sotto-processi nella lista sopra ovviamente possono differire, ma questi sono approssimativamente passi necessari per avvicinarsi al riconoscimento automatico dei caratteri. Nel software OCR, l'obiettivo principale è identificare e catturare tutte le parole uniche usando lingue diverse da caratteri di testo scritto.

Per quasi due decenni, i sistemi di riconoscimento ottico dei caratteri sono stati ampiamente utilizzati per fornire l'immissione di testo automatizzata nei sistemi computerizzati. Eppure, in tutto questo tempo, i sistemi OCR convenzionali (come OCR zonale) non hanno mai superato la loro incapacità di leggere più di una manciata di caratteri tipografici e formati di pagina. I caratteri a spaziatura proporzionale (che includono praticamente tutte le copie stampate), i caratteri per stampanti laser e persino molti caratteri per macchine da scrivere non proporzionali sono rimasti fuori dalla portata di questi sistemi. Di conseguenza, l'OCR convenzionale non ha mai ottenuto più di un impatto marginale sul numero totale di documenti che necessitano di conversione in formato digitale.

Come eseguire l'OCR con Tesseract, OpenCV e Python
Processo di riconoscimento ottico dei caratteri (per gentile concessione)

I motori OCR di prossima generazione affrontano davvero bene questi problemi sopra menzionati, utilizzando le ultime ricerche nel campo del deep learning. Sfruttando la combinazione di modelli profondi e enormi set di dati pubblicamente disponibili, i modelli raggiungono accuratezze all'avanguardia su determinate attività. Oggi è anche possibile generare dati sintetici con caratteri diversi che utilizzano reti contraddittorie generative e pochi altri approcci generativi.

Il riconoscimento ottico dei caratteri rimane a problema impegnativo quando il testo è presente in ambienti non vincolati, come scene naturali, a causa di distorsioni geometriche, sfondi complessi e diversi tipi di carattere. La tecnologia ha ancora un immenso potenziale a causa dei vari casi d'uso di OCR basato sull'apprendimento profondo


Hai un problema con l'OCR in mente? Vuoi ridurre i costi di immissione dei dati della tua organizzazione? Vai a nanonet e costruire modelli OCR su estrarre il testo dalle immagini or estrarre i dati dai PDF con intelligenza artificiale PDF OCR!


Strumenti OCR open source

Ci sono molti riconoscimento ottico dei caratteri software disponibile. Non ho trovato alcun confronto di qualità tra loro, ma scriverò su alcuni di essi che sembrano essere i più favorevoli agli sviluppatori.

Tesseract - un motore OCR open source che ha guadagnato popolarità tra gli sviluppatori OCR. Anche se a volte può essere doloroso implementare e modificare, non c'erano troppe alternative OCR gratuite e potenti sul mercato per il tempo più lungo. Tesseract ha iniziato come Ph.D. progetto di ricerca in HP Labs, Bristol. Ha guadagnato popolarità ed è stato sviluppato da HP tra il 1984 e il 1994. Nel 2005 HP ha rilasciato Tesseract come software open-source. Dal 2006 è sviluppato da Google.

Come eseguire l'OCR con Tesseract, OpenCV e Python
confronto delle tendenze di Google per diversi strumenti OCR open source

OCropus - OCRopus è un sistema OCR open source che consente una facile valutazione e riutilizzo dei componenti OCR da parte di ricercatori e aziende. Una raccolta di programmi di analisi dei documenti, non un sistema OCR chiavi in ​​mano. Per applicarlo ai tuoi documenti, potresti dover eseguire una pre-elaborazione delle immagini e possibilmente formare nuovi modelli. Oltre agli stessi script di riconoscimento, ci sono diversi script per l'editing e la correzione della verità di base, la misurazione dei tassi di errore, la determinazione di matrici di confusione che sono facili da usare e modificare.


Oculare - Ocular funziona meglio sui documenti stampati utilizzando una pressa a mano, compresi quelli scritti in più lingue. Funziona utilizzando la riga di comando. È un sistema OCR storico all'avanguardia. Le sue caratteristiche principali sono:

  • Apprendimento senza supervisione di caratteri sconosciuti: richiede solo immagini di documenti e un corpus di testo.
  • Capacità di gestire documenti rumorosi: inchiostrazione incoerente, spaziatura, allineamento verticale
  • Supporto per documenti multilingue, compresi quelli che hanno un considerevole cambio di codice a livello di parola.
  • Apprendimento senza supervisione dei modelli di variazione ortografica, inclusi ortografia arcaica e stenografia della stampante.
  • Trascrizione simultanea e congiunta in entrambe le forme diplomatica (letterale) e normalizzata.


SwiftOCR - Citerò anche il motore OCR scritto in Swift poiché è in corso un enorme sviluppo nell'avanzamento dell'uso di Swift come linguaggio di programmazione di sviluppo utilizzato per l'apprendimento profondo. Check-out blog per saperne di più sul perché. SwiftOCR è una libreria OCR veloce e semplice che utilizza reti neurali per il riconoscimento delle immagini. SwiftOCR afferma che il loro motore supera la nota libreria Tessaract.

In questo post del blog, inseriremo concentrarsi su OCR Tesseract e scopri di più su come funziona e come viene utilizzato.


Tesseract OCR

Tesseract è un motore di riconoscimento del testo (OCR) open source, disponibile con licenza Apache 2.0. Può essere utilizzato direttamente o (per i programmatori) utilizzando un'API per estrarre il testo stampato dalle immagini. Supporta un'ampia varietà di lingue. Tesseract non ha una GUI integrata, ma ce ne sono diverse disponibili da Pagina 3a parte. Tesseract è compatibile con molti linguaggi di programmazione e framework tramite wrapper che possono essere trovati qui. Può essere utilizzato con l'analisi del layout esistente per riconoscere il testo all'interno di un documento di grandi dimensioni oppure può essere utilizzato insieme a un rilevatore di testo esterno per riconoscere il testo da un'immagine di una singola riga di testo.

Come eseguire l'OCR con Tesseract, OpenCV e Python
Flusso del processo OCR per creare API con Tesseract da a post sul blog

Tesseract 4.00 include un nuovo sottosistema di rete neurale configurato come riconoscimento della riga di testo. Ha le sue origini in LSTM basato su Python di OCRopus implementazione ma è stato riprogettato per Tesseract in C ++. Il sistema di rete neurale in Tesseract precede TensorFlow ma è compatibile con esso, poiché esiste un linguaggio di descrizione della rete chiamato Variable Graph Specification Language (VGSL), disponibile anche per TensorFlow.

Per riconoscere un'immagine contenente un singolo carattere, in genere utilizziamo una rete neurale convoluzionale (CNN). Il testo di lunghezza arbitraria è una sequenza di caratteri e tali problemi vengono risolti utilizzando RNN e LSTM è una forma popolare di RNN. Leggi questo post per saperne di più LSTM.


Tecnologia: come funziona

Gli LSTM sono bravi nell'apprendimento delle sequenze ma rallentano molto quando il numero di stati è troppo grande. Ci sono risultati empirici che suggeriscono che è meglio chiedere a un LSTM di apprendere una lunga sequenza piuttosto che una breve sequenza di molte classi. Tesseract si è sviluppato dal modello OCRopus in Python che era un fork di un LSMT in C ++, chiamato CLSTM. CLSTM è un'implementazione del modello di rete neurale ricorrente LSTM in C ++, che utilizza la libreria Eigen per i calcoli numerici.

Come eseguire l'OCR con Tesseract, OpenCV e Python
Processo OCR di Tesseract 3 da carta

Legacy Tesseract 3.x dipendeva dal processo in più fasi in cui possiamo differenziare i passaggi:

  • Ricerca di parole
  • Linea di ricerca
  • Classificazione del personaggio

La ricerca delle parole è stata effettuata organizzando le righe di testo in BLOB e le linee e le regioni vengono analizzate per intonazione fissa o testo proporzionale. Le righe di testo sono suddivise in parole in modo diverso a seconda del tipo di spaziatura dei caratteri. Il riconoscimento procede quindi come un processo a due passaggi. Nel primo passaggio, viene effettuato un tentativo di riconoscere ogni parola a turno. Ogni parola soddisfacente viene passata a un classificatore adattivo come dati di allenamento. Il classificatore adattivo ha quindi la possibilità di riconoscere in modo più accurato il testo nella parte inferiore della pagina.

La modernizzazione dello strumento Tesseract è stata uno sforzo per la pulizia del codice e l'aggiunta di un nuovo modello LSTM. L'immagine di input viene elaborata in riquadri (rettangolo) riga per riga alimentando il modello LSTM e fornendo output. Nell'immagine qui sotto possiamo visualizzare come funziona.

Come eseguire l'OCR con Tesseract, OpenCV e Python
Come Tesseract utilizza il modello LSTM presentazione

Dopo aver aggiunto un nuovo strumento di allenamento e addestrato il modello con molti dati e caratteri, Tesseract ottiene prestazioni migliori. Tuttavia, non abbastanza buono per lavorare su testo scritto a mano e caratteri strani. È possibile mettere a punto o riqualificare gli strati superiori per la sperimentazione.


Installazione di Tesseract

L'installazione di tesseract su Windows è facile con i binari precompilati trovati qui. Non dimenticare di modificare la variabile di ambiente "percorso" e aggiungere il percorso tesseract. Per l'installazione su Linux o Mac con cui è installato pochi comandi.

Dopo l'installazione verificare che tutto funzioni digitando command nel terminale o cmd:

$ tesseract --version

E vedrai l'output simile a:

tesseract 4.0.0
leptonica-1.76.0
libjpeg 9c : libpng 1.6.34 : libtiff 4.0.9 : zlib 1.2.8
Found AVX2
Found AVX
Found SSE

Dopo di ciò puoi installare il wrapper python per tesseract usando pip.
$ pip install pytesseract

La libreria Tesseract viene fornita con un pratico strumento da riga di comando chiamato tesseract. Possiamo usare questo strumento per eseguire l'OCR sulle immagini e l'output viene archiviato in un file di testo. Se vogliamo integrare Tesseract nel nostro codice C ++ o Python, utilizzeremo l'API di Tesseract.


Esecuzione di Tesseract con CLI

Chiama il motore di Tesseract sull'immagine con percorso_immagine e converti l'immagine in testo, scritto riga per riga nel prompt dei comandi digitando quanto segue:

$ tesseract image_path stdout

Per scrivere il testo di output in un file:

$ tesseract image_path text_result.txt

Per specificare il nome del modello di lingua, scrivere dopo il collegamento alla lingua -l flag, per impostazione predefinita ci vuole la lingua inglese:

$ tesseract image_path text_result.txt -l eng

Per impostazione predefinita, Tesseract prevede una pagina di testo quando segmenta un'immagine. Se stai solo cercando di eseguire l'OCR in una piccola regione, prova una modalità di segmentazione diversa, utilizzando il –Psm discussione. Sono disponibili 14 modalità che è possibile trovare qui. Per impostazione predefinita, Tesseract automatizza completamente la segmentazione della pagina ma non esegue l'orientamento e il rilevamento degli script. Per specificare il parametro, digitare quanto segue:

$ tesseract image_path text_result.txt -l eng --psm 6

C'è anche un altro argomento importante, la modalità motore OCR (oem). Tesseract 4 ha due motori OCR: il motore Legacy Tesseract e il motore LSTM. Sono disponibili quattro modalità di funzionamento scelte utilizzando l'opzione –oem.
0 Solo motore legacy.
1 Solo motore LSTM per reti neurali.
2 motori Legacy + LSTM.
3 Predefinito, in base a ciò che è disponibile.

Come eseguire l'OCR con Tesseract, OpenCV e Python
Risultato del motore OCR Tesseract

OCR con Pytesseract e OpenCV

Pytesseract è un wrapper per il motore Tesseract-OCR. È anche utile come script di invocazione autonomo per tesseract, in quanto può leggere tutti i tipi di immagine supportati dalle librerie di imaging Pillow e Leptonica, tra cui jpeg, png, gif, bmp, tiff e altri. Maggiori informazioni sull'approccio Python leggere qui. Il codice per questo tutorial può essere trovato in questo deposito.

import cv2 import pytesseract img = cv2.imread('image.jpg') # Adding custom options
custom_config = r'--oem 3 --psm 6'
pytesseract.image_to_string(img, config=custom_config)

Preelaborazione per Tesseract

Per evitare tutti i modi in cui la precisione dell'output di tesseract può diminuire, è necessario assicurarsi che l'immagine sia appropriata pre-elaborati.

Ciò include riscalamento, binarizzazione, rimozione del rumore, disallineamento, ecc.

Per preelaborare l'immagine per OCR, utilizzare una delle seguenti funzioni di Python o seguire le istruzioni Documentazione OpenCV.

import cv2
import numpy as np img = cv2.imread('image.jpg') # get grayscale image
def get_grayscale(image): return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # noise removal
def remove_noise(image): return cv2.medianBlur(image,5) #thresholding
def thresholding(image): return cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1] #dilation
def dilate(image): kernel = np.ones((5,5),np.uint8) return cv2.dilate(image, kernel, iterations = 1) #erosion
def erode(image): kernel = np.ones((5,5),np.uint8) return cv2.erode(image, kernel, iterations = 1) #opening - erosion followed by dilation
def opening(image): kernel = np.ones((5,5),np.uint8) return cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel) #canny edge detection
def canny(image): return cv2.Canny(image, 100, 200) #skew correction
def deskew(image): coords = np.column_stack(np.where(image > 0)) angle = cv2.minAreaRect(coords)[-1] if angle < -45: angle = -(90 + angle) else: angle = -angle (h, w) = image.shape[:2] center = (w // 2, h // 2) M = cv2.getRotationMatrix2D(center, angle, 1.0) rotated = cv2.warpAffine(image, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE) return rotated #template matching
def match_template(image, template): return cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED) 

Lavoriamo con un esempio per vedere meglio le cose. Ecco come appare la nostra immagine originale –

Come eseguire l'OCR con Tesseract, OpenCV e Python
Il sistema di scrittura Aurebesh

Dopo la preelaborazione con il seguente codice

image = cv2.imread('aurebesh.jpg') gray = get_grayscale(image)
thresh = thresholding(gray)
opening = opening(gray)
canny = canny(gray)

e tracciando le immagini risultanti, otteniamo i seguenti risultati.

Come eseguire l'OCR con Tesseract, OpenCV e Python
L'immagine dopo la preelaborazione

L'output per l'immagine originale è simile a questo:

GALACTIC BASIC
(AUREBESH) RE HFVMEVEIiZwoyv Ze
ABC DE F GH I JK LM
N—0- PQ RST Uv WX
2 | Ff 8 G& Pf fF § 5 op 7
ee
5, jf FF Ty ee ee
=
334 477 OED

Ecco come appare l'output per diverse immagini preelaborate:

Immagine del bordo Canny (non così buona) -

CAE Cn Cae AS
(AUREBESE) EA Na
oe SS
(Ne CI (ENE
a, ee oe ea
2
a a A: rc
|, |
a
Sear eo/e ecm emclomt Cia cuoomct mi im

Immagine con soglia -

GALACTIC BASIC
(AVREBESH)
RS 7FVMeEVEi1iFf o£
A B C D EF GH IJ K LM
AOoder7Nnvroroava
N O P Q@R S$ TU VW XK Y¥ Z
7 ee For 8 Ro Pf F Boao om #
0 12 3 4 5 6 7 8 9 , . !
>» 1kr7 @ by FEN
2? S$ ( Por Foy of ee
ASGSANDIE
CH AE EO KH NG OO SH TH

Immagine di apertura -

GALACTIC BASIC
(AUREZEBELSH)
KEE VTMEUOU EB iw oN es
A BC D EF F @ H | J K LT Ww
AOGdrcrT7WTt HYOAVa4
WO P Q R BS T U VW WK y Z
i J
Oo 1 2 3 46 8 7 SC Ps,
VY ir- -rp,ptUuY?
a a a
AGoOAnNnoOID
CH AE BO KH ®@ OO SH TH


Ottenere caselle attorno al testo

Utilizzando Pytesseract, è possibile ottenere le informazioni sul riquadro di delimitazione per i risultati OCR utilizzando quanto segue codice.

Lo script seguente fornisce informazioni sulla casella di delimitazione per ciascun carattere rilevato da tesseract durante l'OCR.

import cv2
import pytesseract img = cv2.imread('image.jpg') h, w, c = img.shape
boxes = pytesseract.image_to_boxes(img) for b in boxes.splitlines(): b = b.split(' ') img = cv2.rectangle(img, (int(b[1]), h - int(b[2])), (int(b[3]), h - int(b[4])), (0, 255, 0), 2) cv2.imshow('img', img)
cv2.waitKey(0)

Se vuoi caselle attorno alle parole anziché ai caratteri, la funzione image_to_data tornerà utile. Puoi usare il image_to_data funzione con il tipo di output specificato con pytesseract Output.

Come eseguire l'OCR con Tesseract, OpenCV e Python

Hai in mente un problema OCR? Vuoi digitalizzare fatture, PDF o targhe? Vai a nanonet e costruisci modelli OCR gratis!


Useremo l'immagine della fattura di esempio sopra per testare i nostri risultati tesseract.

import cv2
import pytesseract
from pytesseract import Output img = cv2.imread('invoice-sample.jpg') d = pytesseract.image_to_data(img, output_type=Output.DICT)
print(d.keys())

Questo dovrebbe darti il ​​seguente output:
dict_keys(['level', 'page_num', 'block_num', 'par_num', 'line_num', 'word_num', 'left', 'top', 'width', 'height', 'conf', 'text'])

Usando questo dizionario, possiamo ottenere ogni parola rilevata, le informazioni del loro riquadro di delimitazione, il testo in esse contenuto e i punteggi di confidenza per ciascuno.

Puoi tracciare le caselle utilizzando il codice qui sotto -

n_boxes = len(d['text'])
for i in range(n_boxes): if int(d['conf'][i]) > 60: (x, y, w, h) = (d['left'][i], d['top'][i], d['width'][i], d['height'][i]) img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2) cv2.imshow('img', img)
cv2.waitKey(0)

Ecco come sarebbe per l'immagine di una fattura di esempio.

Come eseguire l'OCR con Tesseract, OpenCV e Python


Corrispondenza del modello di testo

Prendi l'esempio di come cercare dove si trova una data in un'immagine. Qui il nostro modello sarà un modello di espressione regolare che abbineremo ai nostri risultati OCR per trovare le caselle di delimitazione appropriate. Useremo il regex modulo e il image_to_data funzione per questo.

import re
import cv2
import pytesseract
from pytesseract import Output img = cv2.imread('invoice-sample.jpg')
d = pytesseract.image_to_data(img, output_type=Output.DICT)
keys = list(d.keys()) date_pattern = '^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(19|20)dd$' n_boxes = len(d['text'])
for i in range(n_boxes): if int(d['conf'][i]) > 60: if re.match(date_pattern, d['text'][i]): (x, y, w, h) = (d['left'][i], d['top'][i], d['width'][i], d['height'][i]) img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2) cv2.imshow('img', img)
cv2.waitKey(0)

Come previsto, otteniamo una casella intorno alla data della fattura nell'immagine.

Come eseguire l'OCR con Tesseract, OpenCV e Python

Modalità di segmentazione della pagina

Esistono diversi modi per analizzare una pagina di testo. Il tesseract api offre diverse modalità di segmentazione della pagina se si desidera eseguire l'OCR solo su una piccola regione o con orientamenti diversi, ecc.

Ecco un elenco delle modalità di segmentazione della pagina supportate da tesseract:

0 Solo orientamento e rilevamento script (OSD).
1 Segmentazione automatica della pagina con OSD.
2 Segmentazione automatica della pagina, ma nessun OSD o OCR.
3 Segmentazione della pagina completamente automatica, ma nessun OSD. (Predefinito)
4 Assumi una singola colonna di testo di dimensioni variabili.
5 Assumi un singolo blocco uniforme di testo allineato verticalmente.
6 Assumi un unico blocco di testo uniforme.
7 Considera l'immagine come una singola riga di testo.
8 Considera l'immagine come una singola parola.
9 Tratta l'immagine come una singola parola in un cerchio.
10 Considera l'immagine come un singolo carattere.
11 Testo sparso. Trova più testo possibile senza un ordine particolare.
12 Testo sparso con OSD.
13 Linea grezza. Tratta l'immagine come una singola riga di testo, ignorando gli hack che sono specifici di Tesseract.

Per modificare la modalità di segmentazione della pagina, modificare il --psm argomento nella stringa di configurazione personalizzata per uno dei codici di modalità sopra menzionati.


Rileva orientamento e script

Puoi rilevare l'orientamento del testo nella tua immagine e anche il copione in cui è scritto. L'immagine seguente -
Come eseguire l'OCR con Tesseract, OpenCV e Python
dopo aver eseguito il codice seguente:

osd = pytesseract.image_to_osd(img)
angle = re.search('(?<=Rotate: )d+', osd).group(0)
script = re.search('(?<=Script: )d+', osd).group(0)
print("angle: ", angle)
print("script: ", script)

stamperà il seguente output.

angle: 90
script: Latin

Rileva solo cifre

Prendi questa immagine per esempio:
Come eseguire l'OCR con Tesseract, OpenCV e Python
Il testo estratto da questa immagine è simile al seguente.

‘Customer name Hallium Energy services
Project NEHINS-HIB-HSA
lavoice no 43876324
Dated 17%h Nov2018
Pono 76496234

È possibile riconoscere solo le cifre modificando la configurazione come segue

custom_config = r'--oem 3 --psm 6 outputbase digits'
print(pytesseract.image_to_string(img, config=custom_config))

L'output sarà simile a questo.

-- . 43876324
172018
0 76496234

Personaggi autorizzati

Supponi di voler rilevare solo determinati caratteri dall'immagine data e di ignorare il resto. Puoi specificare la tua whitelist di caratteri (qui, abbiamo usato tutti i caratteri minuscoli solo dalla a alla z) usando la seguente configurazione.

custom_config = r'-c tessedit_char_whitelist=abcdefghijklmnopqrstuvwxyz --psm 6'
print(pytesseract.image_to_string(img, config=custom_config))

Produzione -

customername
roject
tnvoleeno
ated alliumenergyservices
e
thovo

Personaggi nella lista nera

Se sei sicuro che alcuni caratteri o espressioni non compariranno sicuramente nel tuo testo (altrimenti l'OCR restituirà un testo errato al posto dei caratteri nella lista nera), puoi inserire nella lista nera quei caratteri usando la seguente configurazione.

custom_config = r'-c tessedit_char_blacklist=0123456789 --psm 6'
pytesseract.image_to_string(img, config=custom_config)

Produzione -

Customer name Hallium Energy services
Project NEHINS-HIB-HSA
lavoice no
Dated %h Nov%
Pono

Rileva in più lingue

Puoi controllare le lingue disponibili digitando questo nel terminale

$ tesseract --list-langs

Per scaricare tesseract per un linguaggio specifico utilizzare

$ sudo apt-get install tesseract-ocr-LANG

dove LANG è il codice di tre lettere per la lingua di cui hai bisogno. Puoi scoprire i valori LANG qui.

È possibile scaricare il .traindata file per la lingua di cui hai bisogno qui e posizionalo dentro $TESSDATA_PREFIX directory (dovrebbe essere la stessa di dove tessdata directory è installata) e dovrebbe essere pronto per l'uso.

Note: - Solo le lingue con estensione .traineddata il formato del file è supportato da tesseract.

Per specificare la lingua in cui è necessario l'output OCR, utilizzare il -l LANG argomento nella configurazione in cui LANG è il codice di 3 lettere per la lingua che si desidera utilizzare.

custom_config = r'-l eng --psm 6'
pytesseract.image_to_string(img, config=custom_config)

Prendi questa immagine per esempio:
Come eseguire l'OCR con Tesseract, OpenCV e Python
Puoi lavorare con più lingue modificando il parametro LANG come tale -

custom_config = r'-l grc+tha+eng --psm 6'
pytesseract.image_to_string(img, config=custom_config)

e otterrai il seguente output:

Here’s some Greek: Οδιο διστα ιμπεδιτ φιμ ει, αδ φελ αβχορρεανθ ελωκυενθιαμ, εξ εσε εξερσι γυ-
βεργρεν ηας. Ατ μει σολετ σριπτορεμ. ἴυς αλια λαβωρε θε. Σιθ κυωτ νυσκυαμ
τρασυνδια αν, ὠμνιυμ ελιγενδι τιν πρι. Παρτεμ φερθερεμ συσιπιαντὺυρ εξ ιυς,ναμ
%0790 แ ร เง ๑ ๕ 80 ๕ 6 ๑ อ 06 ส 0 เง น อ ๓ , πρω πρωπριαε σαεφολα ιδ. Ατ πρι δολορ νυ-
σκυαμ. 6 Thai Here’s some Thai: ν᾿ ค อ ร ั ป ซั น จ ุ ้ ย โป ร ด ิ ว เซ อ ร ์ ส ถา ป ั ต ย ์ จ ๊ า บ แจ ็ ก พ ็ อ ต ม ้ า ห ิ น อ ่ อ น ซา ก ุ ร ะ ค ั น ถ ธ ุ ร ะ ฟิ ด ส ต า ร ์ ท ง ี ้ บ อ ย
ค อ ต อ ื ่ ม แป ร ั ส ั ง โฆ ค ํ า ส า ป แฟ น ซี ศิ ล ป ว ั ฒ น ธร ร ม ไฟ ล ท ์ จ ิ ๊ ก โก ๋ ก ั บ ด ั ก เจ ล พ ล ็ อ ต ม า ม ่ า ซา ก ุ ร ะ ด ี ล เล อ
ร ์ ซี น ด ั ม พ ์ แฮ ป ป ี ้ เอ ๊ ้ า ะ อ ุ ร ั ง ค ธา ต ุ ซิ ม ฟิ น ิ ก ซ์ เท ร ล เล ่ อ ร ์ อ ว อ ร ์ ด แค น ย อ น ส ม า พ ั น ธ์ ค ร ั ว ซอ ง ฮั ม อ า
ข่ า เอ ็ ก ซ์ เพ ร ส

Note: - La lingua specificata per prima in -l Il parametro è la lingua principale.

Sfortunatamente tesseract non ha una funzione per rilevare automaticamente la lingua del testo in un'immagine. Una soluzione alternativa è fornita da un altro modulo Python chiamato langdetect che può essere installato tramite pip.

$ pip install langdetect

Questo modulo, di nuovo, non rileva la lingua del testo usando un'immagine ma ha bisogno di input di stringa per rilevare la lingua da. Il modo migliore per farlo è prima di tutto usando tesseract per ottenere il testo OCR in qualunque lingua tu possa sentire ci sia, usando langdetect per trovare quali lingue sono incluse nel testo OCR e quindi eseguire nuovamente OCR con le lingue trovate.

Supponiamo di avere un testo che pensavamo fosse in inglese e portoghese.

custom_config = r'-l eng+por --psm 6'
txt = pytesseract.image_to_string(img, config=custom_config) from langdetect import detect_langs
detect_langs(txt)

Ciò dovrebbe generare un elenco di lingue nel testo e le loro probabilità.

[en:0.714282468983554, es:0.2857145605644145]

I codici lingua utilizzati da langdetect seguire i codici ISO 639-1. Per confrontare, si prega di controllare questo ed questo. Scopriamo invece che la lingua utilizzata nel testo è inglese e spagnolo.

Otteniamo di nuovo il testo cambiando la configurazione in

custom_config = r'-l eng+spa --psm 6'
txt = pytesseract.image_to_string(img, config=custom_config)

Note: – Tesseract funziona male quando, in un'immagine con più lingue, le lingue specificate nella configurazione sono sbagliate o non sono menzionate affatto. Questo può anche fuorviare un po' il modulo langdetect.


Utilizzando tessdata_fast

Se la velocità è una delle maggiori preoccupazioni per te, puoi sostituire i tuoi modelli di linguaggio tessdata con modelli tessdata_fast che sono versioni intere a 8 bit dei modelli tessdata.

Secondo il tessdata_fast github -

Questo repository contiene versioni intere veloci di modelli addestrati per Motore OCR Tesseract Open Source.

Questi modelli funzionano solo con il motore OCR LSTM di Tesseract 4.

  • Questi sono un compromesso velocità/precisione su ciò che offriva il miglior "rapporto qualità-prezzo" in termini di velocità e precisione.
  • Per alcune lingue, questo è ancora il migliore, ma per la maggior parte no.
  • La configurazione di rete "miglior rapporto qualità-prezzo" è stata quindi integrata per ulteriore velocità.
  • La maggior parte degli utenti vorrà utilizzare questi file traineddata per eseguire l'OCR e questi verranno spediti come parte delle distribuzioni Linux, ad es. Ubuntu 18.04.
  • Accordatura fine / allenamento incrementale NON essere possibile da questi fast modelli, poiché sono numeri interi a 8 bit.
  • Quando si utilizzano i modelli in questo repository, è supportato solo il nuovo motore OCR basato su LSTM. L'eredità tesseract motore non è supportato con questi file, quindi le modalità OEM di Tesseract '0' e '2' non funzioneranno con loro.

Per utilizzare tessdata_fast modelli invece di tessdata, tutto quello che devi fare è scaricare il tuo tessdata_fast file di dati lingua da qui e inseriscilo nel tuo $TESSDATA_PREFIX directory.


Hai bisogno di digitalizzare documenti, ricevute o fatture ma sei troppo pigro per codificare? Vai a nanonet e costruisci modelli OCR gratis!


Formazione Tesseract su dati personalizzati

Tesseract 4.00 include un nuovo motore di riconoscimento basato sulla rete neurale che offre una precisione significativamente maggiore sulle immagini dei documenti. Le reti neurali richiedono molti più dati di allenamento e si allenano molto più lentamente della base Tesseract. Per le lingue latine, i dati del modello esistente forniti sono stati formati su circa 400000 righe di testo che coprono circa 4500 caratteri.

Per eseguire correttamente l'esercitazione di allenamento LSTM di Tesseract 4.0, è necessario disporre di un'installazione funzionante di Strumenti di allenamento di Tesseract 4 e Tesseract 4 e disporre anche degli script di addestramento e dei file di dati di addestramento richiesti in determinate directory. Visitare repo github per file e strumenti.

Tesseract 4.00 richiede alcuni giorni per un paio di settimane per l'allenamento da zero. Anche con tutti questi nuovi dati di allenamento, quindi ecco alcune opzioni per l'allenamento:

  • Sintonizzare - A partire da un linguaggio addestrato esistente, allenati sui tuoi dati aggiuntivi specifici. Ad esempio formazione su un set di dati scritto a mano e alcuni caratteri aggiuntivi.
  • Tagliare lo strato superiore – dalla rete e riqualificare un nuovo livello superiore utilizzando i nuovi dati. Se la messa a punto non funziona, questa è probabilmente la migliore opzione successiva. L'analogia per cui è utile, prendi come esempio i modelli addestrati sul set di dati ImageNet. L'obiettivo è costruire un classificatore di gatto o cane, i livelli inferiori nel modello sono buoni per l'astrazione di basso livello come angoli, linee orizzontali e verticali, ma i livelli più alti nel modello combinano queste caratteristiche e rilevano orecchie, occhi, naso di gatto o cane e così via. Riqualificando solo i livelli superiori, stai utilizzando le conoscenze dei livelli inferiori e le combini con il tuo nuovo set di dati diverso.
  • Ripeti da zero - Questo è un approccio molto lento a meno che tu non abbia un set di formazione molto rappresentativo e sufficientemente ampio per il tuo problema. La migliore risorsa per la formazione da zero sta seguendo questo repo github.

Una guida su come addestrare i tuoi dati personalizzati e creare .traineddata i file possono essere trovati qui, qui ed qui.

In questo post del blog non tratteremo il codice per la formazione utilizzando Tesseract.

Come eseguire l'OCR con Tesseract, OpenCV e Python

Limitazioni di Tesseract

Tesseract funziona in modo ottimale in presenza di una chiara segmentazione del testo in primo piano dallo sfondo. In pratica, può essere estremamente impegnativo garantire questi tipi di installazione. Esistono diversi motivi per cui potresti non ottenere un output di buona qualità da Tesseract, ad esempio se l'immagine presenta dei disturbi sullo sfondo. Migliore è la qualità dell'immagine (dimensioni, contrasto, lampo), migliore sarà il risultato del riconoscimento. Richiede un po 'di preelaborazione per migliorare i risultati OCR, le immagini devono essere ridimensionate in modo appropriato, avere il maggior contrasto possibile dell'immagine e il testo deve essere allineato orizzontalmente. L'OCR Tesseract è piuttosto potente ma presenta i seguenti limiti.

Limitazioni di Tesseract riassunte nell'elenco.

  • L'OCR non è accurato come alcune soluzioni commerciali disponibili per noi.
  • Non funziona bene con le immagini interessate da artefatti, tra cui occlusione parziale, prospettiva distorta e sfondo complesso.
  • Non è in grado di riconoscere la calligrafia.
  • Potrebbe trovare incomprensibile e riportarlo come output OCR.
  • Se un documento contiene lingue diverse da quelle fornite negli argomenti -l LANG, i risultati potrebbero essere scadenti.
  • Non è sempre bravo ad analizzare l'ordine di lettura naturale dei documenti. Ad esempio, potrebbe non riconoscere che un documento contiene due colonne e potrebbe tentare di unire il testo tra le colonne.
  • Scansioni di scarsa qualità possono produrre OCR di scarsa qualità.
  • Non espone informazioni su ciò a cui appartiene il testo della famiglia di caratteri.


C'è ovviamente un modo migliore, molto più semplice e intuitivo per eseguire attività OCR.


OCR con nanoneti

Come eseguire l'OCR con Tesseract, OpenCV e Python

I API OCR di nanoneti ti permette di costruire facilmente modelli OCR. Non devi preoccuparti di pre-elaborare le tue immagini o preoccuparti di abbinare modelli o costruire motori basati su regole per aumentare l'accuratezza del tuo modello OCR.

Puoi caricare i tuoi dati, annotarli, impostare il modello per l'addestramento e attendere la previsione attraverso un'interfaccia utente basata su browser senza scrivere una singola riga di codice, preoccuparti delle GPU o trovare le architetture giuste per i tuoi modelli di apprendimento profondo. Puoi anche acquisire le risposte JSON di ciascuna previsione per integrarla con i tuoi sistemi e creare app basate su machine learning basate su algoritmi all'avanguardia e una solida infrastruttura.

Utilizzando la GUI: https://app.nanonets.com/

È inoltre possibile utilizzare l'API Nanonets-OCR procedendo come segue: ‌

Passaggio 1: clonare il Repo, installare le dipendenze

git clone https://github.com/NanoNets/nanonets-ocr-sample-python.git
cd nanonets-ocr-sample-python
sudo pip install requests tqdm

Passaggio 2: ottieni la tua chiave API gratuita
Ottieni la tua chiave API gratuita da http://app.nanonets.com/#/keys

Come eseguire l'OCR con Tesseract, OpenCV e Python

Passaggio 3: impostare la chiave API come variabile di ambiente

export NANONETS_API_KEY=YOUR_API_KEY_GOES_HERE

Passaggio 4: creare un nuovo modello

python ./code/create-model.py

Nota: Questo genera un MODEL_ID necessario per il passaggio successivo

Passaggio 5: aggiungere l'ID modello come variabile di ambiente

export NANONETS_MODEL_ID=YOUR_MODEL_ID

Nota: otterrai YOUR_MODEL_ID dal passaggio precedente

Passaggio 6: carica i dati di allenamento
I dati di allenamento sono disponibili in images (file di immagine) e annotations (annotazioni per i file di immagine)

python ./code/upload-training.py

Passaggio 7: modello di treno
Una volta caricate le immagini, inizia ad addestrare il modello

python ./code/train-model.py

Passaggio 8: ottenere lo stato del modello
Il modello impiega circa 2 ore ad allenarsi. Riceverai un'email una volta che il modello è stato addestrato. Nel frattempo controlli lo stato del modello

python ./code/model-state.py

Passaggio 9: fai una previsione
Una volta che il modello è stato addestrato. È possibile effettuare previsioni utilizzando il modello

python ./code/prediction.py ./images/151.jpg


Nanoneti ed Umani nel Ciclo

‌‌La schermata "Modera" aiuta i processi di correzione e immissione e riduce il carico di lavoro del revisore manuale di quasi il 90% e riduce i costi del 50% per l'organizzazione.

Come eseguire l'OCR con Tesseract, OpenCV e Python

Le caratteristiche includono

  1. Tieni traccia delle previsioni corrette
  2. Tieni traccia di quelli sbagliati
  3. Apporta correzioni a quelli inaccurati
  4. Elimina quelli sbagliati
  5. Compila le previsioni mancanti
  6. Filtra le immagini con intervalli di date
  7. Ottieni conteggi di immagini moderate rispetto a quelle non moderate

Tutti i campi sono strutturati in una GUI di facile utilizzo che consente all'utente di sfruttare la tecnologia OCR e di aiutarla a migliorarla mentre procede, senza dover digitare alcun codice o capire come funziona la tecnologia.


Hai un problema con l'OCR in mente? Vuoi ridurre i costi di immissione dei dati della tua organizzazione? Vai a nanonet e costruire modelli OCR su estrarre il testo dalle immagini or estrarre i dati dai PDF!


Conclusione

Proprio come il deep learning ha avuto un impatto su quasi ogni aspetto della visione artificiale, lo stesso vale per il riconoscimento dei caratteri e il riconoscimento della grafia. I modelli basati sul deep learning sono riusciti a ottenere una precisione di riconoscimento del testo senza precedenti, ben oltre il tradizionale estrazione di informazioni ed elaborazione di immagini di apprendimento automatico approcci.

Tesseract si comporta bene quando le immagini dei documenti seguono le seguenti linee guida:

  • Pulisce la segmentazione del testo in primo piano dallo sfondo
  • Allineato orizzontalmente e ridimensionato in modo appropriato
  • Immagine di alta qualità senza sfocatura e rumore

L'ultima versione di Tesseract 4.0 supporta l'OCR basato sull'apprendimento profondo che è significativamente più accurato. Il motore OCR stesso è basato su una rete LSTM (Long Short Term Memory), una sorta di rete neuronale ricorrente (RNN).

Tesseract è perfetto per la scansione di documenti puliti e presenta una precisione e una variabilità dei caratteri piuttosto elevate poiché la sua formazione è stata completa. Direi che Tesseract è uno strumento di riferimento se il tuo compito è la scansione di libri, documenti e testo stampato su uno sfondo bianco pulito.


Letture consigliate

Aggiornare:
Molte persone ci hanno chiesto come ottenere la data sotto forma di testo o utilizzando quando rileva la data o qualsiasi altro dato specifico in modo da poter aggiungere all'elenco.
Ecco la risposta:
Nel codice per disegnare un riquadro di delimitazione attorno al riquadro della data, noterai una linea che corrisponde al modello regex con d['text']. Disegna una casella solo se il modello corrisponde. Potresti semplicemente estrarre i valori da d['text'] una volta che il modello corrisponde e aggiungerli a un elenco.

Aggiornamento 2:
Per rispondere a domande sull'OCR non in inglese, abbiamo aggiornato ulteriori elenchi di lettura.

Timestamp:

Di più da AI e apprendimento automatico