Java

Tess4J Tutorial med Maven og Java

Tess4J Tutorial med Maven og Java
I nutidens æra, hvor dataene stadig vokser, arbejder de mennesker, der beskæftiger sig med data, hverdag mest med ustrukturerede tekstdata. Analysering af alle disse data i en hurtigere hastighed er nødvendig og mange gange også afgørende. Nogle gange står vi over for et problem med at udtrække data fra PDF-filer. Uddrag af tekstdata fra PDF-fil er besværlig og også en stor manuel opgave.

Ville det ikke bare være sejt, hvis vi havde en programmeret pakke, der kunne acceptere nogle PDF-filer og returnere den tekst, den indeholder?  Det viser sig, at vi har et bibliotek til netop det.  Tesseract er en open source-ramme skrevet i C ++, der giver os mulighed for at arbejde med PNG-billeder, JPG-billeder og PDF-filer og returnere den tekst, filen indeholder, så vi kan bruge den tekst, som vi ønsker.

I denne lektion om Tesseract med Java og Maven vil vi se, hvordan vi kan udvikle en simpel Java-applikation, der accepterer en PDF-fil og returnerer den tekst, den indeholder med Tesseract OCR-service.  Vi vil også se, hvorfor Tesseract er så succesrig. En af grundene til, at Tesseract er en så vellykket pakke, er at den bakkes op af Google selv.

For at arbejde med denne lektion er det vigtigt at installere Tesseract OCR Engine på dit system. Gå over til den officielle Github repo for at følge installationsinstruktionerne. Direkte fra GitHub-repoen blev “Tesseract oprindeligt udviklet på Hewlett-Packard Laboratories Bristol og i Hewlett-Packard Co, Greeley Colorado mellem 1985 og 1994, med nogle flere ændringer foretaget i 1996 til port til Windows og nogle C ++ izing i 1998. I 2005 blev Tesseract åben fra HP. Siden 2006 er det udviklet af Google.”

Maven afhængighed

Vi starter med at lave et simpelt Java-projekt, der er baseret på Maven og indeholder følgende maven-afhængighed:


net.sourceforge.tess4j
tess4j
4.3.0

Dette er en Maven-afhængighed, der leveres af et indpakningsprojekt, som du kan henvise til her for at få mere forståelse. Fra webstedet beskrives Tess4J simpelthen som en Java JNA-indpakning til Tesseract OCR API.

Projektstruktur

Vi har et meget simpelt projekt med en enkelt kildekodefil. Den aktuelle projektstruktur vil se sådan ud:

Som vi nævnte, har vi en enkelt kildekodefil, som vi vil bruge. Vi lægger muligvis en PDF-fil i ressourcemappen lidt senere for at demonstrere læsning af en PDF-fil og udpakning af tekst fra den.

Bygning af Tesseract-objekt

Når vi først har en prøvekildekodeklasse, hvor vi kan starte (som vist i projektstrukturen i sidste afsnit), kan vi begynde at tilføje noget kode til det. Fra nu af er det en tom klasse:

pakke com.linuxhint.tess4j;
offentlig klasse Tess4JDemo

Som vi har talt om Tesseract før, kan Tesseract bruges til at udtrække tekst fra dokumenter som PDF-dokumenter. For at gøre dette skal vi træne Tesseract-biblioteket om, hvordan dokumenter er struktureret, og hvilken tekst det kan indeholde.

Bortset fra dette, da Tesseract understøtter ca. 37 sprog, skal du eksplicit informere Tesseract om hvilket sprog vi læser lige nu (hvis disse oplysninger faktisk er tilgængelige for os).

Vi definerer en simpel Java-metode til Tesseract:

privat statisk Tesseract getTesseract ()

Inde i denne metode kan vi lave en ny forekomst af Tesseract fra Maven-biblioteket, som vi tilføjede tidligere:

Tesseract-forekomst = ny Tesseract ();

Bare for at gøre det klart, her er den importerklæring, vi har til ovenstående instantiering:

importnet.sourceforge.tess4j.Tesseract;

Dernæst vil vi tilføje nogle egenskaber til denne forekomst, som hvor træningsdataene for dette bibliotek kan findes. Dette er meget vigtigt, da Tesseract kan give meget unøjagtige resultater uden at angive en vej til træningsdata. Heldigvis kommer træningsdata til Tesseract med installationen, så alt hvad du skal gøre er at se på det rigtige sted. Sådan indstiller vi træningsdatastien:

eksempel.setDatapath ("/ usr / local / Cellar / tesseract / 4.0.0 / del / tessdata ");
eksempel.setLanguage ("eng");

Da vi bruger en Macintosh til denne vejledning, ser vores datasti noget ud som ovenstående. Bortset fra træningsdatastien forsynede jeg også Tesseract med de oplysninger, som vi vil bruge engelsk Sprog.
Dernæst fortæller vi Tesseract, at den output, vi har brug for, er i det format, der kaldes som HOCR format. Dybest set er HOCR-format et simpelt XML-baseret format, der indeholder to ting:

  1. Tekst-PDF-dokumentet indeholder
  2. X- og y-koordinaterne for den tekst på hver side. Dette betyder, at et DF-dokument kan trækkes nøjagtigt på samme måde tilbage fra et HOCR-output

