Kuidas OCR-i Tesseracti, OpenCV ja Python PlatoBlockchain Data Intelligence abil. Vertikaalne otsing. Ai.

OCR-i kasutamine Tesseracti, OpenCV ja Pythoniga

OCR-i kasutamine Tesseracti, OpenCV ja Pythoniga

Selles blogipostituses püüame selgitada enimkasutatud Tesseract Engine’i tehnoloogiat, mida täiendati uusimate optilise märgituvastuse alaste teadmistega. See artikkel on ka juhend/õpetus, kuidas rakendada OCR-i Pythonis Tesseracti mootori abil. Käime läbi järgmised moodulid:

  • Tesseracti OCR-i funktsioonid
  • OCR-i eeltöötlus OpenCV abil
  • Tesseracti käivitamine CLI ja Pythoniga
  • Tesseracti mootori piirangud

Sisukord

Sissejuhatus

OCR = OCR. Teisisõnu, OCR-süsteemid muudavad teksti kahemõõtmelise kujutise, mis võib sisaldada masintrükitud või käsitsi kirjutatud teksti selle kujutisest masinloetavaks tekstiks. OCR kui protsess koosneb üldiselt mitmest alamprotsessist, mida võimalikult täpselt teostada. Alamprotsessid on järgmised:

  • Pildi eeltöötlus
  • Teksti lokaliseerimine
  • Tähemärkide segmenteerimine
  • Tähemärkide äratundmine
  • Post töötlemine

Ülaltoodud loendis olevad alamprotsessid võivad loomulikult erineda, kuid need on ligikaudu sammud, mis on vajalikud automaatse märgituvastuse jaoks. OCR-tarkvara põhieesmärk on tuvastada ja jäädvustada kõik unikaalsed sõnad, kasutades kirjalike tekstimärkidest erinevaid keeli.

Peaaegu kaks aastakümmet on optilisi märgituvastussüsteeme laialdaselt kasutatud automaatse teksti sisestamise tagamiseks arvutisüsteemidesse. Kuid kogu selle aja jooksul on tavapärased OCR-süsteemid (nt tsooniline OCR) pole kunagi ületanud oma suutmatust lugeda rohkem kui käputäis kirjatüüpe ja lehevorminguid. Proportsionaalselt paigutatud tüüp (mis hõlmab peaaegu kõiki koopiaid), laserprinteri fondid ja isegi paljud mitteproportsionaalsed kirjutusmasina fondid on jäänud nende süsteemide kättesaamatuks. Selle tulemusena ei ole tavaline optiline tekstituvastus kunagi saavutanud suuremat kui marginaalset mõju digitaalseks vorminguks teisendamist vajavate dokumentide koguarvule.

OCR-i kasutamine Tesseracti, OpenCV ja Pythoniga
Optiline märgituvastusprotsess (viisakus)

Järgmise põlvkonna OCR-mootorid saavad nende ülalnimetatud probleemidega suurepäraselt hakkama, kasutades sügava õppimise valdkonna uusimaid uuringuid. Kasutades sügavate mudelite ja tohutute avalikult kättesaadavate andmekogumite kombinatsiooni, saavutavad mudelid antud ülesannete puhul tipptasemel täpsuse. Tänapäeval on võimalik ka sünteetilisi andmeid genereerida erinevate fontidega, kasutades generatiivseid võistlevaid võrgustikke ja väheseid muid generatiivseid lähenemisviise.

Optiline märgituvastus jääb a väljakutseid esitav probleem kui tekst esineb piiramatus keskkonnas, nt looduslikud stseenidgeomeetriliste moonutuste, keeruka tausta ja mitmekesiste fontide tõttu. Sellel tehnoloogial on endiselt tohutu potentsiaal tänu sügavale õppimisele põhineva OCR-i erinevatele kasutusjuhtumitele


Kas teil on OCR-probleem meeles? Kas soovite vähendada oma organisatsiooni andmesisestuskulusid? Suunduge poole Nanonetid ja luua OCR-mudeleid piltidelt teksti ekstraheerimine or eraldage PDF-failidest andmed AI-põhisega PDF OCR!


Avatud lähtekoodiga OCR-tööriistad

Seal on palju optiline märkide tuvastamine tarkvara saadaval. Ma ei leidnud nende vahel ühtegi kvaliteedivõrdlust, kuid kirjutan neist mõnest, mis tunduvad kõige arendajasõbralikumad.

Tesseract – avatud lähtekoodiga OCR-mootor, mis on OCR-i arendajate seas populaarsust kogunud. Kuigi selle rakendamine ja muutmine võib mõnikord olla valus, ei olnud turul kaua aega liiga palju tasuta ja võimsaid OCR-i alternatiive. Tesseract sai alguse Ph.D. uurimisprojekt HP Labsis, Bristolis. See saavutas populaarsuse ja selle töötas välja HP ​​aastatel 1984–1994. 2005. aastal andis HP välja Tesseracti avatud lähtekoodiga tarkvarana. Alates 2006. aastast on seda välja töötanud Google.

OCR-i kasutamine Tesseracti, OpenCV ja Pythoniga
Google'i trendide võrdlus erinevate avatud lähtekoodiga OCR-tööriistade jaoks

OCRopus – OCRopus on avatud lähtekoodiga OCR-süsteem, mis võimaldab nii teadlastel kui ka ettevõtetel OCR-komponente lihtsalt hinnata ja taaskasutada. Dokumendianalüüsi programmide kogum, mitte võtmed kätte OCR-süsteem. Selle oma dokumentidele rakendamiseks peate võib-olla tegema pildi eeltöötlust ja võib-olla ka uusi mudeleid koolitama. Lisaks tuvastusskriptidele endile on olemas mitmeid skripte põhitõe redigeerimiseks ja parandamiseks, veamäärade mõõtmiseks, segadusmaatriksite määramiseks, mida on lihtne kasutada ja redigeerida.


Silmadega – Ocular töötab kõige paremini käsipressiga prinditud dokumentidega, sealhulgas mitmes keeles kirjutatud dokumentidega. See töötab käsurealt kasutades. See on tipptasemel ajalooline OCR-süsteem. Selle peamised omadused on järgmised:

  • Tundmatute fontide järelevalveta õppimine: nõuab ainult dokumendipilte ja tekstikorpust.
  • Võime käsitleda müra tekitavaid dokumente: ebaühtlane tint, vahed, vertikaalne joondus
  • Tugi mitmekeelsetele dokumentidele, sealhulgas neile, millel on märkimisväärne sõnataseme koodivahetus.
  • Ortograafiliste variatsioonimustrite, sealhulgas arhailiste kirjaviiside ja printeri stenogrammide õppimine ilma järelevalveta.
  • Samaaegne, ühine transkriptsioon nii diplomaatiliseks (sõnasõnaliseks) kui ka normaliseeritud vormiks.


SwiftOCR – Mainin ka Swiftis kirjutatud OCR-mootorit, kuna Swifti kui süvaõppeks kasutatava arendusprogrammeerimiskeele kasutamise edendamiseks tehakse tohutuid areng. Kontrollige blogi et rohkem teada saada, miks. SwiftOCR on kiire ja lihtne OCR-teek, mis kasutab kujutiste tuvastamiseks närvivõrke. SwiftOCR väidab, et nende mootor ületab tuntud Tessaracti raamatukogu.

Selles blogipostituses paneme keskenduge Tesseracti OCR-ile ja saate lisateavet selle toimimise ja kasutamise kohta.


Tesseact OCR

Tesseract on avatud lähtekoodiga tekstituvastuse (OCR) mootor, mis on saadaval Apache 2.0 litsentsi alusel. Seda saab kasutada otse või (programmeerijate jaoks) API abil prinditud teksti eraldamiseks piltidest. See toetab väga erinevaid keeli. Tesseractil ei ole sisseehitatud GUI-d, kuid neid on mitu saadaval Kolmanda osapoole leht. Tesseract ühildub paljude programmeerimiskeelte ja raamistikega leitavate ümbriste kaudu siin. Seda saab kasutada koos olemasoleva paigutuse analüüsiga, et tuvastada teksti suures dokumendis, või seda saab kasutada koos välise tekstidetektoriga, et tuvastada teksti ühe tekstirea pildilt.

OCR-i kasutamine Tesseracti, OpenCV ja Pythoniga
OCR-i protsessivoog API loomiseks Tesseractiga alates a blogi postitus

Tesseract 4.00 sisaldab uut närvivõrgu alamsüsteemi, mis on konfigureeritud tekstirea tuvastajana. Selle päritolu on OCropuse Pythonil põhinev LSTM juurutus, kuid see on C++-s Tesseracti jaoks ümber kujundatud. Tesseracti närvivõrgusüsteem on TensorFlow'st varasem, kuid ühildub sellega, kuna on olemas võrgukirjelduskeel nimega Variable Graph Specification Language (VGSL), mis on saadaval ka TensorFlow jaoks.

