2016-05-14 23 views
0

Hallo Jungs lade ich Tesseract ich versuche zu laufen und den Text aus einem Bild zu bekommen, aber ich begegne den folgenden Fehler:Android: Tesseract konnten keine Sprachen

Exception in thread "main" java.lang.Error: Invalid memory access 
at com.sun.jna.Native.invokePointer(Native Method) 
at com.sun.jna.Function.invokePointer(Function.java:477) 
at com.sun.jna.Function.invoke(Function.java:411) 
at com.sun.jna.Function.invoke(Function.java:323) 
at com.sun.jna.Library$Handler.invoke(Library.java:236) 
at com.sun.proxy.$Proxy0.TessBaseAPIGetUTF8Text(Unknown Source) 
at net.sourceforge.tess4j.Tesseract.getOCRText(Tesseract.java:436) 
at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:291) 
at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:212) 
at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:196) 
at Crop_Image.main(Crop_Image.java:98) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 
Error opening data file ./tessdata/eng.traineddata 
Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your "tessdata" directory. 
Failed loading language 'eng' 
Tesseract couldn't load any languages! 

Ich bin Laden eine Bilddatei jpg Englisch enthält Text. Dies ist, wie ich versuche, die Datei zu laden und dann versuchen, den Text von ihm zu bekommen:

public static void main(String[] args){ 

    String result = ""; 

    File imageFile = new File("C:\\Users\\user\\Desktop\\Untitled.jpg"); 
    Tesseract instance = new Tesseract(); 

    try { 
     result = instance.doOCR(imageFile); 
     result.toString(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
     System.err.println(e.getMessage()); 
    } 
} 

Auch in meinem Projekt, das ich bin auch Maven mit und hier ist meine pom Datei:

<dependencies> 

    <dependency> 
     <groupId>nu.pattern</groupId> 
     <artifactId>opencv</artifactId> 
     <version>2.4.9-4</version> 
    </dependency> 

    <dependency> 
     <groupId>net.sourceforge.tess4j</groupId> 
     <artifactId>tess4j</artifactId> 
     <version>3.1.0</version> 
    </dependency> 

</dependencies> 

Was könnte die Ursache für diesen Fehler sein?

Antwort

2

Ich habe Ihren Code gesehen, und möglicherweise gibt es ein Problem bei der Initialisierung Tesseract. Nun, da Sie verwenden maven als nguyenq vorgeschlagen, dass Sie genau an der Stelle der Bibliothek verweisen müssen - tessdata so ist hier, was Sie tun sollten:

public static String Image_To_Text(String image_path){ 

    String result = ""; 

    File imageFile = new File("your path to your image"); 

    Tesseract instance = Tesseract.getInstance(); 
    //In case you don't have your own tessdata, let it also be extracted for you 
    File tessDataFolder = LoadLibs.extractTessResources("tessdata"); 

    //Set the tessdata path 
    instance.setDatapath(tessDataFolder.getAbsolutePath()); 

    try { 
     result = instance.doOCR(imageFile); 

    } catch (Exception e) { 
     e.printStackTrace();    
    } 

    return result; 
} 
+0

Vielen Dank! Das hat mein Problem gelöst. – user6006748

0

Sie müssen instance.setDatapath in das übergeordnete Verzeichnis von tessdata Ordner setzen.

File tessDataFolder = LoadLibs.extractTessResources("tessdata"); // Maven build bundles English data 
instance.setDatapath(tessDataFolder.getParent()); 

Siehe http://tess4j.sourceforge.net/tutorial.

+0

Ja, ich so viel dachte, aber ich bin mit 'maven' so selbst wenn ich auf das Verzeichnis der '.jar'-Datei zeige, ist es derselbe Fehler. – user6006748

+0

Sie müssten es zuerst extrahieren. Siehe Aktualisierung. – nguyenq

+0

@nguyenq Hallo Nguyen! Ich bin ein großer Fan von Ihrem Produkt Vietocr mit Tesseract. Ich muss dasselbe entwickeln, kann aber arabische Zeichen erkennen. Kann ich Ihren Code bekommen und versuchen, ihn zu ändern, um Arabisch zu erkennen? Ich habe versucht, Tesseract, aber die Datei ara.traineddata ist nicht so gut und ich habe nicht das Ergebnis, dass ich will. Kannst du mir dabei helfen? – Hohenheim