Cum să OCR cu Tesseract, OpenCV și Python PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Cum să OCR cu Tesseract, OpenCV și Python

Cum să OCR cu Tesseract, OpenCV și Python

În această postare pe blog, vom încerca să explicăm tehnologia din spatele celui mai utilizat motor Tesseract, care a fost actualizat cu cele mai recente cunoștințe cercetate în recunoașterea optică a caracterelor. Acest articol va servi și ca ghid/tutorial despre cum să implementați OCR în python folosind motorul Tesseract. Vom parcurge următoarele module:

  • Caracteristici Tesseract OCR
  • Preprocesare pentru OCR folosind OpenCV
  • Rularea Tesseract cu CLI și Python
  • Limitările motorului Tesseract

Cuprins

Introducere

OCR = Recunoaștere optică a caracterelor. Cu alte cuvinte, sistemele OCR transformă o imagine bidimensională a textului, care ar putea conține text tipărit sau scris de mână din reprezentarea imaginii în text care poate fi citit de mașină. OCR ca proces constă, în general, din mai multe subprocese care trebuie efectuate cât mai precis posibil. Subprocesele sunt:

  • Preprocesarea imaginii
  • Localizare text
  • Segmentarea caracterelor
  • Recunoașterea personajelor
  • Post procesare

Desigur, subprocesele din lista de mai sus pot diferi, dar aceștia sunt aproximativ pași necesari pentru a aborda recunoașterea automată a caracterelor. În software-ul OCR, scopul principal este să identifice și să capteze toate cuvintele unice folosind diferite limbi din caracterele textului scris.

Timp de aproape două decenii, sistemele optice de recunoaștere a caracterelor au fost utilizate pe scară largă pentru a oferi introducerea automată a textului în sistemele computerizate. Cu toate acestea, în tot acest timp, sistemele OCR convenționale (cum ar fi OCR zonal) nu și-au depășit niciodată incapacitatea de a citi mai mult decât o mână de fonturi și formate de pagină. Tipurile spațiate proporțional (care includ practic toate tipurile de copiere), fonturile de imprimantă laser și chiar multe fonturi de mașină de scris neproporționale au rămas în afara accesului acestor sisteme. Și, ca rezultat, OCR convențional nu a obținut niciodată mai mult decât un impact marginal asupra numărului total de documente care necesită conversie în formă digitală.

Cum să OCR cu Tesseract, OpenCV și Python
Procesul de recunoaștere optică a caracterelor (cu amabilitatea)

Motoarele OCR de ultimă generație abordează foarte bine aceste probleme menționate mai sus, utilizând cele mai recente cercetări în domeniul învățării profunde. Utilizând combinația de modele profunde și seturi uriașe de date disponibile public, modelele obțin acuratețe de ultimă generație pentru anumite sarcini. În zilele noastre este și posibil generează date sintetice cu fonturi diferite folosind rețele generative adversare și puține alte abordări generative.

Recunoașterea optică a caracterelor rămâne a problemă provocatoare când textul apare în medii neconstrânse, cum ar fi scene naturale, datorită distorsiunilor geometrice, fundalurilor complexe și fonturilor diverse. Tehnologia încă deține un potențial imens datorită diferitelor cazuri de utilizare ale OCR bazate pe învățarea profundă, cum ar fi


Ai în minte o problemă OCR? Doriți să reduceți costurile de introducere a datelor ale organizației dvs.? Du-te la Nanoneți și construiți modele OCR pentru extrageți text din imagini or extrageți date din fișiere PDF cu AI bazat PDF OCR!


Instrumente OCR cu sursă deschisă

Există o mulțime de recunoaștere optică a caracterelor software disponibil. Nu am găsit nicio comparație de calitate între ele, dar voi scrie despre unele dintre ele care par a fi cele mai prietenoase cu dezvoltatorii.

Tesseract – un motor OCR open-source care a câștigat popularitate în rândul dezvoltatorilor OCR. Chiar dacă uneori implementarea și modificarea poate fi dureroasă, nu au existat prea multe alternative OCR gratuite și puternice pe piață pentru cea mai lungă perioadă de timp. Tesseract a început ca doctorat. proiect de cercetare în HP Labs, Bristol. A câștigat popularitate și a fost dezvoltat de HP între 1984 și 1994. În 2005, HP a lansat Tesseract ca software open-source. Din 2006 este dezvoltat de Google.

