使用 IronOCR 在 C# 中提取护照数据

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronOCR 的 ReadPassport 方法只需一行 C# 代码即可从护照图像中提取结构化数据,包括姓名、护照号码、出生日期和有效期,因此非常适合移民和安全应用。

在机场值机柜台和安检等应用和系统中,工作人员每天都要处理大量护照,因此拥有一个能够准确提取关键旅客信息的可靠系统对于确保高效、简化的出入境流程至关重要。 IronOCR 库提供先进的 OCR 功能,专门针对护照读取进行了优化,其底层采用Tesseract 5 ,并结合了机器学习增强技术。

快速入门:一行提取护照 MRZ 信息

本示例展示了如何使用 OcrInput 加载护照图像,使用 ReadPassport() 提取数据,并从返回的 PassportInfo 中访问姓名、编号和日期等结构化字段。 无需复杂的设置,只需一行简单明了的文字。与传统的 Tesseract 实现不同,IronOCR 提供了专门用于文档提取的简化 API。

Nuget Icon立即开始使用 NuGet 创建 PDF 文件:

  1. 使用 NuGet 包管理器安装 IronOCR

    PM > Install-Package IronOcr

  2. 复制并运行这段代码。

    var passportInfo = new IronOcr.IronTesseract().ReadPassport(new IronOcr.OcrInput("passport.jpg")).PassportInfo;
  3. 部署到您的生产环境中进行测试

    立即开始在您的项目中使用 IronOCR,免费试用!
    arrow pointer

如何在 C# 中提取护照数据?

例如,我们将使用护照图像作为输入来展示 IronOCR 的功能。 使用OcrInput加载图像后,您可以利用ReadPassport方法识别和提取护照信息。 此方法返回一个OcrPassportResult对象,其中包含GivenNamesCountryPassportNumberSurnameDateOfBirthDateOfExpiry等属性。 PassportInfo对象的所有成员均为字符串。

ReadPassport 方法是 IronOCR 专业文档阅读功能的一部分,该功能还包括用于读取车牌MICR 支票和其他结构化文档的方法。 该方法使用先进的计算机视觉技术来自动定位和提取 MRZ(机器可读区域)区域。

请注意

  • 该方法目前仅适用于基于英语的护照。
  • 在 .NET Framework 上使用高级扫描功能需要项目在 x64 架构上运行。
  • Mac 用户请注意, ReadPassport方法目前不会自动旋转输入内容。 使用输入时,请确保 MRZ 始终位于文件底部;否则,处理将失败。

我应该使用哪种护照图片格式?

IronOCR 支持各种 图像格式,包括 JPG、PNG、TIFF 和 BMP。为获得最佳效果,请确保您的护照图像具有足够的分辨率(至少 300 DPI)和适当的光照。 如果扫描质量较低,可以调整 DPI 设置

美国护照数据页示例,显示传记字段、日期和用于数据提取演示的机器可读区域

提取护照数据需要哪些代码?

下面的示例演示了提取护照数据的完整过程。 对于处理多本护照的应用程序,请考虑实施多线程支持以提高性能。 您还可以跟踪OCR进度,以了解长期运行的操作。

:path=/static-assets/ocr/content-code-examples/how-to/read-passport-read-passport.cs
using IronOcr;
using System;

// Instantiate OCR engine
var ocr = new IronTesseract();

using var inputPassport = new OcrInput();

inputPassport.LoadImage("passport.jpg");

// Perform OCR
OcrPassportResult result = ocr.ReadPassport(inputPassport);

// Output passport information
Console.WriteLine(result.PassportInfo.GivenNames);
Console.WriteLine(result.PassportInfo.Country);
Console.WriteLine(result.PassportInfo.PassportNumber);
Console.WriteLine(result.PassportInfo.Surname);
Console.WriteLine(result.PassportInfo.DateOfBirth);
Console.WriteLine(result.PassportInfo.DateOfExpiry);
Imports IronOcr
Imports System

' Instantiate OCR engine
Private ocr = New IronTesseract()

Private inputPassport = New OcrInput()

inputPassport.LoadImage("passport.jpg")

' Perform OCR
Dim result As OcrPassportResult = ocr.ReadPassport(inputPassport)

