我一直在使用 tesseract(更准确地说是 tess-two)在 android 中制作一个应用程序来识别某些非常规符号。目的是识别符号并重定向到所述符号的描述。
这些符号几乎可以被完美地识别,无论它们是单独出现在图像中还是彼此相邻......除了两个(下面的那些)。
这两个符号单独时无法识别,但如果它们与任何其他符号相邻,则可以正确识别它们。
例如:
未识别 _
正确识别
_ b
_是_
问题是它们没有与其他符号不匹配,而是完全被忽略了。我打电话时会出现这种情况:
TessBaseAPI baseApi;
...
字符串文本 = baseApi.getUTF8Text();
返回的字符串始终为空。就像它甚至不识别黑色区域一样。任何人都知道我该如何解决这个问题?
更新:
为了更清楚,这里是我初始化 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”,因为我制作了一种与我必须使用的符号相对应的字体,并将它们映射到每个字母。