Ühte märki sisaldava pildi äratundmiseks kasutame tavaliselt konvolutsioonilist närvivõrku (CNN). Suvalise pikkusega tekst on tähemärkide jada ja sellised probleemid lahendatakse RNN-ide abil ja LSTM on RNN-i populaarne vorm. Selle kohta lisateabe saamiseks lugege seda postitust LSTM.


Tehnoloogia – kuidas see töötab

LSTM-id on jadade õppimisel suurepärased, kuid aeglustavad palju, kui olekute arv on liiga suur. On empiirilisi tulemusi, mis viitavad sellele, et parem on paluda LSTM-il õppida pikk jada kui paljude klasside lühike jada. Tesseract töötati välja Pythonis OCRopuse mudelist, mis oli C++ LSMT hark, mida nimetatakse CLSTM-iks. CLSTM on LSTM-i korduva närvivõrgu mudeli rakendamine C++ keeles, kasutades numbrilisteks arvutusteks Eigeni teeki.

OCR-i kasutamine Tesseracti, OpenCV ja Pythoniga
Tesseact 3 OCR-protsess alates paber

Pärand Tesseract 3.x sõltus mitmeastmelisest protsessist, mille käigus saame eristada samme:

  • Sõna leidmine
  • Joone leidmine
  • Tegelaste klassifikatsioon

Sõnade leidmiseks korraldati tekstiridad plokkideks ning ridu ja piirkondi analüüsitakse fikseeritud sammuga või proportsionaalse teksti jaoks. Tekstiread jaotatakse sõnadeks erinevalt vastavalt tähevahe tüübile. Seejärel toimub äratundmine kahekäigulise protsessina. Esimeses läbimises püütakse iga sõna kordamööda ära tunda. Iga rahuldav sõna edastatakse treeningandmetena adaptiivsesse klassifikaatorisse. Seejärel saab adaptiivne klassifikaator võimaluse lehe alumises osas teksti täpsemalt ära tunda.

Tesseracti tööriista moderniseerimine oli pingutus koodi puhastamiseks ja uue LSTM-i mudeli lisamiseks. Sisendpilti töödeldakse kastides (ristkülik) rida-realt sisestades LSTM mudelisse ja andes väljundi. Alloleval pildil näeme, kuidas see töötab.

OCR-i kasutamine Tesseracti, OpenCV ja Pythoniga
Kuidas Tesseact kasutab LSTM-i mudelit esitlus

Pärast uue koolitustööriista lisamist ja mudeli väljaõpetamist paljude andmete ja fontidega saavutab Tesseract parema jõudluse. Siiski pole see piisavalt hea, et töötada käsitsi kirjutatud teksti ja veidrate fontidega. Katsetamiseks on võimalik pealmisi kihte peenhäälestada või ümber õpetada.


Tesseracti installimine

Tesseracti installimine Windowsi on leitud eelkompileeritud binaarfailide abil lihtne siin. Ärge unustage redigeerida keskkonnamuutujat "path" ja lisada tesserakti teed. Linuxi või Maci installimiseks on see installitud vähe käske.

Pärast installimist veenduge, et kõik töötab, tippides terminali või cmd käsu:

$ tesseract --version

Ja näete väljundit, mis on sarnane:

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

Pärast seda saate installida tesseracti jaoks Pythoni ümbrise, kasutades pip.
$ pip install pytesseract

Tesseracti teek on varustatud käepärase käsurea tööriistaga tesseract. Seda tööriista saame kasutada piltide OCR-i tegemiseks ja väljund salvestatakse tekstifaili. Kui tahame Tesseracti oma C++ või Pythoni koodi integreerida, kasutame Tesseracti API-t.


Tesseracti käitamine CLI-ga

Helistage pildil olevale Tesseracti mootorile pildi_tee ja teisendage pilt tekstiks, kirjutades käsureale rida rea ​​haaval, tippides järgmise:

$ tesseract image_path stdout

Väljundteksti kirjutamiseks faili:

$ tesseract image_path text_result.txt

Keelemudeli nime määramiseks kirjutage pärast keele otsetee -l lipp, vaikimisi kasutatakse inglise keelt:

$ tesseract image_path text_result.txt -l eng

Vaikimisi ootab Tesseract pildi segmentimisel tekstilehekülge. Kui soovite lihtsalt OCR-i teha väikeses piirkonnas, proovige teist segmenteerimisrežiimi, kasutades nuppu -psm argument. Saadaval on 14 režiimi, mida saab leida siin. Vaikimisi automatiseerib Tesseract lehe segmentimise täielikult, kuid ei tuvasta orientatsiooni ega skripti. Parameetri määramiseks tippige järgmine:

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

