Optisk karaktergenkendelse med Tesseract

1. Oversigt

Med udviklingen af ​​teknologi inden for AI og maskinindlæring har vi brug for værktøjer til at genkende tekst i billeder.

I denne vejledning undersøger vi Tesseract, en OCR-motor (optisk karaktergenkendelse) med et par eksempler på billed-til-tekst-behandling.

2. Tesseract

Tesseract er en open source OCR-motor udviklet af HP det anerkender mere end 100 sprog sammen med støtte fra ideografiske og højre-mod-venstre sprog. Også, vi kan træne Tesseract til at genkende andre sprog.

Det indeholder to OCR-motorer til billedbehandling - en LSTM (Long Short Term Memory) OCR-motor og en ældre OCR-motor, der fungerer ved at genkende karaktermønstre.

OCR-motoren bruger Leptonica-biblioteket til at åbne billederne og understøtter forskellige outputformater som almindelig tekst, hOCR (HTML til OCR), PDF og TSV.

3. Opsætning

Tesseract er tilgængelig til download / installation på alle større operativsystemer.

For eksempel, hvis vi bruger macOS, kan vi installere OCR-motoren ved hjælp af Homebrew:

bryg installer tesseract 

Vi bemærker, at pakken som standard indeholder et sæt sprogdatafiler, som engelsk, og orientering og scriptdetektion (OSD):

==> Installation af tesseract ==> Download //homebrew.bintray.com/bottles/tesseract-4.1.1.high_sierra.bottle.tar.gz ==> Hældning af tesseract-4.1.1.high_sierra.bottle.tar.gz = => Advarsler Denne formel indeholder kun datafiler "eng", "osd" og "snum". Hvis du har brug for andre understøttede sprog, skal du køre `brew install tesseract-lang`. ==> Oversigt /usr/local/Cellar/tesseract/4.1.1: 65 filer, 29.9MB

Vi kan dog installere tesseract-lang modul til understøttelse af andre sprog:

bryg installation tesseract-lang

Til Linux kan vi installere Tesseract ved hjælp af yum kommando:

yum installer tesseract

Lad os ligeledes tilføje sprogstøtte:

yum install tesseract-langpack-eng yum install tesseract-langpack-spa

Her har vi tilføjet de sproguddannede data for engelsk og spansk.

Til Windows kan vi hente installatørerne fra Tesseract hos UB Mannheim.

4. Tesseract kommandolinje

4.1. Løb

Vi kan bruge kommandolinjeværktøjet Tesseract til at udtrække tekst fra billeder.

Lad os for eksempel tage et øjebliksbillede af vores websted:

Derefter kører vi tesseract kommando til at læse baeldung.png snapshot og skriv teksten i output.txt fil:

tesseract baeldung.png output

Det output.txt filen ser ud:

en REST med Spring Learn Spring (ny!) Den kanoniske reference til opbygning af en produktionsklasse API med Spring. Fra ingen erfaring til faktisk at bygge ting. y Java Ugentlige anmeldelser

Vi kan se, at Tesseract ikke har behandlet hele billedets indhold. Fordi nøjagtigheden af ​​output afhænger af forskellige parametre som billedkvalitet, sprog, sidesegmentering, uddannede data og motor, der bruges til billedbehandling.

4.2. Sprogstøtte

Som standard bruger OCR-motoren engelsk ved behandling af billederne. Vi kan dog erklære sproget ved hjælp af -l argument:

Lad os se på et andet eksempel med flersproget tekst:

Lad os først behandle billedet med standard engelsk sprog:

tesseract multiLanguageText.png output 

Outputtet ser ud som:

Der, .schnelle ”braune Fuchs springt iiber den faulen Hund. Le renard brun «rapide» saute par-dessus le chien paresseux. La volpe marrone rapida salta sopra il cane pigro. El zorro marron rapido salta sobre el perro perezoso. En raposa marrom rapida salta sobre 0 cao preguicoso.

Lad os derefter behandle billedet med det portugisiske sprog:

tesseract multiLanguageText.png output -l por

Så OCR-motoren registrerer også portugisiske bogstaver:

Der, .schnelle ”braune Fuchs springt iber den faulen Hund. Le renard brun «rapide» saute par-dessus le chien paresseux. La volpe marrone rapida salta sopra il cane pigro. El zorro marrón rápido salta sobre el perro perezoso. En raposa marrom rápida salta sobre o cão preguiçoso.

På samme måde kan vi erklære en kombination af sprog:

tesseract multiLanguageText.png output -l spa + por

Her bruger OCR-motoren primært spansk og derefter portugisisk til billedbehandling. Outputtet kan dog variere afhængigt af rækkefølgen af ​​de sprog, vi specificerer.

