Kako OCR s Tesseract, OpenCV in Python PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Kako OCR s Tesseractom, OpenCV in Pythonom

Kako OCR s Tesseractom, OpenCV in Pythonom

V tem prispevku bomo poskušali razložiti tehnologijo najpogosteje uporabljenega motorja Tesseract, ki je bil nadgrajen z najnovejšim znanjem, raziskanim na področju optičnega prepoznavanja znakov. Ta članek bo služil tudi kot vodnik / navodilo za uporabo OCR v pythonu z uporabo motorja Tesseract. Sprehodili se bomo po naslednjih modulih:

  • Lastnosti Tesseract OCR
  • Predobdelava za OCR z uporabo OpenCV
  • Zagon Tesseract z CLI in Python
  • Omejitve Tesseract motorja

Kazalo

Predstavitev

OCR = Optično prepoznavanje znakov. Z drugimi besedami, sistemi OCR pretvorijo dvodimenzionalno sliko besedila, ki bi lahko vsebovalo strojno natisnjeno ali ročno napisano besedilo iz slikovne predstavitve v strojno berljivo besedilo. OCR kot proces je na splošno sestavljen iz več podprocesov, ki se izvajajo čim bolj natančno. Podprocesi so:

  • Predobdelava slike
  • Lokalizacija besedila
  • Segmentacija znakov
  • Prepoznavanje znakov
  • Obdelava objave

Podprocesi na zgornjem seznamu se seveda lahko razlikujejo, vendar so to približno koraki, potrebni za samodejno prepoznavanje znakov. Glavni namen programske opreme OCR je prepoznati in zajeti vse edinstvene besede z uporabo različnih jezikov iz pisnih besedilnih znakov.

Že skoraj dve desetletji se optični sistemi za prepoznavanje znakov pogosto uporabljajo za zagotavljanje avtomatiziranega vnosa besedila v računalniške sisteme. Toda v vsem tem času so običajni sistemi OCR (npr conski OCR) nikoli niso premagali svoje nezmožnosti branja več kot peščice pisav in formatov strani. Proporcionalno razmaknjene pisave (ki vključujejo skoraj vse tipske kopije), pisave laserskih tiskalnikov in celo mnoge neproporcionalne pisave pisalnih strojev so ostale izven dosega teh sistemov. In kot rezultat, običajni OCR nikoli ni dosegel več kot obrobnega vpliva na skupno število dokumentov, ki jih je treba pretvoriti v digitalno obliko.

Kako OCR s Tesseractom, OpenCV in Pythonom
Optični postopek prepoznavanja znakov (vljudnost)

Naslednja generacija OCR motorjev se s temi zgoraj omenjenimi težavami res dobro spopada z najnovejšimi raziskavami na področju globokega učenja. Z izkoriščanjem kombinacije globokih modelov in ogromnih naborov podatkov, ki so javno dostopni, modeli dosežejo najsodobnejšo natančnost pri danih nalogah. Dandanes je to tudi mogoče ustvarjajo sintetične podatke z različnimi pisavami, ki uporabljajo generativne kontradiktorne mreže in nekaj drugih generativnih pristopov.

Optično prepoznavanje znakov ostaja a zahteven problem ko se besedilo pojavlja v neomejenih okoljih, na primer naravni prizori, zaradi geometrijskih popačenj, zapletenih ozadij in raznolikih pisav. Tehnologija ima še vedno ogromen potencial zaradi različnih primerov uporabe OCR, ki temelji na globokem učenju


Imate v mislih težavo z OCR? Želite zmanjšati stroške vnosa podatkov v vaši organizaciji? Pojdite na Nanoneti in zgraditi modele OCR izvleči besedilo iz slik or ekstrahirajte podatke iz datotek PDF z umetno inteligenco PDF OCR!


Orodja za odprtokodno OCR

Obstaja veliko optično prepoznavanje znakov na voljo programska oprema. Med njimi nisem našel nobene primerjave kakovosti, bom pa pisal o nekaterih, ki se zdijo najbolj prijazni do razvijalcev.