Cum să OCR cu Tesseract, OpenCV și Python
compararea tendințelor Google pentru diferite instrumente OCR open source

OCRopus – OCRopus este un sistem OCR open-source care permite evaluarea și reutilizarea ușoară a componentelor OCR atât de către cercetători, cât și de către companii. O colecție de programe de analiză a documentelor, nu un sistem OCR la cheie. Pentru a-l aplica documentelor dvs., poate fi necesar să faceți o preprocesare a imaginii și, eventual, să pregătiți modele noi. În plus față de scripturile de recunoaștere în sine, există mai multe scripturi pentru editarea și corectarea adevărului la sol, măsurarea ratelor de eroare, determinarea matricelor de confuzie care sunt ușor de utilizat și editat.


Ocular – Ocular funcționează cel mai bine pe documente tipărite cu ajutorul unei presă manuală, inclusiv pe cele scrise în mai multe limbi. Funcționează folosind linia de comandă. Este un sistem OCR istoric de ultimă generație. Caracteristicile sale principale sunt:

  • Învățarea nesupravegheată a fonturilor necunoscute: necesită doar imagini de document și un corpus de text.
  • Abilitatea de a gestiona documente zgomotoase: cerneală inconsecventă, spațiere, aliniere verticală
  • Suport pentru documente multilingve, inclusiv cele care au o schimbare considerabilă de cod la nivel de cuvânt.
  • Învățare nesupravegheată a modelelor de variație ortografică, inclusiv ortografii arhaice și stenografie pentru imprimantă.
  • Transcriere simultană, comună, atât în ​​formă diplomatică (literală) cât și normalizată.


SwiftOCR – Voi menționa, de asemenea, motorul OCR scris în Swift, deoarece se face o dezvoltare uriașă în avansarea utilizării Swift ca limbaj de programare de dezvoltare folosit pentru învățarea profundă. Verifică blogul pentru a afla mai multe de ce. SwiftOCR este o bibliotecă OCR rapidă și simplă care utilizează rețele neuronale pentru recunoașterea imaginilor. SwiftOCR susține că motorul lor depășește binecunoscuta bibliotecă Tessaract.

În această postare pe blog, vom pune concentrați-vă pe Tesseract OCR și aflați mai multe despre cum funcționează și cum este utilizat.


Tesseract OCR

Tesseract este un motor de recunoaștere a textului (OCR) open source, disponibil sub licența Apache 2.0. Poate fi folosit direct sau (pentru programatori) folosind un API pentru a extrage text tipărit din imagini. Acceptă o mare varietate de limbi. Tesseract nu are o interfață grafică încorporată, dar există mai multe disponibile din Pagina 3rdParty. Tesseract este compatibil cu multe limbaje de programare și cadre prin intermediul wrapper-urilor care pot fi găsite aici. Poate fi folosit împreună cu analiza aspectului existent pentru a recunoaște textul dintr-un document mare sau poate fi folosit împreună cu un detector de text extern pentru a recunoaște textul dintr-o imagine dintr-o singură linie de text.

Cum să OCR cu Tesseract, OpenCV și Python
OCR Process Flow pentru a construi API cu Tesseract de la a blog

Tesseract 4.00 include un nou subsistem de rețea neuronală configurat ca un instrument de recunoaștere a liniilor de text. Isi are originile in LSTM bazat pe Python al OCRopus implementare, dar a fost reproiectat pentru Tesseract în C++. Sistemul de rețea neuronală din Tesseract este anterioară TensorFlow, dar este compatibil cu acesta, deoarece există un limbaj de descriere a rețelei numit Variable Graph Specification Language (VGSL), care este disponibil și pentru TensorFlow.

Pentru a recunoaște o imagine care conține un singur caracter, folosim de obicei o rețea neuronală convoluțională (CNN). Textul de lungime arbitrară este o secvență de caractere, iar astfel de probleme sunt rezolvate folosind RNN-uri, iar LSTM este o formă populară de RNN. Citiți această postare pentru a afla mai multe despre LSTM.


Tehnologie – Cum funcționează

