从带框字段输入的表单中提取字符
Extraction of characters from forms with boxed field inputs
我正在尝试从带有框的表单中的所有字段中提取字符,如下所示:
示例打印表格
我目前的做法如下:
- 根据某种标准格式从表单中裁剪字段。
- 图像预处理和查找字段框周围的轮廓。
- 根据该字段中的框数,裁剪每个小框并在这些裁剪的字符图像上运行进行字符识别。
图片中的方框可能略微倾斜。我使用对齐算法,但它仍然不能总是拉直盒子的边缘。这可以在这张图片中看到:
对齐日期裁剪
.
在这样的图像上,当我使用直线裁剪字符时(上述算法的第 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)
图片如下:
sample_image.png
sample_output.png
我正在尝试从带有框的表单中的所有字段中提取字符,如下所示:
示例打印表格
我目前的做法如下:
- 根据某种标准格式从表单中裁剪字段。
- 图像预处理和查找字段框周围的轮廓。
- 根据该字段中的框数,裁剪每个小框并在这些裁剪的字符图像上运行进行字符识别。
图片中的方框可能略微倾斜。我使用对齐算法,但它仍然不能总是拉直盒子的边缘。这可以在这张图片中看到:
对齐日期裁剪
在这样的图像上,当我使用直线裁剪字符时(上述算法的第 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)
图片如下:
sample_image.png
sample_output.png