Samuti on veel üks oluline argument, OCR-i mootorirežiim (oem). Tesseract 4-l on kaks OCR-mootorit - Legacy Tesseracti mootor ja LSTM-mootor. Suvandi –oem abil on valitud neli töörežiimi.
0 Ainult pärandmootor.
1 Ainult närvivõrkude LSTM mootor.
2 Legacy + LSTM mootorit.
3 Vaikimisi, olenevalt sellest, mis on saadaval.

OCR-i kasutamine Tesseracti, OpenCV ja Pythoniga
Tesseracti OCR-mootori tulemus

OCR Pytesseracti ja OpenCV-ga

Pytesseract on Tesseract-OCR mootori ümbris. See on kasulik ka eraldiseisva tesserakti kutsumisskriptina, kuna see suudab lugeda kõiki Pillow ja Leptonica pilditeekide toetatud pilditüüpe, sealhulgas jpeg, png, gif, bmp, tiff ja muud. Lisateavet Pythoni lähenemisviisi kohta lugege siin. Selle õpetuse koodi leiate siit Hoidla.

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)

Tesseracti eeltöötlus

Et vältida kõiki viise, kuidas teie tesserakti väljundi täpsus võib langeda, peate veenduma, et pilt on õige eeltöödeldud.

See hõlmab skaleerimist, binariseerimist, müra eemaldamist, moonutamist jne.

Pildi OCR-i jaoks eeltöötlemiseks kasutage mõnda järgmistest pythoni funktsioonidest või järgige OpenCV dokumentatsioon.

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) 

Töötame näitega, et asju paremini näha. Selline näeb välja meie esialgne pilt –

OCR-i kasutamine Tesseracti, OpenCV ja Pythoniga
Aurebeshi kirjutamissüsteem

Pärast eeltöötlust järgmise koodiga

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

ja joonistades saadud kujutised, saame järgmised tulemused.

OCR-i kasutamine Tesseracti, OpenCV ja Pythoniga
Pilt pärast eeltöötlust

Algse pildi väljund näeb välja selline -

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

Erinevate eeltöödeldud piltide väljund näeb välja järgmine –

Canny serva pilt (mitte nii hea) -

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

lävega pilt –

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

Avapilt –

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


Kastide loomine teksti ümber

Pytesseracti abil saate oma OCR-i tulemuste piirdekasti teabe hankida, kasutades järgmist kood.

Allolev skript annab teile OCR-i käigus tesserakti poolt tuvastatud iga märgi piirdekasti teabe.

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)

Kui soovite tähemärkide asemel sõnade ümber kaste, siis funktsioon image_to_data tuleb kasuks. Saate kasutada image_to_data funktsioon, mille väljundtüüp on määratud pytesseractiga Output.

OCR-i kasutamine Tesseracti, OpenCV ja Pythoniga

Kas teil on OCR-probleem meeles? Kas soovite digiteerida arveid, PDF-e või numbrimärke? Suunduge poole Nanonetid ja looge OCR-mudeleid tasuta!


Kasutame tesserakti väljundite testimiseks ülaltoodud arve näidispilti.

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())

See peaks andma teile järgmise väljundi -
dict_keys(['level', 'page_num', 'block_num', 'par_num', 'line_num', 'word_num', 'left', 'top', 'width', 'height', 'conf', 'text'])

Seda sõnaraamatut kasutades saame tuvastada iga sõna, nende piirdekasti teabe, neis oleva teksti ja igaühe usaldusskoori.

Saate kastid joonistada, kasutades allolevat koodi -

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)

Arve näidispildi puhul näeks see välja järgmiselt.

OCR-i kasutamine Tesseracti, OpenCV ja Pythoniga


Tekstimalli sobitamine

Võtke näiteks proovimine leida pildil kuupäeva asukoht. Siin on meie malliks regulaaravaldise muster, mille sobitame oma OCR-i tulemustega, et leida sobivad piirdekastid. Me kasutame regex moodul ja image_to_data funktsioon selleks.

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)

Nagu oodatud, saame pildil ühe kasti arve kuupäeva ümber.

OCR-i kasutamine Tesseracti, OpenCV ja Pythoniga

Lehekülje segmenteerimise režiimid

