【问题标题】:Issues with OCR and small text elements due to missing padding由于缺少填充导致 OCR 和小文本元素出现问题
【发布时间】:2023-02-10 01:32:54
【问题描述】:

背景资料:

我目前正在开发一个屏幕截图工具,它在 sn-p 上执行 OCR 以将文本复制到剪贴板。

虽然它在大多数情况下都运行良好,但它在小范围选择时会出现问题。
为了确保 OCR 正常工作,我将 sn-ps 缩放为具有 640 像素的最小宽度或 480 像素的最小高度,并相应地缩放分辨率和大小。

tesseract OCR 引擎在识别小选区上的文本时存在问题。
我怀疑如果文本没有居中或周围有足够的白色或黑色以使其从背景中正确脱颖而出,则图像需要填充。


问题:

在对图像执行 OCR 之前,我如何识别图像中填充的需要?


当前的预处理步骤:

对于预处理,我正在调整大小(如果需要)并将 24bppRGB 图像转换为 8bppIndexed 灰度图像。
然后我创建一个直方图,计算全局阈值并对其应用二值化。


例子:

A)不识别任何文本:

B)正确识别文本:

【问题讨论】:

  • 大概您应该在 Tesseract github 页面上询问,因为这对于所用算法的实习生来说似乎非常具体。我没有受过教育的答案是,如果你有特定的输入效果不佳,那么用它作为训练数据来训练 Tesseract 引擎以获得更好的结果。

标签: c# image-processing ocr


【解决方案1】:

解决方案 1:“汽油头”方法

好吧,如果你需要填充,并且这似乎可以解决它,那么“汽油头”方法就是简单地添加它,通过计算在它在图像上撞到黑色之前有多少白色可用,有点像从左边投射光线,right,top,bottom 或者如果它小于所需的宽度/高度,则只调整图像的大小。然后相应地添加所需数量的白色“填充”,如果尺寸超过 640x480 或需要正常工作的任何尺寸,则不执行此操作。这看起来很像这样伪代码:

/* PSEUDO-CODE */
void make_ocr_readable(image) {
    if (image.width >= 640 && image.height >= 480) {
        doOCR(image);
    } else {
        ocr_readable_img = castrays(image); // cast rays, add padding accordingly
        doOCR(ocr_readable_img);
    }
}

或者

/* PSEUDO-CODE */
void make_ocr_readable(image) {
    if (image.width >= 640 && image.height >= 480) {
        doOCR(image);
    } else {
        Bitmap padding = new Bitmap(640, 480, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
        ocr_readable_img = add_images(image, padding); // adds the image on top of padding
        doOCR(ocr_readable_img);
    }
}

解决方案 2:

正如 @Ralf 已经建议的那样,您可以与 OCR 背后的团队一起解决这个问题,在 github 上四处询问或自己训练模型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 2018-03-14
    • 1970-01-01
    相关资源
    最近更新 更多