Tess4j tutorial med maven og java

Tess4j tutorial med maven og java
I dagens epoke når dataene alltid vokser, arbeider menneskene som arbeider med data hver dag med ustrukturerte tekstdata. Å analysere alle disse dataene med en raskere hastighet er nødvendig og mange ganger, avgjørende også. Noen ganger står vi overfor et spørsmål om å trekke ut data fra PDF -filer. Å trekke ut tekstdata fra PDF -filen er tungvint og en stor manuell oppgave også.

Ville det ikke bare være kult hvis vi hadde en programmert pakke som kunne godta noen PDF -filer og returnere teksten den inneholder? Det viser seg at vi har et bibliotek for å gjøre nettopp det. Tesseract er et open source -ramme skrevet i C ++ som lar oss jobbe med PNG -bilder, JPG -bilder og PDF -filer og returnere teksten filen inneholder slik at vi kan bruke den teksten som vi vil.

I denne leksjonen om Tesseract med Java og Maven, vil vi se hvordan vi kan utvikle en enkel Java -applikasjon som godtar en PDF -fil og returnerer teksten den inneholder med Tesseract OCR -tjeneste. Vi vil også se hvorfor Tesseract er så vellykket. En av grunnene til at Tesseract er så vellykket pakke er at den støttes av Google selv.

For å jobbe med denne leksjonen, er det viktig å installere Tesseract OCR -motor på systemet ditt. Gå over til den offisielle GitHub -repoen for å følge installasjonsinstruksjonene. Rett fra GitHub-repoen, “Tesseract ble opprinnelig utviklet på Hewlett-Packard Laboratories Bristol og på Hewlett-Packard Co, Greeley Colorado mellom 1985 og 1994, med noen flere endringer gjort i 1996 til port til Windows, og noen C ++ izing i 1998. I 2005 ble Tesseract åpen hentet av HP. Siden 2006 er den utviklet av Google.”

Maven -avhengighet

Vi starter med å lage et enkelt Java -prosjekt som er basert på Maven og inneholder følgende Maven -avhengighet:


nett.SourceForge.tess4j
tess4j
4.3.0

Dette er en maven -avhengighet som er gitt av et innpakningsprosjekt som du her kan henvise til å få mer forståelse. Fra nettstedet blir Tess4j ganske enkelt beskrevet som en Java JNA -innpakning for Tesseract OCR API.

Prosjektstruktur

Vi har et veldig enkelt prosjekt med en enkelt kildekodefil. Den nåværende prosjektstrukturen vil se slik ut:

Som vi nevnte har vi en enkelt kildekodefil som vi vil bruke. Vi kan legge en PDF -fil i ressursmappen litt senere for å demonstrere å lese en PDF -fil og trekke ut tekst fra den.

Bygge Tesseract -objekt

Når vi har en eksempler på kildekodeklasse der vi kan starte (som vist i prosjektstrukturen i den siste delen), kan vi begynne å legge til litt kode til den. Per nå er det en tom klasse:

pakke com.Linuxhint.tess4j;
offentlig klasse tess4jdemo

Som vi har snakket om Tesseract før, kan Tesseract brukes til å hente ut tekst fra dokumenter som PDF -dokumenter. For å gjøre dette, må vi trene Tesseract -biblioteket om hvordan dokumenter er strukturert og hvilken tekst den kan inneholde.

Bortsett fra dette, ettersom Tesseract støtter rundt 37 språk, må du eksplisitt informere Tesseract om hvilket språk vi leser akkurat nå (hvis den informasjonen faktisk er tilgjengelig for oss).

Vi vil definere en enkel Java -metode for Tesseract:

Privat statisk tesseract gettesseract ()

Inne i denne metoden kan vi lage en ny forekomst av Tesseract fra Maven -biblioteket vi la til tidligere:

Tesseract forekomst = new Tesseract ();

Bare for å gjøre det klart, her er importuttalelsen vi har for ovennevnte instantiering:

Importer nett.SourceForge.tess4j.Tesseract;

Deretter vil vi legge til noen egenskaper til denne forekomsten som der treningsdataene for dette biblioteket kan bli funnet. Dette er veldig viktig som uten å sette en vei for treningsdata, kan Tesseract gi svært unøyaktige resultater. Heldigvis kommer treningsdata for Tesseract med installasjonen, så alt du trenger å gjøre er å se på rett sted. Slik setter vi treningsdatastien:

forekomst.setDatapath ("/usr/local/cellar/tesseract/4.0.0/Share/TessData ");
forekomst.setLanguage ("Eng");