Tekstilehekülge saab analüüsida mitmel viisil. Tesseract api pakub mitut lehe segmenteerimisrežiimi, kui soovite OCR-i käitada ainult väikeses piirkonnas või erinevates suundades jne.

Siin on loend toetatud lehtede segmenteerimisrežiimidest tesseracti järgi –

0 Ainult orientatsiooni ja skripti tuvastamine (OSD).
1 Automaatne lehe segmenteerimine OSD-ga.
2 Automaatne lehe segmenteerimine, kuid puudub OSD või OCR.
3 Täisautomaatne lehe segmenteerimine, kuid OSD puudub. (Vaikimisi)
4 Oletame, et üks veerg erineva suurusega tekstiga.
5 Oletame, et vertikaalselt joondatud tekstist koosneb ühtne plokk.
6 Oletame ühtse tekstiploki olemasolu.
7 Käsitlege pilti ühe tekstireana.
8 Käsitlege pilti ühe sõnana.
9 Käsitlege pilti ühe sõnana ringis.
10. Käsitlege pilti ühe märgina.
11 hõre tekst. Otsige üles võimalikult palju teksti kindlas järjekorras.
12 OSD-ga hõre tekst.
13 Toores rida. Käsitlege pilti ühe tekstireana, jättes mööda Tesseracti-spetsiifilistest häkkidest.

Lehe segmenteerimisrežiimi muutmiseks muutke --psm argumendi oma kohandatud konfiguratsioonistringis ükskõik millisele ülalmainitud režiimikoodile.


Tuvastage orientatsioon ja skript

Saate tuvastada oma pildil oleva teksti orientatsiooni ja ka skripti, milles see on kirjutatud. Järgmine pilt -
OCR-i kasutamine Tesseracti, OpenCV ja Pythoniga
pärast järgmise koodi läbimist -

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)

prindib järgmise väljundi.

angle: 90
script: Latin

Tuvastage ainult numbrid

Võtke see pilt näiteks -
OCR-i kasutamine Tesseracti, OpenCV ja Pythoniga
Sellelt pildilt eraldatud tekst näeb välja selline.

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

Saate tuvastada ainult numbrid, muutes konfiguratsiooni järgmisele

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

Väljund näeb välja selline.

-- . 43876324
172018
0 76496234

Tegelaste lisamine valgesse nimekirja

Oletagem, et soovite antud pildilt tuvastada ainult teatud tähemärke ja ignoreerige ülejäänud. Saate määrata oma märkide valge nimekirja (siin oleme kasutanud ainult väiketähti a-st z-ni), kasutades järgmist konfiguratsiooni.

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

Väljund -

customername
roject
tnvoleeno
ated alliumenergyservices
e
thovo

Tegelaste musta nimekirja lisamine

Kui olete kindel, et mõned märgid või väljendid kindlasti teie tekstis ei ilmu (muidu tagastab OCR musta nimekirja märkide asemel vale teksti), saate need märgid musta nimekirja lisada, kasutades järgmist konfiguratsiooni.

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

Väljund -

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

Tuvastage mitmes keeles

Saadaolevaid keeli saate kontrollida, tippides selle terminali

$ tesseract --list-langs

Tesseracti allalaadimiseks konkreetse keelekasutuse jaoks

$ sudo apt-get install tesseract-ocr-LANG

kus LANG on vajaliku keele kolmetäheline kood. Saate teada LANG väärtused siin.

Võite alla laadida .traindata vajaliku keele fail siin ja asetage see sisse $TESSDATA_PREFIX kataloog (see peaks olema sama, mis tessdata kataloog on installitud) ja see peaks olema kasutamiseks valmis.

märkused – Ainult keeled, millel on a .traineddata failivormingut toetab tesseract.

OCR-väljundi keele määramiseks kasutage nuppu -l LANG konfiguratsiooni argument, kus LANG on kolmetäheline kood selle keele jaoks, mida soovite kasutada.

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

Võtke see pilt näiteks -
OCR-i kasutamine Tesseracti, OpenCV ja Pythoniga
Saate töötada mitme keelega, muutes parameetri LANG kui sellist –

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

ja saate järgmise väljundi -

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

märkused – Keel, mis on määratud esimesena -l parameeter on esmane keel.

Kahjuks ei ole tesseractil funktsiooni pildil oleva teksti keele automaatseks tuvastamiseks. Alternatiivse lahenduse pakub teine ​​​​pythoni moodul, mida nimetatakse langdetect mida saab paigaldada pipi kaudu.

$ pip install langdetect

