Hvordan OCR med Tesseract, OpenCV og Python PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Hvordan OCR med Tesseract, OpenCV og Python

Hvordan OCR med Tesseract, OpenCV og Python

I dette blogginnlegget vil vi prøve å forklare teknologien bak den mest brukte Tesseract Engine, som ble oppgradert med den nyeste kunnskapen som er undersøkt innen optisk tegngjenkjenning. Denne artikkelen vil også tjene som en veiledning / veiledning om hvordan du implementerer OCR i python ved hjelp av Tesseract-motoren. Vi vil gå gjennom følgende moduler:

  • Tesseract OCR-funksjoner
  • Forbehandling av OCR ved bruk av OpenCV
  • Kjører Tesseract med CLI og Python
  • Begrensninger for Tesseract-motoren

Innholdsfortegnelse

Introduksjon

OCR = Optical Character Recognition. Med andre ord, OCR-systemer transformerer et todimensjonalt bilde av tekst, som kan inneholde maskinutskrevet eller håndskrevet tekst fra bilderepresentasjonen til maskinlesbar tekst. OCR som prosess består generelt av flere delprosesser for å utføre så nøyaktig som mulig. Delprosessene er:

  • Forbehandling av bildet
  • Tekstlokalisering
  • Karakter segmentering
  • Karaktergjenkjenning
  • Postbehandling

Delprosessene i listen over kan selvfølgelig variere, men dette er omtrent nødvendige trinn for å nærme seg automatisk tegngjenkjenning. I OCR-programvare er hovedmålet å identifisere og fange opp alle unike ord ved hjelp av forskjellige språk fra skriftlige teksttegn.

I nesten to tiår har optiske tegngjenkjenningssystemer blitt mye brukt for å gi automatisert tekstinntasting i datastyrte systemer. Men i all denne tiden, konvensjonelle OCR-systemer (som sone OCR) har aldri overvunnet deres manglende evne til å lese mer enn en håndfull skrifttyper og sideformater. Typer med proporsjonal avstand (som inkluderer praktisk talt alle typesett-kopier), laserskriverfonter, og til og med mange ikke-proporsjonale skrivemaskinfonter, har holdt seg utenfor rekkevidden til disse systemene. Og som et resultat har konvensjonell OCR aldri oppnådd mer enn en marginal innvirkning på det totale antallet dokumenter som trenger konvertering til digital form.

Hvordan OCR med Tesseract, OpenCV og Python
Prosess for gjenkjenning av optiske tegn (høflighet)

Neste generasjons OCR-motorer takler disse problemene nevnt ovenfor veldig bra ved å bruke den nyeste forskningen innen dyp læring. Ved å utnytte kombinasjonen av dype modeller og store datasett som er offentlig tilgjengelige, oppnår modellene toppmoderne nøyaktigheter på gitte oppgaver. Nå for tiden er det også mulig å generere syntetiske data med forskjellige skrifttyper ved hjelp av generative motstandernettverk og få andre generative tilnærminger.

Optisk karaktergjenkjenning forblir en utfordrende problem når tekst forekommer i ubegrensede miljøer, som f.eks naturlige scenerpå grunn av geometriske forvrengninger, komplekse bakgrunner og forskjellige skrifttyper. Teknologien har fremdeles et enormt potensial på grunn av de forskjellige brukssakene til dyplæringsbasert OCR som


Har du et OCR-problem i tankene? Vil du redusere organisasjonens kostnader for dataregistrering? Gå over til Nanonetter og bygge OCR-modeller til trekke ut tekst fra bilder or trekke ut data fra PDF-filer med AI basert PDF OCR!


Åpen kildekode OCR-verktøy

Det finnes en rekke Optisk karaktergjenkjennelse programvare tilgjengelig. Jeg fant ingen kvalitetssammenligning mellom dem, men jeg vil skrive om noen av dem som ser ut til å være de mest utviklervennlige.

