花了超过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);
我认为必须在这种情况下使用它,尝试过但得到了相同的结果。
答案 0 :(得分:1)
我认为Tesseract对于这些东西有点过分。使用简单的神经网络为您的图像进行明确训练,您会感觉更好。在我的公司,最近我们尝试在iOS上使用Tesseract进行OCR任务(使用相机扫描实用程序账单),但是对于我们的目的而言太慢且不准确(在iPhone 4上扫描时间超过30秒)低FPS)。最后,我专门为我们的目标字体训练了一个神经网络,这个解决方案不仅击败了Tesseract(它甚至可以在iPhone 3Gs上完美扫描),还有一个商用ABBYY OCR引擎,我们给了它一个样本来自公司。 This course's材料将成为机器学习的良好开端。