【发布时间】:2013-11-14 11:51:42
【问题描述】:
在使用 libc++ 编译 tesseract 以使其与 OpenCV 一起使用超过 10 个小时之后,我在获得任何有意义的结果时遇到了问题。我正在尝试将其用于数字识别,我传递的图像数据是一个小正方形 (50x50) 图像,其中有一个或没有数字。
我尝试同时使用 eng 和 equ tessdata(来自 google 代码),结果不同,但都猜到了 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);
我假设它必须在这种情况下使用,尝试过但得到了相同的结果。
【问题讨论】:
-
这些是分辨率极低的图像。尝试以 300 DPI 重新扫描,看看是否能得到更好的结果。
-
它们没有被扫描,我从中提取正方形的原始图像非常大。我正在缩小它的大小以进行预处理(有点复杂)。如果它不会对预处理部分的性能产生太大影响,如果您认为它应该有所作为,我会尝试在此步骤中获取更大的图像。