11

我正在使用 Tesseract 的 java 包装器 tess4j。我也安装了普通的 Tesseract。我不确定 tess4j 是如何工作的,但由于它带有一个 tessdata 文件夹,我可以假设您会将语言数据文件放在那里。但是,只有当语言数据文件位于“真实”的 tessdata 文件夹(tesseract 随附的文件夹,而不是 tess4j)中时,tess4j 才有效。如果我删除该文件夹,我会收到以下错误消息:

Error opening data file C:\Program Files\Tesseract-OCR\tessdata/jpn.trained
data
Please make sure the TESSDATA_PREFIX environment variable is set to the par
ent directory of your "tessdata" directory.
Failed loading language 'jpn'
Tesseract couldn't load any languages!
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x631259dc, pid=5108, tid=
10148
#
# JRE version: 7.0_06-b24
# Java VM: Java HotSpot(TM) Client VM (23.2-b09 mixed mode, sharing windows
-x86 )
# Problematic frame:
# C  [libtesseract302.dll+0x59dc]  STRING::strdup+0x467c
#
# Failed to write core dump. Minidumps are not enabled by default on client
 versions of Windows
#
# An error report file with more information is saved as:
# D:\School\Programs\OCRTest\v1.0.0\hs_err_pid5108.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.sun.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

这是否意味着我需要安装 Tesseract 才能使用 tess4j?为什么?或者我的 tess4j tessdata 文件夹可能在错误的位置(它当前与我的 .java 文件一起,tess4j jar 位于我设置了类路径的 lib 文件夹中)。

4

4 回答 4

7

对于那些使用 maven 并且不喜欢使用全局变量的人,这对我有用:

File imageFile = new File("C:\\random.png");
Tesseract instance = Tesseract.getInstance();

//In case you don't have your own tessdata, let it also be extracted for you
File tessDataFolder = LoadLibs.extractTessResources("tessdata");

//Set the tessdata path
instance.setDatapath(tessDataFolder.getAbsolutePath());

try {
    String result = instance.doOCR(imageFile);
    System.out.println(result);
} catch (TesseractException e) {
    System.err.println(e.getMessage());
}

这里找到,使用 maven -> net.sourceforge.tess4j:tess4j:3.4.1 进行测试,链接也使用 1.4.1 jar

于 2017-10-06T00:31:54.117 回答
4

让您TESSDATA_PREFIX environment variable指向 Tess4j 的 tessdata 文件夹。

通常您在系统安装过程中设置这些变量,但您可能会在这里找到解决方案:如何从 Java 设置环境变量?

您必须在运行您的应用程序的系统上执行此操作,因为 tessdata.dll取决于此环境变量。

于 2013-08-07T08:45:44.660 回答
3

TESSDATA_PREFIX环境变量,如果已定义,将覆盖所有内容,包括由initor设置的内容setDatapath;但在不久的将来,当应用程序可以指定其tessdata文件夹的位置时,这种情况可能会发生变化。

http://code.google.com/p/tesseract-ocr/issues/detail?id=938
https://groups.google.com/forum/#!topic/tesseract-ocr/bkJwI8WmxSw

于 2013-08-07T23:20:43.943 回答
2

也许您的主项目文件夹中没有该tessdata文件夹。此文件夹包含所有 tesseract 支持的语言(它包含带有.traineddata.bigrams.fold.lm.nn.params和扩展名.size的文件.word-freq)如果您没有它,请按照下列步骤操作:

  1. 从github.com/tesseract-ocr/tessdata下载 tessdata-master 文件夹(从下载 ZIP 按钮)
  2. 解压缩tessdata-master.zip主项目文件夹中的文件内容
  3. 重命名tessdata-mastertessdata
  4. 运行您的 java 项目并测试它是否有效。至少这对我有用。
于 2016-04-26T15:38:48.383 回答