使用 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 始終位於文件底部;否則,處理將失敗。 @@--括號關閉--@@

護照輸入

範例影像

程式碼

: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屬性包含從護照影像中提取的原始、未解析的文字。 開發人員可以在單元測試中使用此方法來驗證從護照圖像中提取的文字。

常見問題解答

如何使用 C# 中的 OCR 提取護照數據?

您可以使用 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 對象中,每個成員表示為一個字符串,以便於訪問和操作。

'Text' 屬性在 OcrPassportResult 對象中的用途是什麼?

'Text' 屬性允許您訪問和驗證從護照提取的文本,確保信息準確和完整。

如果護照圖像中包含標題或頁腳,我該怎麼辦?

確保護照圖像沒有標題或頁腳,因為這些可能會干擾數據提取過程的準確性。

使用 IronOCR 進行護照操作的常見故障排除提示是什麼?

確認已安裝正確的包,確保圖像清晰並正確剪裁,檢查架構兼容性 (x64) 以獲得最佳性能。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。

審核人
Jeff Fritz
Jeffrey T. Fritz
首席程序经理 - .NET 社区团队
Jeff 也是 .NET 和 Visual Studio 团队的首席程序经理。他是 .NET Conf 虚拟会议系列的执行制作人,并主持“Fritz 和朋友”这一每周两次的开发者的直播节目,在节目上讨论技术并与观众一起编写代码。Jeff 撰写研讨会、主持演讲,并计划大型 Microsoft 开发者活动(包括 Microsoft Build、Microsoft Ignite、.NET Conf 和 Microsoft MVP Summit)的内容。
準備好開始了嗎?
Nuget 下載 5,167,857 | Version: 2025.11 剛發表