Java JNA wrapper for Tesseract OCR API

Overview

Tess4J

Join the chat at https://gitter.im/nguyenq/tess4j

A Java JNA wrapper for Tesseract OCR API.

Tess4J is released and distributed under the Apache License, v2.0.

Features

The library provides optical character recognition (OCR) support for:

  • TIFF, JPEG, GIF, PNG, and BMP image formats
  • Multi-page TIFF images
  • PDF document format

Dependencies

Microsoft Visual C++ 2019 x86 and x64 Runtimes

Since Tesseract and Leptonica Windows binaries were built using Visual Studio 2019 (v142) Platform Toolset, please ensure you have Microsoft Visual C++ 2019 Redistributable installed.

Tutorial

Development with Tess4J in NetBeans, Eclipse, and Command-line

Contributors

A big thanks to GitHub and all of Tess4J's contributors.

Comments
  • UnsatisfiedLinkError: The specified module could not be found

    UnsatisfiedLinkError: The specified module could not be found

    I have gradually followed this document example, using netbeans. http://tess4j.sourceforge.net/tutorial/
    My System configuration is as follow: Windows 7 64bit. JDK 1.8 Microsoft visual c++ 2015 86x already existed so i installed 2017 64bit also. I have also find and downloaded all the required jar files as you can see. commons-io-2.5.jar jai-imageio-core-1.3.1.jar jna-4.1.0.jar jul-to-slf4j-1.8.0-beta2.jar lept4j-1.10.0.jar logback-classic-1.1.3.jar logback-core-1.1.3.jar slf4j.jar tess4j-4.0.2.jar

    I also added the testdata folder but i got this error

    run: Exception in thread "main" java.lang.UnsatisfiedLinkError: The specified module could not be found.

    at com.sun.jna.Native.open(Native Method)
    at com.sun.jna.Native.open(Native.java:1759)
    at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:260)
    at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:398)
    at com.sun.jna.Library$Handler.<init>(Library.java:147)
    at com.sun.jna.Native.loadLibrary(Native.java:412)
    at com.sun.jna.Native.loadLibrary(Native.java:391)
    at net.sourceforge.tess4j.util.LoadLibs.getTessAPIInstance(LoadLibs.java:84)
    at net.sourceforge.tess4j.TessAPI.<clinit>(TessAPI.java:42)
    at net.sourceforge.tess4j.Tesseract.init(Tesseract.java:364)
    at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:277)
    at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:209)
    at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:193)
    at tess4j.example.TesseractExample.main(TesseractExample.java:27)
    

    Please i need help.

    opened by nobleson 63
  • Failed loading language Tesseract couldn't load any languages!

    Failed loading language Tesseract couldn't load any languages!

    Tess4J version - 3.1.0 Tesseract version - Tesseract Open Source OCR Engine v3.04.01 with Leptonica Os - OSX 10.11.3 El Capitan

    //TESS4J_FOLDER_PATH = "/usr/local/Cellar/tesseract/3.04.01_1/share/' - location lang .traineddata
    instance = new Tesseract();
    instance.setDatapath(TESS4J_FOLDER_PATH);
    instance.setLanguage("chi_tra");
    
    String result = "";
    File imageFile = new File(filePath);
    try {
         result = instance.doOCR(imageFile);
    } catch (TesseractException e) {
        System.err.println(e.getMessage());
    }
    return result;
    

    i got error

    Failed loading language 'chi_tra'
    Tesseract couldn't load any languages!
    #
    # A fatal error has been detected by the Java Runtime Environment:
    #
    #  SIGSEGV (0xb) at pc=0x000000012408d311, pid=68062, tid=0x0000000000001703
    #
    # JRE version: Java(TM) SE Runtime Environment (8.0_92-b14) (build 1.8.0_92-b14)
    # Java VM: Java HotSpot(TM) 64-Bit Server VM (25.92-b14 mixed mode bsd-amd64 compressed oops)
    # Problematic frame:
    # C  [libtesseract.dylib+0x13311]  _ZN9tesseract9Tesseract15recog_all_wordsEP8PAGE_RESP10ETEXT_DESCPK4TBOXPKci+0xb9
    #
    # Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
    
    opened by eshvan 34
  • Other languages can not use except eng

    Other languages can not use except eng

    OS X EI Capitan 10.11.1 JDK8_60 test4j 2.0.1 tesseract 3.04.00

    i installed tesseraect from brew.

    brew reinstall tesseract --all-languages --with-training-tools
    

    tessdata path is /usr/local/share/ and it has chi_sim.traineddata image

    but when i use tess4j to load chi_sim, here is code

    public class TesseractOCR {
        private static Logger logger = LoggerFactory.getLogger(TesseractOCR.class);
    
        //default config
        private final static String DEFAULT_TESSDATA_PATH = "/usr/local/share";
        private final static String DEFAULT_PAGE_SEG_MODE = "3";
        private final static String DEFAULT_LANG = "chi_sim";
    
        public static void main(String[] args) {
            Tesseract instance = new Tesseract();  // JNA Interface Mapping
            instance.setLanguage(DEFAULT_LANG);
            instance.setDatapath(DEFAULT_TESSDATA_PATH);
            instance.setPageSegMode(Integer.parseInt(DEFAULT_PAGE_SEG_MODE));
            BufferedImage image = Images.from("ocr/data/input/1.png");
            String result = "";
            try {
                result = instance.doOCR(image);
            } catch (TesseractException e) {
                logger.error("ocr image error!", e);
            }
            logger.info(result);
        }
    }
    
    Failed loading language 'chi_sim'
    Tesseract couldn't load any languages!
    #
    # A fatal error has been detected by the Java Runtime Environment:
    #
    #  SIGSEGV (0xb) at pc=0x000000012a54e933, pid=3139, tid=5891
    #
    # JRE version: Java(TM) SE Runtime Environment (8.0_60-b27) (build 1.8.0_60-b27)
    # Java VM: Java HotSpot(TM) 64-Bit Server VM (25.60-b23 mixed mode bsd-amd64 compressed oops)
    # Problematic frame:
    # C  [libtesseract.dylib+0x12933]  tesseract::Tesseract::recog_all_words(PAGE_RES*, ETEXT_DESC*, TBOX const*, char const*, int)+0xb9
    #
    

    the jvm crashed. here is log https://gist.github.com/fivesmallq/1f6d349c02e9bbab9b80

    eng is ok.


    also, i clone the tess4j project from github. and update junit test to set language chi_sim, put chi_sim.traineddata to src/main/resources, It appeared the same problem.

    ➜  tessdata git:(master) which tesseract
    /usr/local/bin/tesseract
    
    ➜  tessdata git:(master) tesseract --list-langs
    List of available languages (107):
    ...
    chi_sim
    chi_tra
    ...
    
    ➜  ocr  tesseract 2.jpg -l chi_sim result
    Tesseract Open Source OCR Engine v3.04.00 with Leptonica
    Warning in pixReadMemJpeg: work-around: writing to a temp file
    Detected 56 diacritics
    

    i use tesseract with the command line is ok.


    is it not currently does not support tesseract 3.04.00 ?

    Thank you

    opened by fivesmallq 33
  • doOCR() method is throwing null pointer exception on MAC OS 10.13 but the same code is working on Windows 10 OS

    doOCR() method is throwing null pointer exception on MAC OS 10.13 but the same code is working on Windows 10 OS

    I'm facing null pointer exception at doOCR("filepath") method of tess4j while running tests on MAC OS 10.13.5 but same tests are running without exception on Windows 10 OS ().

    kindly let me know if there is any dependency to be installed for MAC OS.

    Details

    Tess4j ver 4.2.3 Java 8

    opened by QA2Dev 25
  • !strcmp(locale,

    !strcmp(locale, "C"):Error:Assert failed:in file ../../../src/api/baseapi.cpp, line 191

    Hi, I am using tess4j in my demo project and get errors as showed below.... image

    Some informations if you need OS: Ubuntu 16.04 IDE: Intellij IDEA Tesseract: image

    The tesseract works fine in command line but not in java...

    other informations

    1. As mentioned in this link.. This problem also happens in python environment. Just want more people can help, so i submit issue also in here...
    2. As mentioned in this link. These codes are added in 4.0.0-beta.3 and i am using 4.0.0-beta.1.

    So,,,,how can i solve this problem??

    opened by jxc928 24
  • NoClassDefFoundError: net/sf/ghost4j/GhostscriptException

    NoClassDefFoundError: net/sf/ghost4j/GhostscriptException

    We are having trouble making the code below work. Could it be the PdfUtilities? We really appreciate any help. The stack trace is at the bottom. Let us know if you need more information.

    Environment

    Distributor ID: Ubuntu Description: Ubuntu 14.04.2 LTS Release: 14.04 Codename: trusty java version "1.8.0_66" Java(TM) SE Runtime Environment (build 1.8.0_66-b17) Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)

    Code

    package com.jantogal.test.pdf; //import org.ghost4j.Ghostscript; //import org.ghost4j.GhostscriptException; import java.io.File; import net.sourceforge.tess4j.Tesseract; import net.sourceforge.tess4j.TesseractException; import net.sourceforge.vietocr.PdfUtilities;

    public class App { private static final String TEST_FILE_PATH = "~/workspace/pdfs/FT0.pdf"; public static void main(String[] args) { Test02(); } private static void Test02(){ Tesseract instance = Tesseract.getInstance(); File pdfDoc = new File(TEST_FILE_PATH); File pngImageFiles[] = PdfUtilities.convertPdf2Png(pdfDoc);

        for (int i = 0; i < pngImageFiles.length; i++) {
          try {
            String ocrResult = instance.doOCR(pngImageFiles[i]);
            System.out.println(ocrResult);
            } catch (TesseractException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
          System.console().readLine();
        }
    }
    

    }

    Solutions attempted:

    (1) Tried including Ghostscript ghost4j 1.0.0 in the maven dependencies. The library was in the classpath correctly. Results: Stack trace shown below - Note: I was able to instantiate Ghostscript objects using the factory without any issues inside void main. (2) Followed the solution described here https://github.com/nguyenq/tess4j/issues/4 Results: same as (1)

    Stack Trace:

    The issue happens on the line * File pngImageFiles[] = PdfUtilities.convertPdf2Png(pdfDoc);*

    We are just testing for the moment. The exception is: Exception in thread "main" java.lang.NoClassDefFoundError: net/sf/ghost4j/GhostscriptException at com.jantogal.test.pdf.App.Test02(App.java:24) at com.jantogal.test.pdf.App.main(App.java:19) Caused by: java.lang.ClassNotFoundException: net.sf.ghost4j.GhostscriptException at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 2 more

    help wanted 
    opened by luis08 20
  • Tess4j on OpenCL / Multithread

    Tess4j on OpenCL / Multithread

    Hello, I have seen on the Internet that it is possible to use tesseract with OpenCL. Could tess4j support it ? It would be a tremendous feature. Vulkan ? But it may be a bit early :-)

    question 
    opened by sonik340 20
  • Invalid calling convention 63  (Ghostscript, Tess4J, Ghost4J)

    Invalid calling convention 63 (Ghostscript, Tess4J, Ghost4J)

    Hello,

    I'm using tess4j to make a webapp that scans PDF bills or pictures to extract a certain reference number. I developed the webapp on Windows where everything is working fine so far ( although i have some image pre-processing to implement). Since the webapp will be running on a Linux server i'm running some test on a Debian system. I have compiled tesseract libraries and leptonica and also installed ghostscript and the required libraries. When testing an image i get the correct results but when it comes to testing pdf I have an invalid calling convention 63 error. I've browsed on various post related to this subject and applied the suggested solutions. My system: Debian 8 Jessie Tesseract 3.04.01 Leptonica 1.72 The webapp is running with Tomcat 8.0.33

    *What I have done so far to fix this issue: *

    • Switched the JNA from 4.2.2 to 4.1.0 in the provided libs for Ghost4j https://github.com/zippy1978/ghost4j/issues/44
    • Switched Ghostscript version from 9.18 to 9.16 according to this post https://github.com/nguyenq/tess4j/issues/30#issuecomment-185533296

    Regardless of all that, the issue persists. So I would appreciate some pointers on how to fix this issue. Is it related to Debian ? Is there something I have done wrong ? Maybe there's a library I failed to install. The ocr works for pictures so my suspicion is that the problem is linked to PDF conversion.

    The next option I will try is to make the tests on a CentOS system. But I thought that if I could get it running on Debian it should be running anywhere. I'd like to point out that I'm a student so I apologize if I seem unclear or lack some technicalities. This my internship subject so I'm doing my best to get it working. If needed I'll provided additional information.

    Thank you

    Stacktrace ` type Exception report

    message Request processing failed; nested exception is java.lang.IllegalArgumentException: Invalid calling convention 63

    description The server encountered an internal error that prevented it from fulfilling this request.

    exception

    org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalArgumentException: Invalid calling convention 63 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:980) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:859) javax.servlet.http.HttpServlet.service(HttpServlet.java:622) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:844) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) root cause

    java.lang.IllegalArgumentException: Invalid calling convention 63 com.sun.jna.Native.createNativeCallback(Native Method) com.sun.jna.CallbackReference.(CallbackReference.java:239) com.sun.jna.CallbackReference.getFunctionPointer(CallbackReference.java:413) com.sun.jna.CallbackReference.getFunctionPointer(CallbackReference.java:395) com.sun.jna.Function.convertArgument(Function.java:541) com.sun.jna.Function.invoke(Function.java:305) com.sun.jna.Library$Handler.invoke(Library.java:236) com.sun.proxy.$Proxy49.gsapi_set_stdio(Unknown Source) org.ghost4j.Ghostscript.initialize(Ghostscript.java:323) net.sourceforge.tess4j.util.PdfUtilities.convertPdf2Png(PdfUtilities.java:103) fr.ocr.jouleye.analysis.FileAnalyzer.Analyse(FileAnalyzer.java:67) fr.ocr.jouleye.controller.FileUploadController.showPDL(FileUploadController.java:112) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:498) org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:817) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:731) org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:968) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:859) javax.servlet.http.HttpServlet.service(HttpServlet.java:622) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:844) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) note The full stack trace of the root cause is available in the Apache Tomcat/8.0.33 logs.`

    opened by bliss-pelete 18
  • MacOS tess4j ghostscript issue

    MacOS tess4j ghostscript issue

    I'm trying to extract text from PDFs using tess4j but it's outputting EE ee EE EE EE ee and similar text, even though windows is significantly better.

    I had the same problem on windows but moving gsdll64.dll to src/main/resources fixed the issue for me and the output is almost 100% accurate. I can't seem to figure out how to fix this on macOS.

    I added -Djna.library.path=/usr/local/lib to my args and it still doesn't work even though both ghostscript and tesseract is installed via homebrew and should have a symlink to /usr/local/lib. I also tried moving libtesseract.4.dylib and libgs.9.52.dylib to src/main/resources as well and tried moving them to a darwin folder under resources doesn't help either.

    Am I doing something wrong or does tess4j just not work as well on macOS compared to windows?

    The PDFs I'm using is also very clear without any noise or marks.

    Tess4J: 4.5.2 Tesseract: 4.1.1 Leptonica: 1.80.0 Ghostscript: 9.5.2

    This is using eng.traineddata.

    opened by weiw11 16
  • tess4j read_params_file: parameter not found: error which can shutdown tomacat thread.

    tess4j read_params_file: parameter not found: error which can shutdown tomacat thread.

    String result = ""; ITesseract instance = new Tesseract1(); File tessTrainedDataLoc = OpenmrsUtil.getDirectoryInApplicationDataDirectory( GlobalPropertyHelper.getGlobalProperty(OpenmrsConstants.GLOBAL_PROPERTY_OCR_TESS_DATA_DIR)); instance.setDatapath(tessTrainedDataLoc.getAbsolutePath()); instance.setLanguage(language); try { result = instance.doOCR(imageFile); log.info("Tessact result: " + result); } catch (TesseractException e) { log.error(e.getMessage()); } finally { return result; }

    opened by vvsvv 16
  • Performance issue under Linux

    Performance issue under Linux

    Hi! I experience an interesting behavior with Tess4J running under CentOS. My environment: CentOS7 (4 CPU with AVX2 and etc.) Tomcat 8.5 JRE 1.8.191-b12 latest Tesseract4 installed with yum latest Tess4J invoked by servlet

    I take the same file and serially trigger recognition multiple times. And timing is always the same: First and second runs last for 2 second The third and below take 12 second

    Application restart doesn't have any effect (12s for first and below) Tomcat restart forces the situation to repeat: 2s, 2s, 12s ...

    When I run Tesseract from command line it is always fast with no performance degradation

    When I deploy my application to Windows server and use dll, the timing is stable with no performance degradation.

    Please, help!

    I can give you all application sources including teamviewer connection

    opened by nikolayzeltser 14
  • doOCR() vs. createDocuments() / createDocumentsWithResults()

    doOCR() vs. createDocuments() / createDocumentsWithResults()

    Hello, this is a great tool, thank you. We are using version 5.1.0. But why doesn't the text/string that is generated from doOCR() match text/string generated from createDocuments() / createDocumentsWithResults() ? We are inputting the same tiff file into both functions and the resulting text is different. Essentially, we want to know which one of these we should use, and if they were producing the same results, we could confidently choose either. But since, they don't, we need to decide which one to use (which one is better). We don't understand why they don't match exactly.

    For example, a snippet of our code for createDocumentsWithResults():

    List<RenderedFormat> listRF = new ArrayList<RenderedFormat>();
    listRF.add(RenderedFormat.PDF);
    listRF.add(RenderedFormat.TEXT);
    aryStrFileInputPaths[0] = "<SOME_PATH>\\tiff1.tiff";
    List<OCRResult> listOCRResult = tessInst.createDocumentsWithResults(aryStrFileInputPaths, aryStrFileOutputPaths, listRF, 0);
    String strResultCreateDocs = listOCRResult.toString();
    

    Note, aryStrFileInputPaths is a String Array with paths of the tiffs, and aryStrFileOutputPaths is a String Array of pdf filenames to be generated.

    An example of our code for doOCR() is:

    String strImagePagePathAndFileName = "<SOME_PATH>\\tiff1.tiff";
    File fileObjImage = new File(strImagePagePathAndFileName);
    String strResultDoOCR = tessInst.doOCR(fileObjImage);
    

    The one change that strResultCreateDocs has is that it includes extra text like "[Average Text Confidence: 82% Words:" and "[Confidence: 82.831604 Bounding box: 100 313 2298 2906]". We understand these differences. Aside from those differences, we would expect an exact match of the text. But, in many cases, there are differences in text throughout the page.

    Based on a previous response from an issue (https://github.com/nguyenq/tess4j/issues/154#issuecomment-503820107), it states "New APIs similar to createDocuments have been added to support buffered images as input."

    But, that does not answer the question we have. Is createDocumentsWithResults() and doOCR() using a different engine to generate the OCR'd text, and if not, why does it generate different results? If there is a way to get them to generate the exact same text, any info on how to do that would be most appreciated. Thank you.

    opened by vinodmap 4
  • JVM crash on M1 / MacOS with tess4j

    JVM crash on M1 / MacOS with tess4j

    A SImple springboot app with tess4j (5.4.0). One controller method to upload the image for OCR It processes 3 images successfully and crashes on the 4th with the threaddump:

    #
    # A fatal error has been detected by the Java Runtime Environment:
    #
    #  SIGSEGV (0xb) at pc=0x0000000100e53edc, pid=45254, tid=24587
    #
    # JRE version: OpenJDK Runtime Environment Zulu19.28+81-CA (19.0+36) (build 19+36)
    # Java VM: OpenJDK 64-Bit Server VM Zulu19.28+81-CA (19+36, mixed mode, emulated-client, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, bsd-aarch64)
    # Problematic frame:
    # C  [libtesseract.5.dylib+0x15bedc]  _ZN9tesseract9NetworkIO17WriteTimeStepPartEiiiPKf+0x28
    #
    # No core dump will be written. 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://www.azul.com/support/
    # The crash happened outside the Java Virtual Machine in native code.
    # See problematic frame for where to report the bug.
    #
    
    ---------------  S U M M A R Y ------------
    
    Command Line: -XX:TieredStopAtLevel=1 com.proofpoint.ocr.tesseact.OcrDemoApplication
    
    Host: "MacBookPro18,1" arm64, 10 cores, 32G, Darwin 21.6.0, macOS 12.6 (21G115)
    Time: Thu Oct  6 13:59:14 2022 MDT elapsed time: 5.825522 seconds (0d 0h 0m 5s)
    
    ---------------  T H R E A D  ---------------
    
    Current thread (0x000000015736b000):  JavaThread "http-nio-8080-exec-2" daemon [_thread_in_native, id=24587, stack(0x00000001744e0000,0x00000001746e3000)]
    
    Stack: [0x00000001744e0000,0x00000001746e3000],  sp=0x00000001746de930,  free space=2042k
    Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
    C  [libtesseract.5.dylib+0x15bedc]  _ZN9tesseract9NetworkIO17WriteTimeStepPartEiiiPKf+0x28
    C  [libtesseract.5.dylib+0x153fc8]  _ZN9tesseract4LSTM7ForwardEbRKNS_9NetworkIOEPKNS_15TransposedArrayEPNS_14NetworkScratchEPS1_+0x9a8
    C  [libtesseract.5.dylib+0x169538]  _ZN9tesseract6Series7ForwardEbRKNS_9NetworkIOEPKNS_15TransposedArrayEPNS_14NetworkScratchEPS1_+0x1a8
    C  [libtesseract.5.dylib+0x156d90]  _ZN9tesseract14LSTMRecognizer13RecognizeLineERKNS_9ImageDataEfbbbPfPNS_9NetworkIOES6_+0x228
    C  [libtesseract.5.dylib+0x1565b0]  _ZN9tesseract14LSTMRecognizer13RecognizeLineERKNS_9ImageDataEfbdRKNS_4TBOXEPNS_13PointerVectorINS_8WERD_RESEEEii+0xd0
    C  [libtesseract.5.dylib+0x26b98]  _ZN9tesseract9Tesseract17LSTMRecognizeWordERKNS_5BLOCKEPNS_3ROWEPNS_8WERD_RESEPNS_13PointerVectorIS6_EE+0x178
    C  [libtesseract.5.dylib+0x226a8]  _ZN9tesseract9Tesseract19classify_word_pass1ERKNS_8WordDataEPPNS_8WERD_RESEPNS_13PointerVectorIS4_EE+0x88
    C  [libtesseract.5.dylib+0x206e8]  _ZN9tesseract9Tesseract17RetryWithLanguageERKNS_8WordDataEMS0_FvS3_PPNS_8WERD_RESEPNS_13PointerVectorIS4_EEEbS6_S9_+0xb0
    C  [libtesseract.5.dylib+0x1caa0]  _ZN9tesseract9Tesseract26classify_word_and_languageEiPNS_11PAGE_RES_ITEPNS_8WordDataE+0x1a0
    C  [libtesseract.5.dylib+0x1d578]  _ZN9tesseract9Tesseract18RecogAllWordsPassNEiPNS_10ETEXT_DESCEPNS_11PAGE_RES_ITEPNSt3__16vectorINS_8WordDataENS5_9allocatorIS7_EEEE+0x224
    C  [libtesseract.5.dylib+0x1df90]  _ZN9tesseract9Tesseract15recog_all_wordsEPNS_8PAGE_RESEPNS_10ETEXT_DESCEPKNS_4TBOXEPKci+0x1b4
    C  [libtesseract.5.dylib+0x7954]  _ZN9tesseract11TessBaseAPI9RecognizeEPNS_10ETEXT_DESCE+0x398
    C  [libtesseract.5.dylib+0x66a4]  _ZN9tesseract11TessBaseAPI11GetUTF8TextEv+0x3c
    C  [jna8163462617070654861.tmp+0x1004c]  ffi_prep_closure_loc+0x15a4
    C  [jna8163462617070654861.tmp+0xea18]  ffi_call+0x520
    C  [jna8163462617070654861.tmp+0x6814]  Java_com_sun_jna_Native_invokePointer+0x97c
    C  [jna8163462617070654861.tmp+0x5ec4]  Java_com_sun_jna_Native_invokePointer+0x2c
    j  com.sun.jna.Native.invokePointer(Lcom/sun/jna/Function;JI[Ljava/lang/Object;)J+0
    j  com.sun.jna.Function.invokePointer(I[Ljava/lang/Object;)Lcom/sun/jna/Pointer;+7
    j  com.sun.jna.Function.invoke([Ljava/lang/Object;Ljava/lang/Class;ZI)Ljava/lang/Object;+385
    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;+390
    j  jdk.proxy2.$Proxy60.TessBaseAPIGetUTF8Text(Lnet/sourceforge/tess4j/ITessAPI$TessBaseAPI;)Lcom/sun/jna/Pointer;+16 jdk.proxy2
    j  net.sourceforge.tess4j.Tesseract.getOCRText(Ljava/lang/String;I)Ljava/lang/String;+269
    j  net.sourceforge.tess4j.Tesseract.doOCR(Ljavax/imageio/IIOImage;Ljava/lang/String;Ljava/awt/Rectangle;I)Ljava/lang/String;+18
    j  net.sourceforge.tess4j.Tesseract.doOCR(Ljava/io/File;Ljava/awt/Rectangle;)Ljava/lang/String;+126
    j  net.sourceforge.tess4j.Tesseract.doOCR(Ljava/io/File;)Ljava/lang/String;+3
    j  com.proofpoint.ocr.tesseact.service.OcrService.doOcr(Lorg/springframework/web/multipart/MultipartFile;Ljava/lang/String;)Ljava/lang/String;+27
    j  com.proofpoint.ocr.tesseact.controller.OcrController.ocrTess4J(Lorg/springframework/web/multipart/MultipartFile;)Lcom/proofpoint/ocr/tesseact/api/OcrResponse;+43
    j  java.lang.invoke.LambdaForm$DMH+0x0000000801038400.invokeVirtual(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+11 java.base@19
    j  java.lang.invoke.LambdaForm$MH+0x0000000801080400.invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+52 java.base@19
    J 3119 c1 java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; java.base@19 (108 bytes) @ 0x000000010acbec54 [0x000000010acbe480+0x00000000000007d4]
    j  org.springframework.web.method.support.InvocableHandlerMethod.doInvoke([Ljava/lang/Object;)Ljava/lang/Object;+28
    j  org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(Lorg/springframework/web/context/request/NativeWebRequest;Lorg/springframework/web/method/support/ModelAndViewContainer;[Ljava/lang/Object;)Ljava/lang/Object;+54
    j  org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(Lorg/springframework/web/context/request/ServletWebRequest;Lorg/springframework/web/method/support/ModelAndViewContainer;[Ljava/lang/Object;)V+4
    j  org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Lorg/springframework/web/method/HandlerMethod;)Lorg/springframework/web/servlet/ModelAndView;+244
    j  org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Lorg/springframework/web/method/HandlerMethod;)Lorg/springframework/web/servlet/ModelAndView;+81
    j  org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Ljava/lang/Object;)Lorg/springframework/web/servlet/ModelAndView;+7
    j  org.springframework.web.servlet.DispatcherServlet.doDispatch(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+259
    j  org.springframework.web.servlet.DispatcherServlet.doService(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+241
    j  org.springframework.web.servlet.FrameworkServlet.processRequest(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+71
    j  org.springframework.web.servlet.FrameworkServlet.doPost(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+3
    j  javax.servlet.http.HttpServlet.service(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+149
    j  org.springframework.web.servlet.FrameworkServlet.service(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+33
    j  javax.servlet.http.HttpServlet.service(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+36
    j  org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+304
    j  org.apache.catalina.core.ApplicationFilterChain.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+99
    j  org.apache.tomcat.websocket.server.WsFilter.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Ljavax/servlet/FilterChain;)V+21
    j  org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+135
    j  org.apache.catalina.core.ApplicationFilterChain.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+99
    j  org.springframework.web.filter.RequestContextFilter.doFilterInternal(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Ljavax/servlet/FilterChain;)V+21
    j  org.springframework.web.filter.OncePerRequestFilter.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Ljavax/servlet/FilterChain;)V+147
    j  org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+135
    j  org.apache.catalina.core.ApplicationFilterChain.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+99
    j  org.springframework.web.filter.FormContentFilter.doFilterInternal(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Ljavax/servlet/FilterChain;)V+38
    j  org.springframework.web.filter.OncePerRequestFilter.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Ljavax/servlet/FilterChain;)V+147
    j  org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+135
    j  org.apache.catalina.core.ApplicationFilterChain.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+99
    j  org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Ljavax/servlet/FilterChain;)V+53
    j  org.springframework.web.filter.OncePerRequestFilter.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Ljavax/servlet/FilterChain;)V+147
    j  org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+135
    j  org.apache.catalina.core.ApplicationFilterChain.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+99
    j  org.apache.catalina.core.StandardWrapperValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+694
    j  org.apache.catalina.core.StandardContextValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+169
    j  org.apache.catalina.authenticator.AuthenticatorBase.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+260
    j  org.apache.catalina.core.StandardHostValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+128
    j  org.apache.catalina.valves.ErrorReportValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+6
    j  org.apache.catalina.core.StandardEngineValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+59
    j  org.apache.catalina.connector.CoyoteAdapter.service(Lorg/apache/coyote/Request;Lorg/apache/coyote/Response;)V+199
    j  org.apache.coyote.http11.Http11Processor.service(Lorg/apache/tomcat/util/net/SocketWrapperBase;)Lorg/apache/tomcat/util/net/AbstractEndpoint$Handler$SocketState;+737
    j  org.apache.coyote.AbstractProcessorLight.process(Lorg/apache/tomcat/util/net/SocketWrapperBase;Lorg/apache/tomcat/util/net/SocketEvent;)Lorg/apache/tomcat/util/net/AbstractEndpoint$Handler$SocketState;+170
    j  org.apache.coyote.AbstractProtocol$ConnectionHandler.process(Lorg/apache/tomcat/util/net/SocketWrapperBase;Lorg/apache/tomcat/util/net/SocketEvent;)Lorg/apache/tomcat/util/net/AbstractEndpoint$Handler$SocketState;+505
    j  org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun()V+216
    j  org.apache.tomcat.util.net.SocketProcessorBase.run()V+21
    j  org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(Lorg/apache/tomcat/util/threads/ThreadPoolExecutor$Worker;)V+92
    j  org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run()V+5
    j  org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run()V+4
    j  java.lang.Thread.run()V+13 java.base@19
    v  ~StubRoutines::call_stub 0x000000010a654140
    V  [libjvm.dylib+0x4edbbc]  _ZN9JavaCalls11call_helperEP9JavaValueRK12methodHandleP17JavaCallArgumentsP10JavaThread+0x38c
    V  [libjvm.dylib+0x4ecbd8]  _ZN9JavaCalls12call_virtualEP9JavaValueP5KlassP6SymbolS5_P17JavaCallArgumentsP10JavaThread+0x11c
    V  [libjvm.dylib+0x4ecca4]  _ZN9JavaCalls12call_virtualEP9JavaValue6HandleP5KlassP6SymbolS6_P10JavaThread+0x64
    V  [libjvm.dylib+0x5a64c8]  _ZL12thread_entryP10JavaThreadS0_+0x9c
    V  [libjvm.dylib+0xa12ab0]  _ZN10JavaThread17thread_main_innerEv+0x110
    V  [libjvm.dylib+0xa10fcc]  _ZN6Thread8call_runEv+0xe0
    V  [libjvm.dylib+0x84eaa4]  _ZL19thread_native_entryP6Thread+0x158
    C  [libsystem_pthread.dylib+0x726c]  _pthread_start+0x94
    
    Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
    j  com.sun.jna.Native.invokePointer(Lcom/sun/jna/Function;JI[Ljava/lang/Object;)J+0
    j  com.sun.jna.Function.invokePointer(I[Ljava/lang/Object;)Lcom/sun/jna/Pointer;+7
    j  com.sun.jna.Function.invoke([Ljava/lang/Object;Ljava/lang/Class;ZI)Ljava/lang/Object;+385
    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;+390
    j  jdk.proxy2.$Proxy60.TessBaseAPIGetUTF8Text(Lnet/sourceforge/tess4j/ITessAPI$TessBaseAPI;)Lcom/sun/jna/Pointer;+16 jdk.proxy2
    j  net.sourceforge.tess4j.Tesseract.getOCRText(Ljava/lang/String;I)Ljava/lang/String;+269
    j  net.sourceforge.tess4j.Tesseract.doOCR(Ljavax/imageio/IIOImage;Ljava/lang/String;Ljava/awt/Rectangle;I)Ljava/lang/String;+18
    j  net.sourceforge.tess4j.Tesseract.doOCR(Ljava/io/File;Ljava/awt/Rectangle;)Ljava/lang/String;+126
    j  net.sourceforge.tess4j.Tesseract.doOCR(Ljava/io/File;)Ljava/lang/String;+3
    j  com.proofpoint.ocr.tesseact.service.OcrService.doOcr(Lorg/springframework/web/multipart/MultipartFile;Ljava/lang/String;)Ljava/lang/String;+27
    j  com.proofpoint.ocr.tesseact.controller.OcrController.ocrTess4J(Lorg/springframework/web/multipart/MultipartFile;)Lcom/proofpoint/ocr/tesseact/api/OcrResponse;+43
    j  java.lang.invoke.LambdaForm$DMH+0x0000000801038400.invokeVirtual(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+11 java.base@19
    j  java.lang.invoke.LambdaForm$MH+0x0000000801080400.invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+52 java.base@19
    J 3119 c1 java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; java.base@19 (108 bytes) @ 0x000000010acbec54 [0x000000010acbe480+0x00000000000007d4]
    j  org.springframework.web.method.support.InvocableHandlerMethod.doInvoke([Ljava/lang/Object;)Ljava/lang/Object;+28
    j  org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(Lorg/springframework/web/context/request/NativeWebRequest;Lorg/springframework/web/method/support/ModelAndViewContainer;[Ljava/lang/Object;)Ljava/lang/Object;+54
    j  org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(Lorg/springframework/web/context/request/ServletWebRequest;Lorg/springframework/web/method/support/ModelAndViewContainer;[Ljava/lang/Object;)V+4
    j  org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Lorg/springframework/web/method/HandlerMethod;)Lorg/springframework/web/servlet/ModelAndView;+244
    j  org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Lorg/springframework/web/method/HandlerMethod;)Lorg/springframework/web/servlet/ModelAndView;+81
    j  org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Ljava/lang/Object;)Lorg/springframework/web/servlet/ModelAndView;+7
    j  org.springframework.web.servlet.DispatcherServlet.doDispatch(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+259
    j  org.springframework.web.servlet.DispatcherServlet.doService(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+241
    j  org.springframework.web.servlet.FrameworkServlet.processRequest(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+71
    j  org.springframework.web.servlet.FrameworkServlet.doPost(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+3
    j  javax.servlet.http.HttpServlet.service(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+149
    j  org.springframework.web.servlet.FrameworkServlet.service(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+33
    j  javax.servlet.http.HttpServlet.service(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+36
    j  org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+304
    j  org.apache.catalina.core.ApplicationFilterChain.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+99
    j  org.apache.tomcat.websocket.server.WsFilter.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Ljavax/servlet/FilterChain;)V+21
    j  org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+135
    j  org.apache.catalina.core.ApplicationFilterChain.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+99
    j  org.springframework.web.filter.RequestContextFilter.doFilterInternal(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Ljavax/servlet/FilterChain;)V+21
    j  org.springframework.web.filter.OncePerRequestFilter.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Ljavax/servlet/FilterChain;)V+147
    j  org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+135
    j  org.apache.catalina.core.ApplicationFilterChain.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+99
    j  org.springframework.web.filter.FormContentFilter.doFilterInternal(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Ljavax/servlet/FilterChain;)V+38
    j  org.springframework.web.filter.OncePerRequestFilter.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Ljavax/servlet/FilterChain;)V+147
    j  org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+135
    j  org.apache.catalina.core.ApplicationFilterChain.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+99
    j  org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Ljavax/servlet/FilterChain;)V+53
    j  org.springframework.web.filter.OncePerRequestFilter.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Ljavax/servlet/FilterChain;)V+147
    j  org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+135
    j  org.apache.catalina.core.ApplicationFilterChain.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+99
    j  org.apache.catalina.core.StandardWrapperValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+694
    j  org.apache.catalina.core.StandardContextValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+169
    j  org.apache.catalina.authenticator.AuthenticatorBase.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+260
    j  org.apache.catalina.core.StandardHostValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+128
    j  org.apache.catalina.valves.ErrorReportValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+6
    j  org.apache.catalina.core.StandardEngineValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+59
    j  org.apache.catalina.connector.CoyoteAdapter.service(Lorg/apache/coyote/Request;Lorg/apache/coyote/Response;)V+199
    j  org.apache.coyote.http11.Http11Processor.service(Lorg/apache/tomcat/util/net/SocketWrapperBase;)Lorg/apache/tomcat/util/net/AbstractEndpoint$Handler$SocketState;+737
    j  org.apache.coyote.AbstractProcessorLight.process(Lorg/apache/tomcat/util/net/SocketWrapperBase;Lorg/apache/tomcat/util/net/SocketEvent;)Lorg/apache/tomcat/util/net/AbstractEndpoint$Handler$SocketState;+170
    j  org.apache.coyote.AbstractProtocol$ConnectionHandler.process(Lorg/apache/tomcat/util/net/SocketWrapperBase;Lorg/apache/tomcat/util/net/SocketEvent;)Lorg/apache/tomcat/util/net/AbstractEndpoint$Handler$SocketState;+505
    j  org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun()V+216
    j  org.apache.tomcat.util.net.SocketProcessorBase.run()V+21
    j  org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(Lorg/apache/tomcat/util/threads/ThreadPoolExecutor$Worker;)V+92
    j  org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run()V+5
    j  org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run()V+4
    j  java.lang.Thread.run()V+13 java.base@19
    v  ~StubRoutines::call_stub 0x000000010a654140
    
    
    
    <--- REMOVED --->
    
    
    
    jvm_args: -XX:TieredStopAtLevel=1 
    java_command: com.proofpoint.ocr.tesseact.OcrDemoApplication
    java_class_path (initial): /Users/apismenskiy/git/ocr-evaluation/tesseract-service/target/classes:/Users/apismenskiy/.m2/repository/com/proofpoint/common/1.0-SNAPSHOT/common-1.0-SNAPSHOT.jar:/Users/apismenskiy/.m2/repository/commons-io/commons-io/2.11.0/commons-io-2.11.0.jar:/Users/apismenskiy/.m2/repository/org/apache/commons/commons-text/1.9/commons-text-1.9.jar:/Users/apismenskiy/.m2/repository/org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.jar:/Users/apismenskiy/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.12.5/jackson-databind-2.12.5.jar:/Users/apismenskiy/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.12.5/jackson-annotations-2.12.5.jar:/Users/apismenskiy/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.12.5/jackson-core-2.12.5.jar:/Users/apismenskiy/.m2/repository/net/sourceforge/tess4j/tess4j/5.4.0/tess4j-5.4.0.jar:/Users/apismenskiy/.m2/repository/net/java/dev/jna/jna/5.12.1/jna-5.12.1.jar:/Users/apismenskiy/.m2/repository/com/github/jai-imageio/jai-imageio-core/1.4.0/jai-imageio-core-1.4.0.jar:/Users/apismenskiy/.m2/repository/org/apache/pdfbox/pdfbox/2.0.26/pdfbox-2.0.26.jar:/Users/apismenskiy/.m2/repository/org/apache/pdfbox/fontbox/2.0.26/fontbox-2.0.26.jar:/Users/apismenskiy/.m2/repository/commons-logging/commons-logging/1.2/commons-logging-1.2.jar:/Users/apismenskiy/.m2/repository/org/apache/pdfbox/pdfbox-tools/2.0.26/pdfbox-tools-2.0.26.jar:/Users/apismenskiy/.m2/repository/org/apache/pdfbox/pdfbox-debugger/2.0.26/pdfbox-debugger-2.0.26.jar:/Users/apismenskiy/.m2/repository/org/apache/pdfbox/jbig2-imageio/3.0.4/jbig2-imageio-3.0.4.jar:/Users/apismenskiy/.m2/repository/net/sourceforge/lept4j/lept4j/1.16.2/lept4j-1.16.2.jar:/Users/apismenskiy/.m2/repository/org/jboss/jboss-vfs/3.2.17.Final/jboss-vfs-3.2.17.Final.jar:/Users/apismenskiy/.m2/repository/org/jboss/logging/jboss-logging/3.4.2.Final/jboss-logging-3.4.2.Final.jar:/Users/apismenskiy/.m2/repository/org/slf4j/slf4j-api/1.7.32/slf4j-api-1.7.32.jar:/Users/apismenskiy/.m2/repository/org/springframework/boot/spring-boot/2.5.5/spring-boot-2.5.5.jar:/Users/apismenskiy/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/2.5.5/spring-boot-autoconfigure-2.5.5.jar:/Users/apismenskiy/.m2/repository/ch/qos/logback/logback-classic/1.2.6/logback-classic-1.2.6.jar:/Users/apismenskiy/.m2/repository/ch/qos/logback/logback-core/1.2.6/logback-core-1.2.6.jar:/Users/apismenskiy/.m2/repository/org/apache/logging/log4j/log4j-to-slf4j/2.14.1/log4j-to-slf4j-2.14.1.jar:/Users/apismenskiy/.m2/repository/org/apache/logging/log4j/log4j-api/2.14.1/log4j-api-2.14.1.jar:/Users/apismenskiy/.m2/repository/org/slf4j/jul-to-slf4j/1.7.32/jul-to-slf4j-1.7.32.jar:/Users/apismenskiy/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar:/Users/apismenskiy/.m2/repository/org/yaml/snakeyaml/1.28/snakeyaml-1.28.jar:/Users/apismenskiy/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.12.5/jackson-datatype-jdk8-2.12.5.jar:/Users/apismenskiy/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.12.5/jackson-datatype-jsr310-2.12.5.jar:/Users/apismenskiy/.m2/repository/com/fasterxml/jackson/module/jackson-module-parameter-names/2.12.5/jackson-module-parameter-names-2.12.5.jar:/Users/apismenskiy/.m2/repository/org/apache/tomcat/embed/tomcat-embed-core/9.0.53/tomcat-embed-core-9.0.53.jar:/Users/apismenskiy/.m2/repository/org/apache/tomcat/embed/tomcat-embed-el/9.0.53/tomcat-embed-el-9.0.53.jar:/Users/apismenskiy/.m2/repository/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.53/tomcat-embed-websocket-9.0.53.jar:/Users/apismenskiy/.m2/repository/org/springframework/spring-web/5.3.10/spring-web-5.3.10.jar:/Users/apismenskiy/.m2/repository/org/springframework/spring-beans/5.3.10/spring-beans-5.3.10.jar:/Users/apismenskiy/.m2/repository/org/springframework/spring-webmvc/5.3.10/spring-webmvc-5.3.10.jar:/Users/apismenskiy/.m2/repository/org/springframework/spring-aop/5.3.10/spring-aop-5.3.10.jar:/Users/apismenskiy/.m2/repository/org/springframework/spring-context/5.3.10/spring-context-5.3.10.jar:/Users/apismenskiy/.m2/repository/org/springframework/spring-expression/5.3.10/spring-expression-5.3.10.jar:/Users/apismenskiy/.m2/repository/org/springframework/spring-core/5.3.10/spring-core-5.3.10.jar:/Users/apismenskiy/.m2/repository/org/springframework/spring-jcl/5.3.10/spring-jcl-5.3.10.jar
    Launcher Type: SUN_STANDARD
    
    [Global flags]
         intx CICompilerCount                          = 4                                         {product} {ergonomic}
         uint ConcGCThreads                            = 2                                         {product} {ergonomic}
         uint G1ConcRefinementThreads                  = 9                                         {product} {ergonomic}
       size_t G1HeapRegionSize                         = 4194304                                   {product} {ergonomic}
        uintx GCDrainStackTargetSize                   = 64                                        {product} {ergonomic}
       size_t InitialHeapSize                          = 536870912                                 {product} {ergonomic}
       size_t MarkStackSize                            = 4194304                                   {product} {ergonomic}
       size_t MaxHeapSize                              = 8589934592                                {product} {ergonomic}
       size_t MaxNewSize                               = 5150605312                                {product} {ergonomic}
       size_t MinHeapDeltaBytes                        = 4194304                                   {product} {ergonomic}
       size_t MinHeapSize                              = 8388608                                   {product} {ergonomic}
        uintx NonProfiledCodeHeapSize                  = 0                                      {pd product} {ergonomic}
         bool ProfileInterpreter                       = false                                  {pd product} {command line}
        uintx ProfiledCodeHeapSize                     = 0                                      {pd product} {ergonomic}
       size_t SoftMaxHeapSize                          = 8589934592                             {manageable} {ergonomic}
         intx TieredStopAtLevel                        = 1                                         {product} {command line}
         bool UseCompressedClassPointers               = true                           {product lp64_product} {ergonomic}
         bool UseCompressedOops                        = true                           {product lp64_product} {ergonomic}
         bool UseG1GC                                  = true                                      {product} {ergonomic}
         bool UseNUMA                                  = false                                     {product} {ergonomic}
         bool UseNUMAInterleaving                      = false                                     {product} {ergonomic}
    
    Logging:
    Log output configuration:
     #0: stdout all=warning uptime,level,tags foldmultilines=false
     #1: stderr all=off uptime,level,tags foldmultilines=false
    
    Environment Variables:
    JAVA_HOME=/Users/apismenskiy/.sdkman/candidates/java/current
    PATH=/Users/apismenskiy/.sdkman/candidates/java/current/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/munki
    SHELL=/bin/zsh
    LANG=en_US.UTF-8
    TERM=xterm-256color
    TMPDIR=/var/folders/56/yn9qk1x958b45nhwkbddy5r00000gp/T/
    
    Active Locale:
    LC_ALL=en_US.UTF-8
    LC_COLLATE=en_US.UTF-8
    LC_CTYPE=en_US.UTF-8
    LC_MESSAGES=en_US.UTF-8
    LC_MONETARY=en_US.UTF-8
    LC_NUMERIC=en_US.UTF-8
    LC_TIME=en_US.UTF-8
    
    Signal Handlers:
       SIGSEGV: _ZL13crash_handleriP9__siginfoPv in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO
        SIGBUS: _ZL13crash_handleriP9__siginfoPv in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO
        SIGFPE: _ZL13crash_handleriP9__siginfoPv in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO
       SIGPIPE: _ZL17javaSignalHandleriP9__siginfoPv in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO
       SIGXFSZ: _ZL17javaSignalHandleriP9__siginfoPv in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO
        SIGILL: _ZL13crash_handleriP9__siginfoPv in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO
       SIGUSR2: _ZL10SR_handleriP9__siginfoP17__darwin_ucontext in libjvm.dylib, mask=00100000000000000000000000000000, flags=SA_RESTART|SA_SIGINFO
        SIGHUP: _ZL11UserHandleriPvS_ in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO
        SIGINT: _ZL11UserHandleriPvS_ in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO
       SIGTERM: _ZL11UserHandleriPvS_ in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO
       SIGQUIT: _ZL11UserHandleriPvS_ in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO
       SIGTRAP: _ZL13crash_handleriP9__siginfoPv in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO
    
    
    ---------------  S Y S T E M  ---------------
    
    OS:
    uname: Darwin 21.6.0 Darwin Kernel Version 21.6.0: Mon Aug 22 20:19:52 PDT 2022; root:xnu-8020.140.49~2/RELEASE_ARM64_T6000 arm64
    OS uptime: 20 days 20:51 hours
    rlimit (soft/hard): STACK 8176k/65520k , CORE 0k/infinity , NPROC 5333/8000 , NOFILE 10240/infinity , AS infinity/infinity , CPU infinity/infinity , DATA infinity/infinity , FSIZE infinity/infinity , MEMLOCK infinity/infinity , RSS infinity/infinity
    load average: 2.88 2.54 2.46
    
    CPU: total 10 (initial active 10) 0x61:0x0:0x1b588bb3:0, fp, simd, aes, pmull, crc32, lse
    
    Memory: 16k page, physical 33554432k(70176k free), swap 0k(0k free)
    
    vm_info: OpenJDK 64-Bit Server VM (19+36) for bsd-aarch64 JRE (19+36) (Zulu19.28+81-CA), built on Sep  7 2022 09:23:04 by "zulu_re" with clang Apple LLVM 12.0.0 (clang-1200.0.32.28)
    
    END.
    
    

    App error:

    #
    # A fatal error has been detected by the Java Runtime Environment:
    #
    #  SIGSEGV (0xb) at pc=0x0000000100e53edc, pid=45254, tid=24587
    #
    # JRE version: OpenJDK Runtime Environment Zulu19.28+81-CA (19.0+36) (build 19+36)
    # Java VM: OpenJDK 64-Bit Server VM Zulu19.28+81-CA (19+36, mixed mode, emulated-client, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, bsd-aarch64)
    # Problematic frame:
    # C  [libtesseract.5.dylib+0x15bedc]  _ZN9tesseract9NetworkIO17WriteTimeStepPartEiiiPKf+0x28
    #
    # No core dump will be written. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
    #
    
    opened by apismensky 4
  • Performance degradation for multipaged tiff ocr result

    Performance degradation for multipaged tiff ocr result

    I am using createDocumentsWithResult to produce textOnly pdf from multipaged tiff and check ocr data(words count and confidence)

    After recent update to latest version(used 4.5.5) I see minimum double processing time increase comparing to prev version.

    This might probably be related to #233 fix because now all pages checked.

    Is it possible to improve a code to work faster OR provide an alternative to produce textOnly pdf file without collecting OcrResult or specify amount of pages to collect ocr result from?

    I can post some code snippets and doc sample later if required. Let me know if you need samples.

    opened by yshyman 1
  • Getting error Invalid memory access when use Tess4j in JAVA project Netbeans

    Getting error Invalid memory access when use Tess4j in JAVA project Netbeans

    I'm developing a routine in my JAVA Web project (Using netbeans 13) where I extract the texts from a pdf. If it doesn't find a certain term, it converts the pdf to image and tries to extract the text with OCR tesseract. After several attempts I always got the same error regardless of the configuration I did. Following error:

    Error opening data file tessdata/por.traineddata
    Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata" directory.
    Failed loading language 'por'
    Tesseract couldn't load any languages!
    
    Caused by: java.lang.Error: Invalid memory access
    

    I'm having difficulties configuring the library in my development environment because, unlike the tutorials where SpringBoot and Eclipse are used, I use Netbeans 13 and I have the following project structure:

    [enter image description here]1

    First I added the dependency in pom.xml:

    <!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->
            <dependency>
                <groupId>net.sourceforge.tess4j</groupId>
                <artifactId>tess4j</artifactId>
                <version>5.2.0</version>
            </dependency>
    
    

    After that as indicated in some tutorials, I went to my tessdata folder which is in dependencies/Tes4j and copied the tessdata folder to the web-inf folder (I also tried to the resources folder).

    Later I tried to configure the environment variable TESSDATA_PREFIX. I couldn't find information if this variable was to be defined in the windows system variables or if there is some other place in netbeans to define this. In my project structure I tried three definitions but none worked:

    1. C:\Programacao\myProjectName\Tess4J
    2. C:\Programacao\myProjectName\src\main\webapp\WEB-INF
    3. C:\Programacao\myProjectName\src\main\webapp\resources

    In the code of my method I tried to set the datapath passing only the name tessdata, data and I also tried to point out the paths above. Follow created method:

     public String extractText(Anexos anexo) throws Exception {
            File file = new File(anexo.getCaminho());
            PDDocument doc = PDDocument.load(file);
    
            System.out.println("=================================> Extraindo com pdfBox <=========================");
            PDFTextStripper estripador = new PDFTextStripper();
            estripador.setSortByPosition(false); 
            String pdfTexto = estripador.getText(doc);
            String line = "";
    
            line = pdfTexto.toLowerCase().replaceAll(AplicacaoBean.CARACTERES_ESPECIAIS_REGEX, "")
                    .replaceAll("\\s", " ");
            
            if (line.contains("sped")) {
                return line;
            } else {
    
                PDFRenderer pdfRenderer = new PDFRenderer(doc);
                StringBuilder out = new StringBuilder();
    
                Tesseract tesseract = new Tesseract();
                tesseract.setLanguage("por");
                tesseract.setOcrEngineMode(1);
    
                Path dataDirectory = Paths.get("tessdata");
                tesseract.setDatapath(dataDirectory.toString());
    
                for (int page = 0; page < doc.getNumberOfPages(); page++) {
                    BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(page, 300, ImageType.RGB);
    
                    // Create a temp image file
                    File tempFile = new File(file.getPath().replace(File.separator + anexo.getAnexo(), "") + File.separator + "tempfile_" + anexo.getAnexo().replaceAll("\\..*", "") + "_" + page + ".png");
                    ImageIO.write(bufferedImage, "png", tempFile);
                    String result = tesseract.doOCR(tempFile);
                    out.append(result);
    
                    // Delete temp file
                    tempFile.delete();
                }
    
                line = out.toString().toLowerCase().replaceAll(AplicacaoBean.CARACTERES_ESPECIAIS_REGEX, "")
                        .replaceAll("\\s", " ");
            }
    
            return line;
        }
    

    My tessdata folder:

    [enter image description here]2

    My development environment:

    Netbeans:13

    JDK 15

    tess4j:5.2.0

    My doubts:

    So I would like to know if this environment variable () is configured in windows variables, in netbeans or in some internal place in my code? Also, did I skip any steps? Do I need to download anything else? Please help me, I don't know what else to do!

    opened by HerickRaposo 1
  • Error calculating angle in ImageDeskew

    Error calculating angle in ImageDeskew

    I'm seeing an error in the ImageDeskew routine. The below sample code shows a rotation of -6.8 (the unredacted version shows -10) on the attached file even though it should be 0. Any idea why it’s not calculating correctly?

    It seems to happen on somewhat sparse images like this, which understably makes it harder to figure out the orientation. I'm wondering if anything can be done to make it more accurate (note: sample file is a tif file, which I couldn't attach, so I zipped it)

    public class GetAngle {
    
        private static double getAngle(Path sourceFile) throws IOException {
            BufferedImage bi = ImageIO.read(sourceFile.toFile());
            ImageDeskew id = new ImageDeskew(bi);
            double angle = id.getSkewAngle();
            if (angle < 1.0D && angle > -1.0D) {
                angle = 0.0D;
            } else {
                System.out.println("*** angle: " + angle);
            }
    
            return angle;
        }
    
        public static void main(String[] args) throws IOException {
            Path path = Paths.get( "/testFiles", "sample rotated image - Redacted.tif");
            System.out.println("*** path: " + path);
            System.out.println("*** getAngle: " + getAngle(path));
    
        }
    }
    

    sample rotated image - Redacted.zip

    opened by peterkronenberg 12
Releases(tess4j-5.5.0)
Owner
Quan Nguyen
Quan Nguyen
Java interface to OpenCV, FFmpeg, and more

JavaCV Commercial support: Introduction JavaCV uses wrappers from the JavaCPP Presets of commonly used libraries by researchers in the field of comput

Bytedeco 6.4k Jan 4, 2023
Simple Java image-scaling library implementing Chris Campbell's incremental scaling algorithm as well as Java2D's "best-practices" image-scaling techniques.

imgscalr - Java Image-Scaling Library http://www.thebuzzmedia.com/software/imgscalr-java-image-scaling-library/ Changelog --------- 4.2 * Added sup

Riyad Kalla 1.1k Jan 5, 2023
Thumbnailator - a thumbnail generation library for Java

March 11, 2021: Thumbnailator 0.4.14 has been released! See Changes for details. Thumbnailator is now available through Maven! What is Thumbnailator?

Chris Kroells 4.5k Jan 5, 2023
TwelveMonkeys ImageIO: Additional plug-ins and extensions for Java's ImageIO

About TwelveMonkeys ImageIO is a collection of plugins and extensions for Java's ImageIO. These plugins extend the number of image file formats suppor

Harald Kuhr 1.6k Jan 5, 2023
ZXing ("Zebra Crossing") barcode scanning library for Java, Android

Project in Maintenance Mode Only The project is in maintenance mode, meaning, changes are driven by contributed patches. Only bug fixes and minor enha

ZXing Project 30.5k Jan 4, 2023
Roman Beskrovnyi 250 Jan 9, 2023
Java library for remapper JARs

Pocolifo's JAR Remapper Making remapping JARs easy, organized, and painless Features Remapping Class remapping Method remapping Field remapping Parame

null 8 Oct 2, 2022
A Java Visualization Library based on Apache ECharts.

ECharts Java "We bring better visualization into Java with ECharts" ?? Introduction ECharts Java is a lightweight but comprehensive library for Java d

ECharts Java Open Source Project 171 Dec 31, 2022
Creates ASCII art in Java from Images

Creates ASCII art in Java from Images. It can also save the ASCII art as image (.png) as well

Navjot Singh Rakhra 4 Jul 12, 2022
JPassport works like Java Native Access (JNA) but uses the Foreign Linker API instead of JNI. Similar to JNA, you declare a Java interface that is bound to the external C library using method names.

JPassport works like Java Native Access (JNA) but uses the Foreign Linker API instead of JNI. Similar to JNA, you declare a Java interface t

null 28 Dec 30, 2022
Java JNA wrapper for Discord Game SDK

discord-game-sdk-java Java JNA wrapper for Discord Game SDK How to use Example.java Updating discord-game-sdk-jna Download discord game SDK from here:

Tomas Slusny 2 Jul 30, 2022
CSGO cheat made in Java using JavaFX as the overlay and JNA for memory manipulation

CSGO-CHEAT CSGO cheat made in Java using JavaFX as the overlay and JNA for memory manipulation FEATURES RCS Triggerbot No Flash Third Person Rank Reve

Notorious 9 Dec 28, 2022
🍏 A collection of partial JNA bindings for various macOS frameworks. (e.g. Foundation, AppKit, etc.)

JNApple ?? A collection of partial JNA bindings for various macOS frameworks. (e.g. Foundation, AppKit, etc.) Usage These are just some common example

Iridescent 3 Jun 19, 2022
A Java API wrapper for the pastemyst api

Pastemyst.java What is pastemyst.java? pastemyst.java is a pastemyst API Wrapper, written in Java. The library is in early development, and all contri

YeffyCodeGit 8 Sep 28, 2022
An API wrapper for BotiCord API written in Java

An API wrapper for BotiCord API written in Java

BotiCord 3 Nov 8, 2022
A simple API wrapper for discords.com (alias botsfordiscord.com) written in Java.

Discords.com / BotsForDiscord.com Java Library A simple API wrapper for discords.com (alias botsfordiscord.com) written in Java 8. Installation This w

Dorian 3 Aug 6, 2021
Open Weather Map API wrapper for Java.

Java Open Weather API Wrapper Open Weather Map API wrapper for Java. This project allows you to seamlessly implement the Open Weather Map API into you

Will 2 Feb 6, 2022
Java wrapper for the Equibles cryptos API.

Equibles Cryptos API for Java Requirements Building the API client library requires: Java 1.7+ Maven/Gradle Installation To install the API client lib

Equibles 1 Feb 2, 2022
A high-performance Java API wrapper for arblib, the fantastic and amazing arbitrary-precision ball arithmetic C library, implemented via SWIG

A high-performance Java API wrapper for arblib, the fantastic and amazing arbitrary-precision ball arithmetic C library, implemented via SWIG

null 3 Dec 19, 2022