Tesseract OCR не работи за 64-битова машина

Работя върху приложение, в което използвам Tesseract за OCR.

Моят код работи абсолютно добре в Windows 32 битова система. Но когато се опитам да стартирам същия код в 64-битова машина, използвайки 32-битовите .dll файлове, кодът се изпълнява, но след това кодът не дава точните резултати.

Така че го изпълнявам в 64-битова машина, използвайки 64-битовите .dll файлове. Сега, когато се опитах да стартирам същата програма, получих следната грешка в конзолата (Eclipse Kepler).

Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: %1 is not a                                                           
valid Win32 application.
at com.sun.jna.Native.open(Native Method)
at com.sun.jna.Native.open(Native.java:1759)
at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:260)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:398)
at com.sun.jna.Library$Handler.<init>(Library.java:147)
at com.sun.jna.Native.loadLibrary(Native.java:412)
at com.sun.jna.Native.loadLibrary(Native.java:391)
at net.sourceforge.tess4j.TessAPI.<clinit>(TessAPI.java:38)
at net.sourceforge.tess4j.Tesseract.init(Tesseract.java:293)
at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:227)
at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:176)
at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:159)

Изтеглих 64-битовите .dll файлове (https://github.com/charlesw/tesseract/tree/master/src/lib/TesseractOcr/x64) съвместим с 64-битова система, но все пак получавам същата грешка. Използвам GhostScript v-8.71 на 64-битова машина. Инсталирах това както в Program Files, така и в Program Files(x86). Също така зададох съответно променливите на средата. Но все още не работи.

Моля, дайте ми някакво решение!


person user3509913    schedule 12.06.2014    source източник
comment
JDK 32|64 бита, Tess4J версия?   -  person nguyenq    schedule 13.06.2014
comment
Използвам Eclipse IDE, така че инсталирах JRE v7 64bit. Tess4J, който използвах, е версия 1.2.   -  person user3509913    schedule 13.06.2014
comment
Опитайте да използвате JDK 64-bit, Tess4J 1.3 и GS 9.14 64-bit версии.   -  person nguyenq    schedule 13.06.2014
comment
Вижте дали Tess4J Tutorial може да ви помогне.   -  person nguyenq    schedule 15.06.2014
comment
Благодаря за предложението ви, пробвах ги всички... но не помогнаха... Все още получавам същата грешка   -  person user3509913    schedule 17.06.2014


Отговори (2)


Не виждам какво общо има това с Ghostscript.

person KenS    schedule 12.06.2014
comment
Използвах библиотеката Ghostscript за интерпретиране на PDF файлове в моето приложение. - person user3509913; 13.06.2014
comment
Но нищо във вашия въпрос не изглежда (за мен) свързано с Ghostscript. - person KenS; 13.06.2014

Tess4J в момента поддържа само 32-битова JVM

Това е създателят, nguyenq, който отговаря на подобен проблем в sourceforge форум.

По същия начин в урока се посочва, че само 32-битови DLL са включени в дистрибуцията.

To run with a JVM 64-bit, you'll need to use Tesseract and Leptonica 64-bit DLLs.

Едно решение: Кажете на вашето IDE вместо това да използва 32-битова JVM.

-- недостатъкът е, че може да смесвате 32-битова и 64-битова среда, в сложно приложение или env това може да е странно... (Не мисля, че е много лошо, но може да е проблем във вашата IDE)

В актуализация, намерена тук, изглежда, че можете да намерите DLL за 64 -bit Java тук, като част от обвивката на Tesseract за .NET (колкото и да е странно). Въпреки това все още не съм изпробвал тези 64-битови DDL и във връзката към sourceforge пише, че са depend on the Visual C++ Redistributable for VS2012 or Visual C++ Redistributable for VS2013 ... което е гадно....

Ще актуализирам тази публикация, ако намеря по-чисто решение.

АКТУАЛИЗАЦИЯ

Имайте предвид, че направих това, работейки с екземпляри на Amazon Web Services.

Успях да накарам Tess4J да работи на 64-битов Ubuntu 14.04. Всъщност беше много просто, след като се отказах от дистрибуцията си Red Hat и отидох на Ubuntu.

sudo apt-get install tesseract-ocr ще настрои напълно teseract. Можете да проверите, като напишете tesseract -v. Имах нужда и от GhostScript, защото работех с PDF файлове. sudo apt-get install ghostscript отново настрои всичко. Потвърдете с gs -v.

Сега във вашето Java приложение всичко, което трябва да включите, са JAR файловете от изтеглянето на Tess4J във вашия път -- jna-4.1.0j.ar, jai_imageio.jar, tess4j.jar и ghost4j-0.5.1.jar, ако работите с PDF.

Във вашето Java приложение трябва да зададете пътя на данните, така че вашето копие на Tesseract да знае къде е инсталиран tesseract. Дори когато имах зададена променлива на средата, тя никога не работи за мен. Трябваше изрично да задам пътя на данните така:

Tesseract tessInstance = Tesseract.getInstance();
tessInstance.setDatapath(System.getenv("TESSDATA_PREFIX"));
ImageIO.scanForPlugins(); // make sure it knows about GhostScript, to work with PDFs
String result = tessInstance.doOCR(myFile);

Уверете се, че setDatapath() е зададено на родителската папка на папката tessdata на вашата инсталация на tesseract (на моя Ubuntu това беше /usr/share/tesseract-ocr/`).

Само това ми трябваше. Без притеснение за DLL в пътя на класа.

tl;dr:

Използвайте актуална Ubuntu

sudo apt-get tesseract-ocr

sudo apt-get ghostscript ако работите с PDF

включете подходящи JAR файлове на Tess4J (jna-4.1.0j.ar, jai_imageio.jar, tess4j.jar и ghost4j-0.5.1.jar, ако работите с PDF)

обадете се на tess.setDataPath(), за да посочите вашата инсталация на teseract (/usr/share/tesseract-ocr/ за моя Ubuntu 14.04)

ImageIO.scanForPlugins() ако използвате GhostScript

Това е. Добре е да отидете, обадете се на tess.doOCR(MyFile) щастливо

person Don Cheadle    schedule 21.10.2014