LSTM-urile sunt excelente la învățarea secvențelor, dar încetinesc mult atunci când numărul de stări este prea mare. Există rezultate empirice care sugerează că este mai bine să ceri unui LSTM să învețe o secvență lungă decât o secvență scurtă de mai multe clase. Tesseract s-a dezvoltat din modelul OCRopus în Python, care a fost o furcă a unui LSMT în C++, numit CLSTM. CLSTM este o implementare a modelului rețelei neuronale recurente LSTM în C++, folosind biblioteca Eigen pentru calcule numerice.

Cum să OCR cu Tesseract, OpenCV și Python
Procesul OCR Tesseract 3 de la hârtie

Legacy Tesseract 3.x depindea de procesul în mai multe etape în care putem diferenția pașii:

  • Găsirea cuvintelor
  • Găsirea liniilor
  • Clasificarea personajelor

Găsirea cuvintelor s-a realizat prin organizarea liniilor de text în blob-uri, iar liniile și regiunile sunt analizate pentru un pas fix sau text proporțional. Liniile de text sunt împărțite în cuvinte în mod diferit, în funcție de tipul de spațiere dintre caractere. Recunoașterea continuă apoi ca un proces în două treceri. În prima trecere, se încearcă recunoașterea fiecărui cuvânt pe rând. Fiecare cuvânt care este satisfăcător este transmis unui clasificator adaptiv ca date de antrenament. Clasificatorul adaptiv are apoi șansa de a recunoaște mai precis textul din partea de jos a paginii.

Modernizarea instrumentului Tesseract a fost un efort de curățare a codului și adăugarea unui nou model LSTM. Imaginea de intrare este procesată în casete (dreptunghi) linie cu linie, avansând în modelul LSTM și dând rezultate. În imaginea de mai jos putem vizualiza cum funcționează.

Cum să OCR cu Tesseract, OpenCV și Python
Cum folosește Tesseract modelul LSTM prezentare

După ce a adăugat un nou instrument de antrenament și a antrenat modelul cu multe date și fonturi, Tesseract obține performanțe mai bune. Totuși, nu este suficient de bun pentru a lucra cu text scris de mână și fonturi ciudate. Este posibilă reglarea fină sau reantrenarea straturilor superioare pentru experimentare.


Instalarea Tesseract

Instalarea tesseract pe Windows este ușoară cu binarele precompilate găsite aici. Nu uitați să editați variabila de mediu „cale” și să adăugați calea tesseract. Pentru instalarea Linux sau Mac se instalează cu câteva comenzi.

După instalare, verificați dacă totul funcționează tastând comanda în terminal sau cmd:

$ tesseract --version

Și veți vedea rezultatul similar cu:

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

Puteți instala învelișul python pentru tesseract după aceasta folosind pip.
$ pip install pytesseract

Biblioteca Tesseract este livrată cu un instrument la îndemână de linie de comandă numit tesseract. Putem folosi acest instrument pentru a efectua OCR pe imagini, iar rezultatul este stocat într-un fișier text. Dacă dorim să integrăm Tesseract în codul nostru C++ sau Python, vom folosi API-ul Tesseract.


Rularea Tesseract cu CLI

Apelați motorul Tesseract de pe imagine cu cale_imagine și convertiți imaginea în text, scrisă linie cu linie în promptul de comandă tastând următoarele:

$ tesseract image_path stdout

Pentru a scrie textul de ieșire într-un fișier:

$ tesseract image_path text_result.txt

Pentru a specifica numele modelului de limbă, scrieți scurtătura de limbă după -l steag, implicit este nevoie de limba engleză:

$ tesseract image_path text_result.txt -l eng

În mod implicit, Tesseract așteaptă o pagină de text atunci când segmentează o imagine. Dacă doriți doar să OCR o regiune mică, încercați un alt mod de segmentare, folosind -psm argument. Există 14 moduri disponibile care pot fi găsite aici. În mod implicit, Tesseract automatizează complet segmentarea paginii, dar nu realizează orientarea și detectarea scriptului. Pentru a specifica parametrul, tastați următoarele:

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

