无法在Android中使用tess-two初始化OCR的tessdata路径

时间:2016-06-28 06:50:04

标签: android ocr tesseract tess-two

我正在开发一个Android OCR项目。在我的项目中,我正在使用tess-two。但我有问题从tessdata文件夹初始化训练数据为tess-two。请参阅下面的方案。

我像这样安装了tess-two

dependencies {
    compile 'com.rmtheis:tess-two:6.0.2'
}

然后我尝试从这个位图中检测文本

public String detectText(Bitmap bitmap) {

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

        //For example if we want to only detect numbers
        tessBaseAPI.setVariable(TessBaseAPI.VAR_CHAR_WHITELIST, "1234567890");
        tessBaseAPI.setVariable(TessBaseAPI.VAR_CHAR_BLACKLIST, "!@#$%^&*()_+=-qwertyuiop[]}{POIU" +
                "YTREWQasdASDfghFGHjklJKLl;L:'\"\\|~`xcvXCVbnmBNM,./<>?");


        tessBaseAPI.setImage(bitmap);

        String text = tessBaseAPI.getUTF8Text();

        tessBaseAPI.end();

        return text;
    }

点击按钮时会触发。我的活动仅包括该功能。问题在于数据路径变量。

这是我的项目结构

enter image description here

是的,我添加了两个tessdata文件夹来演示两种情况。

首先尝试。我像这样设置DATA_PATH

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

这给了我“数据路径不存在!”错误。所以我找到了这些解决方案Tesseract OCR Android tessdata directory not foundGet path of data directory(android)

所以我试着像这样设置DATA_PATH

DATA_PATH = Environment.getRootDirectory().getPath();

它给了我“数据路径必须包含子文件tessdata!”错误。

然后我尝试了这个

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

然后我再次给我这个错误“数据路径不存在!”。

然后我尝试了这种方式

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

它给了我这个错误“数据路径不存在!”。

所以我试过的所有方法都不起作用。如何正确初始化tessdata文件夹?我不知道为它设置路径。

2 个答案:

答案 0 :(得分:0)

将tessdata目录复制到内部存储或手机记忆库中。然后将您的DATA_PATH变量设为

DATA_PATH = Environment.getExternalStorageDirectory() + "/";

然后尝试运行它。我最近发现Environment.getExternalStorageDirectory()可能并不总是指向您的SD卡或外部存储设备。在我的情况下,它实际上指向我的内部存储,因此在我的内部存储中复制tessdata文件夹与上面的DATA_PATH工作正常。所以,这应该直接指向包含tessdata文件夹的内部存储器。

答案 1 :(得分:0)

我来不及了,但我必须回答未来的人。为什么不将这些文件放在assets文件夹中,然后使用/storage/emulated/0/tesseract/tessdata/将它们复制到AssetManager之类的地方?