Tesseract - en OCR-motor med åpen kildekode som har fått popularitet blant OCR-utviklere. Selv om det noen ganger kan være smertefullt å implementere og modifisere, var det ikke for mange gratis og kraftige OCR-alternativer på markedet i lengste tid. Tesseract begynte som doktorgrad. forskningsprosjekt i HP Labs, Bristol. Den ble populær og ble utviklet av HP mellom 1984 og 1994. I 2005 ga HP ut Tesseract som en programvare med åpen kildekode. Siden 2006 er den utviklet av Google.

Hvordan OCR med Tesseract, OpenCV og Python
google trender sammenligning for forskjellige open source OCR verktøy

OCRopus - OCRopus er et OCR-system med åpen kildekode som gjør det enkelt å evaluere og gjenbruke OCR-komponentene av både forskere og selskaper. En samling dokumentanalyseprogrammer, ikke et nøkkelferdig OCR-system. For å bruke den på dokumentene dine, kan det hende du trenger å gjøre noe bildebehandling, og muligens også trene nye modeller. I tillegg til gjenkjenningsskriptene i seg selv, er det flere skript for redigering og korrigering av bakkesannhet, måling av feilrater, bestemmelse av forvirringsmatriser som er enkle å bruke og redigere.


ocular - Ocular fungerer best på dokumenter som skrives ut med håndtrykk, inkludert de som er skrevet på flere språk. Den fungerer ved hjelp av kommandolinjen. Det er et moderne OCR-system. Dens viktigste funksjoner er:

  • Uovervåket læring av ukjente skrifttyper: krever kun dokumentbilder og et tekstkorpus.
  • Evne til å håndtere støyende dokumenter: inkonsekvent blekk, avstand, vertikal justering
  • Støtte for flerspråklige dokumenter, inkludert de som har betydelig kodebytte på ordnivå.
  • Uovervåket læring av ortografiske variasjonsmønstre, inkludert arkaiske stavemåter og skriverforkortelse.
  • Samtidig, felles transkripsjon til både diplomatiske (bokstavelige) og normaliserte former.


SwiftOCR - Jeg vil også nevne OCR-motoren skrevet i Swift, siden det er en enorm utvikling i å fremme bruken av Swift som utviklingsprogrammeringsspråk som brukes til dyp læring. Sjekk ut blog for å finne ut mer hvorfor. SwiftOCR er et raskt og enkelt OCR-bibliotek som bruker nevrale nettverk for bildegjenkjenning. SwiftOCR hevder at motoren deres overgår det velkjente Tessaract-biblioteket.

I dette blogginnlegget vil vi sette fokus på Tesseract OCR og finn ut mer om hvordan det fungerer og hvordan det brukes.


Tesseract OCR

Tesseract er en åpen kildekode-tekstgjenkjenningsmotor (OCR), tilgjengelig under Apache 2.0-lisensen. Den kan brukes direkte, eller (for programmerere) ved å bruke en API for å trekke ut trykt tekst fra bilder. Den støtter et bredt utvalg av språk. Tesseract har ikke en innebygd GUI, men det er flere tilgjengelige fra 3rdParty side. Tesseract er kompatibel med mange programmeringsspråk og rammer gjennom innpakninger som finnes her.. Den kan brukes med eksisterende layoutanalyse for å gjenkjenne tekst i et stort dokument, eller den kan brukes sammen med en ekstern tekstdetektor for å gjenkjenne tekst fra et bilde av en enkelt tekstlinje.

Hvordan OCR med Tesseract, OpenCV og Python
OCR Process Flow for å bygge API med Tesseract fra a blogginnlegg

Tesseract 4.00 inkluderer et nytt delsystem for nevrale nettverk konfigurert som en tekstlinjegjenkjenning. Den har sin opprinnelse i OCRopus sin Python-baserte LSTM implementering, men er redesignet for Tesseract i C ++. Nevrale nettverkssystem i Tesseract forhåndsdaterer TensorFlow, men er kompatibelt med det, da det er et nettverksbeskrivelsesspråk kalt Variable Graph Specification Language (VGSL), som også er tilgjengelig for TensorFlow.

For å gjenkjenne et bilde som inneholder et enkelt tegn, bruker vi vanligvis et Convolutional Neural Network (CNN). Tekst med vilkårlig lengde er en sekvens av tegn, og slike problemer løses ved bruk av RNN-er, og LSTM er en populær form for RNN. Les dette innlegget for å lære mer om LSTM.


