Ich versuche OCR und Ausgabe als PDF mit Tess4J und dem folgenden Code auf Linux (Ubuntu 16 Xenial) zu tun. Tess4J: "Ungültige Aufrufkonvention 63" trotz korrekten Versionen
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);
}
Die letzte Zeile
instance.createDocuments(pdfFile.getAbsolutePath(), "/projects/de.conradt.core/tessdata/urkunde", list);
löst eine Ausnahme:
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)
ich dies mit Tess4J eine bekannte (aber angeblich geschlossen) Thema sein gefunden:
- https://github.com/nguyenq/tess4j/issues/35
- https://sourceforge.net/p/tess4j/discussion/1202294/thread/2a25344c/
- https://github.com/zippy1978/ghost4j/issues/44
aber ich habe meine Versionen sowie die TESSDATA_PREFIX env Variable. Soweit ich sehen kann, ist alles richtig eingestellt.
Tesseract und Leptonica Version:
$ /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 Version: (dies ist die neueste Version, die ich über apt-get
bekommen)
$ ghostscript -v
GPL Ghostscript 9.18 (2015-10-05)
Copyright (C) 2015 Artifex Software, Inc. All rights reserved.
Tess4j Version:
3.2.1
und die TESSDATA_PREFIX (die Konfigurationsdateien usw. unter /projects/de.conradt.core/tessdata sind):
$ echo $TESSDATA_PREFIX
/projects/de.conradt.core
bei dem Release-Protokoll Tess4j Suche: http://tess4j.sourceforge.net/changelog.html, soll ich die richtige Version verwendet werden Stapel. Besonders Version 3.2 im Änderungsprotokoll sagt:
AufrufVersion 3.2 - 15. Mai 2016: JNA Revert to 4.1.0 wegen "Invalid Aufruf Konvention 63" Fehler Ghost über Ghost4J auf Linux
so dachte ich, ich sollte mit 3.2.1 sicher sein.
Muss ich manuell etwas über JNA einstellen? Aus meiner Sicht wurde dies explizit für Linux in 3.2.0 behoben.
Stellen Sie sicher, dass Sie 'jna-4.1.0' Version verwenden. – nguyenq
Ok, ich habe JNA nirgendwo explizit in meinem Projekt pom erwähnt, ich dachte, das ist alles in Tess4J 3.2.1 und es ist pom.xml (https://github.com/nguyenq/tess4j/commit/7ea11dd991b02892db335248cfe380ea32aaabf7). Ich habe jetzt auch JNA 4.1.0 in meiner pom.xml hinzugefügt und das scheint das Problem zu lösen. –