' Output passport information
Console.WriteLine(result.PassportInfo.GivenNames)
Console.WriteLine(result.PassportInfo.Country)
Console.WriteLine(result.PassportInfo.PassportNumber)
Console.WriteLine(result.PassportInfo.Surname)
Console.WriteLine(result.PassportInfo.DateOfBirth)
Console.WriteLine(result.PassportInfo.DateOfExpiry)
$vbLabelText   $csharpLabel

ReadPassport 可以提供哪些输出?

提取的数据将以结构化格式返回,以便于与现有系统集成。 OcrResult 类提供了对所有提取信息的全面访问。

调试控制台,显示从 OCR 处理中提取的护照数据:姓名、国家、护照号码和日期

然后我们访问从OcrPassportResult对象获得的PassportInfo数据成员。 提取过程可自动处理各种护照布局和格式,在不同的签发国家提供一致的结果。

  • GivenNamesPassportInfo的一个属性,以字符串形式返回护照输入的姓名。 这相当于 MRZ 数据行的第一行,位置 4 至 44。
  • CountryPassportInfo的一个属性,以字符串形式返回护照输入的国家/地区。 这相当于 MRZ 数据行的第一行,位置 2 至 3。 返回的字符串拼出了发行国的全名,而不是缩写。 在我们的例子中,USA 返回 "美利坚合众国"。
  • PassportNumberPassportInfo的一个属性,以字符串形式返回护照输入的护照号码。 这相当于 MRZ 数据行的第二行,位置 1 至 9。
  • SurnamePassportInfo的一个属性,以字符串形式返回护照输入的姓氏。 这相当于 MRZ 数据行的第一行,位置 4 至 44。
  • DateOfBirthPassportInfo的一个属性,以 YYYY-MM-DD 格式的字符串返回护照输入的出生日期。 这相当于 MRZ 数据行的第二行,位置 14 至 19。
  • DateOfExpiryPassportInfo的一个属性成员,以 YYYY-MM-DD 格式的字符串返回护照输入的到期日期。 这相当于 MRZ 数据行的第二行,位置 22 至 27。

我可以从护照中提取哪些 MRZ 信息?

IronOCR 可读取任何遵循(国际民用航空组织)ICAO标准的护照底部两行中包含的 MRZ 信息。 MRZ 数据由两行数据组成,每组位置包含唯一的信息。 下面的简表显示了哪些信息与该行的索引相对应。

IronOCR 中的 MRZ 解析功能旨在处理打印质量和图像方向的变化。 对于具有挑战性的文档,您可以应用图像校正过滤器来提高识别准确性。

MRZ 部分看起来像什么?

MRZ 通常位于护照页面的底部,由两行标准化文本组成。 了解 MRZ 结构有助于排除提取问题和验证结果。

美国护照页面,红框中突出显示机器可读区域 (MRZ),显示编码的字母数字数据行

第一排

职位 字段 说明
1文档类型通常"P"代表护照。
2-3签发国三字母国家代码(ISO 3166-1 alpha-3)
4-44姓氏和名字姓氏后跟"<<",名字后跟"<"分隔。

第二排

职位 字段 说明
1-9护照号码唯一护照号码
10校验位(护照号码)护照号码校验位
11-13国籍三字母国籍代码(ISO 3166-1 alpha-3)
14-19出生日期出生日期(YYMMDD格式)
20校验位(出生日期)出生日期校验位
21性别性别('M' 代表男性,'F' 代表女性,'X' 代表未指定)
22-27到期日期到期日期(YYMMDD 格式)
28校验位(到期日期)有效期校验位
29-42个人号码可选的个人号码(通常为国民身份证号码)
43校验位(个人号码)个人号码的校验位
44校验位(复合)总体校验位

如何调试和验证护照提取结果?

我们还可以通过获取从护照图像中提取的原始文本和置信度来验证 IronOCR 的结果,从而确认提取的信息是否准确。 以上述示例为例,我们可以访问OcrPassportResult对象的ConfidenceText属性。

出于调试目的,您可能需要高亮显示文本区域,以便直观地验证哪些区域已被识别。 该功能在排除提取问题或优化扫描区域时特别有用。

