获取数据目录的路径(android)

时间:2015-09-14 15:01:40

标签: android ocr tesseract tess-two

我在我的应用中使用tesseract ocr。为了使用tesseract,我需要使用位于名为 - ' tessdata'的目录中的几个语言文件。

这是我的方法代码:

    public String detectText(Bitmap bitmap) {
    TessBaseAPI tessBaseAPI = new TessBaseAPI();
    String DATA_PATH = Environment.getRootDirectory().getPath() + "/tessdata/";

    tessBaseAPI.setDebug(true);
    tessBaseAPI.init(DATA_PATH, "eng"); //Init the Tess with the trained data file, with english language

    tessBaseAPI.setImage(bitmap);

    String text = tessBaseAPI.getUTF8Text();

    tessBaseAPI.end();

    return text;
}

我使用了很多变种:

String DATA_PATH = Environment.getRootDirectory().getPath() + "/tessdata/";

并且每次应用失败并且#34;路径未找到"例外。 我需要一个很好的方法将这个目录放在Android手机中并获取它的路径,无论它是哪个手机。现在,' tessdata'目录可以在app根目录找到。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

不要在"/tessdata/"变量中包含DATA_PATH - 只需关闭该部分,但请确保子文件夹存在于DATA_PATH指定的目录中。

答案 1 :(得分:0)

From sourcecode TessBaseAPI#init

public boolean init(String datapath, String language) {
    ...
    if (!datapath.endsWith(File.separator))
        datapath += File.separator;

    File tessdata = new File(datapath + "tessdata");
    if (!tessdata.exists() || !tessdata.isDirectory())
        throw new IllegalArgumentException("Data path must contain subfolder tessdata!");

That means

  • the tessdata-subdirectory must exist.
  • init gets the parent-folder of "tessdata"

You can create it like this:

File dataPath = Environment.getDataDirectory(); 
   // or any other dir where you app has file write permissions

File tessSubDir = new File(dataPath,"tessdata");

tessSubDir.mkdirs(); // create if it does not exist

tessBaseAPI.init(dataPath.getAbsolutePath(), "eng");