Mai există un argument important, modul motor OCR (oem). Tesseract 4 are două motoare OCR — motorul Legacy Tesseract și motorul LSTM. Există patru moduri de funcționare alese folosind opțiunea –oem.
0 Numai motorul Legacy.
1 Rețele neuronale numai pentru motor LSTM.
2 motoare Legacy + LSTM.
3 Implicit, în funcție de ceea ce este disponibil.

Cum să OCR cu Tesseract, OpenCV și Python
Rezultatul motorului Tesseract OCR

OCR cu Pytesseract și OpenCV

Pytesseract este un wrapper pentru Tesseract-OCR Engine. De asemenea, este util ca script de invocare autonom pentru tesseract, deoarece poate citi toate tipurile de imagini acceptate de bibliotecile de imagini Pillow și Leptonica, inclusiv jpeg, png, gif, bmp, tiff și altele. Mai multe informații despre abordarea Python citiți aici. Codul pentru acest tutorial poate fi găsit în acesta depozit.

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)

Preprocesare pentru Tesseract

Pentru a evita toate modurile în care poate scădea acuratețea ieșirii tesseractului, trebuie să vă asigurați că imaginea este adecvată preprocesate.

Aceasta include redimensionarea, binarizarea, eliminarea zgomotului, deformarea etc.

Pentru a preprocesa imaginea pentru OCR, utilizați oricare dintre următoarele funcții Python sau urmați Documentația 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) 

Let's work with an example to see things better. This is what our original image looks like –

Cum să OCR cu Tesseract, OpenCV și Python
Sistemul de scriere Aurebesh

După preprocesare cu următorul cod

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

și trasând imaginile rezultate, obținem următoarele rezultate.

Cum să OCR cu Tesseract, OpenCV și Python
Imaginea după preprocesare

Ieșirea pentru imaginea originală arată astfel -

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

Here's what the output for different preprocessed images looks like –

Imagine canny edge (nu atât de bună)-

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

Imagine cu prag -

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

Imagine de deschidere -

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


Obținerea de casete în jurul textului

Folosind Pytesseract, puteți obține informații despre caseta de delimitare pentru rezultatele OCR folosind următoarele cod.

Scriptul de mai jos vă va oferi informații despre caseta de delimitare pentru fiecare caracter detectat de tesseract în timpul 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)

Dacă doriți casete în jurul cuvintelor în loc de caractere, funcția image_to_data va veni la îndemână. Puteți folosi image_to_data funcție cu tipul de ieșire specificat cu pytesseract Output.

Cum să OCR cu Tesseract, OpenCV și Python

Ai în minte o problemă OCR? Doriți să digitalizați facturile, PDF-urile sau plăcuțele de înmatriculare? Îndreptați-vă spre Nanoneți și construiește gratuit modele OCR!


Vom folosi exemplul de imagine a facturii de mai sus pentru a testa rezultatele noastre 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())

Acest lucru ar trebui să vă ofere următorul rezultat -
dict_keys(['level', 'page_num', 'block_num', 'par_num', 'line_num', 'word_num', 'left', 'top', 'width', 'height', 'conf', 'text'])

Folosind acest dicționar, putem obține fiecare cuvânt detectat, informațiile despre caseta de delimitare, textul din el și scorurile de încredere pentru fiecare.

Puteți trasa casetele folosind codul de mai jos -

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)

Iată cum ar arăta pentru imaginea unui exemplu de factură.

Cum să OCR cu Tesseract, OpenCV și Python


Potrivirea șablonului de text

Luați exemplul încercării de a găsi unde se află o dată într-o imagine. Aici șablonul nostru va fi un model de expresie regulată pe care îl vom potrivi cu rezultatele noastre OCR pentru a găsi casetele de delimitare adecvate. Vom folosi regex modulul și image_to_data functia pentru aceasta.

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)

După cum era de așteptat, primim o casetă în jurul datei facturii din imagine.

Cum să OCR cu Tesseract, OpenCV și Python

Moduri de segmentare a paginii

Există mai multe moduri în care o pagină de text poate fi analizată. API-ul tesseract oferă mai multe moduri de segmentare a paginii dacă doriți să rulați OCR doar pe o regiune mică sau în orientări diferite etc.

Here's a list of the supported page segmentation modes by tesseract –

