nguyenq / tess4j

Java JNA wrapper for Tesseract OCR API
Apache License 2.0
1.58k stars 372 forks source link

java.lang.UnsatisfiedLinkError #243

Closed flow1990 closed 1 year ago

flow1990 commented 1 year ago

Hey, I don't get it, I have set the environment variable, I have googled and tried many recommended solutions but I am still not able to use tess4j. I am using macOS. This is my Error:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'tesseract':
dlopen(libtesseract.dylib, 0x0009): tried: 'libtesseract.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OSlibtesseract.dylib' (no such file), '/Library/Java/JavaVirtualMachines/jdk-19.jdk/Contents/Home/bin/./libtesseract.dylib' (no such file), '/Library/Java/JavaVirtualMachines/jdk-19.jdk/Contents/Home/bin/../lib/libtesseract.dylib' (no such file), '/usr/lib/libtesseract.dylib' (no such file, not in dyld cache), 'libtesseract.dylib' (no such file), '/usr/lib/libtesseract.dylib' (no such file, not in dyld cache)
dlopen(libtesseract.dylib, 0x0009): tried: 'libtesseract.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OSlibtesseract.dylib' (no such file), '/Library/Java/JavaVirtualMachines/jdk-19.jdk/Contents/Home/bin/./libtesseract.dylib' (no such file), '/Library/Java/JavaVirtualMachines/jdk-19.jdk/Contents/Home/bin/../lib/libtesseract.dylib' (no such file), '/usr/lib/libtesseract.dylib' (no such file, not in dyld cache), 'libtesseract.dylib' (no such file), '/usr/lib/libtesseract.dylib' (no such file, not in dyld cache)
Native library (darwin/libtesseract.dylib) not found in resource path (/Users/flo/Dokumente/walliser-industries/sort-it/sort_it/target/classes:/Users/flo/.m2/repository/net/sourceforge/tess4j/tess4j/4.5.1/tess4j-4.5.1.jar:/Users/flo/.m2/repository/net/java/dev/jna/jna/5.5.0/jna-5.5.0.jar:/Users/flo/.m2/repository/com/github/jai-imageio/jai-imageio-core/1.4.0/jai-imageio-core-1.4.0.jar:/Users/flo/.m2/repository/org/ghost4j/ghost4j/1.0.1/ghost4j-1.0.1.jar:/Users/flo/.m2/repository/log4j/log4j/1.2.17/log4j-1.2.17.jar:/Users/flo/.m2/repository/commons-beanutils/commons-beanutils/1.9.2/commons-beanutils-1.9.2.jar:/Users/flo/.m2/repository/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar:/Users/flo/.m2/repository/org/apache/xmlgraphics/xmlgraphics-commons/1.4/xmlgraphics-commons-1.4.jar:/Users/flo/.m2/repository/com/lowagie/itext/2.1.7/itext-2.1.7.jar:/Users/flo/.m2/repository/org/apache/pdfbox/pdfbox/2.0.18/pdfbox-2.0.18.jar:/Users/flo/.m2/repository/org/apache/pdfbox/fontbox/2.0.18/fontbox-2.0.18.jar:/Users/flo/.m2/repository/commons-logging/commons-logging/1.2/commons-logging-1.2.jar:/Users/flo/.m2/repository/org/apache/pdfbox/pdfbox-tools/2.0.18/pdfbox-tools-2.0.18.jar:/Users/flo/.m2/repository/org/apache/pdfbox/pdfbox-debugger/2.0.18/pdfbox-debugger-2.0.18.jar:/Users/flo/.m2/repository/org/apache/pdfbox/jbig2-imageio/3.0.3/jbig2-imageio-3.0.3.jar:/Users/flo/.m2/repository/commons-io/commons-io/2.6/commons-io-2.6.jar:/Users/flo/.m2/repository/net/sourceforge/lept4j/lept4j/1.13.0/lept4j-1.13.0.jar:/Users/flo/.m2/repository/org/jboss/jboss-vfs/3.2.15.Final/jboss-vfs-3.2.15.Final.jar:/Users/flo/.m2/repository/org/jboss/logging/jboss-logging/3.1.4.GA/jboss-logging-3.1.4.GA.jar:/Users/flo/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar:/Users/flo/.m2/repository/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar:/Users/flo/.m2/repository/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar:/Users/flo/.m2/repository/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar:/Users/flo/.m2/repository/org/slf4j/jcl-over-slf4j/1.7.30/jcl-over-slf4j-1.7.30.jar:/Users/flo/.m2/repository/org/slf4j/log4j-over-slf4j/1.7.30/log4j-over-slf4j-1.7.30.jar)
        at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:302)
        at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:455)
        at com.sun.jna.Library$Handler.<init>(Library.java:192)
        at com.sun.jna.Native.loadLibrary(Native.java:646)
        at com.sun.jna.Native.loadLibrary(Native.java:630)
        at net.sourceforge.tess4j.util.LoadLibs.getTessAPIInstance(LoadLibs.java:85)
        at net.sourceforge.tess4j.TessAPI.<clinit>(TessAPI.java:42)
        at net.sourceforge.tess4j.Tesseract.init(Tesseract.java:427)
        at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:223)
        at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:195)
        at de.walliser_industries.utilities.ImageReader.<init>(ImageReader.java:16)
        at de.walliser_industries.App.main(App.java:15)
        Suppressed: java.lang.UnsatisfiedLinkError: dlopen(libtesseract.dylib, 0x0009): tried: 'libtesseract.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OSlibtesseract.dylib' (no such file), '/Library/Java/JavaVirtualMachines/jdk-19.jdk/Contents/Home/bin/./libtesseract.dylib' (no such file), '/Library/Java/JavaVirtualMachines/jdk-19.jdk/Contents/Home/bin/../lib/libtesseract.dylib' (no such file), '/usr/lib/libtesseract.dylib' (no such file, not in dyld cache), 'libtesseract.dylib' (no such file), '/usr/lib/libtesseract.dylib' (no such file, not in dyld cache)
                at com.sun.jna.Native.open(Native Method)
                at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:191)
                ... 11 more
        Suppressed: java.lang.UnsatisfiedLinkError: dlopen(libtesseract.dylib, 0x0009): tried: 'libtesseract.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OSlibtesseract.dylib' (no such file), '/Library/Java/JavaVirtualMachines/jdk-19.jdk/Contents/Home/bin/./libtesseract.dylib' (no such file), '/Library/Java/JavaVirtualMachines/jdk-19.jdk/Contents/Home/bin/../lib/libtesseract.dylib' (no such file), '/usr/lib/libtesseract.dylib' (no such file, not in dyld cache), 'libtesseract.dylib' (no such file), '/usr/lib/libtesseract.dylib' (no such file, not in dyld cache)
                at com.sun.jna.Native.open(Native Method)
                at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:204)
                ... 11 more
        Suppressed: java.io.IOException: Native library (darwin/libtesseract.dylib) not found in resource path (/Users/flo/Dokumente/walliser-industries/sort-it/sort_it/target/classes:/Users/flo/.m2/repository/net/sourceforge/tess4j/tess4j/4.5.1/tess4j-4.5.1.jar:/Users/flo/.m2/repository/net/java/dev/jna/jna/5.5.0/jna-5.5.0.jar:/Users/flo/.m2/repository/com/github/jai-imageio/jai-imageio-core/1.4.0/jai-imageio-core-1.4.0.jar:/Users/flo/.m2/repository/org/ghost4j/ghost4j/1.0.1/ghost4j-1.0.1.jar:/Users/flo/.m2/repository/log4j/log4j/1.2.17/log4j-1.2.17.jar:/Users/flo/.m2/repository/commons-beanutils/commons-beanutils/1.9.2/commons-beanutils-1.9.2.jar:/Users/flo/.m2/repository/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar:/Users/flo/.m2/repository/org/apache/xmlgraphics/xmlgraphics-commons/1.4/xmlgraphics-commons-1.4.jar:/Users/flo/.m2/repository/com/lowagie/itext/2.1.7/itext-2.1.7.jar:/Users/flo/.m2/repository/org/apache/pdfbox/pdfbox/2.0.18/pdfbox-2.0.18.jar:/Users/flo/.m2/repository/org/apache/pdfbox/fontbox/2.0.18/fontbox-2.0.18.jar:/Users/flo/.m2/repository/commons-logging/commons-logging/1.2/commons-logging-1.2.jar:/Users/flo/.m2/repository/org/apache/pdfbox/pdfbox-tools/2.0.18/pdfbox-tools-2.0.18.jar:/Users/flo/.m2/repository/org/apache/pdfbox/pdfbox-debugger/2.0.18/pdfbox-debugger-2.0.18.jar:/Users/flo/.m2/repository/org/apache/pdfbox/jbig2-imageio/3.0.3/jbig2-imageio-3.0.3.jar:/Users/flo/.m2/repository/commons-io/commons-io/2.6/commons-io-2.6.jar:/Users/flo/.m2/repository/net/sourceforge/lept4j/lept4j/1.13.0/lept4j-1.13.0.jar:/Users/flo/.m2/repository/org/jboss/jboss-vfs/3.2.15.Final/jboss-vfs-3.2.15.Final.jar:/Users/flo/.m2/repository/org/jboss/logging/jboss-logging/3.1.4.GA/jboss-logging-3.1.4.GA.jar:/Users/flo/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar:/Users/flo/.m2/repository/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar:/Users/flo/.m2/repository/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar:/Users/flo/.m2/repository/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar:/Users/flo/.m2/repository/org/slf4j/jcl-over-slf4j/1.7.30/jcl-over-slf4j-1.7.30.jar:/Users/flo/.m2/repository/org/slf4j/log4j-over-slf4j/1.7.30/log4j-over-slf4j-1.7.30.jar)
                at com.sun.jna.Native.extractFromResourcePath(Native.java:1095)
                at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:276)
                ... 11 more

This is my code:

private File imageFile = new File("input/test.jpeg");
    private Tesseract tesseract = new Tesseract();  // JNA Interface Mapping

    public ImageReader(String language) throws TesseractException {
        tesseract.setOcrEngineMode(1);
        tesseract.setLanguage(language);

        String result = tesseract.doOCR(imageFile);
        System.out.println(result);
    }

Did I missed something?

nguyenq commented 1 year ago

Make sure libtesseract.dylib exists in the system path. You may need to create the symbolic link, or set jna.library.path system property to the directory containing the link.

Lastly, be sure to use the correct tess4j and lept4j version compatible with your Tesseract and Leptonica installation.

nguyenq commented 1 year ago

No response from the OP.

miaozhiyan commented 5 months ago

Make sure libtesseract.dylib exists in the system path. You may need to create the symbolic link, or set jna.library.path system property to the directory containing the link.

Lastly, be sure to use the correct tess4j and lept4j version compatible with your Tesseract and Leptonica installation.

where is libtesseract.dylib

nguyenq commented 3 months ago

@miaozhiyan You'll need to install or build Tesseract. Proper install will create a libtesseract.dylib symbolic link to the actual tesseract dynamic library object.

https://tesseract-ocr.github.io/tessdoc/