Teknologi - Hvordan det fungerer

LSTM er gode til å lære sekvenser, men reduserer mye når antall stater er for stort. Det er empiriske resultater som antyder at det er bedre å be en LSTM om å lære en lang sekvens enn en kort sekvens av mange klasser. Tesseract utviklet fra OCRopus-modellen i Python som var en gaffel av en LSMT i C ++, kalt CLSTM. CLSTM er en implementering av LSTM tilbakevendende nevrale nettverksmodell i C ++ ved bruk av Eigen-biblioteket for numeriske beregninger.

Hvordan OCR med Tesseract, OpenCV og Python
Tesseract 3 OCR-prosess fra papir

Legacy Tesseract 3.x var avhengig av flertrinnsprosessen der vi kan skille trinn:

  • Ordfunn
  • Linjefunn
  • Karakterklassifisering

Ordfunn ble gjort ved å organisere tekstlinjer i klatter, og linjene og regionene analyseres for fast tonehøyde eller proporsjonal tekst. Tekstlinjer er delt inn i ord forskjellig i henhold til typen tegnavstand. Anerkjennelse fortsetter deretter som en to-pass prosess. I første omgang blir det forsøkt å gjenkjenne hvert ord etter tur. Hvert ord som er tilfredsstillende overføres til en adaptiv klassifikator som treningsdata. Den adaptive klassifisereren får da sjansen til å gjenkjenne tekst mer nøyaktig nede på siden.

Modernisering av Tesseract-verktøyet var et forsøk på å rense kode og legge til en ny LSTM-modell. Inngangsbildet behandles i bokser (rektangel) linje for linje som mates inn i LSTM-modellen og gir utdata. På bildet nedenfor kan vi visualisere hvordan det fungerer.

Hvordan OCR med Tesseract, OpenCV og Python
Hvordan Tesseract bruker LSTM-modellen presentasjon

Etter å ha lagt til et nytt treningsverktøy og trent modellen med mye data og skrifter, oppnår Tesseract bedre ytelse. Fremdeles ikke bra nok til å jobbe med håndskrevet tekst og rare skrifter. Det er mulig å finjustere eller omskole topplag for eksperimentering.


Installere Tesseract

Det er enkelt å installere tesseract på Windows med de forhåndskompilerte binærfunnene som er funnet her.. Ikke glem å redigere "sti" miljøvariabelen og legge til tesserakt bane. For Linux eller Mac installasjon er den installert med få kommandoer.

Etter installasjonen, bekreft at alt fungerer ved å skrive kommando i terminalen eller cmd:

$ tesseract --version

Og du vil se utdataene som ligner på:

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

Du kan installere python-innpakningen for tesseract etter dette ved hjelp av pip.
$ pip install pytesseract

Tesseract-biblioteket leveres med et praktisk kommandolinjeverktøy som heter tesseract. Vi kan bruke dette verktøyet til å utføre OCR på bilder, og utdataene lagres i en tekstfil. Hvis vi ønsker å integrere Tesseract i C ++ - eller Python-koden, vil vi bruke Tesseracts API.


Kjører Tesseract med CLI

Ring Tesseract-motoren på bildet med image_path og konverter bilde til tekst, skrevet linje for linje i ledeteksten ved å skrive følgende:

$ tesseract image_path stdout

Slik skriver du utdatateksten i en fil:

$ tesseract image_path text_result.txt

For å spesifisere navnet på språkmodellen, skriv språkgenvei etter -l flagg, som standard tar det engelsk språk:

$ tesseract image_path text_result.txt -l eng

Som standard forventer Tesseract en side med tekst når den segmenterer et bilde. Hvis du bare ønsker å OCR en liten region, prøv en annen segmenteringsmodus ved å bruke –Psm argument. Det er 14 moduser tilgjengelig som kan bli funnet her.. Som standard automatiserer Tesseract sidesegmenteringen fullt ut, men utfører ikke orientering og skriptdeteksjon. For å spesifisere parameteren, skriv inn følgende:

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