:path=/static-assets/ocr/content-code-examples/how-to/read-passport-debug.cs
using IronOcr;
using System;

// Instantiate OCR engine
var ocr = new IronTesseract();

using var inputPassport = new OcrInput();

inputPassport.LoadImage("passport.jpg");

// Perform OCR
OcrPassportResult result = ocr.ReadPassport(inputPassport);

// Output Confidence level and raw extracted text
Console.WriteLine(result.Confidence);
Console.WriteLine(result.Text);
Imports IronOcr
Imports System

' Instantiate OCR engine
Private ocr = New IronTesseract()

Private inputPassport = New OcrInput()

inputPassport.LoadImage("passport.jpg")

' Perform OCR
Dim result As OcrPassportResult = ocr.ReadPassport(inputPassport)

' Output Confidence level and raw extracted text
Console.WriteLine(result.Confidence)
Console.WriteLine(result.Text)
$vbLabelText   $csharpLabel

VS 代码调试控制台显示护照数据输出,包括个人详细信息、国家和编码字符串

  • ConfidenceOcrPassportResultConfidence属性是一个浮点数,表示 OCR 统计准确度置信度,即每个字符的平均值。 如果护照图像模糊或包含其他信息,该浮动值会降低。 1 表示信心最高,0 表示信心最低。 对于生产应用程序,请考虑实施 结果置信度阈值,以确保数据质量。
  • TextOcrPassportResultText属性包含从护照图像中提取的原始、未解析的文本。 开发人员可将其用于单元测试,以验证提取的护照图像文本。 对于高级场景,您可以将结果导出为 hOCR 格式,以便进一步分析。

护照扫描应用程序的最佳实践

在生产环境中实施护照扫描时,还应考虑以下因素:

1.图像质量:确保输入图像符合最低质量标准。 Filter Wizard 可帮助优化图像以提高识别率。

2.性能:对于大批量处理,请实施 async 支持,并考虑批量处理多本护照。

3.安全性:由于护照数据是敏感数据,因此要确保妥善处理数据,并考虑与安全的文档管理系统集成。

4.验证:对提取的 MRZ 数据实施校验码验证,以确保准确性。 MRZ 格式包含多个校验码,可用于验证提取信息的完整性。

5.错误处理:针对护照图像可能损坏、光线不足或包含非标准格式的情况,实施强大的错误处理功能。

常见问题解答

如何用 C# 从图像中提取护照数据?

您可以使用 IronOCR 的 ReadPassport 方法提取护照数据。只需使用 OcrInput 加载护照图像,然后调用 ReadPassport() 即可在一行代码中获取包括姓名、护照号码、出生日期和有效期在内的结构化数据。

哪些护照信息可以自动提取?

IronOCR 的 ReadPassport 方法可从护照图像中提取姓名、国家、护照号码、姓氏、出生日期和到期日期。所有数据都以字符串形式返回到结构化的 PassportInfo 对象中。

读取护照 MRZ 数据需要复杂的设置吗?

无需复杂设置。IronOCR 提供简化的 API,只需一行代码即可提取护照 MRZ 数据,不像传统的 Tesseract 实现需要更多的配置。

护照阅读功能由什么技术提供?

IronOCR 在引擎盖下利用 Tesseract 5 的机器学习增强功能和先进的计算机视觉技术,自动定位和提取护照图像中的 MRZ(机器可读区)区域。

能否用于机场出入境系统?

是的,IronOCR 是机场移民和安全应用的理想选择,在这些应用中,工作人员每天都要处理大量的护照。它能可靠地提取对任务至关重要的旅客信息,确保高效的出入境流程。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

审核者
Jeff Fritz
Jeffrey T. Fritz
首席项目经理 - .NET 社区团队
Jeff 也是 .NET 和 Visual Studio 团队的首席项目经理。他是 .NET Conf 虚拟会议系列的执行制片人,并主持“Fritz and Friends”直播节目,每周两次与观众一起谈论技术并编写代码。Jeff 撰写研讨会、演示文稿并计划包括 Microsoft Build、Microsoft Ignite、.NET Conf 和 Microsoft MVP 峰会在内的最大型微软开发者活动的内容。
准备开始了吗?
Nuget 下载 5,384,824 | 版本: 2026.2 刚刚发布