【发布时间】:2015-12-06 20:43:53
【问题描述】:
我正在尝试使用 Tesseract 在 Java 应用程序中提供 OCR 功能。为此,我使用了here 找到的 Java/Tesseract 桥。
pom.xml 依赖:
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>tesseract</artifactId>
<version>3.04-1.1</version>
</dependency>
它有效,我可以使用该库对图像进行 OCR 化。但是当 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 崩溃的情况——但我也从未使用过原生程序。 ;-) 有没有人暗示在哪里寻找这种奇怪行为的解决方案?
编辑 2015-12-07:使用 ListDLLs,我看到有问题的 DLL 位于 C:\Users\...\AppData\Local\Temp\javacpp3256864312633\libgcc_s_dw2-1.dll,因此“来自 %PATH% 的错误 DLL”不是回答。
【问题讨论】:
-
看起来像 MSYS2 的问题:sourceforge.net/p/msys2/mailman/msys2-users/thread/… 听起来这在最新版本中已修复。需要重建才能找出答案。
-
@SamuelAudet:我理解正确吗,这意味着必须重新编译 Tesseract-Libraries 并且错误就在那里?
-
看起来问题出在 C++ 运行时,我们可能需要重新构建。简单地用 MSYS2 的最新版本替换
libgcc_s_dw2-1.dll也可能有效。 -
哦,我现在才知道:
Samiel Audet == saudet! ;) 我怎样才能替换 dll?它位于一个由 Maven 加载的 jar 中,我不知道应该如何在不牺牲整个 Maven 进程优势的情况下干扰该进程。 -
好吧,在 Maven 之外尝试一下,如果可行,我们会想办法的。
标签: java tesseract javacpp libgcc