使用 IronOCR 在 C# 中提取护照数据
IronOCR 的 ReadPassport 方法只需一行 C# 代码即可从护照图像中提取结构化数据,包括姓名、护照号码、出生日期和有效期,因此非常适合移民和安全应用。
在机场值机柜台和安检等应用和系统中,工作人员每天都要处理大量护照,因此拥有一个能够准确提取关键旅客信息的可靠系统对于确保高效、简化的出入境流程至关重要。 IronOCR 库提供了高级 OCR 功能,专门针对护照阅读进行了优化,利用了Tesseract 5引擎盖下的机器学习增强功能。
快速入门:一行提取护照 MRZ 信息
本示例展示了如何使用 OcrInput 加载护照图像,使用 ReadPassport() 提取数据,并从返回的 PassportInfo 中访问姓名、编号和日期等结构化字段。 无需复杂的设置,只需一行简单明了的文字。与传统的 Tesseract 实现不同,IronOCR 提供了专门用于文档提取的简化 API。
立即开始使用 NuGet 创建 PDF 文件:
使用 NuGet 包管理器安装 IronOCR
复制并运行这段代码。
var passportInfo = new IronOcr.IronTesseract().ReadPassport(new IronOcr.OcrInput("passport.jpg")).PassportInfo;部署到您的生产环境中进行测试
最小工作流程(5 个步骤)
- 下载一个用于读取护照的 C# 库。
- 导入护照图像进行读取
- 确保文件仅包含护照图像,没有页眉或页脚
- 使用
ReadPassport方法从图像中提取数据 - 访问OcrPassportResult属性以查看和进一步操作提取的护照数据
如何在 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/)提供了对所有提取信息的全面访问。
然后我们访问从`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 结构有助于排除提取问题和验证结果。
第一排

提取护照数据需要哪些代码? 下面的示例演示了提取护照数据的完整过程。 对于处理多本护照的应用程序,请考虑实施[多线程支持](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/)提供了对所有提取信息的全面访问。
然后我们访问从`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 信息? 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 结构有助于排除提取问题和验证结果。
第一排

| 职位 | 字段 | 说明 |
|---|---|---|
| 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 ``` 。 - `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 是机场移民和安全应用的理想选择,在这些应用中,工作人员每天都要处理大量的护照。它能可靠地提取对任务至关重要的旅客信息,确保高效的出入境流程。