Teseract - odprtokodni OCR mehanizem, ki je postal priljubljen med razvijalci OCR. Čeprav je včasih lahko boleče izvajati in spreminjati, na trgu najdlje ni bilo preveč brezplačnih in zmogljivih alternativ OCR. Tesseract se je začel kot doktor znanosti. raziskovalni projekt v HP Labs, Bristol. Postala je priljubljena in jo je HP razvil med letoma 1984 in 1994. Leta 2005 je HP izdal Tesseract kot odprtokodno programsko opremo. Od leta 2006 ga razvija Google.

Kako OCR s Tesseractom, OpenCV in Pythonom
primerjava google trendov za različna odprtokodna orodja OCR

OKRopus - OCRopus je odprtokodni sistem OCR, ki omogoča enostavno oceno in ponovno uporabo komponent OCR tako raziskovalcem kot podjetjem. Zbirka programov za analizo dokumentov in ne sistem OCR na ključ. Če ga želite uporabiti za svoje dokumente, boste morda morali opraviti nekaj predhodne obdelave slik in morda tudi usposobiti nove modele. Poleg samih skriptov za prepoznavanje obstaja več skriptov za urejanje in popravljanje resnic na tleh, merjenje stopenj napak, določanje matric zmede, ki so enostavne za uporabo in urejanje.


Očesni - Okular najbolje deluje na dokumentih, natisnjenih z ročnim tiskom, vključno s tistimi, ki so napisani v več jezikih. Deluje z ukazno vrstico. Gre za najsodobnejši zgodovinski sistem OCR. Njegove glavne značilnosti so:

  • Nenadzorovano učenje neznanih pisav: zahteva le slike dokumentov in korpus besedila.
  • Sposobnost obdelave hrupnih dokumentov: nedosledno črnilo, razmik, navpična poravnava
  • Podpora večjezičnim dokumentom, vključno s tistimi, ki imajo znatno preklapljanje na ravni besed.
  • Nenadzorovano učenje vzorcev pravopisnih variacij, vključno z arhaičnimi črkovanji in okrajšavo tiskalnika.
  • Hkratno, skupno prepisovanje v diplomatsko (dobesedno) in normalizirano obliko.


SwiftOCR - Omenil bom tudi mehanizem OCR, napisan v Swiftu, saj je velik napredek v napredku uporabe Swifta kot razvojnega programskega jezika, ki se uporablja za globoko učenje. Preveri blog če želite izvedeti več, zakaj. SwiftOCR je hitra in preprosta knjižnica OCR, ki za prepoznavanje slik uporablja nevronske mreže. SwiftOCR trdi, da njihov motor presega dobro znano knjižnico Tessaract.

V tem prispevku v blogu bomo postavili osredotočite se na Tesseract OCR in izveste več o tem, kako deluje in kako se uporablja.


Tesseract OCR

Tesseract je odprtokodni mehanizem za prepoznavanje besedila (OCR), ki je na voljo pod licenco Apache 2.0. Uporablja se lahko neposredno ali (za programerje) z uporabo API-ja za pridobivanje natisnjenega besedila iz slik. Podpira široko paleto jezikov. Tesseract nima vgrajenega grafičnega uporabniškega vmesnika, vendar jih je več na voljo pri Stran 3rdParty. Tesseract je združljiv s številnimi programskimi jeziki in ogrodji prek ovojnic, ki jih lahko najdemo tukaj. Uporablja se lahko z obstoječo analizo postavitve za prepoznavanje besedila v velikem dokumentu ali pa se lahko uporablja skupaj z zunanjim detektorjem besedila za prepoznavanje besedila iz slike ene besedilne vrstice.

Kako OCR s Tesseractom, OpenCV in Pythonom
Tok postopka OCR za izdelavo API-ja s Tesseractom iz a blog post

Tesseract 4.00 vključuje nov podsistem nevronske mreže, konfiguriran kot prepoznavalnik besedilnih vrstic. Izvira iz OCRopusov LSTM, ki temelji na Pythonu vendar je bil preoblikovan za Tesseract v jeziku C ++. Sistem nevronske mreže v Tesseractu je pred datumom TensorFlow, vendar je združljiv z njim, saj obstaja jezik opisa omrežja, imenovan Variable Graph Specification Language (VGSL), ki je na voljo tudi za TensorFlow.

Za prepoznavanje slike, ki vsebuje en sam znak, običajno uporabimo Convolutional Neural Network (CNN). Besedilo poljubne dolžine je zaporedje znakov in takšne težave se rešujejo z RNN-ji, LSTM pa je priljubljena oblika RNN. Preberite to objavo, če želite izvedeti več o LSTM.


