在花费了 10 多个小时使用 libc++ 编译 tesseract 以便它与 OpenCV 一起使用之后,我在获得任何有意义的结果时遇到了问题。我正在尝试将其用于数字识别,我传递的图像数据是一个小正方形 (50x50) 图像,其中有一个或没有数字。
我试过同时使用 eng 和 equ tessdata (来自谷歌代码),结果不同,但都得到猜测 0 位。使用 eng 数据我得到'4\n\n'或'\n\n'作为大多数时间的结果(即使图像中没有数字),置信度在 1 到 99 之间。使用 equ 数据我得到'\n\n'置信度为 0-4。
我还尝试对图像进行二值化,结果或多或少相同,但我认为不需要它,因为图像被过滤得很好。
我假设有问题,因为与最简单的示例图像相比,这些图像很容易识别。
这是代码:
初始化:
_tess = new TessBaseAPI();
_tess->Init([dataPath cStringUsingEncoding:NSUTF8StringEncoding], "eng");
_tess->SetVariable("tessedit_char_whitelist", "0123456789");
_tess->SetVariable("classify_bln_numeric_mode", "1");
认出:
char *text = _tess->TesseractRect(imageData, (int)bytes_per_pixel, (int)bytes_per_line, 0, 0, (int)imageSize.width, (int)imageSize.height);
我没有错误。TESSDATA_PREFIX 设置正确,我尝试了不同的识别方法。检查时 imageData 看起来没问题。
以下是一些示例图像:
这应该与常规训练数据一起使用吗?
感谢任何帮助,我第一次尝试 tessarect,我可能错过了一些东西。
编辑:
我发现了这个:
_tess->SetPageSegMode(PSM_SINGLE_CHAR);
我假设它必须在这种情况下使用,尝试过但得到了相同的结果。