See moodul jällegi ei tuvasta teksti keelt pildi abil, vaid vajab keele tuvastamiseks stringisisendit. Parim viis selleks on kasutada esmalt tesseracti, et hankida OCR-tekst mis tahes keeltes, mis teile tundub, langdetect et leida, millised keeled on OCR-i tekstis, ja seejärel käivitada OCR leitud keeltega uuesti.

Oletame, et meil on tekst, mis arvasime olevat inglise ja portugali keeles.

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)

See peaks väljastama tekstis olevate keelte loendi ja nende tõenäosused.

[en:0.714282468983554, es:0.2857145605644145]

Keelekoodid, mida kasutab langdetect järgige ISO 639-1 koode. Võrdlemiseks kontrollige see ja see. Leiame, et tekstis on kasutatud hoopis inglise ja hispaania keelt.

Teksti saame uuesti, kui muudame konfiguratsiooni väärtuseks

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

märkused – Tesseract töötab halvasti, kui mitme keelega pildil on konfiguratsioonis määratud keeled valed või neid ei mainita üldse. See võib ka langdetecti moodulit üsna palju eksitada.


Tessdata_fast kasutamine

Kui kiirus valmistab teile suurt muret, saate oma tessdata keelemudelid asendada tessdata_fast mudelitega, mis on tessdata mudelite 8-bitised täisarvulised versioonid.

Vastavalt tessdata_fast github -

See hoidla sisaldab koolitatud mudelite kiireid täisarvuversioone Tesseract avatud lähtekoodiga OCR-mootor.

Need mudelid töötavad ainult Tesseract 4 LSTM OCR mootoriga.

  • Need on kiiruse/täpsuse kompromiss selle osas, mis pakkus parimat hinna ja kvaliteedi suhet kiiruse ja täpsuse osas.
  • Mõne keele jaoks on see endiselt parim, kuid enamiku jaoks mitte.
  • "Parima hinna ja kvaliteedi suhtega" võrgukonfiguratsioon muudeti seejärel kiiruse suurendamiseks täisarvudeks.
  • Enamik kasutajaid soovib OCR-i tegemiseks kasutada neid õpetatud andmefaile ja need tarnitakse osana Linuxi distributsioonidest, nt. Ubuntu 18.04.
  • Peenhäälestus/astmeline treening EI nendest võimalikud olla fast mudelid, kuna need on 8-bitised täisarvud.
  • Selle hoidla mudelite kasutamisel toetatakse ainult uut LSTM-põhist OCR-mootorit. Pärand tesseract mootorit nende failidega ei toetata, seega ei tööta Tesseracti originaalrežiimid 0 ja 2 nendega.

Kasutada tessdata_fast mudelite asemel tessdata, kõik, mida pead tegema, on alla laadida tessdata_fast keele andmefail siin ja asetage see enda sisse $TESSDATA_PREFIX kataloog.


Kas vajate dokumente, kviitungeid või arveid digitaliseerida, kuid olete kodeerimiseks liiga laisk? Suunduge poole Nanonetid ja looge OCR-mudeleid tasuta!


Tesseracti koolitus kohandatud andmete kohta

Tesseract 4.00 sisaldab uut närvivõrgupõhist tuvastusmootorit, mis tagab dokumendikujutistele oluliselt suurema täpsuse. Närvivõrgud nõuavad oluliselt rohkem treeningandmeid ja treenivad palju aeglasemalt kui baas Tesseract. Ladinakeelsete keelte puhul on olemasolevaid mudeliandmeid treenitud umbes 400000 4500 tekstirea kohta, mis hõlmavad umbes XNUMX fonti.

Tesseract 4.0 LSTM-i koolitusõpetuse edukaks käitamiseks peab teil olema Tesseract 4 ja Tesseract 4 koolitustööriistade töötav install ning teatud kataloogides peavad olema ka koolitusskriptid ja nõutavad koolitatud andmefailid. Külastage githubi repo failide ja tööriistade jaoks.