Tehnologija - kako deluje

LSTM se odlično učijo zaporedja, vendar se veliko upočasnijo, če je število držav preveliko. Obstajajo empirični rezultati, ki kažejo, da je bolje prositi LSTM, da se nauči dolgega zaporedja kot kratkega zaporedja številnih razredov. Tesseract se je razvil iz modela OCRopus v Pythonu, ki je bil razcep LSMT v jeziku C ++, imenovan CLSTM. CLSTM je izvedba ponavljajočega se modela nevronske mreže LSTM v jeziku C ++ z uporabo knjižnice Eigen za numerične izračune.

Kako OCR s Tesseractom, OpenCV in Pythonom
Postopek optičnega prepoznavanja znakov Tesseract 3 iz papirja

Legacy Tesseract 3.x je bil odvisen od večstopenjskega procesa, kjer lahko ločimo korake:

  • Iskanje besed
  • Iskanje črte
  • Razvrstitev znakov

Iskanje besed je bilo izvedeno z organiziranjem besedilnih vrstic v blobs, vrstice in regije pa se analizirajo glede na nespremenljivo višino ali proporcionalno besedilo. Vrstice besedila so razdeljene na besede različno glede na vrsto razmika med znaki. Nato prepoznavanje poteka v dveh korakih. Pri prvem podajanju se poskuša prepoznati vsako besedo po vrsti. Vsaka beseda, ki je zadovoljiva, se posreduje prilagodljivemu klasifikatorju kot podatki o vadbi. Nato ima prilagodljivi klasifikator možnost natančnejšega prepoznavanja besedila spodaj po strani.

Posodobitev orodja Tesseract je bila prizadevanje za čiščenje kode in dodajanje novega modela LSTM. Vhodna slika se obdela v poljih (pravokotnik) vrstica za vrstico, ki se poda v model LSTM in poda izhodne podatke. Na spodnji sliki si lahko predstavimo, kako deluje.

Kako OCR s Tesseractom, OpenCV in Pythonom
Kako Tesseract uporablja model LSTM predstavitev

Po dodajanju novega orodja za usposabljanje in usposabljanju modela z veliko podatki in pisavami Tesseract doseže boljše rezultate. Kljub temu premalo dobro za delo z rokopisnim besedilom in čudnimi pisavami. Za eksperimentiranje je mogoče natančno nastaviti ali preusmeriti zgornje plasti.


Namestitev Tesseract

Namestitev tesseract-a v sistem Windows je enostavna s pomočjo vnaprej sestavljenih binarnih datotek tukaj. Ne pozabite urediti spremenljivke okolja »path« in dodati pot tesseract. Za namestitev Linuxa ali Maca je nameščen z nekaj ukazov.

Po namestitvi preverite, ali vse deluje, tako da v terminal ali cmd vnesete ukaz:

$ tesseract --version

In videli boste izhod, podoben:

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

Po tem lahko namestite ovitek python za tesseract s pomočjo pipa.
$ pip install pytesseract

Knjižnica Tesseract je dobavljena s priročnim orodjem ukazne vrstice, imenovanim tesseract. To orodje lahko uporabimo za OCR na slikah, izhod pa je shranjen v besedilni datoteki. Če želimo Tesseract vključiti v našo kodo C ++ ali Python, bomo uporabili Tesseract-ov API.


Zagon Tesseract z CLI

Pokličite motor Tesseract na sliki z slika_pot in pretvorite sliko v besedilo, zapisano vrstico za vrstico v ukazni poziv, tako da vnesete naslednje:

$ tesseract image_path stdout

Če želite napisati izhodno besedilo v datoteko:

$ tesseract image_path text_result.txt

Če želite določiti ime jezikovnega modela, za njim napišite bližnjico jezika -l zastava, privzeto je v angleškem jeziku:

$ tesseract image_path text_result.txt -l eng

Tesseract privzeto pričakuje stran besedila, ko segmentira sliko. Če iščete samo OCR majhno regijo, poskusite drugačen način segmentacije z uporabo –Psm prepir. Na voljo je 14 načinov tukaj. Privzeto Tesseract popolnoma avtomatizira segmentacijo strani, vendar ne izvaja orientacije in zaznavanja skriptov. Če želite določiti parameter, vnesite naslednje:

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

