我正在开发一个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/

10-10 01:49