Det er også et viktig argument, OCR-motormodus (oem). Tesseract 4 har to OCR-motorer - Legacy Tesseract-motor og LSTM-motor. Det er fire driftsmåter valgt med alternativet –oem.
0 Kun eldre motor.
1 Bare nevnte LSTM-motor.
2 Legacy + LSTM-motorer.
3 Standard, basert på hva som er tilgjengelig.

Hvordan OCR med Tesseract, OpenCV og Python
Resultat av Tesseract OCR-motoren

OCR med Pytesseract og OpenCV

Pytesseract er en innpakning for Tesseract-OCR Engine. Det er også nyttig som et frittstående innkallingsskript til tesseract, da det kan lese alle bildetyper som støttes av Pillow og Leptonica bildebehandlingsbibliotek, inkludert jpeg, png, gif, bmp, tiff og andre. Les mer om Python-tilnærming her.. Koden for denne veiledningen finner du i denne Repository.

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)

Forbehandling av Tesseract

For å unngå alle måtene din tesserakt-utgangsnøyaktighet kan synke, må du sørge for at bildet er riktig forhåndsbehandlet.

Dette inkluderer omskalering, binærisering, støyfjerning, vridning osv.

For å forhåndsbehandle bilde for OCR, bruk en av følgende pythonfunksjoner eller følg OpenCV-dokumentasjon.

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) 

La oss jobbe med et eksempel for å se ting bedre. Slik ser originalbildet vårt ut –

Hvordan OCR med Tesseract, OpenCV og Python
Aurebesh-skriftsystemet

Etter forhåndsbehandling med følgende kode

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

og plotte de resulterende bildene, får vi følgende resultater.

Hvordan OCR med Tesseract, OpenCV og Python
Bildet etter forbehandling

Utgangen for det originale bildet ser slik ut -

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

Slik ser utdataene for forskjellige forhåndsbehandlede bilder ut –

Canny edge image (ikke så bra) -

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

Terskelbilde -

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

Åpningsbilde -

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


Få bokser rundt tekst

Ved hjelp av Pytesseract kan du få informasjon om begrensningsboksen for OCR-resultatene dine ved hjelp av følgende kode.

Skriptet nedenfor vil gi deg informasjon om avgrensningsruten for hvert tegn oppdaget av tesseract under 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)

Hvis du vil ha bokser rundt ord i stedet for tegn, funksjonen image_to_data vil komme godt med. Du kan bruke image_to_data funksjon med utgangstype spesifisert med pytesseract Output.

Hvordan OCR med Tesseract, OpenCV og Python

Har du et OCR-problem i tankene? Vil du digitalisere fakturaer, PDF-filer eller nummerplater? Gå over til Nanonetter og bygg OCR-modeller gratis!


Vi vil bruke eksemplet på fakturabildet ovenfor for å teste ut våre tesseract-utdata.

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

Dette skal gi deg følgende utgang -
dict_keys(['level', 'page_num', 'block_num', 'par_num', 'line_num', 'word_num', 'left', 'top', 'width', 'height', 'conf', 'text'])

Ved hjelp av denne ordboken kan vi oppdage hvert ord, informasjon om avgrensningsruten, teksten i dem og tillitspoengene for hvert.

Du kan plotte boksene ved å bruke koden nedenfor -

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)

Slik ser dette ut for bildet av en eksempelfaktura.

Hvordan OCR med Tesseract, OpenCV og Python


Tekstmal matching

Ta eksemplet med å prøve å finne hvor en dato er i et bilde. Her vil malen vår være et vanlig uttrykksmønster som vi vil matche med våre OCR-resultater for å finne de riktige avgrensningsfeltene. Vi vil bruke regex modulen og image_to_data funksjon for dette.

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)

Som forventet får vi en rute rundt fakturadatoen i bildet.

Hvordan OCR med Tesseract, OpenCV og Python

Sidesegmenteringsmodus

Det er flere måter en side med tekst kan analyseres på. Tesseract api tilbyr flere sidesegmenteringsmodus hvis du bare vil kjøre OCR på en liten region eller i forskjellige retninger osv.