Tesseract 4.00-l kulub nullist treenimiseks paar päeva kuni paar nädalat. Isegi kõigi nende uute treeningandmetega on siin mõned treenimisvõimalused:

  • Hea toon – Alustades olemasolevast koolitatud keelest, treenige oma konkreetseid lisaandmeid. Näiteks käsitsi kirjutatud andmestiku ja mõne täiendava fondi koolitus.
  • Lõika pealmine kiht ära – võrgust ja õpetage uute andmete abil ümber uus ülemine kiht. Kui peenhäälestus ei tööta, on see tõenäoliselt parim valik. Analoogia, miks see kasulik on, võtke näiteks ImageNeti andmestikul koolitatud mudelid. Eesmärgiks on luua kassi või koera klassifikaator, mudeli alumised kihid suudavad hästi madala abstraktsioonitasemega nurkade, horisontaalsete ja vertikaalsete joontena, kuid mudeli kõrgemad kihid kombineerivad neid omadusi ja tuvastavad kassi või koera kõrvad, silmad, nina. ja nii edasi. Ainult ülemiste kihtide ümberõpetamisel kasutate madalamate kihtide teadmisi ja kombineerite oma uue erineva andmestikuga.
  • Õppige uuesti nullist – See on väga aeglane lähenemine, välja arvatud juhul, kui teil on oma probleemi jaoks väga esinduslik ja piisavalt mahukas treeningkomplekt. Parim ressurss nullist treenimiseks on selle järgimine githubi repo.

Juhend kohandatud andmete õppimiseks ja loomiseks .traineddata failid leiate siin, siin ja siin.

Me ei käsitle selles ajaveebi postituses Tesseracti kasutamise koodi.

OCR-i kasutamine Tesseracti, OpenCV ja Pythoniga

Tesseracti piirangud

Tesseract töötab kõige paremini siis, kui esiplaani tekst on taustast selgelt segmenteeritud. Praktikas võib seda tüüpi seadistuste tagamine olla äärmiselt keeruline. On mitmeid põhjuseid, miks te ei pruugi Tesseractist kvaliteetset väljundit saada, näiteks kui pildi taustal on müra. Mida parem on pildikvaliteet (suurus, kontrast, välk), seda parem on tuvastamise tulemus. OCR-i tulemuste parandamiseks on vaja pisut eeltöötlust, pildid peavad olema sobivalt skaleeritud, võimalikult suure kontrastsusega ja tekst peab olema horisontaalselt joondatud. Tesseract OCR on üsna võimas, kuid sellel on järgmised piirangud.

Tesseracti piirangud on loendis kokku võetud.

  • OCR ei ole nii täpne kui mõned meile saadaolevad kaubanduslikud lahendused.
  • Ei toimi hästi piltidega, mida mõjutavad artefaktid, sealhulgas osaline oklusioon, moonutatud perspektiiv ja keeruline taust.
  • See ei ole võimeline käekirja ära tundma.
  • See võib leida jaburat ja teatada sellest OCR-i väljundina.
  • Kui dokument sisaldab keeli, mis on väljaspool -l LANG argumentides antud keeli, võivad tulemused olla kehvad.
  • See ei ole alati hea dokumentide loomuliku lugemisjärjestuse analüüsimisel. Näiteks ei pruugi see tuvastada, et dokument sisaldab kahte veergu, ja võib proovida teksti veergude vahel ühendada.
  • Halva kvaliteediga skannimine võib tekitada halva kvaliteediga OCR-i.
  • See ei avalda teavet selle kohta, millisesse fondiperekonda tekst kuulub.


Loomulikult on OCR-ülesannete täitmiseks parem, palju lihtsam ja intuitiivsem viis.


OCR nanovõrkudega

OCR-i kasutamine Tesseracti, OpenCV ja Pythoniga

. Nanonets OCR API võimaldab hõlpsasti luua OCR-mudeleid. OCR-mudeli täpsuse suurendamiseks ei pea te muretsema oma piltide eeltöötlemise pärast ega muretsema mallide sobitamise pärast või reeglipõhiseid mootoreid ehitama.

Saate oma andmed üles laadida, märkmeid teha, mudelit treenima panna ja oodata ennustuste saamist brauseripõhise kasutajaliidese kaudu, kirjutamata ühtki koodirida, muretsemata GPU-de pärast või oma süvaõppemudelite jaoks õigeid arhitektuure otsimata. Samuti saate hankida iga ennustuse JSON-i vastused, et integreerida see oma süsteemidega ja luua masinõppe toega rakendusi, mis põhinevad nüüdisaegsetel algoritmidel ja tugeval infrastruktuuril.

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

Võite kasutada ka Nanonets-OCR API-d, järgides alltoodud samme.‌

1. samm: kloonige Repo, installige sõltuvused

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

2. samm: hankige oma tasuta API võti
Hankige oma tasuta API võti aadressilt http://app.nanonets.com/#/keys

OCR-i kasutamine Tesseracti, OpenCV ja Pythoniga

3. samm: määrake API võti keskkonnamuutujaks