Obstaja tudi še en pomemben argument, način delovanja OCR (oem). Tesseract 4 ima dva OCR motorja - Legacy Tesseract motor in LSTM motor. Z možnostjo –oem so izbrani štirje načini delovanja.
0 Samo starejši motor.
1 Samo motor LSTM z nevronskimi mrežami.
2 motorja Legacy + LSTM.
3 Privzeto glede na to, kar je na voljo.

Kako OCR s Tesseractom, OpenCV in Pythonom
Rezultat Tesseract OCR motorja

OCR z Pytesseractom in OpenCV

Pytesseract je ovoj za Tesseract-OCR Engine. Uporaben je tudi kot samostojni skript za priklic tesseract-a, saj lahko bere vse vrste slik, ki jih podpirajo slikovne knjižnice Pillow in Leptonica, vključno z jpeg, png, gif, bmp, tiff in drugimi. Več informacij o pristopu Python preberite tukaj. Kodo te vadnice najdete v tem priročniku Skladišče.

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)

Predobdelava za Tesseract

Če se želite izogniti vsem načinom, na katere lahko izpade natančnost izhoda tesseract, se prepričajte, da je slika primerna predhodno obdelana.

To vključuje spreminjanje obsega, binirizacijo, odstranjevanje hrupa, odstranjevanje popravila itd.

Za predhodno obdelavo slike za OCR uporabite katero koli od naslednjih funkcij pythona ali sledite Dokumentacija 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) 

Delajmo s primerom, da bomo bolje videli stvari. Tako izgleda naša prvotna slika –

Kako OCR s Tesseractom, OpenCV in Pythonom
Sistem pisanja Aurebesh

Po predhodni obdelavi z naslednjo kodo

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

in z risanjem nastalih slik dobimo naslednje rezultate.

Kako OCR s Tesseractom, OpenCV in Pythonom
Slika po predhodni obdelavi

Izhodi za izvirno sliko so videti tako -

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

Tako izgleda izhod za različne vnaprej obdelane slike –

Slika roba Canny (ni tako dobra) -

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

Slika s pragom -

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

Začetna slika -

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


Pridobivanje polj okoli besedila

Z uporabo Pytesseract-a lahko dobite informacije o omejitvenem polju za rezultate OCR z naslednjim Koda.

Spodnji skript vam bo dal informacije o omejitvenem polju za vsak znak, ki ga je tesseract zaznal med 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)

Če želite okna okoli besed namesto znakov, funkcijo image_to_data vam bo prišel prav. Lahko uporabite image_to_data funkcija s tipom izhoda, določenim s pytesseract Output.

Kako OCR s Tesseractom, OpenCV in Pythonom

Imate v mislih težavo z OCR? Želite digitalizirati račune, PDF datoteke ali tipske tablice? Pojdite na Nanoneti in gradite OCR modele brezplačno!


Zgornjo vzorčno sliko računa bomo uporabili za preizkus naših izhodov 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())

To bi vam moralo dati naslednje rezultate -
dict_keys(['level', 'page_num', 'block_num', 'par_num', 'line_num', 'word_num', 'left', 'top', 'width', 'height', 'conf', 'text'])

S pomočjo tega slovarja lahko zaznamo vsako besedo, informacije o njenem omejevalnem polju, besedilo v njih in ocene zaupanja za vsako.

Polja lahko izrišete s spodnjo kodo -

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)

Tako bi to izgledalo za sliko vzorca računa.

Kako OCR s Tesseractom, OpenCV in Pythonom


Ujemanje predloge besedila

Vzemimo primer poskušanja ugotoviti, kje je datum na sliki. Tu bo naša predloga vzorec regularnega izraza, ki ga bomo uskladili z našimi rezultati OCR, da bomo našli ustrezna omejevalna polja. Uporabili bomo regex modul in image_to_data funkcijo za to.

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)

Po pričakovanju dobimo eno okence okoli datuma računa na sliki.

Kako OCR s Tesseractom, OpenCV in Pythonom

Načini segmentacije strani

Stran besedila je mogoče analizirati na več načinov. Aplikacija tesseract api ponuja več načinov segmentacije strani, če želite zagnati OCR samo na majhnem območju ali v različnih usmeritvah itd.

Tukaj je seznam podprtih načinov segmentacije strani s tesseractom –

