Python OCR:忽略文档中的签名

vdv*_*xel 11 python ocr opencv machine-learning image-processing

我正在尝试对扫描文档进行OCR,其​​中包含手写签名.见下图.

在此输入图像描述

我的问题很简单,有没有办法在忽略签名的同时使用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]
Run Code Online (Sandbox Code Playgroud)

San*_*Dey 5

您可以使用scikit-image高斯滤波器首先模糊细线(使用适当的模糊sigma),然后使用图像的二值化(例如,使用某些thresholding功能),然后通过形态学操作(例如remove_small_objectsopening使用某些适当的模糊操作structure)来消除大部分和然后尝试用滑动窗口对数字进行分类(假设已经训练了一些模糊字符,如测试图像中那样).以下是一个例子.

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()    
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

另一种选择是将问题作为对象检测问题,其中字母表是对象.我们可以使用深度学习:用于物体检测的CNN/RNN /快速RNN模型(具有张量流/ keras)或Yolo模型(参考本文用yolo模型进行汽车检测).


小智 1

我想输入的图片是灰度的,否则也许不同颜色的墨水会有独特的力量。

这里的问题是,你的训练集 - 我猜 - 几乎只包含“正常”字母,没有签名的干扰 - 所以分类器自然不会对带有签名墨水的字母起作用。一种方法可能是用这种类型的字母扩展训练集。当然,逐个提取和标记这些字母是一项艰巨的工作。

您可以使用带有不同签名的真实信件,但也可以人为地生成类似的信件。您只需要在不同的字母上方移动不同的签名片段即可。这个过程可能是自动化的。