我正在努力与ios上的tesseract ocr.一切正常,但它真的很慢.单行数字的2 - 3秒识别时间.
我正在阅读视频流.
我正在使用tesseract 3.01和我的字体的自定义培训文件.
这是我做的:
设置tesseract只是为了找到数字(0-9)
GetLines来找到我想要的文本行setRectangle 只识别我想要的线getUTF8Text得到我的文字< - 这一个人需要2-3秒有没有建议加快这个过程?
我有一个C++二值化例程,我用于以后的OCR操作.但是我发现它产生了不必要的文本倾斜.寻找替代方案我发现GPUImage具有很高的价值,它解决了倾斜的问题.
我正在使用这样的GPUImage代码在应用OCR之前对输入图像进行二值化.
但是,阈值不包括我得到的图像范围.查看输入图像中的两个样本:


我不能用相同的阈值处理两者.低价值似乎随后很好,第一个价值更高.
第二个图像似乎特别复杂,因为无论我为阈值设置了什么值,我都不会将所有字符都正确地二进制化.另一方面,我的C++二值化例程似乎做得对,但我没有太多的见解可以像GPUImage中的简单阈值那样进行实验.
我该怎么处理?
更新:
我尝试使用GPUImageAverageLuminanceThresholdFilter默认乘数= 1.它适用于第一张图像,但第二张图像仍然是问题.
二值化的一些更多样化的输入:


更新II:
经过布拉德的这个回答后,尝试过GPUImageAdaptiveThresholdFilter(也包含了GPUImagePicture,因为之前我只在UIImage上应用它).
有了这个,我得到了二次图像二值化完美.然而,当我设置模糊大小为3.0时,第一个似乎在二值化后有很多噪音.OCR导致添加额外字符.使用较低的模糊大小值,第二个图像会失去精度.
这里是:
+(UIImage *)binarize : (UIImage *) sourceImage
{
UIImage * grayScaledImg = [self toGrayscale:sourceImage];
GPUImagePicture *imageSource = [[GPUImagePicture alloc] initWithImage:grayScaledImg];
GPUImageAdaptiveThresholdFilter *stillImageFilter = [[GPUImageAdaptiveThresholdFilter alloc] init];
stillImageFilter.blurSize = 3.0;
[imageSource addTarget:stillImageFilter];
[imageSource processImage];
UIImage *imageWithAppliedThreshold = [stillImageFilter imageFromCurrentlyProcessedOutput];
// UIImage *destImage = [thresholdFilter imageByFilteringImage:grayScaledImg];
return imageWithAppliedThreshold;
}
Run Code Online (Sandbox Code Playgroud) 我创建了一个iPhone应用程序,可以扫描一页方格纸的图像,然后可以告诉我哪些方块已被涂黑,哪些方块是空白的.
我这样做是通过从左到右扫描并使用方格纸的线作为指南.当我遇到方格纸线时,我开始寻找黑色,直到我再次点击方格纸线.然后,我继续沿着扫描线继续前进,完全扫描方块为黑色.然后我继续下一个方框.在该行的最后,我在新行开始扫描之前跳过这么多像素(因为我已经弄清楚每个盒子有多高).
这种作品,但有问题.有时我把图形线误认为是"黑色".有时,如果图像歪斜,或者我的页面上没有均匀的照明,那么我就不会得到好的结果.
我想要做的是指定一些"对齐"框,然后我调整大小并旋转(和倾斜)图片以与那些对齐.然后,我想,一旦我将图像对齐,我就会知道所有盒子的位置,并且不必扫描盒子,只需扫描盒子的位置,看看它们是否是黑色的.这应该更快,更可靠.如果我操作来自相机的图像,我可以更灵活地要求用户对齐图片以匹配对齐标记,而不是自己对齐图像.
鉴于这是我的第一个图像处理项目,我觉得我正在重新发明轮子.我想知道如何做到这一点,以及是否利用像OpenCV这样的库.
我附上的图像类似于我想要处理的图像.我正在寻找具有大量黑色标记的所有正方形的列表,即A8,C4,E7,G4,H1,J9.

需要注意的问题:
