Non sarebbe bello se avessimo un pacchetto programmato che potrebbe accettare alcuni file PDF e restituire il testo che contiene? Si scopre che abbiamo una biblioteca per fare proprio questo. Tesseract è un framework open source scritto in C ++ che ci consente di lavorare con immagini PNG, immagini JPG e file PDF e restituire il testo che il file contiene in modo da poter usare quel testo come vogliamo.
In questa lezione su Tesseract con Java e Maven, vedremo come possiamo sviluppare una semplice applicazione Java che accetta un file PDF e restituisce il testo che contiene con il servizio OCR Tesseract. Vedremo anche perché Tesseract ha così tanto successo. Uno dei motivi per cui Tesseract è un pacchetto di così successo è che è supportato da Google stesso.
Per lavorare con questa lezione, è importante installare il motore OCR Tesseract sul tuo sistema. Vai al Repo ufficiale di Github per seguire le istruzioni di installazione. Direttamente dal Repo di Github, “Tesseract è stato originariamente sviluppato presso Hewlett-Packard Laboratories Bristol e a Hewlett-Packard Co, Greeley Colorado tra il 1985 e il 1994, con alcune altre modifiche apportate nel 1996 a Port to Windows, e alcuni C ++ Izing in 1998. Nel 2005 Tesseract è stato aperto da HP. Dal 2006 è sviluppato da Google."
Inizieremo realizzando un semplice progetto Java basato su Maven e contiene la seguente dipendenza da Maven:
netto.FORNEFORGE.Tess4j Tess4j 4.3.0
Questa è una dipendenza da maven che è fornita da un progetto wrapper che puoi fare riferimento qui per ottenere una maggiore comprensione. Dal sito Web, Tess4j è semplicemente descritto come un involucro jna Java per Tesseract OCR API.
Struttura del progetto
Abbiamo un progetto molto semplice con un singolo file di codice sorgente. L'attuale struttura del progetto sarà simile a questa:
Come accennato, abbiamo un singolo file di codice sorgente che useremo. Potremmo inserire un file PDF nella cartella delle risorse poco più tardi per dimostrare la lettura di un file PDF ed estrarre testo da esso.
Costruire l'oggetto tesseract
Una volta che abbiamo una classe di codice sorgente di esempio in cui possiamo iniziare (come mostrato nella struttura del progetto nell'ultima sezione), possiamo iniziare ad aggiungere un po 'di codice ad esso. A partire da ora, è una classe vuota:
pacchetto com.Linuxhint.tess4j;
classe pubblica tess4jdemo
Come abbiamo già parlato di Tesseract, Tesseract può essere usato per estrarre testo da documenti come i documenti PDF. Per fare ciò, dobbiamo formare la libreria di tesseract su come sono strutturati i documenti e quale testo può contenere.
A parte questo, poiché Tesseract supporta circa 37 lingue, devi informare esplicitamente Tesseract su quale lingua stiamo leggendo in questo momento (se tali informazioni sono effettivamente disponibili per noi).
Definiremo un semplice metodo Java per Tesseract:
tesseract statico privato gettesseract ()
All'interno di questo metodo, possiamo creare una nuova istanza di Tesseract dalla libreria Maven che abbiamo aggiunto in precedenza:
Tesseract istanza = new tesseract ();
Solo per chiarire, ecco l'istruzione di importazione che abbiamo per l'istanza di cui sopra:
Net di importazione.FORNEFORGE.Tess4j.Tesseract;
Successivamente, aggiungeremo alcune proprietà a questa istanza come dove è possibile trovare i dati di formazione per questa libreria. Questo è molto importante in quanto senza impostare un percorso per i dati di formazione, Tesseract può fornire risultati altamente inaccurati. Fortunatamente, i dati di addestramento per Tesseract ne arrivano con la sua installazione, quindi tutto ciò che devi fare è guardare il posto giusto. Ecco come impostiamo il percorso dei dati di formazione:
esempio.SetDataPath ("/USR/Local/Cellar/Tesseract/4.0.0/share/tessdata ");
esempio.setLanguage ("Eng");
Dato che stiamo usando un Macintosh per questo tutorial, il nostro percorso dati assomiglia a quello sopra. Oltre al percorso dei dati di addestramento, ho anche fornito a Tesseract le informazioni che useremo il Inglese lingua.
Successivamente diremo a Tesseract che l'output di cui abbiamo bisogno è nel formato qualcosa chiamato come il Hocr formato. Fondamentalmente, il formato Hocr è un semplice formato basato su XML che contiene due cose:
Possiamo abilitare il formato hocra come:
esempio.setocrone (vero);
Infine, posso restituire l'istanza che abbiamo fatto sopra. Ecco il codice sorgente completo del metodo che abbiamo appena definito qui:
tesseract statico privato gettesseract ()
Tesseract istanza = new tesseract ();
esempio.SetDataPath ("/USR/Local/Cellar/Tesseract/4.0.0/share/tessdata ");
esempio.setLanguage ("Eng");
esempio.setocrone (vero);
istanza di ritorno;
Usando tesseract
Potresti non crederci, ma impostare un oggetto Tesseract è stato così facile. Possiamo metterlo da usare ora con una semplice definizione in una funzione principale:
public static void main (string [] args)
Tesseract tesseract = gettesseract ();
Riesci a indovinare cosa rimane ora? L'unica cosa che dobbiamo fare ora è fornire un file a Tesseract che può analizzare e leggere il suo testo. Ora possiamo, raccogliere facilmente un documento PDF per leggerlo, ma sembra abbastanza testuale. Perché non proviamo subito un'immagine?
Per questa lezione, abbiamo creato un'immagine molto semplice che metteremo in uso:
Una volta che hai questa immagine (o qualsiasi altra immagine di tua scelta), possiamo completare il nostro metodo principale in modo da poter finalmente analizzare l'immagine selezionata:
public static void main (string [] args) lancia tesseractException
Tesseract tesseract = gettesseract ();
File file = new File ("/utenti/shubham/desktop/tess4j.jpg ");
String Result = Tesseract.doocr (file);
Sistema.fuori.println (risultato);
Se guardiamo da vicino, non c'è nulla di magicamente che sia successo qui. Questa è la potenza di questo semplice wrapper per la libreria di tesseract che ci viene fornita.
Ora siamo pronti a eseguire il programma sopra. Puoi eseguirlo per vedere uno strano output in formato XML. Se hai problemi a capire l'output, commenta semplicemente la proprietà in cui abbiamo abilitato l'output di Hocra. Una volta che lo fai, vedrai un semplice output come:
Una nota veloce che prova a Evita le immagini PNG e usa le immagini JPEG Invece se stai lavorando con le immagini. Questo perché Tesseract è molto negativo nel leggere le immagini PNG a causa delle sue tecniche di compressione.
Limitazioni del motore OCR Tesseract
Secondo la stessa FAQ di Tesseract Page, “Tesseract è un motore OCR piuttosto che un programma completamente presente simile al software OCR commerciale come l'onnipage di Nuance. Inizialmente era destinato a fungere da parte componente di altri programmi o sistemi.
Sebbene Tesseract funzioni dalla riga di comando, per essere utilizzabile dall'utente medio, il motore deve essere integrato in altri programmi o interfacce, come Freeocro.netto, weocr o ocrpous. Senza integrazione in programmi come questi, Tesseract non ha analisi del layout di pagina, formattazione di output e nessuna interfaccia utente grafica (GUI). "
Se osserviamo la limitazione di cui sopra, la limitazione di cui sopra è stata anche risolta dalla libreria Tess4j fornendo un wrapper Java JNA semplice ma efficace sulla libreria C ++ che può essere utilizzata letteralmente ovunque.
In questa rapida lezione su Tesseract e Java, abbiamo realizzato un esempio molto semplice del motore OCR Tesseract che ci consente di leggere il testo da vari file di formato come PDF e file di immagine. Questa è un'abilità molto importante da avere come testo di lettura da file come PDF e immagini è il primo passo che devi fare se si desidera applicare le tecniche di elaborazione del linguaggio naturale (NLP) su questi formati di dati.
Il fatto che Tess4j sia disponibile è fantastico perché in questo modo possiamo effettivamente usare una libreria C ++ in un ambiente molto semplice che è altrimenti difficile e complicato.