0 Numai orientare și detectarea scriptului (OSD).
1 Segmentarea automată a paginii cu OSD.
2 Segmentare automată a paginii, dar fără OSD sau OCR.
3 Segmentare complet automată a paginii, dar fără OSD. (Mod implicit)
4 Să presupunem o singură coloană de text de dimensiuni variabile.
5 Să presupunem un singur bloc uniform de text aliniat vertical.
6 Să presupunem un singur bloc uniform de text.
7 Tratați imaginea ca pe o singură linie de text.
8 Tratați imaginea ca pe un singur cuvânt.
9 Tratați imaginea ca pe un singur cuvânt într-un cerc.
10 Tratați imaginea ca pe un singur caracter.
11 Text rar. Găsiți cât mai mult text posibil, fără o anumită ordine.
12 Text rar cu OSD.
13 Linie brută. Tratați imaginea ca pe o singură linie de text, ocolind hackurile specifice Tesseract.

Pentru a schimba modul de segmentare a paginii, schimbați --psm argument din șirul dvs. de configurare personalizat la oricare dintre codurile de mod menționate mai sus.


Detectează orientarea și scenariul

Puteți detecta orientarea textului din imaginea dvs. și, de asemenea, scenariul în care este scris. Următoarea imagine -
Cum să OCR cu Tesseract, OpenCV și Python
după ce parcurgeți următorul cod -

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)

va imprima urmatoarea iesire.

angle: 90
script: Latin

Detectează numai cifre

Luați această imagine de exemplu -
Cum să OCR cu Tesseract, OpenCV și Python
Textul extras din această imagine arată astfel.

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

Puteți recunoaște numai cifre schimbând configurația la următoarea

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

Ieșirea va arăta astfel.

-- . 43876324
172018
0 76496234

Lista albă a personajelor

Să presupunem că doriți doar să detectați anumite caractere din imaginea dată și să ignorați restul. Puteți specifica lista albă de caractere (aici, am folosit doar toate caracterele minuscule de la a la z) utilizând următoarea configurație.

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

Rezultat -

customername
roject
tnvoleeno
ated alliumenergyservices
e
thovo

Lista neagră a personajelor

Dacă sunteți sigur că unele caractere sau expresii cu siguranță nu vor apărea în textul dvs. (în caz contrar, OCR va returna text greșit în locul caracterelor din lista neagră), puteți pune pe lista neagră acele caractere folosind următoarea configurație.

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

Rezultat -

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

Detectează în mai multe limbi

Puteți verifica limbile disponibile tastând acest lucru în terminal

$ tesseract --list-langs

Pentru a descărca tesseract pentru o anumită utilizare a limbii

$ sudo apt-get install tesseract-ocr-LANG

unde LANG este codul din trei litere pentru limba de care aveți nevoie. Puteți afla valorile LANG aici.

Puteți descărca .traindata fișier pentru limba din care aveți nevoie aici si pune-l in $TESSDATA_PREFIX directorul (acest lucru ar trebui să fie același cu cel în care tessdata directorul este instalat) și ar trebui să fie gata de utilizare.

notițe – Numai limbile care au a .traineddata formatul de fișier este acceptat de tesseract.

Pentru a specifica limba în care aveți nevoie de rezultatul OCR, utilizați -l LANG argument din configurație unde LANG este codul de 3 litere pentru limba pe care doriți să o utilizați.

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

Luați această imagine de exemplu -
Cum să OCR cu Tesseract, OpenCV și Python
Puteți lucra cu mai multe limbi modificând parametrul LANG ca atare -

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

și veți obține următorul rezultat -

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

notițe – Limba specificată mai întâi la -l parametrul este limba principală.

Din păcate, tesseract nu are o caracteristică pentru a detecta automat limba textului dintr-o imagine. O soluție alternativă este oferită de un alt modul Python numit langdetect care poate fi instalat prin pip.

$ pip install langdetect

Din nou, acest modul nu detectează limba textului folosind o imagine, dar are nevoie de introducerea unui șir pentru a detecta limba din care se află. Cel mai bun mod de a face acest lucru este să utilizați mai întâi tesseract pentru a obține text OCR în orice limbă simțiți că sunteți acolo, folosind langdetect pentru a găsi ce limbi sunt incluse în textul OCR și apoi rulați din nou OCR cu limbile găsite.

