如何强制tesseract识别单个字符,而不是忽略它?

时间:2016-03-08 00:51:48

标签: android character tesseract symbols tess-two

我一直在使用tesseract(tess-two更精确)在android中制作应用以识别某些非常规符号。目的是识别符号并重定向到所述符号的描述。

符号几乎可以被完全识别,无论它们是单独存在于图像中还是彼此相邻......除了两个(下面的符号)之外。

symbols omitted from recognition

单独使用这两个符号时,如果这些符号与任何其他符号相邻,则会被正确识别。

例如:

不承认 _

正确认可

_ b

_ y _

问题是它们与其他符号不匹配,而是完全被忽略。调用时会发生这种情况:

TessBaseAPI baseApi;

...

String text = baseApi.getUTF8Text();

返回的字符串始终为null。就像它甚至不认识黑色区域一样。 任何人都知道如何解决这个问题?

更新

为了更清楚,这里是我初始化tess时的完整代码。

TessBaseAPI baseApi = new TessBaseAPI();

mainBitmap = mainBitmap.copy(Bitmap.Config.ARGB_8888, true);

baseApi.setDebug(true);

baseApi.init(MainActivity.DATA_PATH, MainActivity.lang);


baseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_SINGLE_CHAR);


baseApi.setVariable("tessedit_char_whitelist","abcdefghijklmnopqrst");
baseApi.setImage(mainBitmap);


mainBitmap.recycle();
mainBitmap = null;


// Iterate through the results.
ResultIterator iterator = baseApi.getResultIterator();
String lastUTF8Text;
float lastConfidence;



iterator.begin();
do {
    lastUTF8Text = iterator.getUTF8Text(TessBaseAPI.PageIteratorLevel.RIL_SYMBOL);
    lastConfidence = iterator.confidence(TessBaseAPI.PageIteratorLevel.RIL_SYMBOL);

    Log.i("string, intConfidence",lastUTF8Text+", "+lastConfidence);
} while (iterator.next(TessBaseAPI.PageIteratorLevel.RIL_SYMBOL));

我的白名单从“a”到“t”的范围,因为我制作了与我必须使用的符号相对应的字体,并将它们映射到这些字母中的每一个。

1 个答案:

答案 0 :(得分:0)

我会尝试将页面分割模式设置为单个字符。

TessBaseAPI.PageSegMode.PSM_SINGLE_CHAR