0 Samo orientacija in zaznavanje skriptov (OSD).
1 Samodejna segmentacija strani z OSD.
2 Samodejna segmentacija strani, vendar brez OSD ali OCR.
3 Popolnoma samodejna segmentacija strani, vendar brez OSD. (Privzeto)
4 Predpostavimo en stolpec besedila spremenljivih velikosti.
5 Predpostavimo en sam blok vertikalno poravnanega besedila.
6. Predpostavimo en sam blok besedila.
7 Sliko obravnavajte kot eno besedilno vrstico.
8 Sliko obravnavajte kot eno besedo.
9 Sliko obravnavajte kot eno besedo v krogu.
10 Sliko obravnavajte kot en sam znak.
11 Redko besedilo. Poiščite čim več besedila v nobenem posebnem vrstnem redu.
12 Redko besedilo z OSD.
13 Surova črta. Sliko obravnavajte kot eno besedilno vrstico, pri čemer se izognete vdorom, ki so značilni za Tesseract.

Če želite spremeniti način segmentacije strani, spremenite --psm argument v nastavitvenem nizu po meri v katero koli od zgoraj omenjenih kod mode.


Zaznavanje orientacije in skripte

Na sliki lahko zaznate usmerjenost besedila in tudi skript, v katerem je zapisano. Naslednja slika -
Kako OCR s Tesseractom, OpenCV in Pythonom
po prehodu skozi naslednjo kodo -

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)

bo natisnil naslednji izhod.

angle: 90
script: Latin

Zaznajte samo številke

Vzemimo za primer to sliko -
Kako OCR s Tesseractom, OpenCV in Pythonom
Besedilo, pridobljeno s te slike, je videti takole.

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

Prepoznate lahko samo številke, tako da spremenite konfiguracijo na naslednje

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

Rezultat bo videti tako.

-- . 43876324
172018
0 76496234

Znaki na seznamu dovoljenih

Recimo, da želite na tej sliki zaznati samo nekatere znake, ostale pa ignorirati. Svoj beli seznam znakov lahko določite (tukaj smo uporabili samo male črke od a do z) z uporabo naslednje konfiguracije.

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

Izhod -

customername
roject
tnvoleeno
ated alliumenergyservices
e
thovo

Znaki na črnem seznamu

Če ste prepričani, da se nekateri znaki ali izrazi zagotovo ne bodo pojavili v vašem besedilu (OCR bo namesto znakov na črnem seznamu vrnil napačno besedilo), lahko te znake dodate na črni seznam z naslednjo konfiguracijo.

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

Izhod -

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

Odkrivanje v več jezikih

Razpoložljive jezike lahko preverite tako, da to vnesete v terminal

$ tesseract --list-langs

Če želite prenesti tesseract za določeno uporabo jezika

$ sudo apt-get install tesseract-ocr-LANG

kjer je LAN tričrkovna koda za jezik, ki ga potrebujete. Izveste lahko vrednosti LANG tukaj.

Lahko prenesete .traindata datoteko za jezik, iz katerega potrebujete tukaj in ga postavite v $TESSDATA_PREFIX imenik (ta bi moral biti enak tistemu, kjer je tessdata imenik) in mora biti pripravljen za uporabo.

Opombe - Samo jeziki, ki imajo .traineddata format datoteke podpira tesseract.

Če želite določiti jezik, v katerem potrebujete izhod OCR, uporabite -l LANG argument v konfiguraciji, kjer je LANG tričrkovna koda za jezik, ki ga želite uporabiti.

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

Vzemimo za primer to sliko -
Kako OCR s Tesseractom, OpenCV in Pythonom
S spreminjanjem parametra LANG kot takega lahko delate z več jeziki -

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

in dobili boste naslednji izhod -

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

Opombe - Jezik, naveden najprej v -l parameter je primarni jezik.

Na žalost tesseract nima funkcije za samodejno zaznavanje jezika besedila na sliki. Alternativno rešitev ponuja še en modul python, imenovan langdetect ki ga lahko namestite preko pipa.

$ pip install langdetect

Ta modul znova ne zazna jezika besedila s sliko, vendar za vnos jezika potrebuje vnos nizov. Najboljši način za to je, da najprej uporabite tesseract, da dobite besedilo OCR v vseh jezikih, za katere menite, da so tam, z uporabo langdetect da poiščete, kateri jeziki so vključeni v besedilo OCR, in nato znova zaženite OCR z najdenimi jeziki.