Her er en liste over støttede sidesegmenteringsmoduser etter tesseract –

0 Kun orientering og skriptdeteksjon (OSD).
1 Automatisk sidesegmentering med OSD.
2 Automatisk sidesegmentering, men ingen OSD eller OCR.
3 Helautomatisk sidesegmentering, men ingen OSD. (Misligholde)
4 Anta en enkelt kolonne med tekst i variable størrelser.
5 Anta en enkelt uniform blokk med vertikalt justert tekst.
6 Anta en enkelt uniform tekstblokk.
7 Behandle bildet som en enkelt tekstlinje.
8 Behandle bildet som et enkelt ord.
9 Behandle bildet som et enkelt ord i en sirkel.
10 Behandle bildet som et enkelt tegn.
11 Sparsom tekst. Finn så mye tekst som mulig uten spesiell rekkefølge.
12 Sparsom tekst med OSD.
13 Rå linje. Behandle bildet som en enkelt tekstlinje, og omgå hacks som er Tesseract-spesifikke.

Hvis du vil endre sidesegmenteringsmodus, endrer du --psm argument i din tilpassede konfigurasjonsstreng til noen av de ovennevnte moduskodene.


Oppdag orientering og skript

Du kan oppdage retningen til teksten i bildet ditt og også skriptet der den er skrevet. Følgende bilde -
Hvordan OCR med Tesseract, OpenCV og Python
etter å ha kjørt gjennom følgende kode -

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)

skriver ut følgende utdata.

angle: 90
script: Latin

Oppdag bare sifre

Ta dette bildet for eksempel -
Hvordan OCR med Tesseract, OpenCV og Python
Teksten hentet fra dette bildet ser slik ut.

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

Du kan bare gjenkjenne sifre ved å endre konfigurasjonen til følgende

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

Utgangen vil se slik ut.

-- . 43876324
172018
0 76496234

Hvitliste tegn

Si at du bare vil oppdage bestemte tegn fra det gitte bildet og ignorere resten. Du kan spesifisere hvitlisten over tegn (her har vi bare brukt alle små bokstaver fra a til z) ved å bruke følgende konfigurasjon.

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

Utgang -

customername
roject
tnvoleeno
ated alliumenergyservices
e
thovo

Blacklisting-tegn

Hvis du er sikker på at noen tegn eller uttrykk definitivt ikke vil dukke opp i teksten din (OCR vil returnere feil tekst i stedet for svarteliste tegn ellers), kan du svarteliste disse tegnene ved å bruke følgende konfigurasjon.

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

Utgang -

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

Oppdag på flere språk

Du kan sjekke språkene som er tilgjengelige ved å skrive dette i terminalen

$ tesseract --list-langs

For å laste ned tesseract for et spesifikt språkbruk

$ sudo apt-get install tesseract-ocr-LANG

der LANG er koden på tre bokstaver for språket du trenger. Du kan finne ut LANG-verdiene her..

Du kan laste ned .traindata filen for språket du trenger fra her. og plasser den i $TESSDATA_PREFIX katalog (dette skal være det samme som der tessdata katalogen er installert) og den skal være klar til bruk.

Merknader - Bare språk som har en .traineddata filformat støttes av tesseract.

For å spesifisere språket du trenger OCR-utgangen på, bruk -l LANG argument i konfigurasjonen der LANG er koden på 3 bokstaver for hvilket språk du vil bruke.

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

Ta dette bildet for eksempel -
Hvordan OCR med Tesseract, OpenCV og Python
Du kan jobbe med flere språk ved å endre LANG-parameteren som sådan -

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

og du vil få følgende utdata -

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

Merknader - Språket som ble spesifisert først til -l parameteren er hovedspråket.

Dessverre har tesseract ikke en funksjon for å oppdage språket i teksten i et bilde automatisk. En alternativ løsning er gitt av en annen python-modul kalt langdetect som kan installeres via pip.

$ pip install langdetect

