相关疑难解决方法(0)

如何更快地在iOS上进行tesseract?

我正在努力与ios上的tesseract ocr.一切正常,但它真的很慢.单行数字的2 - 3秒识别时间.

我正在阅读视频流.

我正在使用tesseract 3.01和我的字体的自定义培训文件.

这是我做的:

设置tesseract只是为了找到数字(0-9)

  1. 收缩,歪斜和二值化图像
  2. 使用GetLines来找到我想要的文本行
  3. setRectangle 只识别我想要的线
  4. getUTF8Text得到我的文字< - 这一个人需要2-3秒

有没有建议加快这个过程?

ocr performance tesseract ios

8
推荐指数
1
解决办法
5584
查看次数

用于OCR的iOS UIImage二值化 - 处理具有不同亮度的图像

我有一个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)

ocr image-processing ios gpuimage

5
推荐指数
1
解决办法
4710
查看次数

用于识别2D特征的图像处理

我创建了一个iPhone应用程序,可以扫描一页方格纸的图像,然后可以告诉我哪些方块已被涂黑,哪些方块是空白的.

我这样做是通过从左到右扫描并使用方格纸的线作为指南.当我遇到方格纸线时,我开始寻找黑色,直到我再次点击方格纸线.然后,我继续沿着扫描线继续前进,完全扫描方块为黑色.然后我继续下一个方框.在该行的最后,我在新行开始扫描之前跳过这么多像素(因为我已经弄清楚每个盒子有多高).

这种作品,但有问题.有时我把图形线误认为是"黑色".有时,如果图像歪斜,或者我的页面上没有均匀的照明,那么我就不会得到好的结果.

我想要做的是指定一些"对齐"框,然后我调整大小并旋转(和倾斜)图片以与那些对齐.然后,我想,一旦我将图像对齐,我就会知道所有盒子的位置,并且不必扫描盒子,只需扫描盒子的位置,看看它们是否是黑色的.这应该更快,更可靠.如果我操作来自相机的图像,我可以更灵活地要求用户对齐图片以匹配对齐标记,而不是自己对齐图像.

鉴于这是我的第一个图像处理项目,我觉得我正在重新发明轮子.我想知道如何做到这一点,以及是否利用像OpenCV这样的库.

我附上的图像类似于我想要处理的图像.我正在寻找具有大量黑色标记的所有正方形的列表,即A8,C4,E7,G4,H1,J9. 在此输入图像描述

需要注意的问题:

  • 图像的光线覆盖可能不理想,但在整个图像中应该相对一致(即没有阴影)
  • 所有方块都可以是空的或全黑的,算法需要能够确定
  • 图像可以绕任何轴倾斜或旋转.绕z轴的旋转可能很容易修复.可以围绕x轴或y轴旋转,使得图像的一侧比另一侧宽.但是,如果我实时扫描图像来自相机,我可以要求用户将对齐标记与屏幕上的标记对齐.如何最好地确保对齐以便为用户提供适当的反馈?只需检查以确保4个角落较暗可能会在相机指向黑色表面时导致误报.
  • 不是每个方块都会同样或持续地涂黑,但我认为会有足够的黑色使人眼无可置疑.
  • 蓝色网格可能很有用,但有时黑色标记可能与蓝色网格重叠.我认为虚拟网格可能比依赖打印网格更好.我认为使用对齐标记来对齐图像,然后可以布置精确的虚拟网格.然后可以对每个网格框的内容进行采样,以查看它是否主要是黑色,而不是从左到右扫描,不是吗?这是另一个在网格上有更多标记的图像.在此图像中,除了A8,C4,E7,G4,H1,J9中的先前标记外,我还标记了E2,G8和G9,以及I4和J4,您可以看到蓝色网格是如何被遮挡的.

第二张图片

  • 这是我这个项目的第一阶段.最后,我想扩展这个算法,以便能够处理至少几百个插槽和可能不同的颜色.

opencv image-processing

3
推荐指数
1
解决办法
3237
查看次数

标签 统计

image-processing ×2

ios ×2

ocr ×2

gpuimage ×1

opencv ×1

performance ×1

tesseract ×1