Să presupunem că avem un text despre care credeam că este în engleză și portugheză.

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)

Aceasta ar trebui să scoată o listă de limbi din text și probabilitățile acestora.

[en:0.714282468983554, es:0.2857145605644145]

Codurile de limbă utilizate de langdetect urmați codurile ISO 639-1. Pentru a compara, vă rugăm să verificați acest și acest. Constatăm că limba folosită în text sunt în schimb engleza și spaniola.

Primim din nou textul schimbând configurația în

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

notițe – Tesseract performs badly when, in an image with multiple languages, the languages specified in the config are wrong or aren't mentioned at all. This can mislead the langdetect module quite a bit as well.


Folosind tessdata_fast

Dacă viteza este o preocupare majoră pentru dvs., puteți înlocui modelele de limbaj tessdata cu modele tessdata_fast, care sunt versiuni întregi pe 8 biți ale modelelor tessdata.

Conform tessdata_fast github -

Acest depozit conține versiuni întregi rapide ale modelelor antrenate pentru Tesseract Open Source Motor OCR.

Aceste modele funcționează numai cu motorul LSTM OCR al Tesseract 4.

  • Acestea reprezintă un compromis de viteză/acuratețe în ceea ce privește ceea ce a oferit cel mai bun „valoare pentru bani” în ceea ce privește viteza vs acuratețe.
  • Pentru unele limbi, acest lucru este încă cel mai bun, dar pentru majoritatea nu.
  • Configurația de rețea „cel mai bun raport calitate-preț” a fost apoi integrată pentru o viteză suplimentară.
  • Majoritatea utilizatorilor vor dori să folosească aceste fișiere de date instruite pentru a face OCR și acestea vor fi livrate ca parte a distribuțiilor Linux, de ex. Ubuntu 18.04.
  • Reglajul fin/antrenamentul incremental va NU fi posibil din acestea fast modele, deoarece sunt întregi pe 8 biți.
  • Când utilizați modelele din acest depozit, este acceptat doar noul motor OCR bazat pe LSTM. Moștenirea tesseract motorul nu este acceptat cu aceste fișiere, așa că modurile OEM ale Tesseract „0” și „2” nu vor funcționa cu ele.

A folosi tessdata_fast modele în loc de tessdata, tot ce trebuie să faceți este să descărcați tessdata_fast fișier de date de limbă de la aici și pune-l în interiorul tău $TESSDATA_PREFIX director.


Aveți nevoie să digitalizați documente, chitanțe sau facturi, dar prea lene să codificați? Îndreptați-vă spre Nanoneți și construiește gratuit modele OCR!


Training Tesseract pe date personalizate

Tesseract 4.00 include un nou motor de recunoaștere bazat pe rețea neuronală care oferă o acuratețe semnificativ mai mare asupra imaginilor documentelor. Rețelele neuronale necesită mult mai multe date de antrenament și se antrenează mult mai lent decât baza Tesseract. Pentru limbile bazate pe latină, datele model existente furnizate au fost instruite pe aproximativ 400000 de linii de text care se întind pe aproximativ 4500 de fonturi.

Pentru a rula cu succes tutorialul de instruire Tesseract 4.0 LSTM, trebuie să aveți o instalare funcțională a Tesseract 4 și Tesseract 4 Training Tools și, de asemenea, să aveți scripturile de antrenament și fișierele de date antrenate necesare în anumite directoare. Vizita github repo pentru fișiere și instrumente.

Tesseract 4.00 durează câteva zile până la câteva săptămâni pentru antrenamentul de la zero. Chiar și cu toate aceste date noi de antrenament, prin urmare, iată câteva opțiuni pentru antrenament:

  • Ajustare precisă – Începând cu o limbă instruită existentă, antrenați-vă cu privire la datele dumneavoastră suplimentare specifice. De exemplu, antrenament pe un set de date scris de mână și câteva fonturi suplimentare.
  • Tăiați stratul superior – from the network and retrain a new top layer using the new data. If fine-tuning doesn't work, this is most likely the next best option. The analogy why is this useful, take for an instance models trained on ImageNet dataset. The goal is to build a cat or dog classifier, lower layers in the model are good at low-level abstraction as corners, horizontal and vertical lines, but higher layers in model are combining those features and detecting cat or dog ears, eyes, nose and so on. By retraining only top layers you are using knowledge from lower layers and combining with your new different dataset.
  • Reantrenează-te de la zero – Aceasta este o abordare foarte lentă, cu excepția cazului în care aveți un set de antrenament foarte reprezentativ și suficient de mare pentru problema dvs. Cea mai bună resursă pentru antrenament de la zero este urmărirea acestui lucru github repo.