Recimo, da imamo besedilo, za katerega smo mislili, da je v angleščini in portugalščini.

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)

To bi moralo prikazati seznam jezikov v besedilu in njihove verjetnosti.

[en:0.714282468983554, es:0.2857145605644145]

Jezikovne kode, ki jih uporablja langdetect upoštevajte kode ISO 639-1. Za primerjavo preverite ta in ta. Ugotovili smo, da sta v besedilu uporabljeni angleški in španski jezik.

Besedilo ponovno dobimo s spremembo nastavitve na

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

Opombe – Tesseract deluje slabo, če so v sliki z več jeziki jeziki, podani v konfiguraciji, napačni ali pa sploh niso omenjeni. To lahko tudi precej zavede modul langdetect.


Uporaba tessdata_fast

Če je za vas glavna skrb hitrost, lahko svoje jezikovne modele tessdata zamenjate z modeli tessdata_fast, ki so 8-bitne celoštevilčne različice modelov tessdata.

Po tessdata_fast github -

To repozitorij vsebuje hitre celoštevilčne različice usposobljenih modelov za Odprtokodni OCR motor Tesseract.

Ti modeli delujejo samo z LSTM OCR motorjem Tesseract 4.

  • To je kompromis med hitrostjo in natančnostjo glede tega, kaj ponuja najboljše "vrednost za denar" v razmerju med hitrostjo in natančnostjo.
  • Za nekatere jezike je to še vedno najbolje, za večino pa ne.
  • Konfiguracija omrežja "najboljša vrednost za denar" je bila nato integrirana za nadaljnjo hitrost.
  • Večina uporabnikov bo želela te usposobljene datoteke z datotekami uporabljati za OCR in bodo poslane kot del distribucij Linuxa, npr. Ubuntu 18.04.
  • Fino uglaševanje / inkrementalni trening bo NE od teh fast modeli, saj gre za 8-bitno celo število.
  • Pri uporabi modelov v tem repozitoriju je podprt samo nov mehanizem OCR, ki temelji na LSTM. Zapuščina tesseract motor ni podprt s temi datotekami, zato Tesseractova oem načina '0' in '2' ne bosta delovala z njimi.

Uporabiti tessdata_fast modelov namesto tessdata, vse kar morate storiti je, da prenesete svoj tessdata_fast datoteka z jezikovnimi podatki iz tukaj in ga postavite v svoj $TESSDATA_PREFIX imenik.


Morate digitalizirati dokumente, potrdila ali račune, a preveč leni za kodiranje? Pojdite na Nanoneti in gradite OCR modele brezplačno!


Usposabljanje Tesseract za podatke po meri

Tesseract 4.00 vključuje nov mehanizem za prepoznavanje, ki temelji na nevronski mreži in zagotavlja bistveno večjo natančnost slik dokumentov. Nevronske mreže zahtevajo bistveno več podatkov o vadbi in trenirajo veliko počasneje kot osnovni Tesseract. Za jezike, ki temeljijo na latinščini, so bili obstoječi podatki o modelih usposobljeni za približno 400000 besedilnih vrstic, ki obsegajo približno 4500 pisav.

Če želite uspešno zagnati vadnico za vadbo Tesseract 4.0 LSTM, morate imeti delujočo namestitev orodij za vadbo Tesseract 4 in Tesseract 4 ter v nekaterih imenikih imeti tudi skripte za vadbo in zahtevane izurjene podatkovne datoteke. Obiščite github repo za datoteke in orodja.

