2012-11-08 117 views
4

我目前正在開發一個使用OCR的Android應用程序,並且我已經達到了調用BaseAPI.init()方法的地步。我不斷收到錯誤,指出該目錄必須包含tessdata作爲子文件夾。我已經檢查過文件目錄包含裏面有trainingdata文件的文件夾,並確保我指向正確的目錄。我真的想解決這個問題。Tesseract OCR Android tessdata目錄未找到

我指向的目錄是/ mnt/sdcard/Image2Text /。我已經確定tessdata是一個包含必要語言文件的子文件夾。

下面是代碼:

public static final String DATA_PATH = Environment.getExternalStorageDirectory().toString() + 
              "/Image2Text/"; 


.... 

File dir = new File(DATA_PATH + "tessdata"); 
    dir.mkdirs(); 

    if (!(new File(DATA_PATH + "tessdata/" + lang + ".traineddata")).exists()) { 
     try { 

      AssetManager assetManager = getAssets(); 
      InputStream in = assetManager.open("eng.traineddata"); 
      OutputStream out = new FileOutputStream(DATA_PATH 
        + "tessdata/eng.traineddata"); 

      byte[] buf = new byte[1024]; 
      int len; 
      while ((len = in.read(buf)) > 0) { 
       out.write(buf, 0, len); 
      } 
      in.close(); 
      out.close(); 
     } catch (IOException e) {} 
    } 

    TessBaseAPI baseAPI = new TessBaseAPI(); 
    baseAPI.init(DATA_PATH, lang); 
    baseAPI.setImage(new File(path)); 

回答

6

像你說的,在DATA_PATH目錄必須包含tessdata作爲一個子文件夾。所以,如果你的tessdata文件夾是/ data/data/tessdata,DATA_PATH將是/ data/data我希望這有助於!

編輯:ak,我想我誤解了!

+0

對,我通過閱讀BaseAPI.java文件知道這一部分。我已經進入文件系統來檢查並確保該目錄在那裏,並且確實如此。這種情況下的目錄是/ mnt/sdcard/Image2Text /。該目錄包含tessdata作爲子文件夾。我在我的代碼中錯誤地指定了它嗎?另外,如果不是,我的代碼應該創建該文件夾。它在我的情況下,因爲我在AndroidManifest.xml中有android.permission.WRITE_EXTERNAL_STORAGE – dr3wmurphy