Optisk karaktergjenkjenning med Tesseract

1. Oversikt

Med utviklingen av teknologi innen AI og maskinlæring, trenger vi verktøy for å gjenkjenne tekst i bilder.

I denne opplæringen vil vi utforske Tesseract, en optisk tegngjenkjenning (OCR) -motor, med noen få eksempler på bilde-til-tekst-behandling.

2. Tesseract

Tesseract er en OCR-motor med åpen kildekode utviklet av HP det anerkjenner mer enn 100 språk, sammen med støtte fra ideografiske og høyre mot venstre språk. Også, vi kan trene Tesseract til å gjenkjenne andre språk.

Det inneholder to OCR-motorer for bildebehandling - en LSTM (Long Short Term Memory) OCR-motor og en eldre OCR-motor som fungerer ved å gjenkjenne tegnmønstre.

OCR-motoren bruker Leptonica-biblioteket til å åpne bildene og støttene forskjellige utdataformater som ren tekst, hOCR (HTML for OCR), PDF og TSV.

3. Oppsett

Tesseract er tilgjengelig for nedlasting / installasjon på alle større operativsystemer.

Hvis vi for eksempel bruker macOS, kan vi installere OCR-motoren ved hjelp av Homebrew:

bryg installer tesseract 

Vi vil observere at pakken inneholder et sett med språkdatafiler, som engelsk, og orientering og skriptgjenkjenning (OSD), som standard:

==> Installere tesseract ==> Nedlasting //homebrew.bintray.com/bottles/tesseract-4.1.1.high_sierra.bottle.tar.gz ==> Helling tesseract-4.1.1.high_sierra.bottle.tar.gz = => Advarsler Denne formelen inneholder bare datafilene "eng", "osd" og "snum". Hvis du trenger andre språk som støttes, kjører du 'brew install tesseract-lang'. ==> Sammendrag /usr/local/Cellar/tesseract/4.1.1: 65 filer, 29,9 MB

Imidlertid kan vi installere tesseract-lang modul for støtte for andre språk:

bryg installer tesseract-lang

For Linux kan vi installere Tesseract ved hjelp av yum kommando:

yum installer tesseract

På samme måte, la oss legge til språkstøtte:

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

Her har vi lagt til språkopplærte data for engelsk og spansk.

For Windows kan vi få installatørene fra Tesseract på UB Mannheim.

4. Tesseract kommandolinje

4.1. Løpe

Vi kan bruke kommandolinjeverktøyet Tesseract til å trekke ut tekst fra bilder.

La oss for eksempel ta et øyeblikksbilde av nettstedet vårt:

Så kjører vi tesseract kommando om å lese baeldung.png øyeblikksbilde og skriv teksten i output.txt fil:

tesseract baeldung.png utgang

De output.txt filen vil se ut:

a REST with Spring Learn Spring (ny!) Den kanoniske referansen for å bygge en produksjonsgrad API med Spring. Fra ingen erfaring til å faktisk bygge ting. y Java Ukentlige anmeldelser

Vi kan se at Tesseract ikke har behandlet hele innholdet i bildet. Fordi nøyaktigheten av utdataene avhenger av forskjellige parametere som bildekvalitet, språk, sidesegmentering, opplærte data og motor som brukes til bildebehandling.

4.2. Språkstøtte

Som standard bruker OCR-motoren engelsk når den behandler bildene. Vi kan imidlertid erklære språket ved å bruke -l argument:

La oss se på et annet eksempel med flerspråklig tekst:

La oss først behandle bildet med standard engelsk språk:

tesseract multiLanguageText.png-utdata 

Utgangen vil se ut 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.

La oss deretter behandle bildet med portugisisk.

tesseract multiLanguageText.png utgang -l por

Så, OCR-motoren vil også oppdage portugisiske bokstaver:

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åte kan vi erklære en kombinasjon av språk:

tesseract multiLanguageText.png utgang -l spa + por

Her vil OCR-motoren først og fremst bruke spansk og deretter portugisisk til bildebehandling. Imidlertid kan utdataene variere basert på rekkefølgen på språkene vi spesifiserer.