Tesseract 4.00 potrebuje nekaj dni do nekaj tednov za trening iz nič. Kljub vsem tem novim podatkom o treningu je zato nekaj možnosti za trening:

  • Lepa melodija - Začenši z obstoječim izurjenim jezikom, se uri na svojih dodatnih podatkih. Na primer usposabljanje na lastnoročnem naboru podatkov in nekaj dodatnih pisav.
  • Odrežite zgornjo plast – iz omrežja in znova usposobiti novo zgornjo plast z uporabo novih podatkov. Če natančna nastavitev ne deluje, je to najverjetneje naslednja najboljša možnost. Analogija, zakaj je to uporabno, vzemite za primer modele, usposobljene za nabor podatkov ImageNet. Cilj je zgraditi klasifikator mačk ali psov, nižje plasti v modelu so dobre pri nizki ravni abstrakcije, kot so vogali, vodoravne in navpične črte, vendar višje plasti v modelu združujejo te lastnosti in zaznavajo mačja ali pasja ušesa, oči, nos in tako naprej. S preusposabljanjem le najvišjih slojev uporabljate znanje iz nižjih slojev in ga združujete z novim različnim naborom podatkov.
  • Vadite se iz nič - To je zelo počasen pristop, razen če imate za svojo težavo zelo reprezentativen in dovolj obsežen trening. Temu sledi najboljši vir za trening iz nič github repo.

Vodnik o tem, kako trenirati svoje podatke po meri in ustvarjati .traineddata datoteke tukaj, tukaj in tukaj.

V tej objavi v blogu ne bomo pokrivali kode za usposabljanje z uporabo Tesseract-a.

Kako OCR s Tesseractom, OpenCV in Pythonom

Omejitve zdravila Tesseract

Tesseract deluje najbolje, če je besedilo v ospredju čisto segmentirano iz ozadja. V praksi je lahko izjemno zahtevno zagotoviti tovrstne nastavitve. Obstajajo številni razlogi, da Tesseract morda ne bo dobil kakovostne slike, na primer če ima slika v ozadju hrup. Boljša kakovost slike (velikost, kontrast, strela) boljši je rezultat prepoznavanja. Potrebno je nekaj predhodne obdelave, da se izboljšajo rezultati OCR, slike je treba ustrezno prilagoditi, imeti čim večji kontrast slike in besedilo mora biti vodoravno poravnano. Tesseract OCR je precej zmogljiv, vendar ima naslednje omejitve.

Omejitve tesserakta, povzete na seznamu.

  • OCR ni tako natančen kot nekatere komercialne rešitve, ki so nam na voljo.
  • Ne deluje dobro s slikami, na katere vplivajo artefakti, vključno z delno okluzijo, popačeno perspektivo in kompleksnim ozadjem.
  • Ne more prepoznati rokopisa.
  • Morda najde nerazumnost in to sporoči kot izhod OCR.
  • Če dokument vsebuje jezike, ki niso navedeni v argumentih -l LANG, so lahko rezultati slabi.
  • Ni vedno dobro analizirati naravnega vrstnega reda branja dokumentov. Na primer, morda ne bo prepoznal, da dokument vsebuje dva stolpca, in bo poskusil združiti besedilo med stolpci.
  • Nekakovostna skeniranja lahko povzročijo OCR slabe kakovosti.
  • Ne razkriva informacij o tem, kateremu besedilu pripada družina pisav.


Seveda obstaja boljši, veliko preprostejši in bolj intuitiven način za izvajanje opravil OCR.


OCR z Nanoneti

Kako OCR s Tesseractom, OpenCV in Pythonom

O Nanonets OCR API omogoča enostavno izdelavo OCR modelov. Ni vam treba skrbeti za predhodno obdelavo slik ali skrbi za ujemanje predlog ali gradnjo motorjev, ki temeljijo na pravilih, da povečate natančnost vašega modela OCR.

Podatke lahko naložite, jih pripisujete, nastavite model za usposabljanje in čakate, da se prek uporabniškega vmesnika, ki temelji na brskalniku, napovedujejo napovedi, ne da bi napisali eno kodo, skrbeli za grafične procesorje ali našli prave arhitekture za svoje modele poglobljenega učenja. Prav tako lahko pridobite odzive JSON vsake napovedi, da jo vključite v svoje sisteme in zgradite aplikacije, ki delujejo na strojni način, zgrajene na najsodobnejših algoritmih in močni infrastrukturi.

Uporaba grafičnega vmesnika: https://app.nanonets.com/

API Nanonets-OCR lahko uporabite tudi po spodnjih korakih: ‌

1. korak: Klonirajte Repo, namestite odvisnosti

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

2. korak: Pridobite brezplačni ključ API
Pridobite brezplačni ključ API http://app.nanonets.com/#/keys

Kako OCR s Tesseractom, OpenCV in Pythonom

3. korak: Ključ API nastavite kot spremenljivko okolja

export NANONETS_API_KEY=YOUR_API_KEY_GOES_HERE

