从带框字段输入的表单中提取字符

Extraction of characters from forms with boxed field inputs

我正在尝试从带有框的表单中的所有字段中提取字符,如下所示:

示例打印表格

我目前的做法如下:

  1. 根据某种标准格式从表单中裁剪字段。
  2. 图像预处理和查找字段框周围的轮廓。
  3. 根据该字段中的框数,裁剪每个小框并在这些裁剪的字符图像上运行进行字符识别。

图片中的方框可能略微倾斜。我使用对齐算法,但它仍然不能总是拉直盒子的边缘。这可以在这张图片中看到:

对齐日期裁剪

.

在这样的图像上,当我使用直线裁剪字符时(上述算法的第 3 步),框的边缘也包括在内,这会混淆字符识别模块。例如,数字“3”和 'the box edge' 有时表示为 31。

我只想使用预先训练的模型,因此,我正在寻找一种更好的方法来正确地从加框字段中提取字符。

非常感谢 SO 社区提供的任何帮助。

由于框的边缘通常比其中的文本更薄(如您的情况),我们可以利用此信息。 通过应用水平形态闭核(Dilation -> Erosion),我们可以使细垂直线变白,这将有助于 OCR。处理后可能会留下一些垃圾,但这不会影响 OCR 的准确性。内核的大小取决于边界线的宽度。显然,您可以根据自己的情况进行调整。

示例代码如下:

import cv2
import numpy as np
im = cv2.imread('sample_image.png')
im = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)

k1 = (4,1)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, k1)
im = cv2.morphologyEx(im, cv2.MORPH_CLOSE, kernel, iterations=1)

_,im = cv2.threshold(im, thresh=200, maxval=255, type=cv2.THRESH_BINARY)
cv2.imwrite('sample_output.png',im)

图片如下:

  1. sample_image.png

  2. sample_output.png