【问题标题】:Tesseract on Linux crashes GlassfishLinux 上的 Tesseract 使 Glassfish 崩溃
【发布时间】:2015-02-23 17:21:50
【问题描述】:

我们正在使用 Tess4J/Tesseract 在 web 应用程序上执行 OCR。在 Windows 上一切正常,但当部署在 Linux 机器上时,程序崩溃,终止 glassfish 进程并输出转储文件:hs_err_pidXXXXX.log

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f9fdd5322a0, pid=10412, tid=140324597778176
#
# JRE version: Java(TM) SE Runtime Environment (7.0_75-b13) (build 1.7.0_75-b13)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.75-b04 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C  [libtesseract.so+0x2532a0]  ERRCODE::error(char const*, TessErrorLogCode, char const*, ...) const+0x190
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# 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.
#

---------------  T H R E A D  ---------------

Current thread (0x00007fa00c42d800):  JavaThread "pool-26-thread-1" [_thread_in_native, id=10705, stack(0x00007f9fddbdc000,0x00007f9fddcdd000)]

siginfo:si_signo=SIGSEGV: si_errno=0, si_code=1 (SEGV_MAPERR), si_addr=0x0000000000000000

tesseract 命令可以正常工作并正确地将图像转换为文本。 我们已经尝试了LC_NUMERIC 解决方案,但仍然无法正常工作。

我们的 Tesseract java 代码是这样的

File file; // ...
boolean hOcr; // ...
Rectangle rec; // ...
OcrResult result;
//Tesseract instance = Tesseract.getInstance();
Tesseract1 instance = new Tesseract1();
try {
    instance.setHocr(hOcr);            
    ImageIO.scanForPlugins();
    String res;
    if (rec == null) {
        res = instance.doOCR(file);
    } else {
        res = instance.doOCR(file, rec);
    }
    result = new OcrResult(res, 0, true);
} catch (TesseractException e) {
    log.error("error tesseract", e);
    // process error
} catch (Error e) {
    log.error("error tesseract", e);
    // process error
}

我们的规格

  • Tesseract 3.02.02
  • Tess4J
  • CentoOS 6.4
  • Java 1.7
  • Glassfish 4.1

有人有什么建议吗?

【问题讨论】:

  • ImageIO 知道 Tesseract1 的实例吗?
  • 我不知道你在说什么,所以我猜不是
  • 既然你使用 Java 64 位,那 Tesseract 也是 64 位的吗?并确保setDatpathtessdata 目录的父级。
  • 感谢您的评论。结果是一系列因素:将数据路径设置为 TESSDATA_PREFIX 并应用补丁(found here,归功于作者)由于已知的issue concerning locale

标签: java linux tesseract tess4j


【解决方案1】:

原来是综合因素:

  • 在 Glassfish 中的服务器 JVM 设置上将数据路径设置为 TESSDATA_PREFIX
  • 最重要的是,由于已知的issue concerning system locale,在 Tesseract(found here,作者致谢)上应用补丁 - 不知何故,错误修复未在最新版本中应用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多