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

Я работаю над приложением, в котором использую Tesseract для OCR.

Мой код отлично работает в 32-битной системе Windows. Но когда я пытаюсь запустить тот же код на 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
Попробуйте использовать 64-разрядную версию JDK, Tess4J 1.3 и 64-разрядную версию GS 9.14.   -  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 полностью настроит tesseract. Вы можете проверить, набрав 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() указывает на папку parent папки tessdata вашей установки tesseract (в моей Ubuntu это было /usr/share/tesseract-ocr/`).

Это было все, что мне было нужно. Не беспокойтесь о DLL в пути к классу.

тл;др:

Используйте последнюю версию 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(), чтобы указать на вашу установку tesseract (/usr/share/tesseract-ocr/ для моей Ubuntu 14.04)

ImageIO.scanForPlugins() при использовании GhostScript

Вот и все. Вы можете идти звонить tess.doOCR(MyFile) с радостью

person Don Cheadle    schedule 21.10.2014