Python OCR:忽略文档中的签名

12

我正在尝试对一份扫描文件进行OCR识别,其中包含手写签名。请参见下面的图像。

enter image description here

我的问题很简单,是否有办法在忽略签名的情况下使用OCR提取人名?当我运行Tesseract OCR时,它无法检索到这些名称。我尝试了灰度处理/模糊处理/阈值化,并使用下面的代码,但没有成功。有什么建议吗?

image = cv2.imread(file_path)
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
image = cv2.GaussianBlur(image, (5, 5), 0)
image = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]
4个回答

5
您可以使用scikit-image的高斯滤波器来首先模糊细线(使用适当的sigma),然后对图像进行二值化(例如,使用一些thresholding函数),然后进行形态学操作(例如使用一些适当structureremove_small_objectsopening)来大部分地消除签名,然后尝试使用滑动窗口对数字进行分类(假设已经使用一些模糊字符作为测试图像中的字符进行了训练)。以下是一个示例。
from skimage.morphology import binary_opening, square
from skimage.filters import threshold_minimum
from skimage.io import imread
from skimage.color import rgb2gray
from skimage.filters import gaussian

im = gaussian(rgb2gray(imread('lettersig.jpg')), sigma=2)
thresh = threshold_minimum(im)
im = im > thresh
im = im.astype(np.bool)
plt.figure(figsize=(20,20))
im1 = binary_opening(im, square(3))
plt.imshow(im1)
plt.axis('off')
plt.show()    

enter image description here

[编辑]: 使用深度学习模型

另一个选择是将问题作为目标检测问题来表述,其中字母是对象。我们可以使用深度学习:CNN/RNN/快速RNN模型(使用tensorflow/keras)进行目标检测或使用Yolo模型(参考这个文章中的车辆检测与yolo模型)。


如果签名不是一条细线呢? - K P
在这种情况下,我们需要使用更多嘈杂的图像来训练分类器。 - Sandipan Dey

1
你可以尝试使用形态学运算对图像进行预处理。
你可以尝试 开运算 来去除签名的细线。问题是它可能也会去除标点符号。
image = cv2.imread(file_path)
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5))
image = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)

你可能需要改变内核的大小或形状。只需尝试不同的设置。


1
我假设输入的图片是灰度的,否则墨水的不同颜色可能会有显着的影响力。
问题在于,你的训练集 - 我猜 - 几乎只包含没有签名干扰的“正常”字母,因此分类器自然无法处理带有签名墨水的字母。一种方法是使用这种类型的字母扩展训练集。当然,逐个提取和标记这些字母是相当费力的。
你可以使用真实的带有不同签名的信件,但也可能人工生成类似的信件。你只需要将不同的字母与移动到它们上面的签名片段组合起来。该过程可以自动化。

0
您可以尝试其他OCR提供商执行相同的任务。例如,https://cloud.google.com/vision/ 尝试这个。您可以上传图像并免费检查。
您将从API获得响应,从中可以提取所需的文本。提取该文本的文档也在同一网页上提供。
看看这个。这将帮助您获取该文本。这是我在面对相同问题时给出的答案。将Google Vision API响应转换为JSON

enter image description here


2
Tesseract OCR并没有出现故障,仍在维护中。您只需要知道它能做什么和不能做什么。Tesseract OCR需要一张良好分割的图像,其中字符可见且没有噪音。最后一次提交到Tesseract repo甚至还不到一天... - Mailerdaimon
这个回答怎么一点都不相关呢?能解释一下吗? - Jeru Luke
他问是否有办法在忽略签名的情况下仍然使用OCR提取文本,所以我给了他一个方法。 - K P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接