나는 Tess4J를 사용하여 PDF 및 리눅스 (우분투 16 주객 관계의)에 다음과 같은 코드로 OCR 출력을하려고합니다.Tess4J : "잘못된 호출 규칙 (63)"올바른 버전에도 불구하고이
11:03:12.651 [http-nio-8080-exec-1] ERROR net.sourceforge.tess4j.Tesseract - Invalid calling convention 63
java.lang.IllegalArgumentException: Invalid calling convention 63
at com.sun.jna.Native.createNativeCallback(Native Method)
at com.sun.jna.CallbackReference.<init>(CallbackReference.java:239)
at com.sun.jna.CallbackReference.getFunctionPointer(CallbackReference.java:413)
at com.sun.jna.CallbackReference.getFunctionPointer(CallbackReference.java:395)
at com.sun.jna.Function.convertArgument(Function.java:541)
at com.sun.jna.Function.invoke(Function.java:305)
at com.sun.jna.Library$Handler.invoke(Library.java:236)
at com.sun.proxy.$Proxy89.gsapi_set_stdio(Unknown Source)
at org.ghost4j.Ghostscript.initialize(Ghostscript.java:323)
at net.sourceforge.tess4j.util.PdfUtilities.convertPdf2Png(PdfUtilities.java:103)
at net.sourceforge.tess4j.util.PdfUtilities.convertPdf2Tiff(PdfUtilities.java:48)
at net.sourceforge.tess4j.Tesseract.createDocuments(Tesseract.java:535)
at net.sourceforge.tess4j.Tesseract.createDocuments(Tesseract.java:507)
at de.conradt.core.Example.testOcr(Example.java:62)
at de.conradt.core.Example.ocr(Example.java:35)
나는이 Tess4J 알려진 (그러나 폐쇄 형) 문제가 발견 :
- 는
public void testOcr() throws Exception { File imageFile = new File("/projects/de.conradt.core/tessdata/urkunde.jpg"); ITesseract instance = new Tesseract1(); // tried both Tesseract() and Tesseract1() // File tessDataFolder = LoadLibs.extractTessResources("tessdata"); // Maven build bundles English data // instance.setDatapath(tessDataFolder.getParent()); instance.setDatapath("/projects/de.conradt.core/tessdata"); instance.setLanguage("deu"); try { String result = instance.doOCR(imageFile); System.out.println(result); } catch (TesseractException e) { System.err.println(e.getMessage()); } List<ITesseract.RenderedFormat> list = new ArrayList<ITesseract.RenderedFormat>(); list.add(ITesseract.RenderedFormat.PDF); File pdfFile = new File("/projects/de.conradt.core/tessdata/urkunde.pdf"); instance.createDocuments(pdfFile.getAbsolutePath(), "/projects/de.conradt.core/tessdata/urkunde", list); }
마지막 줄
instance.createDocuments(pdfFile.getAbsolutePath(), "/projects/de.conradt.core/tessdata/urkunde", list);
- https://github.com/zippy1978/ghost4j/issues/44
정팔 포체 및 Leptonica 버전 :
$ /usr/bin/tesseract --version
tesseract 3.04.01
leptonica-1.73
libgif 5.1.2 : libjpeg 8d (libjpeg-turbo 1.4.2) : libpng 1.2.54 : libtiff 4.0.6 : zlib 1.2.8 : libwebp 0.4.4 : libopenjp2 2.1.0
고스트 버전 :
$ ghostscript -v
GPL Ghostscript 9.18 (2015-10-05)
Copyright (C) 2015 Artifex Software, Inc. All rights reserved.
Tess4j 버전 (이 내가 apt-get
를 통해 얻을 최신 버전입니다) :
3.2.1
과 TESSDATA_PREFIX (등 설정 파일이 /projects/de.conradt.core/tessdata 미만) :
$ echo $TESSDATA_PREFIX
/projects/de.conradt.core
이 Tess4j의 릴리스 로그를 보면 :
http://tess4j.sourceforge.net/changelog.html, 나는 올바른 버전을 사용해야합니다 스택. 변경 로그 특히 버전 3.2은 말한다 :
리눅스 에 Ghost4J를 통해 고스트 스크립트를 호출 오류 "잘못된 규칙 (63)을 호출"에 4.1.0에 JNA 되돌리기버전 3.2-2016 월 15 일 : 인해
그래서 나는 3.2.1에서 안전해야한다고 생각했습니다.
JNA에 대해 수동으로 설정해야합니까? 내 이해에서, 이것은 Linux 용 3.2.0에서 명시 적으로 수정되었습니다.
'jna-4.1.0' 버전을 사용하고 있는지 확인하십시오. – nguyenq
좋아, 내가 어디에 명시 적으로 내 프로젝트 pom에서 JNA를 참조하지 않았다, 나는이 모든 Tess4J 3.2.1에서다고 생각하고 pom.xml (https://github.com/nguyenq/tess4j/commit/7ea11dd991b02892db335248cfe380ea32aaabf7)이야. 이제 내 pom.xml에 JNA 4.1.0을 추가했는데 문제가 해결 된 것 같습니다. –