我正在尝试使用Tesseract在Java应用程序中实现OCR功能。为了实现这一点,我使用了Java/Tesseract桥接器。
pom.xml
依赖项:
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>tesseract</artifactId>
<version>3.04-1.1</version>
</dependency>
它是有效的,我可以使用库来OCRize一个图像。但是当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:使用ListDLL,我看到有问题的DLL位于C:Users...AppDataLocalTempjavacpp3256864312633libgcc_s_dw2-1.dll
中,因此"%PATH%
中的错误DLL"不是答案。
它可能与libwinpthread-1.dll有问题。
用最新的mingw32的dll替换jar中当前的libwinpthread-1.dll,效果很好。
- 安装msys2-x86_64-20150916.exe,下载自https://msys2.github.io/
- 使用pacman安装base-devel、mingw-w64-i686到olchain
- 提取一个leptonica-1.72-1.1-windows-x86.jar,并将所有dll放入应用程序的同一文件夹中
- 从类路径中删除leptonica-1.72-1.1-windows-x86.jar
- 从文件夹中删除libwinpthread-1.dll(或将libwinpthrad-1.dll替换为已安装的C:\msys64\mingw32\bin\libwinpthred-1.dll)。路径"C:\msys64\mingw32\bin"似乎是首先加载的,因此如果可以安装mingw32,则无需删除(或替换)它