Использование javacpp-preset/tesseract приводит к сбою Java при выходе

Я пытаюсь использовать Tesseract, чтобы иметь функцию распознавания текста в приложении Java. Чтобы добиться этого, я использую мост Java/Tesseract, найденный здесь.

pom.xml зависимость:

<dependency>
    <groupId>org.bytedeco.javacpp-presets</groupId>
    <artifactId>tesseract</artifactId>
    <version>3.04-1.1</version>
</dependency>

Это работает, я могу использовать библиотеку для распознавания изображения. Но когда Java-программа завершает работу, JVM падает. Для минимального примера достаточно даже самой первой строки инициализации Tesseract:

import org.bytedeco.javacpp.tesseract.TessBaseAPI;

public class MinimalExample {

    public static void main(String[] args) {
        System.out.println("Hi!");
        TessBaseAPI tessAPI = new TessBaseAPI();
    }
}

Если я запускаю это main, это дает следующее:

Hi!

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

И следующее сообщение об ошибке: Java(TM) Platform SE binary funktioniert nicht mehr – Windows kann online nach einer Lösung für das Problem suchen. (Java(TM) Platform SE binary does not work anymore – Windows can look for a solution to this problem online).

Problemsignatur:
  Problemereignisname:  APPCRASH
  Anwendungsname:   java.exe
  Anwendungsversion:    8.0.650.17
  Anwendungszeitstempel:    5614685f
  Fehlermodulname:  libgcc_s_dw2-1.dll
  Fehlermodulversion:   0.0.0.0
  Fehlermodulzeitstempel:   3f263ec2
  Ausnahmecode: 40000015
  Ausnahmeoffset:   000149a1
  Betriebsystemversion: 6.1.7601.2.1.0.256.49
  Gebietsschema-ID: 1031
  Zusatzinformation 1:  7309
  Zusatzinformation 2:  73092f5dbc78923c702ae5601110d2ea
  Zusatzinformation 3:  9fa1
  Zusatzinformation 4:  9fa11625863fb37077a4ab55be352b96

Раньше у меня никогда не было сбоев в Java, но я также никогда не использовал нативные программы.;-) У кого-нибудь есть подсказка, где искать решение этого странного поведения?

Edit 2015-12-07: Используя ListDLL, я видел, что DLL находится в C:\Users\...\AppData\Local\Temp\javacpp3256864312633\libgcc_s_dw2-1.dll, так что "Неправильная DLL из %PATH%"это не ответ.

1 ответ

Это может быть проблема с libwinpthread-1.dll.

Замените текущую libwinpthread-1.dll в jar на последнюю версию библиотеки mingw32, и она работает нормально.

  1. установить msys2-x86_64-20150916.exe, загруженный с https://msys2.github.io/.
  2. установите base-devel, mingw-w64-i686-toolchain, используя pacman.
  3. Извлеките leptonica-1.72-1.1-windows-x86.jar и поместите все библиотеки в одну и ту же папку вашего приложения.
  4. удалите leptonica-1.72-1.1-windows-x86.jar из пути к классам.
  5. удалите libwinpthread-1.dll из папки (или замените libwinpthread-1.dll на установленный C:\msys64\mingw32\bin\libwinpthread-1.dll). Кажется, сначала загружается путь "C:\msys64\mingw32\bin", поэтому, если вы можете установить mingw32, его не нужно удалять (или заменять).
Другие вопросы по тегам