RuntimeException при попытке использовать Tess4J в Java EE

Я пытаюсь использовать Tess4J в Java EE (сервер Payara), возможно ли это, и если да, то как?

Точное исключение, которое я получаю:

e = (net.sourceforge.tess4j.TesseractException) net.sourceforge.tess4j.TesseractException: java.lang.RuntimeException: необходимо установить пакет ввода-вывода JAI Image. https://java.net/projects/jai-imageio/

Я добавил jai-imageio в свой pom.xml, а также добавил его в модули Payara.

Файл pom.xml

    <!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->
    <dependency>
        <groupId>net.sourceforge.tess4j</groupId>
        <artifactId>tess4j</artifactId>
        <version>3.4.1</version> <!-- used 3.4.2 as well -->
    </dependency>

    <!-- https://mvnrepository.com/artifact/com.github.jai-imageio/jai-imageio-core -->
    <dependency>
        <groupId>com.github.jai-imageio</groupId>
        <artifactId>jai-imageio-core</artifactId>
        <version>1.3.1</version>
        <scope>runtime</scope>  <!-- tried without this as well -->
    </dependency>

Добавлен JAR в

`Payara\glassfish\modules`

Код Tess4J (если можно внести в него какие-либо улучшения, мы будем признательны).

       ITesseract instance = new Tesseract();
        instance.setDatapath(pLangaugePath); // C:\\t
        instance.setLanguage(pLanguage); // eng

            try {
                File[] tifFiles = PdfUtilities.convertPdf2Png(pFile);

                if (tifFiles != null) {

                    for (File tifFile : tifFiles) {
                        String ocrText = instance.doOCR(tifFile);

                        if (StringUtils.isNotBlank(ocrText)) {
                            ret.append(ocrText);
                        }
                    }
                }
            } catch (TesseractException e) {
                LOG.error("Could not do ocr on image file created via pdf ", e);
            }

Также попробовали следующие 2 примера. 1.

     try (PDDocument document = PDDocument.load(pFile)) {
                int totalPages = document.getNumberOfPages();

                PDFRenderer renderer = new PDFRenderer(document);

                for (int pi = 0; pi < totalPages; pi++) {
                    BufferedImage image = renderer.renderImageWithDPI(pi, 75);

                    String ocrText = instance.doOCR(image);

                    if (StringUtils.isNotBlank(ocrText)) {
                        ret.append(ocrText);
                    }
                }
            } catch (Exception e) {
                LOG.error("Could not do ocr on pdf", e);
            }

2.

 try {

        ITesseract instance = new Tesseract();
        instance.setDatapath(pLangaugePath); // C:\\t
        instance.setLanguage(pLanguage); // eng

        String ocrText = instance.doOCR(pFile);

        if (StringUtils.isNotBlank(ocrText)) {
            ret.append(ocrText);
        }

    } catch (Exception e) {
        LOG.error("Could not do ocr on image file created via pdf ", e);
    }

Исследовательская работа:

Нашел этот Не работает/решение

а также не работает


person Tinus Jackson    schedule 16.01.2018    source источник
comment
Есть ли у вас среда разработки и развертывания? Библиотека также установлена ​​при развертывании?   -  person Jim Garrison    schedule 16.01.2018
comment
Да, насколько я вижу, не могли бы вы рассказать, как я могу это точно проверить, пожалуйста?   -  person Tinus Jackson    schedule 16.01.2018
comment
Пробовали ли вы использовать образцы файлов в папке Tess4J-3.4.3-src\Tess4J\test\resources\test-data?   -  person Daefect91    schedule 17.01.2018
comment
@Daefect91 Daefect91 Нет, сейчас попробую, спасибо.   -  person Tinus Jackson    schedule 17.01.2018
comment
@ Daefect91 Та же проблема при использовании тестовых данных   -  person Tinus Jackson    schedule 17.01.2018
comment
Странно, я только что провел быстрый тест на своей машине. Я создал проект maven, добавил зависимость для tess4j, добавил папку tessdata в свой проект и поместил туда несколько файлов для тестирования, и он отлично работает. Никаких жалоб на зависимость jai-imagio. Возможно, одна из ваших других зависимостей конфликтует с tess4j?   -  person Daefect91    schedule 17.01.2018
comment
@Daefect91 Daefect91 Может быть, попробую из чистого проекта   -  person Tinus Jackson    schedule 17.01.2018
comment
@TinusJackson Отлично, дайте мне знать, что он делает.   -  person Daefect91    schedule 17.01.2018
comment
@ Daefect91 Создал новый проект mvn, но, кажется, ничего не делает, отладил его и не выдает ошибку?   -  person Tinus Jackson    schedule 17.01.2018
comment
Если вы работаете с файлами PDF, убедитесь, что GhostScript установлен и указан в системном пути.   -  person nguyenq    schedule 19.01.2018
comment
@nguyenq Требуется ли GhostScript? PDF работает в обычном Java-приложении, проблема в том, что я изо всех сил пытаюсь заставить его работать с веб-приложением, работающим в контейнере.   -  person Tinus Jackson    schedule 22.01.2018


Ответы (1)


Tess4J был известен тем, что не работал с Glassfish из-за исключения во время выполнения, вызванного недоступностью строковой константы JNA RESOURCE_PREFIX. Эта проблема была исправлена ​​в последних версиях 3.4.9 (для Tesseract 3.05.01) и 4.0.2 (для Tesseract 4.0.0-beta.1). Библиотеку теперь можно использовать с Glassfish и, возможно, с Payara Server.

Вам также может понадобиться включить оператор ImageIO.scanForPlugins(); перед вызовом OCR. Это предназначено для обеспечения того, чтобы соответствующие ImageReader были доступны для чтения входных изображений.

person nguyenq    schedule 04.05.2018