Tesseract Android中的黑名单和白名单

3
我正在开发一款 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");


}

谢谢您的快速回复。是的,问题在于文本“PIN码”被识别为“718 200”..我想完全不显示字母..这可能吗? - taiba
1个回答

3

在初始化之前设置“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");

应该就可以解决问题了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接