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