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

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

在机场柜台值机和安检等应用和系统中,工作人员每天都要处理大量的护照,因此拥有一个能够准确提取旅客关键信息且可靠的系统,对于确保高效、简化的入境流程至关重要。

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

几秒钟内即可开始读取护照:此示例展示了使用OcrInput加载护照图像、使用ReadPassport()提取数据以及从返回的PassportInfo中访问姓名、号码和日期等结构化字段是多么容易。 无需复杂的设置——只需一根简单的管线。

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

提取护照数据示例

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

[{i:(

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

护照输入

图片样本

代码

: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

输出

结果输出

然后我们访问从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 数据由两行数据组成,每行数据包含一组位置信息。 下表简要说明了哪些信息与行的索引相对应。

示例输入

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

控制台输出

  • ConfidenceOcrPassportResultConfidence属性是一个浮点数,表示 OCR 统计准确度置信度,即每个字符的平均值。 如果护照照片模糊或包含其他信息,则浮动值会更低。 1 代表最高且最有信心,0 代表最低且最没有信心。
  • TextOcrPassportResultText属性包含从护照图像中提取的原始、未解析的文本。 开发人员可以在单元测试中使用此方法来验证从护照图像中提取的文本。

常见问题解答

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

您可以使用IronOCR的ReadPassport方法在C#中提取护照数据。首先,安装IronOCR库和IronOcr.Extension.AdvancedScan包。导入护照图像,然后调用ReadPassport来检索数据。

使用IronOCR可以从护照中提取哪些信息?

IronOCR可以从护照中提取姓名、国家、护照号码、姓氏、出生日期和到期日等详细信息。

护照上的机器可读区(MRZ)是什么?

MRZ位于护照底部的两行,包含重要数据。IronOCR读取此区域以按照ICAO标准提取信息。

使用IronOCR的ReadPassport方法的要求是什么?

您需要安装IronOcr.Extension.AdvancedScan包,并确保您的项目在x64架构上运行以进行高级扫描。

IronOCR可以用来验证提取的护照数据的准确性吗?

可以,您可以使用OcrPassportResult对象的Confidence属性来验证提取数据的准确性,数值接近1表示高度可信。

IronOCR支持哪些语言的护照数据提取?

目前,IronOCR支持基于英语的护照进行数据提取。

IronOCR如何处理从护照中提取的文本?

提取的数据存储在OcrPassportResult对象中,每个成员表示为字符串以便于访问和操作。

OcrPassportResult对象中的'Text'属性有哪些用途?

‘Text’属性允许您访问和验证提取的护照文本,确保信息准确完整。

如果护照图像包含页眉或页脚,我该怎么办?

在使用IronOCR之前,确保护照图像没有页眉或页脚,因为这些可能影响数据提取过程的准确性。

使用IronOCR处理护照时常见的故障排除提示是什么?

确保安装了正确的包,确保图像清晰并正确裁剪,检查架构兼容性(x64)以获得最佳性能。

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,167,857 | Version: 2025.11 刚刚发布