Samouczek Tess4j z Maven i Javą

Samouczek Tess4j z Maven i Javą
W dzisiejszej erze, w której dane stale rosną, ludzie, którzy zajmują się danymi codziennie pracują głównie z nieustrukturyzowanymi danymi tekstowymi. Analiza wszystkich tych danych w szybszym tempie jest konieczna i wiele razy, kluczowe. Czasami stoimy przed problemem wyodrębniania danych z plików PDF. Wyodrębnienie danych tekstowych z pliku PDF jest uciążliwe, a także duże zadanie ręczne.

Czy nie byłoby fajnie, gdybyśmy mieli zaprogramowany pakiet, który mógłby zaakceptować niektóre pliki PDF i zwrócić zawarty tekst? Okazuje się, że mamy bibliotekę, aby to zrobić. Tesseract to framework open source napisany w C ++, który pozwala nam pracować z obrazami PNG, obrazami JPG i plikami PDF i zwracając tekst, który zawiera plik.

W tej lekcji na temat Tesseract z Javą i Maven zobaczymy, w jaki sposób możemy opracować prostą aplikację Java, która akceptuje plik PDF i zwraca tekst zawarty w serwisie Tesseract OCR. Zobaczymy również, dlaczego Tesseract jest tak udany. Jednym z powodów, dla których Tesseract był tak udanym pakietem, jest to, że jest poparty przez samego Google.

Aby pracować z tą lekcją, ważne jest zainstalowanie silnika OCR Tesseract w systemie. Udaj się do oficjalnego repozytorium GitHub, aby postępować zgodnie z instrukcjami instalacji. Bezpośrednio z Repo Github, „Tesseract został pierwotnie opracowany w Hewlett-Packard Laboratories Bristol i w Hewlett-Packard Co, Greeley Colorado w latach 1985–1994, z dodatkowymi zmianami wprowadzonymi w 1996 r. Do portu do Window 1998. W 2005 r. Tesseract był otwarty przez HP. Od 2006 roku jest opracowywany przez Google."

Zależność Maven

Zaczniemy od stworzenia prostego projektu Java opartego na Maven i zawiera następującą zależność Maven:


internet.Źródło.Tess4j
Tess4j
4.3.0

Jest to zależność Maven, która jest dostarczana przez projekt opakowania, który można tutaj odwołać, aby uzyskać lepsze zrozumienie. Z strony internetowej Tess4J jest po prostu opisany jako opakowanie Java JNA dla API Tesseract OCR.

Struktura projektu

Mamy bardzo prosty projekt z plik kodu jednego źródła. Obecna struktura projektu będzie wyglądać mniej więcej tak:

Jak wspomnialiśmy, mamy plik kodu jednego źródła, którego będziemy używać. Możemy nieco później umieścić plik PDF w folderze Zasoby.

Budowanie obiektu Tesseract

Po uzyskaniu przykładowej klasy kodu źródłowego, w której możemy uruchomić (jak pokazano w strukturze projektu w ostatniej sekcji), możemy zacząć dodawać do niego kod do niego. Na razie jest to pusta klasa:

pakiet com.Linuxhint.Tess4j;
Klasa publiczna Tess4jDemo

Jak rozmawialiśmy wcześniej o Tesseract, Tesseract można użyć do wyodrębnienia tekstu z dokumentów takich jak dokumenty PDF. Aby to zrobić, musimy wyszkolić bibliotekę Tesseract na temat struktury dokumentów i jakiego tekstu może zawierać.

Oprócz tego, ponieważ Tesseract obsługuje około 37 języków, musisz wyraźnie poinformować Tesseract o tym, który język czytamy teraz (jeśli te informacje są dla nas faktycznie dostępne).

Zdefiniujemy prostą metodę Java dla Tesseract:

prywatny static Tesseract getTesseract ()

Wewnątrz tej metody możemy zrobić nową instancję Tesseract z biblioteki Maven, którą dodaliśmy wcześniej:

Tesseract Instance = new Tesseract ();

Aby to wyjaśnić, oto instrukcja importu, którą mamy dla powyższego instancji:

Import Net.Źródło.Tess4j.Tesseract;

Następnie dodamy niektóre właściwości do tej instancji, na przykład tam, gdzie można znaleźć dane szkoleniowe dla tej biblioteki. Jest to bardzo ważne, ponieważ bez ustalania ścieżki danych szkoleniowych, Tesseract może zapewnić wysoce niedokładne wyniki. Na szczęście dane szkolenia dla Tesseract są wyposażone w instalację, więc wszystko, co musisz zrobić, to spojrzeć we właściwe miejsce. Oto jak ustawiamy ścieżkę danych szkoleniowych:

instancja.setDatapath ("/usr/lokal/piwnica/tesseract/4.0.0/share/tessdata ”);
instancja.SetLanguage („Eng”);

Ponieważ używamy Macintosha do tego samouczka, nasza ścieżka danych wygląda jak powyższe. Oprócz ścieżki danych szkoleniowych, dostarczyłem również Tesseract z informacjami, których będziemy korzystać język angielski język.
Następnie będziemy informować Tesseract, że potrzebujemy wyjścia w formacie coś, co nazywa się Hocr format. Zasadniczo format HOCR to prosty format oparty na XML, który zawiera dwie rzeczy:

  1. Dokument PDF tekstowy będzie zawierał
  2. Współrzędne x i y tego tekstu na każdej stronie. Oznacza to, że dokument df można dokładnie narysować w ten sam sposób z powrotem z wyjścia HOCR

Możemy włączyć format HOCR jako:

instancja.sethocr (prawda);

Na koniec mogę zwrócić instancję, którą zrobiliśmy powyżej. Oto pełny kod źródłowy metody, którą właśnie tutaj zdefiniowaliśmy:

prywatny static Tesseract getTesseract ()
Tesseract Instance = new Tesseract ();
instancja.setDatapath ("/usr/lokal/piwnica/tesseract/4.0.0/share/tessdata ”);
instancja.SetLanguage („Eng”);
instancja.sethocr (prawda);
Instancja powrotu;

Za pomocą Tesseract

Być może w to nie wierzysz, ale konfigurowanie obiektu Tesseract było takie łatwe. Możemy go teraz użyć z prostą definicją w głównej funkcji:

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

Czy możesz zgadnąć, co zostało teraz? Jedyne, co musimy teraz zrobić, to dostarczyć plik do Tesseract, który może przeanalizować i odczytać swój tekst. Teraz możemy łatwo wybrać dokument PDF, aby go przeczytać, ale brzmi to dość tekstowo. Dlaczego nie wypróbujemy od razu obrazu?

W przypadku tej lekcji stworzyliśmy bardzo prosty obraz, który użyjemy do użycia:

Po uzyskaniu tego obrazu (lub dowolnego innego wybranego obrazu) możemy wypełnić naszą główną metodę, abyśmy mogli w końcu przeanalizować wybrany obraz:

public static void main (string [] args) rzuca TesseractException
Tesseract Tesseract = getTesseract ();
Plik plik = nowy plik ("/Users/Shubham/Desktop/Tess4J.jpg ");
String Result = Tesseract.dooct (plik);
System.na zewnątrz.println (wynik);

Jeśli przyjrzymy się uważnie, nie ma magicznie, co się tutaj wydarzyło. To jest moc tego prostego opakowania dla biblioteki Tesseract, z którą otrzymujemy.

Teraz jesteśmy gotowi uruchomić powyższy program. Możesz go uruchomić, aby zobaczyć dziwne dane wyjściowe w formacie XML. Jeśli masz problem ze zrozumieniem wyników, po prostu skomentuj właściwość, w której włączyliśmy wyjście HOCR. Gdy to zrobisz, zobaczysz proste dane wyjściowe jako:

Szybka uwaga, która próbuje Unikaj obrazów PNG i używaj obrazów JPEG Zamiast tego, jeśli w ogóle pracujesz z obrazami. Wynika to z faktu, że Tesseract jest bardzo zły w czytaniu obrazów PNG ze względu na techniki kompresji.

Ograniczenia silnika OCR Tesseract

Według samej FAQ strony Tesseract „Tesseract to silnik OCR, a nie w pełni wyróżniony program podobny do komercyjnego oprogramowania OCR, takiego jak wszechmoc Nuance. Pierwotnie miał służyć jako element innych programów lub systemów.

Chociaż Tesseract działa z wiersza poleceń, aby być użytecznym przez przeciętnego użytkownika, silnik musi być zintegrowany z innymi programami lub interfejsami, takimi jak Freeocr.netto, Weocr lub Ocrpous. Bez integracji z takimi programami, Tesseract nie ma analizy układu strony, formatowania wyjściowego i żadnego graficznego interfejsu użytkownika (GUI). "

Jeśli spojrzymy na powyższe ograniczenie, powyższe ograniczenie zostało również rozwiązane przez bibliotekę Tess4J, zapewniając proste, ale skuteczne opakowanie Java JNA nad biblioteką C ++, którą można użyć dosłownie w dowolnym miejscu.

Wniosek

W tej szybkiej lekcji na temat Tesseract i Java stworzyliśmy bardzo prosty przykład silnika Tesseract OCR, który pozwala nam odczytać tekst z różnych plików formatowych, takich jak pliki PDF i pliki obrazów. Jest to bardzo ważna umiejętność, jaką jest czytanie tekstu z plików takich jak PDF, a obrazy to pierwszy krok, który musisz zrobić, jeśli chcesz zastosować jakiekolwiek techniki przetwarzania języka naturalnego (NLP) w tych formatach danych.

Fakt, że Tess4J jest dostępny, jest niesamowity, ponieważ w ten sposób możemy faktycznie użyć biblioteki C ++ w bardzo prostym środowisku, które w przeciwnym razie trudne i trudne do użycia.