Un ghid despre cum să vă instruiți cu privire la datele dvs. personalizate și să creați .traineddata fișierele pot fi găsite aici, aici și aici.

Nu vom acoperi codul pentru antrenament folosind Tesseract în această postare de blog.

Cum să OCR cu Tesseract, OpenCV și Python

Limitările Tesseract

Tesseract funcționează cel mai bine atunci când există o segmentare clară a textului din prim-plan față de fundal. În practică, poate fi extrem de dificil să garantezi aceste tipuri de configurare. Există o varietate de motive pentru care este posibil să nu obțineți rezultate de bună calitate de la Tesseract, cum ar fi dacă imaginea are zgomot pe fundal. Cu cât calitatea imaginii (dimensiune, contrast, fulger) este mai bună, cu atât rezultatul recunoașterii este mai bun. Este nevoie de puțină preprocesare pentru a îmbunătăți rezultatele OCR, imaginile trebuie să fie scalate corespunzător, să aibă un contrast cât mai mare posibil, iar textul trebuie să fie aliniat orizontal. Tesseract OCR este destul de puternic, dar are următoarele limitări.

Limitările teseractelor însumate în listă.

  • OCR nu este la fel de precis ca unele soluții comerciale disponibile pentru noi.
  • Nu se descurcă bine cu imaginile afectate de artefacte, inclusiv ocluzie parțială, perspectivă distorsionată și fundal complex.
  • Nu este capabil să recunoască scrisul de mână.
  • Este posibil să găsească farfurie și să raporteze acest lucru ca rezultat OCR.
  • Dacă un document conține limbi în afara celor date în argumentele -l LANG, rezultatele pot fi slabe.
  • Nu este întotdeauna bun la analiza ordinii naturale de citire a documentelor. De exemplu, poate eșua să recunoască faptul că un document conține două coloane și poate încerca să unească text între coloane.
  • Scanările de calitate slabă pot produce OCR de calitate slabă.
  • Nu expune informații despre ce familie de fonturi aparține textul.


Desigur, există o modalitate mai bună, mult mai simplă și mai intuitivă de a efectua sarcini OCR.


OCR cu nanonete

Cum să OCR cu Tesseract, OpenCV și Python

Nanonets API OCR vă permite să construiți modele OCR cu ușurință. Nu trebuie să vă faceți griji cu privire la preprocesarea imaginilor sau cu privire la potrivirea șabloanelor sau să construiți motoare bazate pe reguli pentru a crește acuratețea modelului dvs. OCR.

Puteți să vă încărcați datele, să le adnotați, să setați modelul să se antreneze și să așteptați să obțineți predicții printr-o interfață de utilizare bazată pe browser, fără să scrieți o singură linie de cod, să vă faceți griji pentru GPU-uri sau să găsiți arhitecturile potrivite pentru modelele dvs. de deep learning. De asemenea, puteți obține răspunsurile JSON ale fiecărei predicții pentru a le integra cu propriile sisteme și pentru a construi aplicații bazate pe învățare automată, bazate pe algoritmi de ultimă generație și pe o infrastructură puternică.

Utilizarea GUI: https://app.nanonets.com/

De asemenea, puteți utiliza API-ul Nanonets-OCR urmând pașii de mai jos: ‌

Pasul 1: Clonați Repo, instalați dependențe

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

Pasul 2: Obțineți cheia API gratuită
Obțineți cheia API gratuită de la http://app.nanonets.com/#/keys

Cum să OCR cu Tesseract, OpenCV și Python

Pasul 3: Setați cheia API ca o variabilă de mediu

export NANONETS_API_KEY=YOUR_API_KEY_GOES_HERE

Pasul 4: Creează un nou model

python ./code/create-model.py

