我在尝试查找扫描后的PDF表格中是否包含签名(例如,确保支票上有签名)。
问题领域:
我将接收到文档包(包含多页PDF的多个表格)。我已经组装了文档包分类器来检查包中的所有文档,并将图像缩放到统一大小。之后,我知道签名应该在哪里,并可以扫描文档的特定区域。我正在寻找确保存在签名的最佳方法。我考虑过只是检查暗像素的基本阈值,但这似乎太笨拙了。签名的麻烦在于它们并不是真正的书写,更像是一种个人标记。
我能想到的唯一方法是使用机器学习方法来寻找“环状性”?但我对机器学习不太熟悉,甚至不知道如何开始这样的工作。任何有实用方法建议的人将非常受欢迎。
如果有帮助的话,我是用Java编写这个程序的
回答:
你提出的问题非常广泛,所以我们能提供的信息有限。然而,我可以给你一些有用的链接:
-
http://java-ml.sourceforge.net/ –这是一个你可以下载的库,里面有很多有用的算法和其他可以包含在你的程序中的代码
-
https://www.youtube.com/playlist?list=PLiaHhY2iBX9hdHaRr6b7XevZtgZRa1PoU –这是一个解释神经网络的系列(这是你可能想要研究的机器学习内容)
- 我对你的算法的一个重要建议是,不要去寻找所有环和其它东西的具体长度,而是去看它们的相对距离
-
“相对距离是什么?”你可能会问。这就是下一个建议派上用场的地方:不要跟踪线条,而是跟踪环的顶点和这些点的顺序。如果你然后计算它们之间的距离(当然是相对的,这意味着将其中一个长度设为零)。在跟踪距离的同时,你也应该跟踪角度。你可以通过计算(A,B)、(B,C)和(A,C)之间的距离来计算角度ABC (A,B和C是xy平面上的坐标),这会在点之间形成一个三角形,允许你使用三角学来计算角度。
-
(我假设你也在尝试检测这是谁的签名,因为这实际上并不会增加太多复杂性) 在尝试将检测到的签名与存储的签名匹配以查看它们是否“相同”时,不要要求距离和角度必须完全一致。给出一个误差范围(例如,使用一个百分比范围的上下限)。这里有一个建议:将误差范围设得相当大。这样,即使签名写得不好,也仍然能被检测到。这会提高检测到多个签名的几率。幸运的是,有一个简单的解决方案。只是让程序在找到的签名上再次运行算法,但误差范围更小(当然这不是手动操作,程序会自动完成)。继续减小误差范围,直到只剩下一个签名。
-
我希望你已经有了检测实际签名位置的想法,但当然要检查像素的暗度差异。确保它相当连续。还要注意,签名通常用黑色 或 蓝色 签署,有时也会使用红色和其他花哨的颜色。