2013-08-07 11 views
7

Używam tess4j, opakowania java Tesseract. Mam również zainstalowany normalny Tesseract. Nie jestem do końca pewien, w jaki sposób tess4j ma działać, ale ponieważ zawiera folder tessdata, mogę założyć, że umieściłbyś tam pliki z danymi językowymi. Jednak tess4j działa tylko wtedy, gdy pliki danych językowych znajdują się w "prawdziwym" folderze tessdata (tym, który pochodzi z tesseract, a nie tess4j). Jeśli usunąć ten folder, otrzymuję komunikat o błędzie:Tess4j nie używa folderu tessdata

Error opening data file C:\Program Files\Tesseract-OCR\tessdata/jpn.trained 
data 
Please make sure the TESSDATA_PREFIX environment variable is set to the par 
ent directory of your "tessdata" directory. 
Failed loading language 'jpn' 
Tesseract couldn't load any languages! 
# 
# A fatal error has been detected by the Java Runtime Environment: 
# 
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x631259dc, pid=5108, tid= 
10148 
# 
# JRE version: 7.0_06-b24 
# Java VM: Java HotSpot(TM) Client VM (23.2-b09 mixed mode, sharing windows 
-x86) 
# Problematic frame: 
# C [libtesseract302.dll+0x59dc] STRING::strdup+0x467c 
# 
# Failed to write core dump. Minidumps are not enabled by default on client 
versions of Windows 
# 
# An error report file with more information is saved as: 
# D:\School\Programs\OCRTest\v1.0.0\hs_err_pid5108.log 
# 
# If you would like to submit a bug report, please visit: 
# http://bugreport.sun.com/bugreport/crash.jsp 
# The crash happened outside the Java Virtual Machine in native code. 
# See problematic frame for where to report the bug. 
# 

Czy to znaczy, że trzeba mieć tesseract zainstalowana używać tess4j? Czemu? Lub maby mój tess4j folder tessdata jest w niewłaściwym miejscu (obecnie jest z moimi plikami .java, słoiki tess4j znajdują się w folderze lib, do którego ustawiłem ścieżkę klasy).

+0

co się stanie, jeśli pozwolisz, aby twoja "zmienna środowiskowa TESSDATA_PREFIX" wskazywała na folder tessdata twojego Tess4J? – sschrass

+1

Cóż, to rozwiązuje mój problem. Muszę się bardziej przyzwyczaić do zmiennych środowiskowych, aby uniknąć tych trudności. Jeszcze jedno pytanie: czy wszystko będzie działało, jeśli uruchomisz program na innym komputerze, który może nie mieć ustawionej ścieżki? –

Odpowiedz

3

Niech twój TESSDATA_PREFIX environment variable wskaże folder tessdata twojego Tess4j.

Zazwyczaj skonfigurować te zmienną podczas instalacji w systemie, ale może znaleźć rozwiązanie tutaj: How do I set environment variables from Java?

Musisz to zrobić w systemie, która uruchamia aplikację, ponieważ tessdata .dll s zależy od tego zmienna środowiskowa.

+0

setDatapath (patrz odpowiedź od nguyenq), może ominąć ustawienie zmiennej środowiskowej, czyli fajnie.Ale jak stwierdził nguyenq, zdefiniowana zmienna env będzie ją unieważniać, a to nie jest fajne: "( – sschrass

0

Może nie mieć folder w głównym katalogu projektu tessdata. Ten folder zawiera wszystkie tesseract obsługiwany język (zawiera on pliki z .traineddata, .bigrams, .fold, .lm, .nn, .params, .size i .word-freq Extensions) Jeśli go nie masz, wykonaj następujące kroki:

  1. Pobierz Folder tessdata-master od github.com/tesseract-ocr/tessdata (z przyciskiem do pobrania ZIP)
  2. Rozpakuj zawartość tessdata-master.zip pliku w głównym folderze projektu
  3. Rename tessdata-master do tessdata
  4. Uruchom projekt java i sprawdź, czy działa. Przynajmniej to działa dla mnie.
0

Dla tych, które wykorzystują maven i nie lubią używać zmiennych globalnych, to działa na mnie:

File imageFile = new File("C:\\random.png"); 
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 { 
    String result = instance.doOCR(imageFile); 
    System.out.println(result); 
} catch (TesseractException e) { 
    System.err.println(e.getMessage()); 
} 

znaleźć here, przetestowane z maven -> net.sourceforge.tess4j: tess4j: 3.4 .1, a także wykorzystanie łącza 1.4.1 jar

Powiązane problemy