Denne modulen oppdager ikke språket i tekst som bruker et bilde, men trenger strenginngang for å oppdage språket fra. Den beste måten å gjøre dette på er å først bruke tesseract for å få OCR-tekst på hvilke språk du måtte føle er der inne, ved å bruke langdetect for å finne hvilke språk som er inkludert i OCR-teksten, og kjør deretter OCR igjen med språkene som er funnet.

Si at vi har en tekst vi trodde var på engelsk og portugisisk.

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)

Dette skal gi en liste over språk i teksten og sannsynlighetene deres.

[en:0.714282468983554, es:0.2857145605644145]

Språkkodene som brukes av langdetect følg ISO 639-1-koder. For å sammenligne, vennligst sjekk denne og denne. Vi finner at språket som brukes i teksten er engelsk og spansk i stedet.

Vi får teksten igjen ved å endre konfigurasjonen til

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

Merknader – Tesseract presterer dårlig når, i et bilde med flere språk, språkene spesifisert i konfigurasjonen er feil eller ikke er nevnt i det hele tatt. Dette kan også villede langdetect-modulen ganske mye.


Bruke tessdata_fast

Hvis hastighet er viktig for deg, kan du erstatte tessdata-språkmodellene dine med tessdata_fast-modeller som er 8-biters heltallversjoner av tessdata-modellene.

I følge tessdata_fast GitHub -

Dette depotet inneholder raske heltallversjoner av trente modeller for Tesseract OCR-motor med åpen kildekode.

Disse modellene fungerer bare med LSTM OCR-motoren fra Tesseract 4.

  • Dette er et hastighet/nøyaktighet-kompromiss med hensyn til hva som ga best "verdi for pengene" i hastighet vs. nøyaktighet.
  • For noen språk er dette fremdeles best, men for de fleste ikke.
  • Nettverkskonfigurasjonen "best verdi for pengene" ble deretter integrert for ytterligere hastighet.
  • De fleste brukere vil ønske å bruke disse trente datafilene til å gjøre OCR, og disse vil bli sendt som en del av Linux-distribusjoner, f.eks. Ubuntu 18.04.
  • Finjustering / inkrementell trening vil IKKE være mulig fra disse fast modeller, ettersom de er 8-biters heltall.
  • Når du bruker modellene i dette depotet, støttes bare den nye LSTM-baserte OCR-motoren. Arven tesseract motoren støttes ikke med disse filene, så Tesseracts oem-modus '0' og '2' vil ikke fungere med dem.

Å bruke tessdata_fast modeller i stedet for tessdata, alt du trenger å gjøre er å laste ned din tessdata_fast språk datafil fra her. og plasser den i din $TESSDATA_PREFIX katalogen.


Trenger du å digitalisere dokumenter, kvitteringer eller fakturaer, men for lat til å kode? Gå over til Nanonetter og bygg OCR-modeller gratis!


Trening Tesseract om tilpassede data

Tesseract 4.00 inkluderer en ny nevral nettverksbasert gjenkjenningsmotor som gir betydelig høyere nøyaktighet på dokumentbilder. Nevrale nettverk krever betydelig mer treningsdata og trener mye tregere enn basen Tesseract. For latinbaserte språk er eksisterende modelldata gitt opplært på rundt 400000 tekstlinjer som strekker seg over 4500 skrifter.

For å kunne kjøre Tesseract 4.0 LSTM-opplæringsopplæringen, må du ha en fungerende installasjon av Tesseract 4 og Tesseract 4 Training Tools og også ha treningsskriptene og nødvendige trente datafiler i visse kataloger. Besøk github repo for filer og verktøy.