Når vi bruker en Macintosh for denne opplæringen, ser vår datasti ut som ovennevnte. Bortsett fra treningsdatastien, ga jeg også Tesseract med informasjonen om at vi skal bruke Engelsk Språk.
Neste skal vi fortelle Tesseract at utgangen vi trenger er i formatet noe som kalles som HOCR format. I utgangspunktet er HOCR -format et enkelt XML -basert format som inneholder to ting:

  1. Teksten PDF -dokumentet vil inneholde
  2. X- og Y -koordinatene til den teksten på hver side. Dette betyr at et DF -dokument kan tegnes nøyaktig på samme måte tilbake fra en HOCR -utgang

Vi kan aktivere HOCR -format som:

forekomst.sethocr (true);

Til slutt kan jeg returnere forekomsten vi laget ovenfor. Her er den komplette kildekoden til metoden vi nettopp definerte her:

Privat statisk tesseract gettesseract ()
Tesseract forekomst = new Tesseract ();
forekomst.setDatapath ("/usr/local/cellar/tesseract/4.0.0/Share/TessData ");
forekomst.setLanguage ("Eng");
forekomst.sethocr (true);
Returforekomst;

Ved hjelp av tesserakt

Du tror kanskje ikke det, men å sette opp et Tesseract -objekt var så enkelt. Vi kan bruke det nå med en enkel definisjon i en hovedfunksjon:

public static void main (String [] args)
Tesseract tesseract = getTesseract ();

Kan du gjette hva som er igjen nå? Det eneste vi trenger å gjøre nå er å gi en fil til Tesseract som den kan analysere og lese teksten. Nå kan vi enkelt hente et PDF -dokument for å lese det, men det høres ganske tekstlig. Hvorfor prøver vi ikke et bilde straks?

For denne leksjonen skapte vi et veldig enkelt bilde som vi vil bruke:

Når du har dette bildet (eller noe annet bilde etter ditt valg), kan vi fullføre hovedmetoden vår slik at vi endelig kan analysere det valgte bildet:

public static void main (String [] args) kaster tesseractException
Tesseract tesseract = getTesseract ();
Filfil = ny fil ("/Brukere/Shubham/Desktop/Tess4J.jpg ");
Strengresultat = tesserakt.doocr (fil);
System.ute.println (resultat);

Hvis vi ser nøye på, er det ingenting magisk som skjedde her. Det er kraften til dette enkle innpakningen til Tesseract -biblioteket vi får med.

Nå er vi klare til å kjøre ovennevnte program. Du kan kjøre den for å se en merkelig utgang i XML -format. Hvis du har problemer med å forstå produksjonen, kan du bare kommentere egenskapen der vi aktiverte HOCR -utgang. Når du gjør det, vil du se en enkel utgang som:

En rask merknad som prøver å Unngå PNG -bilder og bruk JPEG -bilder i stedet hvis du i det hele tatt jobber med bilder. Dette er fordi Tesseract er veldig dårlig til å lese PNG -bilder på grunn av kompresjonsteknikker.

Begrensninger av Tesseract OCR -motor

I følge Tesseract Page FAQ selv, “Tesseract er en OCR -motor i stedet for et fullt omtalt program som ligner på kommersiell OCR -programvare som Nuances Omnipage. Det var opprinnelig ment å tjene som en komponentdel av andre programmer eller systemer.

Selv om Tesseract fungerer fra kommandolinjen, for å være brukbar av den gjennomsnittlige brukeren, må motoren integreres i andre programmer eller grensesnitt, for eksempel FreeOCr.nett, weocl eller ocrpous. Uten integrasjon i programmer som disse, har Tesseract ingen sideoppsettanalyse, ingen utdataformatering og ingen grafisk brukergrensesnitt (GUI). “

Hvis vi ser på begrensningen ovenfor, ble begrensningen ovenfor også løst av Tess4J -biblioteket ved å gi en enkel, men effektiv Java JNA -innpakning over C ++ -biblioteket som kan brukes til å bruke bokstavelig talt hvor som helst hvor som helst hvor som helst hvor som helst.

Konklusjon

I denne raske leksjonen om Tesseract og Java laget vi et veldig enkelt eksempel på Tesseract OCR -motor som lar oss lese tekst fra forskjellige formatfiler som PDF og bildefiler. Dette er en veldig viktig ferdighet å ha som å lese tekst fra filer som PDF og bilder er det første trinnet du trenger å gjøre hvis du vil bruke noen Natural Language Processing (NLP) -teknikker på disse dataformatene.

At Tess4j er tilgjengelig er kjempebra, for på denne måten kan vi faktisk bruke et C ++ bibliotek i et veldig enkelt miljø som ellers er vanskelig og vanskelig å bruke til.