我正在开发一个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;
}
点击按钮时会触发。我的活动仅包括该功能。问题在于数据路径变量。
这是我的项目结构
是的,我添加了两个tessdata文件夹来演示两种情况。
首先尝试。我像这样设置DATA_PATH
DATA_PATH = Environment.getRootDirectory().getPath()+"/data/";
这给了我“数据路径不存在!”错误。所以我找到了这些解决方案Tesseract OCR Android tessdata directory not found和Get 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文件夹?我不知道为它设置路径。
答案 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
之类的地方?