提取扫描文档的一部分(个人身份) - 选择哪个库和方法?
我需要处理很多扫描的身份证,并从中提取照片以便进一步处理。这里有个虚构的例子:
问题是这些扫描的文件并不是完全对齐的(可能旋转了最多10度)。所以我需要找到它们的位置,旋转它们,然后裁剪出照片。这比我最开始想的要难得多。
我查了一下OpenCV,发现它只能检测矩形,但结果并不好:矩形并不总是能很好地匹配样本。而且它的图像匹配算法只适用于没有旋转的图像,因为它只是简单的对比。
所以我考虑使用ARToolkit(增强现实库),因为我知道它能非常精确地定位图像上的特定标记。但似乎这些标记必须非常简单,所以我不能用文档中的某个固定部分来实现这个目的(如果我错了,请纠正我)。另外,我发现它在Ubuntu 11.10上编译起来超级困难。
OCR - 我还没有尝试这个,在我开始研究之前,如果有人能给我一些建议该关注什么,我会非常感激。
我在寻找一个C(最好)/C++的解决方案,Python也是一个选项。
1 个回答
1
如果你找不到其他更好的解决办法,我之前用过的一种方法是把源图像转换成PPM格式,然后在Ubuntu系统中使用unpaper工具。你可以根据你指定的边缘来调整图像的倾斜度,特别是那些边缘清晰的地方。此外,还有一个选项可以跳过通常会应用于黑白文本的过滤器。对于图像来说,你可能不需要那些过滤器。
下面是一个例子,适用于倾斜角度不超过15度的图像,使用底边和右边来检测旋转:
unpaper -n -dn bottom,right -dr 15 input.ppm output.ppm
unpaper
这个工具是用C语言写的,如果源代码对你有帮助的话。