2

我正在开发一个 Android OCR 项目。在我的项目中,我使用的是 tess-two。但是我在初始化 tess-2 的 tessdata 文件夹中的训练数据时遇到问题。

我像这样在grandle中安装了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;
    }

单击按钮时会触发该事件。我的活动只包括那个功能。问题在于数据路径变量。

这是我的项目结构

在此处输入图像描述

是的,我添加了两个 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 文件夹?我不知道为它设置路径。

4

2 回答 2

0

您可以将文件放在文件assets夹中,然后将它们复制到/storage/emulated/0/tesseract/tessdata/使用AssetManager.

于 2018-03-17T09:58:39.560 回答
0

将您的 tessdata 目录复制到您的内部存储器或手机内存中。然后把你的 DATA_PATH 变量作为

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

然后尝试运行它。我最近发现它Environment.getExternalStorageDirectory()可能并不总是指向您的 SD 卡或外部存储。在我的情况下,它实际上指向我的内部存储,因此使用上述 DATA_PATH 将 tessdata 文件夹复制到我的内部存储中对我来说效果很好。因此,这应该直接指向包含 tessdata 文件夹的内部存储器。

于 2016-08-17T18:18:59.590 回答