我正在开发一个android应用程序,通过手机摄像头或从图库中拍摄信用卡的照片来为手机充值。为此,我使用tesseract库只拍摄使用黑名单和白名单的数字。它不像预期的那样工作
我使用的图片只包含这两行:
PIN码
41722757649786个
开始充电活动之前的结果是:
718 200
41722757649786个
我只想识别不带字母和不使用裁剪器的数字。
public void initTess(){
if (mBaseApi != null)
mBaseApi.end();
mBaseApi = new TessBaseAPI();
mBaseApi.setDebug(false);
mBaseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_OSD_ONLY);
mBaseApi.init(mDataDir + File.separator,"eng");
mBaseApi.setVariable(TessBaseAPI.VAR_CHAR_WHITELIST,"0123456789");
mBaseApi.setVariable(TessBaseAPI.VAR_CHAR_BLACKLIST,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmopqrstuvwxyz");
}
最佳答案
必须在初始化之前设置"tessedit_char_whitelist"
变量,如常见问题解答中所述:https://code.google.com/p/tesseract-ocr/wiki/FAQ#How_do_I_recognize_only_digits?
这很可能对黑名单也是如此。
因此,请更改代码:
mBaseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_OSD_ONLY);
mBaseApi.init(mDataDir + File.separator,"eng");
mBaseApi.setVariable(TessBaseAPI.VAR_CHAR_WHITELIST,"0123456789");
mBaseApi.setVariable(TessBaseAPI.VAR_CHAR_BLACKLIST,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmopqrstuvwxyz");
对此:
mBaseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_OSD_ONLY);
mBaseApi.setVariable(TessBaseAPI.VAR_CHAR_WHITELIST,"0123456789");
mBaseApi.setVariable(TessBaseAPI.VAR_CHAR_BLACKLIST,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmopqrstuvwxyz");
mBaseApi.init(mDataDir + File.separator,"eng");
应该会成功的。
关于android - tesseract ANDROID中的黑名单和白名单,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26783178/