使用 IronOCR 在 C# 中提取护照数据
IronOCR 的 ReadPassport 方法仅需一行 C# 代码,即可从护照图像中提取姓名、护照号码、出生日期和有效期等结构化数据,非常适合用于移民和安全应用。
在机场值机柜台和安检等应用和系统中,工作人员每天都要处理大量护照,因此拥有一个能够准确提取关键旅客信息的可靠系统对于确保高效、简化的出入境流程至关重要。 IronOCR 库提供先进的 OCR 功能,专门针对护照读取进行了优化,其底层采用Tesseract 5 ,并结合了机器学习增强技术。
快速入门:一行代码提取护照 MRZ 信息
此示例演示了如何使用 OcrInput 加载护照图像,使用 ReadPassport() 提取数据,并从返回的 PassportInfo 中访问姓名、号码和日期等结构化字段。 无需复杂的设置,只需一行简单明了的文字。与传统的 Tesseract 实现不同,IronOCR 提供了专门用于文档提取的简化 API。
最小工作流程(5 个步骤)
- 下载一个用于读取护照的 C# 库。
- 导入护照图像进行读取
- 确保文件仅包含护照图像,没有页眉或页脚
- 使用
ReadPassport方法从图像中提取数据 - 访问OcrPassportResult属性以查看和进一步操作提取的护照数据
如何在 C# 中提取护照数据?
例如,我们将使用护照图像作为输入来展示 IronOCR 的功能。 使用 OcrInput 加载图像后,您可以利用 ReadPassport 方法识别护照并从中提取信息。 此方法返回一个 OcrPassportResult 对象,其中包含 国籍Code, IssuingCountryCode, PersonalNumber, 以及 DateOfIssue。
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);
Console.WriteLine(result.PassportInfo.Gender);
Console.WriteLine(result.PassportInfo.DocumentType);
Console.WriteLine(result.PassportInfo.Nationality);
Console.WriteLine(result.PassportInfo.NationalityCode);
Console.WriteLine(result.PassportInfo.IssuingCountryCode);
Console.WriteLine(result.PassportInfo.PersonalNumber);
Console.WriteLine(result.PassportInfo.DateOfIssue);
Imports IronOcr
Imports System
' Instantiate OCR engine
Dim ocr As New IronTesseract()
Using inputPassport As 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)
Console.WriteLine(result.PassportInfo.Gender)
Console.WriteLine(result.PassportInfo.DocumentType)
Console.WriteLine(result.PassportInfo.Nationality)
Console.WriteLine(result.PassportInfo.NationalityCode)
Console.WriteLine(result.PassportInfo.IssuingCountryCode)
Console.WriteLine(result.PassportInfo.PersonalNumber)
Console.WriteLine(result.PassportInfo.DateOfIssue)
End Using
ReadPassport 可以提供哪些输出?
提取的数据将以结构化格式返回,以便于与现有系统集成。 OcrResult 类提供了对所有提取信息的全面访问。
随后,我们访问从 OcrPassportResult 对象获取的 PassportInfo 数据成员。 提取过程可自动处理各种护照布局和格式,在不同的签发国家提供一致的结果。
PassportInfo的一个属性,返回护照输入中给定的名字作为字符串。 这相当于 MRZ 数据行的第一行,位置 4 至 44。PassportInfo的一个属性,返回护照输入的国别(字符串类型)。 这相当于 MRZ 数据行的第一行,位置 2 至 3。 返回的字符串拼出了发行国的全名,而不是缩写。 在我们的例子中,USA 返回 "美利坚合众国"。PassportInfo的一个属性,返回护照输入的护照号码(字符串形式)。 这相当于 MRZ 数据行的第二行,位置 1 至 9。PassportInfo的一个属性,返回护照输入字段中的姓氏作为字符串。 这相当于 MRZ 数据行的第一行,位置 4 至 44。PassportInfo的一个属性,返回护照输入的出生日期,格式为 YYYY-MM-DD 的字符串。 这相当于 MRZ 数据行的第二行,位置 14 至 19。PassportInfo的一个属性成员,返回护照输入的到期日期,格式为 YYYY-MM-DD 的字符串。 这相当于 MRZ 数据行的第二行,位置 22 至 27。Gender:将 MRZ 第 21 位的信息作为Gender.Female或Gender.Unspecified返回。DocumentType:返回 MRZ 第 1-2 位所对应的证件类型,例如"P"代表护照、"PS"代表公务证件或"PD"代表外交证件。国籍:返回根据 MRZ 第 11-13 位生成的完整英文国家名称。国籍Code:返回来自 MRZ 第 11-13 位的原始 ISO 3166-1 alpha-3 代码。IssuingCountryCode:返回签发国在 MRZ 第 3-5 位处的原始 ISO 3166-1 alpha-3 代码。PersonalNumber:从 MRZ 的第 29 至 42 位返回可选的国民身份证号码。DateOfIssue:通过跨27种语言的尽最大努力标签匹配,返回从视觉检查区(VIZ)中提取的签发日期。
我可以从护照中提取哪些 MRZ 信息?
IronOCR 可读取任何遵循(国际民用航空组织)ICAO标准的护照底部两行中包含的 MRZ 信息。 MRZ 数据由两行数据组成,每组位置包含唯一的信息。 下面的简表显示了哪些信息与该行的索引相对应。
IronOCR 中的 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 的结果,从而确认提取的信息是否准确。 以上述示例为例,我们可以访问 Confidence 对象的 Text 和 OcrPassportResult 属性。
出于调试目的,您可能需要高亮显示文本区域,以便直观地验证哪些区域已被识别。 该功能在排除提取问题或优化扫描区域时特别有用。
: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)

护照扫描应用程序的最佳实践
在生产环境中实施护照扫描时,还应考虑以下因素:
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 是机场移民和安全应用的理想选择,在这些应用中,工作人员每天都要处理大量的护照。它能可靠地提取对任务至关重要的旅客信息,确保高效的出入境流程。