Notă: Aceasta generează un MODEL_ID de care aveți nevoie pentru pasul următor

Pasul 5: Adăugați ID de model ca variabilă de mediu

export NANONETS_MODEL_ID=YOUR_MODEL_ID

Notă: veți obține YOUR_MODEL_ID din pasul anterior

Pasul 6: Încărcați datele de instruire
Datele de instruire se găsesc în images (fișiere imagine) și annotations (adnotări pentru fișierele imagine)

python ./code/upload-training.py

Pasul 7: Model de tren
După ce imaginile au fost încărcate, începeți instruirea modelului

python ./code/train-model.py

Pasul 8: Obțineți starea modelului
Modelul durează aproximativ 2 ore pentru antrenament. Veți primi un e-mail după ce modelul este instruit. Între timp verificați starea modelului

python ./code/model-state.py

Pasul 9: Faceți previziunea
Odată ce modelul este instruit. Puteți face predicții folosind modelul

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


Nanonetele și oamenii în buclă

‌‌Ecranul „Moderat” ajută la procesele de corecție și introducere și reduce volumul de lucru al examinatorului manual cu aproape 90% și reduce costurile cu 50% pentru organizație.

Cum să OCR cu Tesseract, OpenCV și Python

Caracteristicile includ

  1. Urmăriți predicțiile corecte
  2. Urmăriți care sunt greșite
  3. Faceți corecții la cele inexacte
  4. Ștergeți-le pe cele greșite
  5. Completați predicțiile lipsă
  6. Filtrează imagini cu intervale de date
  7. Obțineți numărul de imagini moderate față de cele care nu sunt moderate

Toate câmpurile sunt structurate într-o interfață grafică ușor de utilizat, care permite utilizatorului să profite de tehnologia OCR și să ajute la îmbunătățirea acesteia, fără a fi nevoie să tastați niciun cod sau să înțelegeți cum funcționează tehnologia.


Ai în minte o problemă OCR? Doriți să reduceți costurile de introducere a datelor ale organizației dvs.? Du-te la Nanoneți și construiți modele OCR pentru extrageți text din imagini or extrageți date din fișiere PDF!


Concluzie

Așa cum învățarea profundă a afectat aproape fiecare aspect al vederii computerizate, același lucru este valabil și pentru recunoașterea caracterelor și recunoașterea scrisului de mână. Modelele bazate pe învățarea profundă au reușit să obțină o acuratețe de recunoaștere a textului fără precedent, mult peste cea tradițională extragerea informațiilor și procesarea imaginilor de învățare automată abordari.

Tesseract funcționează bine atunci când imaginile documentelor urmează următoarele linii directoare:

  • Segmentarea curată a textului din prim-plan față de fundal
  • Aliniat orizontal și scalat corespunzător
  • Imagine de înaltă calitate, fără neclaritate și zgomot

Cea mai recentă versiune a Tesseract 4.0 acceptă OCR bazat pe învățare profundă, care este semnificativ mai precis. Motorul OCR în sine este construit pe o rețea Long Short-Term Memory (LSTM), un fel de Recurrent Neural Network (RNN).

Tesseract este perfect pentru scanarea documentelor curate și vine cu o precizie destul de mare și o variabilitate a fonturilor, deoarece instruirea sa a fost cuprinzătoare. Aș spune că Tesseract este un instrument de bază dacă sarcina dvs. este scanarea cărților, documentelor și a textului tipărit pe un fundal alb curat.


Lecturi suplimentare

Actualizați:
Mulți oameni ne-au întrebat cum pot obține data sub formă de text sau folosind atunci când detectează data sau orice alte date specifice, astfel încât să poată adăuga la listă.
Iată răspunsul:
În codul pentru a desena o casetă de delimitare în jurul casetei de dată, veți observa o linie care se potrivește cu modelul regex cu d['text']. Desenează o casetă doar dacă modelul se potrivește. Puteți extrage pur și simplu valorile din d['text'] odată ce modelul se potrivește și adăugați-le la o listă.

Actualizare 2:
Pentru a răspunde întrebărilor legate de OCR non-engleză, am actualizat listele de lectură suplimentare.

Timestamp-ul:

Mai mult de la AI și învățarea automată