Python OCR:忽略文档中的签名
Posted
技术标签:
【中文标题】Python OCR:忽略文档中的签名【英文标题】:Python OCR: ignore signatures in documents 【发布时间】:2019-01-31 21:12:21 【问题描述】:我正在尝试对包含手写签名的扫描文档进行 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]
【问题讨论】:
【参考方案1】:您可以使用scikit-image
的高斯过滤器首先模糊细线(使用适当的sigma
),然后对图像进行二值化(例如,使用一些thresholding
函数),然后通过形态学运算(例如remove_small_objects
或 opening
和一些适当的 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()
[编辑]:使用深度学习模型
另一种选择是将问题作为对象检测问题提出,其中字母是对象。我们可以使用深度学习:CNN/RNN/Fast RNN 模型(带有 tensorflow/keras)或 Yolo 模型(参考这个article 进行汽车检测与 yolo 模型)。
【讨论】:
如果签名不是细线怎么办? 在这种情况下,我们需要用噪声较大的图像训练分类器【参考方案2】:我假设输入的图片是灰度的,否则不同颜色的墨水可能会有不同的力量。
这里的问题是,你的训练集 - 我猜 - 几乎只包含“正常”字母,没有签名的干扰 - 所以自然分类器不会处理带有签名墨水的字母。一种方法是用这种类型的字母扩展训练集。当然,逐个提取和标记这些字母是一项艰巨的工作。
您可以使用带有不同签名的真实字母,但也可以人工生成相似的字母。您只需要在其上方移动具有不同签名sn-ps的不同字母。这个过程可能是自动化的。
【讨论】:
【参考方案3】:您可以尝试使用形态学操作对图像进行预处理。
您可以尝试opening 去除签名的细线。问题是它也可能会删除标点符号。
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)
您可能需要更改内核大小或形状。尝试不同的套装。
【讨论】:
【参考方案4】:您可以为同一任务尝试其他 OCR 提供程序。例如,https://cloud.google.com/vision/ 试试这个。您可以上传图像并免费检查。
您将从 API 获得响应,您可以从中提取所需的文本。用于提取该文本的文档也在同一网页上提供。
看看这个。这将帮助您获取该文本。当我遇到同样的问题时,这是我自己的答案。 Convert Google Vision API response to JSON
【讨论】:
Tesseract OCR 没有损坏并且仍在维护。你只需要知道它能做什么,不能做什么。 Tesseract OCR 需要一个良好的分割图像,其中字符可见且无噪点。对 Tesseract 回购的最后一次提交甚至还不到一天... 这到底是如何回答这个问题的?需要解释一下吗? 他问是否有任何方法可以在忽略签名的情况下使用 OCR 提取文本,所以我给了他一个。以上是关于Python OCR:忽略文档中的签名的主要内容,如果未能解决你的问题,请参考以下文章
Python爬虫入门教程 56-100 python爬虫高级技术之验证码篇2-开放平台OCR技术