4.3. Sidesegmenteringsmodus

Tesseract støtter forskjellige sidesegmenteringsmodi som OSD, automatisk sidesegmentering og sparsom tekst.

Vi kan erklære sidesegmenteringsmodus ved å bruke –Psm argument med verdien 0 til 13 for forskjellige moduser:

tesseract multiLanguageText.png-utgang --psm 1

Her, ved å definere verdien 1, har vi erklært automatisk sidesegmentering med OSD for bildebehandling.

La oss ta en titt på alle sidesegmenteringsmodusene som støttes:

4.4. OCR-motormodus

På samme måte kan vi bruke forskjellige motormoduser som legacy og LSTM-motor mens vi behandler bildene.

For dette kan vi bruke –Oem argument med verdien 0 til 3:

tesseract multiLanguageText.png-utgang --oem 1

OCR-motormodusene er:

4.5. Tessdata

Tesseract inneholder to sett med trente data for LSTM OCR-motoren - best trente LSTM-modeller og raske heltallversjoner av trente LSTM-modeller.

Førstnevnte gir bedre nøyaktighet, og sistnevnte gir bedre hastighet i bildebehandling.

Tesseract gir også en kombinert trent data med støtte for både eldre og LSTM OCR-motor.

Hvis vi bruker Legacy OCR-motoren uten å gi de støttede opplærte dataene, vil Tesseract kaste en feil:

Feil: Tesseract (eldre) motor forespurt, men komponenter er ikke tilstede i /usr/local/share/tessdata/eng.traineddata !! Kunne ikke laste inn språk 'eng' Tesseract kunne ikke laste inn noen språk!

Så vi bør laste ned det nødvendige .traineddata filer og enten holde dem i standard tessdata sted eller erklær stedet ved hjelp av –Tessdata-dir argument:

tesseract multiLanguageText.png-utgang --tessdata-dir / image-processing / tessdata

4.6. Produksjon

Vi kan erklære et argument for å få ønsket utdataformat.

For eksempel for å få søkbar PDF-utdata:

tesseract multiLanguageText.png output pdf

Dette vil skape output.pdf fil med det søkbare tekstlaget (med gjenkjent tekst) på bildet du får.

Tilsvarende for hOCR-utgang:

tesseract multiLanguageText.png utdata hocr

Vi kan også bruke tesseract –hjelp og tesseract –help-ekstra kommandoer for mer informasjon om tesseract-kommandolinjebruk.

5. Tess4J

Tess4J er en Java-wrapper for Tesseract API-er som gir OCR-støtte for forskjellige bildeformater som JPEG, GIF, PNG og BMP.

La oss først legge til det siste tess4j Maven avhengighet til vår pom.xml:

 net.sourceforge.tess4j tess4j 4.5.1 

Deretter kan vi bruke Tesseract klasse levert av tess4j for å behandle bildet:

Filbilde = 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 (bilde);

Her har vi satt verdien av Databane til katalogplasseringen som inneholder osd.traineddata og eng.traineddata filer.

Endelig kan vi bekrefte String utdata fra bildet som er behandlet:

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

I tillegg kan vi bruke setHocr metode for å få HTML-utdata:

tesseract.setHocr (sant);

Som standard behandler biblioteket hele bildet. Vi kan imidlertid behandle en bestemt del av bildet ved å bruke java.awt.Rektangel objekt mens du ringer doOCR metode:

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

I likhet med Tess4J kan vi bruke Tesseract Platform til å integrere Tesseract i Java-applikasjoner. Dette er en JNI-innpakning av Tesseract API-er basert på JavaCPP Presets-biblioteket.

6. Konklusjon

I denne artikkelen har vi utforsket Tesseract OCR-motoren med noen få eksempler på bildebehandling.

Først undersøkte vi tesseract kommandolinjeverktøy for å behandle bildene, sammen med et sett med argumenter som -l, –Psm og –Oem.

Så har vi utforsket tess4j, en Java-wrapper for å integrere Tesseract i Java-applikasjoner.

Som vanlig er alle kodeimplementeringene tilgjengelige på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found