提取扫描文档的一部分(个人ID) – 选择哪个库和方法?

我必须处理大量扫描的ID,我需要从中提取照片以便进一步处理。 这是一个虚构的例子:

在此处输入图像描述

问题是扫描没有完全对齐(旋转到10度)。 所以我需要找到他们的位置,旋转它们并剪下照片。 事实certificate这比我原先想象的要困难得多。

  • 我检查了OpenCV,我发现的唯一的东西是矩形检测,但它没有给我很好的结果:矩形在样本上并不总是匹配得足够好。 此外,它的图像匹配算法仅适用于非旋转图像,因为它只是一种powershell比较。

  • 所以我虽然使用ARToolkit(增强现实库),因为我知道它能够非常精确地在图像上找到给定的标记。 但似乎标记必须非常简单,所以我不能为此目的使用文档的常量部分(如果我错了请纠正我)。 另外,我发现在Ubuntu 11.10上编译它非常困难。

  • OCR – 还没有尝试过这个,在我开始研究之前,我会感谢任何建议寻找什么。

我寻找C(优选)/ C ++解决方案。 Python也是一个选项。

如果你没有找到另一种理想的解决方案,我过去用于OCR预处理的一种方法是将源图像转换为PPM并在Ubuntu中使用unpaper 。 您可以尝试根据您指定的具有明确定义边缘的任何边来校正图像,并且可以选择绕过通常应用于黑白文本的滤镜。 你可能不希望那些用于图像。

图像偏斜不超过15度的示例,使用底边和右边检测旋转:

unpaper -n -dn bottom,right -dr 15 input.ppm output.ppm 

unpaper是用C语言写的,如果来源对你有任何帮助。