Java

Tess4J Handledning med Maven och Java

Tess4J Handledning med Maven och Java
I dagens era när data växer ständigt arbetar de människor som hanterar data dagligen mest med ostrukturerad textinformation. Att analysera all denna information i snabbare takt är nödvändig och många gånger, också avgörande. Ibland står vi inför en fråga om att extrahera data från PDF-filer. Extrahera textdata från PDF-fil är besvärligt och en stor manuell uppgift också.

Skulle det inte bara vara coolt om vi hade något programmerat paket som kunde acceptera vissa PDF-filer och returnera texten den innehåller?  Det visar sig att vi har ett bibliotek för att göra just det.  Tesseract är en öppen källkodsram skriven i C ++ som gör att vi kan arbeta med PNG-bilder, JPG-bilder och PDF-filer och returnera texten filen innehåller så att vi kan använda den texten som vi vill.

I den här lektionen om Tesseract med Java och Maven kommer vi att se hur vi kan utveckla en enkel Java-applikation som accepterar en PDF-fil och returnerar texten den innehåller med Tesseract OCR-tjänsten.  Vi kommer också att se varför Tesseract är så framgångsrikt. En av anledningarna till att Tesseract är så framgångsrikt paket är att det stöds av Google själv.

För att arbeta med den här lektionen är det viktigt att installera Tesseract OCR Engine på ditt system. Gå över till den officiella Github repo för att följa installationsinstruktionerna. Direkt från GitHub repo, ”Tesseract utvecklades ursprungligen vid Hewlett-Packard Laboratories Bristol och i Hewlett-Packard Co, Greeley Colorado mellan 1985 och 1994, med några fler ändringar som gjordes 1996 till port till Windows, och en del C ++ izing i 1998. 2005 öppnades Tesseract från HP. Sedan 2006 har den utvecklats av Google.”

Maven-beroende

Vi börjar med att göra ett enkelt Java-projekt som är baserat på Maven och innehåller följande maven-beroende:


netto.sourceforge.tess4j
tess4j
4.3.0

Detta är ett Maven-beroende som tillhandahålls av ett omslagsprojekt som du kan hänvisa till här för att få mer förståelse. Från webbplatsen beskrivs Tess4J helt enkelt som ett Java JNA-omslag för Tesseract OCR API.

Projektstruktur

Vi har ett mycket enkelt projekt med en enda källkodfil. Den nuvarande projektstrukturen kommer att se ut så här:

Som vi nämnde har vi en enda källkodsfil som vi kommer att använda. Vi kan lägga en PDF-fil i resursmappen lite senare för att visa att vi läser en PDF-fil och extraherar text från den.

Bygga Tesseract-objekt

När vi väl har en provkällkodsklass där vi kan börja (som visas i projektstrukturen i det sista avsnittet) kan vi börja lägga till lite kod till den. Från och med nu är det en tom klass:

paket com.linuxhint.tess4j;
offentlig klass Tess4JDemo

Som vi har pratat om Tesseract tidigare kan Tesseract användas för att extrahera text från dokument som PDF-dokument. För att göra detta måste vi träna Tesseract-biblioteket om hur dokument är strukturerade och vilken text det kan innehålla.

Bortsett från detta, eftersom Tesseract stöder cirka 37 språk, måste du uttryckligen informera Tesseract om vilket språk vi läser just nu (om den informationen faktiskt finns tillgänglig för oss).

Vi kommer att definiera en enkel Java-metod för Tesseract:

privat statisk Tesseract getTesseract ()

Inuti denna metod kan vi skapa en ny instans av Tesseract från Maven-biblioteket vi lade till tidigare:

Tesseract instans = ny Tesseract ();

Bara för att göra det tydligt, här är importförklaringen vi har för ovanstående instans:

importnät.sourceforge.tess4j.Tesseract;

Därefter lägger vi till några egenskaper i den här instansen, till exempel där träningsdata för detta bibliotek finns. Detta är mycket viktigt, eftersom Tesseract kan ge mycket felaktiga resultat utan att ange en väg för träningsdata. Lyckligtvis kommer träningsdata för Tesseract med installationen, så allt du behöver göra är att titta på rätt plats. Så här ställer vi in ​​träningsdatasökvägen:

exempel.setDatapath ("/ usr / local / Cellar / tesseract / 4.0.0 / dela / tessdata ");
exempel.setLanguage ("eng");

När vi använder en Macintosh för den här handledningen ser vår databana ungefär ut som ovan. Förutom träningsdatasökan gav jag också Tesseract den information som vi kommer att använda engelsk språk.
Därefter berättar vi för Tesseract att den output vi behöver är i formatet något som kallas HOCR formatera. I grund och botten är HOCR-format ett enkelt XML-baserat format som innehåller två saker:

  1. Texten PDF-dokument kommer att innehålla
  2. X- och y-koordinaterna för den texten på varje sida. Detta innebär att ett DF-dokument kan dras exakt på samma sätt från en HOCR-utgång

