2017-10-13 101 views
0

爲什麼我的Tesseract實例要求我明確設置我的數據路徑,但不想讀取環境變量?Tesseract不使用路徑變量

讓我澄清一下:在運行代碼

ITesseract tesseract = new Tesseract(); 
String result = tesseract.doOCR(myImage); 

拋出一個錯誤:

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. 

我已經爲我設置環境變量,即做

echo $TESSDATA_PREFIX returns /usr/share/tessdata/ 

現在,設置路徑變量明確地在我的代碼中,即:

Itesseract tesseract = new Tesseract(); 
tesseract.setDatapath("/usr/share/tessdata/"); 
String result = tesseract.doOCR(myImage); 

工作完美。爲什麼? 我使用的是Manjaro 17.0.5

回答

1

該庫最初設計爲使用捆綁在其tessdata文件夾中的數據文件。在你的情況,如果你想從標準tessdata目錄中讀取,你想設置的數據路徑如下:

tesseract.setDatapath(System.getenv("TESSDATA_PREFIX"));

+0

System.getenv只返回我已經設置完全相同的字符串雖然,它不是硬編碼的。但是,我的問題圍繞着「爲什麼圖書館無法找到自己的」共享庫「而不必明確告訴它在哪裏看? –

+1

默認情況下,tess4j使用其本地'tessdata'文件夾,而不是Tesseract的。它不知道由'TESSDATA_PREFIX'變量定義的路徑。 – nguyenq