python - 从带框字段输入的表单中提取字符
问题描述
我正在尝试从带有框的表单中的所有字段中提取字符,例如此处显示的框:
样本打印表格
我目前的做法如下:
- 根据某些标准格式从表单中裁剪字段。
- 图像预处理和查找字段框周围的轮廓。
- 根据该字段中的框数,裁剪每个小框并在这些裁剪的字符图像上运行字符识别。
图像中的方框可能略微倾斜。我使用对齐算法,但它仍然不能总是拉直盒子边缘。这可以在这张图片中看到:
对齐日期裁剪
.
在这样的图像上,当我使用直线裁剪字符(上述算法的第 3 步)时,还包括框的边缘,这会混淆字符识别模块。例如,数字“3”和“盒子边缘”有时表示为 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)
以下是图片:
推荐阅读
- python - 生成具有精确均值和标准偏差的样本数据
- c# - FluentNHibernate 异常:复合用户类型上的“属性映射的列数错误”
- c# - 从 wpf c# 中的 Datagrid.Items 集合中获取项目
- python - Python 调用 metpy.calc.lfc() 引发 IndexError: index 0 is out of bounds for axis 0 with size 0
- ios - NSFetchedResultsController 和 NSIncrementalStore
- python - 我需要以相同的随机方式随机打乱两个熊猫数据帧的行
- excel - 使用宏在 Outlook 中发送或接收邮件后在 Excel 中写入日志
- node.js - Mongo在尝试保存数组时返回[object Object]
- spring-web - Spring 的 URIComponentsBuilder 将端口号的冒号 (:) 转换为斜杠 (/)
- wordpress - Wordpress 核心文件已更改