4. korak: Ustvarite nov model

python ./code/create-model.py

Opomba: To ustvari MODEL_ID, ki ga potrebujete za naslednji korak

5. korak: Dodajte ID modela kot spremenljivko okolja

export NANONETS_MODEL_ID=YOUR_MODEL_ID

Opomba: boste prejeli YOUR_MODEL_ID iz prejšnjega koraka

6. korak: Prenesite podatke o vadbi
Podatki o usposabljanju so v images (slikovne datoteke) in annotations (obvestila za slikovne datoteke)

python ./code/upload-training.py

7. korak: Vadite model
Ko so slike naložene, začnite usposabljati Model

python ./code/train-model.py

8. korak: Pridobite stanje modela
Vlak potrebuje približno 2 uri. Ko bo model usposobljen, boste dobili e-pošto. Medtem preverite stanje modela

python ./code/model-state.py

9. korak: Naredite napoved
Ko je model usposobljen. Lahko predvidevate s pomočjo modela

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


Nanoneti in ljudje v zanki

‌‌Zaslon »Zmerno« pomaga pri postopkih popravkov in vnosov ter zmanjša delovno obremenitev ročnega pregledovalca za skoraj 90 % in zmanjša stroške za 50 % za organizacijo.

Kako OCR s Tesseractom, OpenCV in Pythonom

Funkcije vključujejo

  1. Sledite pravilnim napovedim
  2. Sledite, kateri so napačni
  3. Popravite napačne
  4. Izbrišite napačne
  5. Izpolnite manjkajoče napovedi
  6. Filtrirajte slike z datumskimi obdobji
  7. Pridobite število moderiranih slik v primerjavi s slikami, ki niso moderirane

Vsa polja so strukturirana v grafični vmesnik, ki je preprost za uporabo, kar uporabniku omogoča, da izkoristi tehnologijo OCR in pomaga pri boljši kakovosti, ne da bi vtipkali kodo ali razumeli, kako tehnologija deluje.


Imate v mislih težavo z OCR? Želite zmanjšati stroške vnosa podatkov v vaši organizaciji? Pojdite na Nanoneti in zgraditi modele OCR izvleči besedilo iz slik or ekstrahirajte podatke iz datotek PDF!


zaključek

Tako kot je globoko učenje vplivalo na skoraj vse vidike računalniškega vida, enako velja za prepoznavanje znakov in rokopisa. Modeli, ki temeljijo na globokem učenju, so uspeli doseči natančnost prepoznavanja besedila brez primere, ki daleč presega tradicionalno pridobivanje informacij in strojno učenje obdelave slik pristopov.

Tesseract deluje dobro, če slike dokumentov sledijo naslednjim smernicam:

  • Čista segmentacija besedila v ospredju iz ozadja
  • Vodoravno poravnano in ustrezno prilagojeno
  • Kakovostna slika brez zamegljenosti in šuma

Najnovejša izdaja Tesseract 4.0 podpira OCR na osnovi globokega učenja, ki je bistveno natančnejši. Sam mehanizem OCR je zgrajen na omrežju Long Short-Term Memory (LSTM), nekakšnem ponavljajočem se nevronskem omrežju (RNN).

Tesseract je kot nalašč za skeniranje čistih dokumentov in ima precej visoko natančnost in variabilnost pisave, saj je bilo njegovo usposabljanje obsežno. Rekel bi, da je Tesseract uporabno orodje, če je vaša naloga skeniranje knjig, dokumentov in natisnjenega besedila na čisti beli podlagi.


Nadaljnje branje

Posodobitev:
Veliko ljudi nas je spraševalo, kako lahko dobijo datum v obliki besedila ali z uporabo, ko zazna datum ali katere koli druge specifične podatke, da bi jih lahko dodali na seznam.
Tukaj je odgovor:
V kodi za risanje omejevalnega polja okoli datumskega polja boste opazili črto, ki se ujema z vzorcem regularnega izraza z d['text']. Okvir nariše le, če se vzorec ujema. Vrednosti lahko preprosto izvlečete iz d['text'] ko se vzorec ujema, jih dodajte na seznam.

Posodobitev 2:
Da bi odgovorili na vprašanja o OCR-ju, ki ni v angleščini, smo posodobili dodatne sezname za branje.

Časovni žig:

Več od AI in strojno učenje