4.3. Sidesegmenteringstilstand

Tesseract understøtter forskellige sidesegmenteringstilstande som OSD, automatisk sidesegmentering og sparsom tekst.

Vi kan erklære sidesegmenteringstilstand ved hjælp af –Psm argument med en værdi på 0 til 13 for forskellige tilstande:

tesseract multiLanguageText.png output --psm 1

Her har vi ved at definere en værdi på 1 erklæret den automatiske sidesegmentering med OSD til billedbehandling.

Lad os se på alle understøttede sidesegmenttilstande:

4.4. OCR-motortilstand

På samme måde kan vi bruge forskellige motortilstande som legacy og LSTM-motor, mens vi behandler billederne.

Til dette kan vi bruge –Oem argument med en værdi på 0 til 3:

tesseract multiLanguageText.png output --oem 1

OCR-motortilstande er:

4.5. Tessdata

Tesseract indeholder to sæt trænede data til LSTM OCR-motoren - bedst uddannede LSTM-modeller og hurtige heltalversioner af uddannede LSTM-modeller.

Førstnævnte giver bedre nøjagtighed, og sidstnævnte giver bedre hastighed i billedbehandling.

Desuden leverer Tesseract en kombineret trænet data med support til både ældre og LSTM OCR-motor.

Hvis vi bruger den ældre OCR-motor uden at levere de understøttede uddannede data, vil Tesseract kaste en fejl:

Fejl: Tesseract (ældre) motor anmodet om, men komponenter findes ikke i /usr/local/share/tessdata/eng.traineddata !! Mislykket indlæsning af sprog 'eng' Tesseract kunne ikke indlæse nogen sprog!

Så vi skal downloade det nødvendige .traineddata filer og enten holde dem i standard tessdata placering eller erklære placeringen ved hjælp af –Tessdata-dir argument:

tesseract multiLanguageText.png output --tessdata-dir / billedbehandling / tessdata

4.6. Produktion

Vi kan erklære et argument for at få det krævede outputformat.

For eksempel for at få søgbar PDF-output:

tesseract multiLanguageText.png output pdf

Dette vil skabe output.pdf fil med det søgbare tekstlag (med genkendt tekst) på det medfølgende billede.

Til hOCR-output:

tesseract multiLanguageText.png output hocr

Vi kan også bruge tesseract –hjælp og tesseract –help-ekstra kommandoer for mere information om tesseract-kommandolinjebrug.

5. Tess4J

Tess4J er en Java-indpakning til Tesseract API'er, der giver OCR-understøttelse til forskellige billedformater som JPEG, GIF, PNG og BMP.

Lad os først tilføje det seneste tess4j Maven afhængighed af vores pom.xml:

 net.sourceforge.tess4j tess4j 4.5.1 

Derefter kan vi bruge Tesseract klasse leveret af tess4j at behandle billedet:

Filbillede = ny fil ("src / main / resources / images / multiLanguageText.png"); Tesseract tesseract = ny Tesseract (); tesseract.setDatapath ("src / main / resources / tessdata"); tesseract.setLanguage ("eng"); tesseract.setPageSegMode (1); tesseract.setOcrEngineMode (1); Strengresultat = tesseract.doOCR (billede);

Her har vi indstillet værdien af datapath til den katalogplacering, der indeholder osd.traineddata og eng.traineddata filer.

Endelig kan vi kontrollere Snor output af billedet behandlet:

Assert.assertTrue (result.contains ("Der, .schnelle" braune Fuchs springt ")); Assert.assertTrue (result.contains ("salta sopra il cane pigro. El zorro"));

Derudover kan vi bruge sætHocr metode til at få HTML-output:

tesseract.setHocr (sand);

Som standard behandler biblioteket hele billedet. Vi kan dog behandle et bestemt afsnit af billedet ved hjælp af java.awt.Rektangel objekt, mens du ringer til doOCR metode:

resultat = tesseract.doOCR (imageFile, nyt rektangel (1200, 200));

I lighed med Tess4J kan vi bruge Tesseract Platform til at integrere Tesseract i Java-applikationer. Dette er en JNI-indpakning af Tesseract API'er baseret på JavaCPP Presets-biblioteket.

6. Konklusion

I denne artikel har vi udforsket Tesseract OCR-motoren med et par eksempler på billedbehandling.

Først undersøgte vi tesseract kommandolinjeværktøj til at behandle billederne sammen med et sæt argumenter som f.eks -l, –Psm og –Oem.

Så har vi udforsket tess4j, en Java-indpakning til integration af Tesseract i Java-applikationer.

Som normalt er alle kodeimplementeringer tilgængelige på GitHub.