Skip to main content

通过 OCR 从护照、签证和身份证中提取机器可读的区域信息

项目描述

https://travis-ci.org/konstantint/PassportEye.svg?branch=master

该软件包提供了用于从扫描的身份证明文件中识别机器可读区域 (MRZ) 的工具。文档可能位于页面上的任意位置 - 代码试图找到任何类似于 MRZ 的东西并从那里解析它。

识别过程可能相当缓慢 - 某些文档大约需要 10 秒或更长时间。它的精度并不完美,但就开发人员可用的测试文档而言似乎还不错——在大约 80% 的情况下,只要页面上有清晰可见的 MRZ,系统就会识别它并将文本提取到底层 OCR 引擎(Google Tesseract)的最佳功能。

失败的例子似乎最常见的要么是明显扫描不良的文件,其中文本过于模糊,要么更严重的是,某些类型的 ID(罗马尼亚语就是一个例子),其中 MRZ 离卡的其余部分太近- 当前算法没有很好地解释的情况。

安装

安装包的最简单方法是通过pip

$ pip install PassportEye

请注意,PassportEye依赖于numpyscipymatplotlibscikit-image等。这些要求的安装虽然是自动的,但有时可能会因各种原因(例如缺少必要的库)而花费时间或失败。如果发生这种情况,请考虑从二进制包中显式安装依赖项,例如由 OS 发行版或“wheel”包提供的依赖项。另一个方便的选择是使用带有预打包numpy / scipy / matplotlib二进制文件的 Python 发行版(Anaconda Python 目前是一个不错的选择)。

此外,您必须安装Tesseract OCR并将其添加到系统路径中:必须可以在命令行中访问tesseract工具。请注意,最新版本的 Tesseract 默认情况下在某些安装(例如 Windows)中不包含其“旧版”模型。然而,根据我们的测试,旧模型在 MRZ 文本检测方面表现出稍好的性能,因此默认使用。如果默认没有安装相应的模型,你应该下载eng.traineddata文件 [这里]( https://github.com/tesseract-ocr/tessdata ) 并用它替换(较小的)eng.traineddata文件与您的安装。

PassportEye 需要 Python 3.6 或更高版本。

用法

安装时,该软件包会将独立工具mrz安装到您的 Python 脚本路径中。跑步:

$ mrz <filename>

将处理给定的文件名,提取找到的机读区信息并以表格形式打印出来。运行mrz --json <filename>将以 JSON 格式输出相同的信息。此外,运行mrz --save-roi <roi.png>会将检测到的 MRZ(“感兴趣区域”)提取到单独的 png 文件中以供进一步探索。请注意,该工具对 PDF 文件的支持有限——它会尝试从 PDF 中提取第一个 DCT 编码图像并对其应用识别。这似乎适用于大多数扫描仪生成的一页 PDF,但尚未经过广泛测试。

如果您的 Tesseract 安装安装了“旧版” *.traineddata模型(在其tessdata目录中),请考虑运行:

$ mrz --legacy <filename>

这将启用“旧版”识别器,尽管名称如此,但它似乎更适合机读区识别。如果您不知道是否有相关文件,只需尝试运行上面的命令,看看是否出现错误。

为了在 Python 代码中使用识别功能,只需执行以下操作:

>> from passporteye import read_mrz
>> mrz = read_mrz(image_file)

其中 image_file 可以是磁盘上文件的路径,也可以是包含图像数据的字节流。

返回的对象(除非它是 None,这意味着没有检测到 ROI)包含从 MRZ 中提取的字段以及一些元信息。有关可用字段的描述,请参阅passporteye.mrz.text.MRZ类的文档字符串。请注意,您可以使用to_dict()方法将对象转换为字典。

如果您想在 MRZ 旁边报告 ROI,请按如下方式调用read_mrz函数:

>> mrz = read_mrz(image_file, save_roi=True)

然后可以通过mrz.aux['roi']访问 ROI——它是一个 numpy ndarray,表示应用 OCR 的(灰度)图像区域。

最后,为了使用“遗留识别器”,将--oem 0额外命令行参数传递给 Tesseract,如下所示:

>> mrz = read_mrz(image_file, extra_cmdline_params='--oem 0')

为了获得更大的灵活性,您可以改用MRZPipeline对象,它可以让您访问所有中间计算,如下所示:

>> from passporteye.mrz.image import MRZPipeline
>> p = MRZPipeline(file, extra_cmdline_params='--oem 0')
>> mrz = p.result

“管道”对象将中间计算存储在其数据字典中。尽管您需要了解底层算法才能理解它,但有时它可能会提供富有洞察力的可视化。例如,此代码将绘制原始图像的二值化版本,该图像在算法中用于提取 ROI,以及与提取的 ROI 对应的框:

>> imshow(p['img_binary'])
>> for b in p['boxes']:
..     plot(b.points[:,1], b.points[:,0], c='b')
..     b.plot()

发展

如果您打算开发或调试软件包,请考虑通过运行以下命令来安装它:

$ pip install -e .[dev]

这将以“可编辑”模式安装包并添加一些有用的附加功能(例如pytest)。然后,您可以通过键入以下内容运行测试:

$ py.test

在源分发的根目录。

命令行脚本evaluate_mrz可用于评估当前识别管道在一组样本图像上的性能:如果您想查看代码更改的效果,这很有用。赶紧跑:

$ evaluate_mrz -j 4

(其中-j 4将请求并行使用 4 个内核)。相同的脚本可用于在给定的图像目录上运行识别管道,对成功和失败进行排序,有关选项,请参见evaluate_mrz -h

贡献

随意通过 Github 贡献或报告问题:https ://github.com/konstantint/PassportEye

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

PassportEye-2.2.0.tar.gz (28.2 kB 查看哈希

已上传 source