Сбой JVM при вызове API Tesseract.getWords, работающем с образом Docker Ubuntu - PullRequest
1 голос
/ 12 июня 2019

Я пытаюсь извлечь слова из изображения, используя tess4j.Когда я вызываю getWords API, в некоторых случаях происходит сбой JVM.

Ниже приведены версии для соответствующих пакетов / программного обеспечения

  • Версия Java: 11
  • Версия Tomcat: 8.5
  • Соответствующие java-зависимости

    <dependency> 
        <groupId>net.sourceforge.tess4j</groupId> 
        <artifactId>tess4j</artifactId> 
        <version>4.3.1</version> 
    </dependency> 
    <dependency> 
        <groupId>org.bytedeco.javacpp-presets</groupId> 
        <artifactId>tesseract-platform</artifactId> 
        <version>4.0.0-1.4.4</version> 
    </dependency> 
    

Ниже приведены мои наблюдения

  1. Если я запустил ту же настройку на своей Fedora (версия 29) рабочий стол работает нормально.
  2. Если я запускаю в докере с той же настройкой, но с базовым образом, как Ubuntu: 18.04, то при извлечении слов из образа JVM вылетает.
  3. Пожалуйстаобратите внимание, что env TESSDATA_PREFIX установлен соответствующим образом.Также я попытался установить LC_ALL = C, но не повезло, если я запускаю с образом докера.

Отчет о сбое от catalina.out

contains_unichar_id(unichar_id):Error:Assert failed:in file ../ccutil/unicharset.h, line 513
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f1fe7aa369b, pid=40, tid=89
#
# JRE version: Java(TM) SE Runtime Environment (11.0.2+9) (build 11.0.2+9-LTS)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (11.0.2+9-LTS, mixed mode, tiered, compressed oops, g1 gc, linux-amd64)
# Problematic frame:
# C  [libtesseract.so.4+0x25969b]  ERRCODE::error(char const*, TessErrorLogCode, char const*, ...) const+0x16b
#
# Core dump will be written. Default location: Core dumps may be processed with "/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h %e" (or dumping to /app/identity-service/core.40)
#
# An error report file with more information is saved as:
# /app/identity-service/hs_err_pid40.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.

Один из потоков имел проблему из потокаdump

Current thread (0x00007f210015a800):  JavaThread "fb5c080c-25bb-494a-8e6d-1df6df91c188" daemon [_thread_in_native, id=89, stack(0x00007f206e7d2000,0x00007f206e8d3000)]

Stack: [0x00007f206e7d2000,0x00007f206e8d3000],  sp=0x00007f206e8cdbb0,  free space=1006k
Native frames: (J=compiled Java code, A=aot compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [libtesseract.so.4+0x25969b]  ERRCODE::error(char const*, TessErrorLogCode, char const*, ...) const+0x16b

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  com.sun.jna.Native.invokeInt(Lcom/sun/jna/Function;JI[Ljava/lang/Object;)I+0
j  com.sun.jna.Function.invoke([Ljava/lang/Object;Ljava/lang/Class;ZI)Ljava/lang/Object;+211
j  com.sun.jna.Function.invoke(Ljava/lang/reflect/Method;[Ljava/lang/Class;Ljava/lang/Class;[Ljava/lang/Object;Ljava/util/Map;)Ljava/lang/Object;+271
j  com.sun.jna.Library$Handler.invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;+344
j  com.sun.proxy.$Proxy25.TessBaseAPIRecognize(Lnet/sourceforge/tess4j/ITessAPI$TessBaseAPI;Lnet/sourceforge/tess4j/ITessAPI$ETEXT_DESC;)I+20
j  net.sourceforge.tess4j.Tesseract.getWords(Ljava/awt/image/BufferedImage;I)Ljava/util/List;+31

Можете ли вы помочь?

...