Vi kan aktivera HOCR-format som:

exempel.setHocr (sant);

Slutligen kan jag returnera instansen vi gjorde ovan. Här är den fullständiga källkoden för den metod som vi just definierade här:

privat statisk Tesseract getTesseract ()
Tesseract instans = ny Tesseract ();
exempel.setDatapath ("/ usr / local / Cellar / tesseract / 4.0.0 / dela / tessdata ");
exempel.setLanguage ("eng");
exempel.setHocr (sant);
returinstans;

Använda Tesseract

Du kanske inte tror det, men det var så enkelt att ställa in ett Tesseract-objekt. Vi kan använda den nu med en enkel definition i en huvudfunktion:

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

Kan du gissa vad som är kvar nu? Det enda vi behöver göra nu är att tillhandahålla en fil till Tesseract som den kan analysera och läsa dess text. Nu kan vi enkelt hämta ett PDF-dokument för att läsa det men det låter ganska textuellt. Varför försöker vi inte en bild direkt?

För den här lektionen skapade vi en mycket enkel bild som vi kommer att använda:

När du väl har den här bilden (eller någon annan bild du väljer) kan vi slutföra vår huvudmetod så att vi äntligen kan analysera den valda bilden:

public static void main (String [] args) kastar TesseractException
Tesseract tesseract = getTesseract ();
Filfil = ny fil ("/ Användare / shubham / Desktop / tess4j.jpg ");
Strängresultat = tesserakt.doOCR (fil);
Systemet.ut.println (resultat);

Om vi ​​tittar noga finns det inget magiskt som hände här. Det är kraften i det här enkla omslaget för Tesseract-biblioteket vi har.

Nu är vi redo att köra programmet ovan. Du kan köra den för att se en konstig utdata i XML-format. Om du har problem med att förstå utdata, kommentera bara egenskapen där vi aktiverade HOCR-utdata. När du väl gjort det ser du en enkel utdata som:

En snabb anteckning som försöker undvik PNG-bilder och använd JPEG-bilder istället om du alls arbetar med bilder. Detta beror på att Tesseract är mycket dåligt att läsa PNG-bilder på grund av sin komprimeringsteknik.

Begränsningar av Tesseract OCR-motor

Enligt Tesseract-sidan med vanliga frågor och svar, “Tesseract är en OCR-motor snarare än ett fullt utrustat program som liknar kommersiell OCR-programvara som Nuances Omnipage. Den var ursprungligen avsedd att fungera som en komponentdel i andra program eller system.

Även om Tesseract fungerar från kommandoraden måste motorn integreras i andra program eller gränssnitt, som FreeOCR, för att kunna användas av den genomsnittliga användaren.net, WeOCR eller OCRpous. Utan integration i sådana program har Tesseract ingen sidlayoutanalys, ingen utdataformatering och inget grafiskt användargränssnitt (GUI). “

Om vi ​​tittar på ovanstående begränsning löstes ovanstående begränsning också av Tess4J-biblioteket genom att tillhandahålla ett enkelt men effektivt Java JNA-omslag över C ++ -biblioteket som kan användas bokstavligen var som helst.

Slutsats

I den här snabba lektionen om Tesseract och Java gjorde vi ett mycket enkelt exempel på Tesseract OCR-motor som låter oss läsa text från olika formatfiler som PDF och bildfiler. Detta är en mycket viktig färdighet att ha som att läsa text från filer som PDF och bilder är det första steget du behöver göra om du vill tillämpa NLP-tekniker (Natural Language Processing) på dessa dataformat.

Det faktum att Tess4J är tillgängligt är fantastiskt eftersom vi på det sättet faktiskt kan använda ett C ++ - bibliotek i en mycket enkel miljö som annars är svårt och knepigt att använda för. Naturligtvis finns all källkod för lektionen tillgänglig på Github. Dela din feedback fritt om lektionen på Twitter med @linuxhint och @sbmaggarwal (det är jag!).

HD Remastered Games för Linux som aldrig tidigare hade en Linux-version
Många spelutvecklare och utgivare kommer med HD-remaster av gamla spel för att förlänga livstiden för franchisen, snälla fans som begär kompatibilitet...
Hur man använder AutoKey för att automatisera Linux-spel
AutoKey är ett verktyg för desktopautomatisering för Linux och X11, programmerat i Python 3, GTK och Qt. Med hjälp av dess skript och MACRO-funktional...
Hur man visar FPS-räknare i Linux-spel
Linux-spel fick ett stort tryck när Valve tillkännagav Linux-stöd för Steam-klient och deras spel 2012. Sedan dess har många AAA- och indiespel tagit ...