Java Tesseract dyld:未找到符号:

时间:2015-12-18 02:35:01

标签: java ocr tesseract

我试图做简单的OCR应用程序,但我得到这样的错误:

代码:

import org.bytedeco.javacpp.*;

import static org.bytedeco.javacpp.lept.*;
import static org.bytedeco.javacpp.tesseract.*;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.UnsupportedEncodingException;

    public class Main { 
        public void tesseract(String filename){
            BytePointer outText;

            tesseract.TessBaseAPI api = new tesseract.TessBaseAPI();
            // Initialize tesseract-ocr with English, without specifying tessdata path
            if (api.Init("/Users/Marcel/tesseract-ocr", "ENG") != 0) {
                System.err.println("Could not initialize tesseract.");
                System.exit(1);
            }

            // Open input image with leptonica library
            PIX image = pixRead(filename);
            api.SetImage(image);
            // Get OCR result
            outText = api.GetUTF8Text();
            String string = outText.getString();
            assertTrue(!string.isEmpty());
            System.out.println("OCR output:\n" + string);

            // Destroy used object and release memory
            api.End();
            outText.deallocate();
            pixDestroy(image);
        }

        public static void main(String[] args) {

            Main main = new Main();
            String fileName = "src/main/resources/test.png";

            main.tesseract(fileName);
      }
    }

我尝试过谷歌的一些解决方案,但它没有解决这个问题。我在Mac OSX上使用Inteliji(和maven)。在我遇到TESTDATA_PREFIX问题之前,我改变了api.init第一个参数,现在我得到了这个:

dyld: lazy symbol binding failed: Symbol not found: __ZN9tesseract11TessBaseAPI8SetImageEPK3Pix
  Referenced from: /private/var/folders/lq/3mb8s_jj1ql0klqzznm1j1tm0000gn/T/javacpp33697284992581/libjnitesseract.dylib
  Expected in: /usr/local/lib/libtesseract.3.dylib

dyld: Symbol not found: __ZN9tesseract11TessBaseAPI8SetImageEPK3Pix
  Referenced from: /private/var/folders/lq/3mb8s_jj1ql0klqzznm1j1tm0000gn/T/javacpp33697284992581/libjnitesseract.dylib
  Expected in: /usr/local/lib/libtesseract.3.dylib

1 个答案:

答案 0 :(得分:0)

这是因为2个冲突的libtesseract.3.dylib。 如果您使用brew安装了tesseract,那么它指的是libtesseract.3.dylibtesseract文件夹/usr/local/Cellar/tesseract/3.04.01_1/lib/ 而不是/usr/local/lib/libtesseract.3.dylib