使用 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`对象,其中包含`GivenNames` 、 `Country` 、 `PassportNumber` 、 `Surname` 、 `DateOfBirth`和`DateOfExpiry`等属性。 `PassportInfo`对象的所有成员均为字符串。 `ReadPassport` 方法是 IronOCR 专业文档阅读功能的一部分,该功能还包括用于[读取车牌](https://ironsoftware.com/csharp/ocr/how-to/read-license-plate/)、[MICR 支票](https://ironsoftware.com/csharp/ocr/how-to/read-micr-cheque/)和其他结构化文档的方法。 该方法使用先进的[计算机视觉技术](https://ironsoftware.com/csharp/ocr/how-to/computer-vision/)来自动定位和提取 MRZ(机器可读区域)区域。 [{i:( - 该方法目前仅适用于基于英语的护照。 - 在 .NET Framework 上使用高级扫描功能需要项目在 x64 架构上运行。 - Mac 用户请注意, `ReadPassport`方法目前不会自动旋转输入内容。 使用输入时,请确保 MRZ 始终位于文件底部;否则,处理将失败。 @@--bracket-close--@@@

我应该使用哪种护照图片格式? IronOCR 支持各种 [图像格式](https://ironsoftware.com/csharp/ocr/how-to/input-images/),包括 JPG、PNG、TIFF 和 BMP。为获得最佳效果,请确保您的护照图像具有足够的分辨率(至少 300 DPI)和适当的光照。 如果扫描质量较低,可以调整 [DPI 设置](https://ironsoftware.com/csharp/ocr/how-to/dpi-setting/)。
美国护照数据页示例,显示传记字段、日期和用于数据提取演示的机器可读区域

提取护照数据需要哪些代码? 下面的示例演示了提取护照数据的完整过程。 对于处理多本护照的应用程序,请考虑实施[多线程支持](https://ironsoftware.com/csharp/ocr/how-to/async/)以提高性能。 您还可以跟踪[OCR进度](https://ironsoftware.com/csharp/ocr/how-to/progress-tracking/),以了解长期运行的操作。 ```csharp :path=/static-assets/ocr/content-code-examples/how-to/read-passport-read-passport.cs ```

ReadPassport 可以提供哪些输出? 提取的数据将以结构化格式返回,以便于与现有系统集成。 [OcrResult 类](https://ironsoftware.com/csharp/ocr/examples/results-objects/)提供了对所有提取信息的全面访问。
调试控制台,显示从 OCR 处理中提取的护照数据:姓名、国家、护照号码和日期
然后我们访问从`OcrPassportResult`对象获得的`PassportInfo`数据成员。 提取过程可自动处理各种护照布局和格式,在不同的签发国家提供一致的结果。 - `GivenNames` : `PassportInfo`的一个属性,以字符串形式返回护照输入的姓名。 这相当于 MRZ 数据行的第一行,位置 4 至 44。 - `Country` : `PassportInfo`的一个属性,以字符串形式返回护照输入的国家/地区。 这相当于 MRZ 数据行的第一行,位置 2 至 3。 返回的字符串拼出了发行国的全名,而不是缩写。 在我们的例子中,USA 返回 "美利坚合众国"。 - `PassportNumber` : `PassportInfo`的一个属性,以字符串形式返回护照输入的护照号码。 这相当于 MRZ 数据行的第二行,位置 1 至 9。 - `Surname` : `PassportInfo`的一个属性,以字符串形式返回护照输入的姓氏。 这相当于 MRZ 数据行的第一行,位置 4 至 44。 - `DateOfBirth` : `PassportInfo`的一个属性,以 YYYY-MM-DD 格式的字符串返回护照输入的出生日期。 这相当于 MRZ 数据行的第二行,位置 14 至 19。 - `DateOfExpiry` : `PassportInfo`的一个属性成员,以 YYYY-MM-DD 格式的字符串返回护照输入的到期日期。 这相当于 MRZ 数据行的第二行,位置 22 至 27。

我可以从护照中提取哪些 MRZ 信息? IronOCR 可读取任何遵循(国际民用航空组织)[ICAO](https://www.icao.int/)标准的护照底部两行中包含的 MRZ 信息。 MRZ 数据由两行数据组成,每组位置包含唯一的信息。 下面的简表显示了哪些信息与该行的索引相对应。 IronOCR 中的 MRZ 解析功能旨在处理打印质量和[图像方向](https://ironsoftware.com/csharp/ocr/how-to/image-orientation-correction/)的变化。 对于具有挑战性的文档,您可以应用[图像校正过滤器](https://ironsoftware.com/csharp/ocr/how-to/image-quality-correction/)来提高识别准确性。

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`对象的`Confidence`和`Text`属性。 出于调试目的,您可能需要[高亮显示文本区域](https://ironsoftware.com/csharp/ocr/how-to/highlight-texts-as-images/),以便直观地验证哪些区域已被识别。 该功能在排除提取问题或优化扫描区域时特别有用。 ```csharp :path=/static-assets/ocr/content-code-examples/how-to/read-passport-debug.cs ``` ![VS 代码调试控制台显示护照数据输出,包括个人详细信息、国家和编码字符串](/static-assets/ocr/how-to/read-passport/debug.webp)。 - `Confidence` : `OcrPassportResult`的`Confidence`属性是一个浮点数,表示 OCR 统计准确度置信度,即每个字符的平均值。 如果护照图像模糊或包含其他信息,该浮动值会降低。 1 表示信心最高,0 表示信心最低。 对于生产应用程序,请考虑实施 [ 结果置信度](https://ironsoftware.com/csharp/ocr/how-to/tesseract-result-confidence/)阈值,以确保数据质量。 - `Text` : `OcrPassportResult`的`Text`属性包含从护照图像中提取的原始、未解析的文本。 开发人员可将其用于单元测试,以验证提取的护照图像文本。 对于高级场景,您可以将结果导出为 [hOCR 格式](https://ironsoftware.com/csharp/ocr/how-to/html-hocr-export/),以便进一步分析。 ## 护照扫描应用程序的最佳实践 在生产环境中实施护照扫描时,还应考虑以下因素: 1.**图像质量**:确保输入图像符合最低质量标准。 [Filter Wizard](https://ironsoftware.com/csharp/ocr/how-to/filter-wizard/) 可帮助优化图像以提高识别率。 2.**性能**:对于大批量处理,请实施 [async 支持](https://ironsoftware.com/csharp/ocr/how-to/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,246,844 | 版本: 2025.12 刚刚发布