export NANONETS_API_KEY=YOUR_API_KEY_GOES_HERE

4. samm: looge uus mudel

python ./code/create-model.py

Märge: See genereerib MODEL_ID, mida vajate järgmiseks sammuks

5. samm: lisage keskkonnamuutujana mudeli ID

export NANONETS_MODEL_ID=YOUR_MODEL_ID

Märge: saate eelmisest sammust YOUR_MODEL_ID

6. samm: laadige üles koolitusandmed
Treeningu andmed leiate aadressilt images (pildifailid) ja annotations (märkused pildifailide jaoks)

python ./code/upload-training.py

7. samm: treenige mudel
Kui pildid on üles laaditud, alustage mudeli treenimist

python ./code/train-model.py

8. toiming: hankige mudeli olek
Modelli treenimiseks kulub ~2 tundi. Kui modell on koolitatud, saate meili. Vahepeal kontrollite mudeli olekut

python ./code/model-state.py

9. samm: ennustage
Kui modell on koolitatud. Mudelit kasutades saate teha ennustusi

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


Nanonetid ja inimesed ahelas

‌‌Mõõdukas ekraan aitab parandus- ja sisestamisprotsesse ning vähendab käsitsi ülevaataja töökoormust peaaegu 90% ja vähendab organisatsiooni kulusid 50%.

OCR-i kasutamine Tesseracti, OpenCV ja Pythoniga

Funktsioonide hulka kuuluvad

  1. Jälgige ennustusi, mis on õiged
  2. Jälgige, millised on valed
  3. Tehke ebatäpsed parandused
  4. Kustutage need, mis on valed
  5. Täitke puuduvad ennustused
  6. Filtreerige pilte kuupäevavahemikega
  7. Saate vaadata modereeritud piltide arvu võrreldes modereerimata piltidega

Kõik väljad on struktureeritud hõlpsasti kasutatavaks GUI-ks, mis võimaldab kasutajal kasutada OCR-tehnoloogiat ja aidata seda protsessi käigus paremaks muuta, ilma et peaksite koodi tippima või tehnoloogia toimimist mõistma.


Kas teil on OCR-probleem meeles? Kas soovite vähendada oma organisatsiooni andmesisestuskulusid? Suunduge poole Nanonetid ja luua OCR-mudeleid piltidelt teksti ekstraheerimine or eraldage PDF-failidest andmed!


Järeldus

Nii nagu sügav õppimine on mõjutanud peaaegu kõiki arvutinägemise tahke, kehtib sama ka tegelase tuvastamise ja käekirjatuvastuse kohta. Süvaõppel põhinevad mudelid on suutnud saavutada enneolematu tekstituvastuse täpsuse, mis ületab palju traditsioonilist teabe väljavõtmine ja masinõppe pilditöötlus lähenemisi.

Tesseract toimib hästi, kui dokumendikujutised järgivad järgmisi juhiseid.

  • Puhastage esiplaani teksti segmenteerimine taustast
  • Horisontaalselt joondatud ja sobivalt skaleeritud
  • Kvaliteetne pilt ilma hägususe ja mürata

Tesseract 4.0 uusim väljalase toetab süvaõppepõhist OCR-i, mis on oluliselt täpsem. OCR-i mootor ise on üles ehitatud pika lühiajalise mälu (LSTM) võrgule, omamoodi korduvale närvivõrgule (RNN).

Tesseract sobib suurepäraselt puhaste dokumentide skannimiseks ning sellel on üsna suur täpsus ja fontide varieeruvus, kuna selle koolitus oli kõikehõlmav. Ütleksin, et Tesseract on hea tööriist, kui teie ülesandeks on raamatute, dokumentide ja trükitud teksti skannimine puhtal valgel taustal.


Lisalugemist

Värskenda:
Paljud inimesed küsisid meilt, kuidas nad saavad kuupäeva saada teksti kujul või kasutada seda, kui see tuvastab kuupäeva või muid konkreetseid andmeid, et nad saaksid loendisse lisada.
Siin on vastus:
Kuupäevakasti ümber piirava kasti joonistamise koodis märkate joont, mis ühtib regex-mustriga d['text']. See joonistab kasti ainult siis, kui muster sobib. Võite lihtsalt väärtused välja võtta d['text'] kui muster ühtib, ja lisage need loendisse.

Uuenda 2:
Mitteingliskeelse OCR-iga seotud küsimuste lahendamiseks oleme värskendanud täiendavaid lugemisloendeid.

Ajatempel:

Veel alates Tehisintellekt ja masinõpe