Tesseract 4.00 tar noen dager til et par uker for trening fra bunnen av. Selv med alle disse nye treningsdataene, er det derfor få muligheter for trening:

  • Fin tone - Begynn med et eksisterende opplært språk, tren på dine spesifikke tilleggsdata. For eksempel trening på et håndskrevet datasett og noen ekstra skrifter.
  • Klipp av topplaget – fra nettverket og trene opp et nytt topplag ved å bruke de nye dataene. Hvis finjustering ikke fungerer, er dette mest sannsynlig det nest beste alternativet. Analogien hvorfor dette er nyttig, ta for eksempel modeller som er trent på ImageNet-datasettet. Målet er å bygge en katte- eller hundeklassifiserer, lavere lag i modellen er gode på abstraksjon på lavt nivå som hjørner, horisontale og vertikale linjer, men høyere lag i modellen kombinerer disse funksjonene og oppdager kattens eller hundens ører, øyne, nese og så videre. Ved å omskolere kun de øverste lagene bruker du kunnskap fra de lavere lagene og kombinerer med ditt nye forskjellige datasett.
  • Omskole fra bunnen av - Dette er en veldig langsom tilnærming, med mindre du har et veldig representativt og tilstrekkelig stort treningssett for problemet ditt. Den beste ressursen for opplæring fra bunnen av er å følge dette github repo.

En guide om hvordan du kan trene på dine tilpassede data og lage .traineddata filer kan bli funnet her., her. og her..

Vi vil ikke dekke koden for opplæring ved bruk av Tesseract i dette blogginnlegget.

Hvordan OCR med Tesseract, OpenCV og Python

Begrensninger av Tesseract

Tesseract fungerer best når det er en ren segmentering av forgrunnen fra bakgrunnen. I praksis kan det være ekstremt utfordrende å garantere disse typer oppsett. Det er mange grunner til at du kanskje ikke får god kvalitet fra Tesseract, som om bildet har støy i bakgrunnen. Jo bedre bildekvalitet (størrelse, kontrast, lyn), jo bedre blir gjenkjennelsesresultatet. Det krever litt forbehandling for å forbedre OCR-resultatene, bildene må skaleres riktig, ha så mye bildekontrast som mulig, og teksten må være horisontalt justert. Tesseract OCR er ganske kraftig, men har følgende begrensninger.

Tesseract begrensninger oppsummert i listen.

  • OCR er ikke så nøyaktig som noen kommersielle løsninger som er tilgjengelige for oss.
  • Gjør det ikke bra med bilder påvirket av artefakter, inkludert delvis okklusjon, forvrengt perspektiv og kompleks bakgrunn.
  • Det er ikke i stand til å gjenkjenne håndskrift.
  • Det kan finne gibberish og rapportere dette som OCR-utgang.
  • Hvis et dokument inneholder språk utenfor de som er gitt i -l LANG-argumentene, kan resultatene være dårlige.
  • Det er ikke alltid bra å analysere den naturlige leserekkefølgen på dokumenter. Det kan for eksempel mislykkes i å gjenkjenne at et dokument inneholder to kolonner, og kan prøve å koble sammen tekst på tvers av kolonnene.
  • Skanninger av dårlig kvalitet kan gi OCR av dårlig kvalitet.
  • Den avslører ikke informasjon om hva fontfamilieteksten tilhører.


Det er selvfølgelig en bedre, mye enklere og mer intuitiv måte å utføre OCR-oppgaver på.


OCR med Nanonets

Hvordan OCR med Tesseract, OpenCV og Python

De Nanonets OCR API lar deg enkelt bygge OCR-modeller. Du trenger ikke å bekymre deg for å forhåndsbehandle bildene dine eller bekymre deg for å matche maler eller bygge regelbaserte motorer for å øke nøyaktigheten til OCR-modellen.

Du kan laste opp dataene dine, kommentere dem, stille inn modellen til å trene og vente på å få spådommer gjennom et nettleserbasert brukergrensesnitt uten å skrive en eneste kodelinje, bekymre deg for GPU-er eller finne de riktige arkitekturene for dine dype læringsmodeller. Du kan også anskaffe JSON-svarene fra hver prediksjon for å integrere den med dine egne systemer og bygge maskinlæringsapper som er bygd på topp moderne algoritmer og en sterk infrastruktur.

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

Du kan også bruke Nanonets-OCR API ved å følge trinnene nedenfor: ‌

Trinn 1: Klone repoen, installer avhengigheter

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

Trinn 2: Få din gratis API-nøkkel
Få din gratis API-nøkkel fra http://app.nanonets.com/#/keys

Hvordan OCR med Tesseract, OpenCV og Python

Trinn 3: Sett API-nøkkelen som en miljøvariabel

