2015-12-06 1 views
0

Я пытаюсь использовать Tesseract для работы с OCR в приложении Java. Для этого я использую мост Java/Tesseract, найденный here.Использование javacpp-preset/tesseract сбоев java при выходе

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

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

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

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: Использование ListDLLs, я видел, что DLL в вопрос находится в C:\Users\...\AppData\Local\Temp\javacpp3256864312633\libgcc_s_dw2-1.dll, так что «Неправильный DLL из %PATH%» это не ответ.

+0

Похож на проблему с MSYS2: http://sourceforge.net/p/msys2/mailman/msys2-users/thread/[email protected]/ Похоже, это исправлено в последней версии. Нужно будет перестроить, чтобы узнать. –

+0

@SamuelAudet: Я правильно понимаю это, это означало бы, что нужно было перекомпилировать библиотеки Tesseract-Libraries, и там будет ошибка? – Kurtibert

+0

Похоже, проблема заключается в среде выполнения C++, и нам, возможно, потребуется перестроить. Просто замена 'libgcc_s_dw2-1.dll' на новейшую версию MSYS2 также может работать. –

ответ

0

У этого может возникнуть проблема с libwinpthread-1.dll.

Замените текущий libwinpthread-1.dll в банке с последней dll 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 и поместите все dll в одну и ту же папку вашего приложения.
  4. удалить leptonica-1.72-1.1-windows-x86.jar из classpath.
  5. удалить libwinpthread-1.dll из папки (или заменить libwinpthread-1.dll на установленный C: \ msys64 \ mingw32 \ bin \ libwinpthread-1.dll). Сначала загружается путь «C: \ msys64 \ mingw32 \ bin», поэтому, если вы можете установить mingw32, нет необходимости удалять (или заменять) его.
Смежные вопросы