Vi kan aktivere HOCR-format som:

eksempel.setHocr (sand);

Endelig kan jeg returnere den forekomst, vi lavede ovenfor. Her er den komplette kildekode for den metode, vi lige har defineret her:

privat statisk Tesseract getTesseract ()
Tesseract-forekomst = ny Tesseract ();
eksempel.setDatapath ("/ usr / local / Cellar / tesseract / 4.0.0 / del / tessdata ");
eksempel.setLanguage ("eng");
eksempel.setHocr (sand);
returinstans

Brug af Tesseract

Du tror måske ikke på det, men det var så let at opsætte et Tesseract-objekt. Vi kan bruge det nu med en simpel definition i en hovedfunktion:

offentlig statisk ugyldig hoved (String [] args)
Tesseract tesseract = getTesseract ();

Kan du gætte, hvad der er tilbage nu? Det eneste, vi skal gøre nu, er at levere en fil til Tesseract, som den kan analysere og læse dens tekst. Nu kan vi let hente et PDF-dokument for at læse det, men det lyder ret tekstmæssigt. Hvorfor prøver vi ikke et billede med det samme?

Til denne lektion skabte vi et meget simpelt billede, som vi vil bruge:

Når du har dette billede (eller et hvilket som helst andet billede efter eget valg), kan vi fuldføre vores hovedmetode, så vi endelig kan analysere det valgte billede:

offentlig statisk ugyldig hoved (String [] args) kaster TesseractException
Tesseract tesseract = getTesseract ();
Filfil = ny fil ("/ Brugere / shubham / Desktop / tess4j.jpg ");
Strengresultat = tesserakt.doOCR (fil);
System.ud.println (resultat);

Hvis vi ser nøje, er der intet magisk sket her. Det er kraften i denne enkle indpakning til Tesseract-biblioteket, vi er forsynet med.

Nu er vi klar til at køre ovenstående program. Du kan køre det for at se en underlig output i XML-format. Hvis du har problemer med at forstå output, skal du blot kommentere ejendommen, hvor vi aktiverede HOCR-output. Når du har gjort det, vil du se en simpel output som:

En hurtig note, der prøver at undgå PNG-billeder og brug JPEG-billeder i stedet hvis du overhovedet arbejder med billeder. Dette skyldes, at Tesseract er meget dårlig til at læse PNG-billeder på grund af dets kompressionsteknikker.

Begrænsninger for Tesseract OCR Engine

Ifølge selvstændige ofte stillede spørgsmål om Tesseract-side er “Tesseract en OCR-motor snarere end et fuldt udstyret program svarende til kommerciel OCR-software som Nuances Omnipage. Det var oprindeligt beregnet til at fungere som en del af andre programmer eller systemer.

Selvom Tesseract fungerer fra kommandolinjen, skal motoren integreres i andre programmer eller grænseflader, såsom FreeOCR, for at den kan bruges af den gennemsnitlige bruger.net, WeOCR eller OCRpous. Uden integration i programmer som disse har Tesseract ingen sidelayoutanalyse, ingen outputformatering og ingen grafisk brugergrænseflade (GUI). “

Hvis vi ser på ovenstående begrænsning, blev ovennævnte begrænsning også løst af Tess4J-biblioteket ved at tilvejebringe en enkel, men effektiv Java JNA-indpakning over C ++ -biblioteket, som kan bruges bogstaveligt hvor som helst.

Konklusion

I denne hurtige lektion om Tesseract og Java lavede vi et meget simpelt eksempel på Tesseract OCR-motor, der giver os mulighed for at læse tekst fra forskellige formatfiler som PDF og billedfiler. Dette er en meget vigtig færdighed at have, da læsning af tekst fra filer som PDF og billeder er det første skridt, du skal gøre, hvis du vil anvende NLP-teknikker (Natural Language Processing) på disse dataformater.

Det faktum, at Tess4J er tilgængelig, er fantastisk, fordi vi på denne måde faktisk kan bruge et C ++ - bibliotek i et meget simpelt miljø, som ellers er svært og vanskeligt at bruge til. Selvfølgelig er hele kildekoden til lektionen tilgængelig på Github. Del din feedback frit om lektionen på Twitter med @linuxhint og @sbmaggarwal (det er mig!).

Sådan udvikler du et spil på Linux
For et årti siden ville ikke mange Linux-brugere forudsige, at deres foretrukne operativsystem en dag ville være en populær spilplatform til kommercie...
Open Source-porte med kommercielle spilmotorer
Gratis, open source og cross-platform spilmotorgendringer kan bruges til at spille gamle såvel som nogle af de temmelig nylige spiltitler. Denne artik...
Bedste kommandoliniespil til Linux
Kommandolinjen er ikke kun din største allierede, når du bruger Linux, den kan også være kilde til underholdning, fordi du kan bruge den til at spille...