export NANONETS_API_KEY=YOUR_API_KEY_GOES_HERE

Trinn 4: Lag en ny modell

python ./code/create-model.py

OBS: Dette genererer en MODEL_ID som du trenger for neste trinn

Trinn 5: Legg til modell-id som miljøvariabel

export NANONETS_MODEL_ID=YOUR_MODEL_ID

OBS: får du YOUR_MODEL_ID fra forrige trinn

Trinn 6: Last opp treningsdataene
Treningsdataene finnes i images (bildefiler) og annotations (merknader for bildefilene)

python ./code/upload-training.py

Trinn 7: Togmodell
Når bildene er lastet opp, begynn å trene modellen

python ./code/train-model.py

Trinn 8: Få modelltilstand
Modellen tar ~ 2 timer å trene. Du vil få en e-post når modellen er opplært. I mellomtiden sjekker du modellens tilstand

python ./code/model-state.py

Trinn 9: Gjør prediksjon
Når modellen er trent. Du kan lage spådommer ved å bruke modellen

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


Nanonetter og mennesker i sløyfen

‌‌Moderate-skjermen hjelper korrigerings- og inntastingsprosessene og reduserer den manuelle kontrollørens arbeidsmengde med nesten 90 % og reduserer kostnadene med 50 % for organisasjonen.

Hvordan OCR med Tesseract, OpenCV og Python

Funksjonene inkluderer

  1. Spor spådommer som er riktige
  2. Spor hvilke som er gale
  3. Gjør rettelser til de unøyaktige
  4. Slett de som er gale
  5. Fyll ut de manglende spådommene
  6. Filtrer bilder med datoperioder
  7. Få tellinger av modererte bilder mot de som ikke modereres

Alle feltene er strukturert i en brukervennlig GUI som lar brukeren dra nytte av OCR-teknologien og hjelpe til med å gjøre det bedre mens de går, uten å måtte skrive inn noen kode eller forstå hvordan teknologien fungerer.


Har du et OCR-problem i tankene? Vil du redusere organisasjonens kostnader for dataregistrering? Gå over til Nanonetter og bygge OCR-modeller til trekke ut tekst fra bilder or trekke ut data fra PDF-filer!


konklusjonen

Akkurat som dyp læring har påvirket nesten alle fasett av datasyn, gjelder det samme for karaktergjenkjenning og håndskriftgjenkjenning. Dyplæringsbaserte modeller har klart å oppnå enestående tekstgjenkjenningsnøyaktighet, langt utover tradisjonell informasjonsutvinning og maskinlæring bildebehandling tilnærminger.

Tesseract fungerer godt når dokumentbilder følger de neste retningslinjene:

  • Ren segmentering av forgrunnen fra bakgrunnen
  • Horisontalt justert og skalert riktig
  • Høykvalitetsbilde uten uskarphet og støy

Den siste utgivelsen av Tesseract 4.0 støtter dyp læringsbasert OCR som er betydelig mer nøyaktig. Selve OCR-motoren er bygget på et Long Short-Term Memory (LSTM) nettverk, et slags Recurrent Neural Network (RNN).

Tesseract er perfekt for skanning av rene dokumenter og har ganske høy nøyaktighet og skriftvariabilitet siden opplæringen var omfattende. Jeg vil si at Tesseract er et godt verktøy hvis oppgaven din er å skanne bøker, dokumenter og trykt tekst på en ren hvit bakgrunn.


Videre Reading

Oppdatering:
Mange mennesker spurte oss hvordan de kan få dato i form av tekst eller bruke når den oppdager dato eller andre spesifikke data slik at de kan legge til listen.
Her er svaret:
I koden for å tegne en avgrensningsramme rundt datoboksen, vil du legge merke til en linje som samsvarer med regex-mønsteret med d['text']. Den tegner bare en boks hvis mønsteret stemmer. Du kan ganske enkelt trekke ut verdiene fra d['text'] når mønsteret samsvarer og legg dem til en liste.

Oppdatering 2:
For å svare på spørsmål rundt ikke-engelsk OCR, har vi oppdatert ytterligere leselister.

Tidstempel:

Mer fra AI og maskinlæring