使用 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。

  1. 使用NuGet套件管理器安裝https://www.nuget.org/packages/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 物件,其中包含 國籍Code, IssuingCountryCode, PersonalNumber, 以及 DateOfIssue

ReadPassport 方法是 IronOCR 專業文件讀取功能的一部分,該功能還包含用於讀取車牌MICR 支票及其他結構化文件的方法。 此方法使用先進的 電腦視覺技術來自動定位並擷取 MRZ (Machine Readable Zone) 區域。

請注意

  • 此方法目前僅適用於英文版護照。
  • 在 .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
$vbLabelText   $csharpLabel

我可以期待 ReadPassport 帶來哪些輸出?

擷取的資料會以結構化的格式傳回,方便與現有系統整合。 OcrResult 類別提供對所有萃取資訊的全面存取。

調試控制台顯示從 OCR 處理中擷取的護照資料:姓名、國家、護照號碼和日期

接著,我們存取從 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.FemaleGender.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 結構有助於排除萃取問題和驗證結果。

機器可讀區 (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 屬性。

為了除錯的目的,您可能想要高亮顯示文字區域來直觀地驗證哪些區域被辨識出來。 此功能在排除抽取問題或最佳化掃描區域時尤其有用。

: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

VS Code 除錯主控台顯示包含個人資料、國家及編碼字串的 Passport 資料輸出

  • Confidence:來自 ConfidenceOcrPassportResult 屬性是一個浮點數,表示 OCR 統計準確度的置信度,此數值為每個字元的平均值。 如果護照影像模糊或包含其他資訊,則此浮動值較低。 1 代表最高和最有信心,0 代表最低和最沒信心。 對於生產應用程式,請考慮實施 結果置信度臨界值,以確保資料品質。
  • Text:來自 TextOcrPassportResult 屬性,包含從護照影像中擷取的原始、未解析文字。 開發人員可在單元測試中使用,以驗證擷取的護照影像文字。 針對進階方案,您可以 hOCR 格式匯出結果,以便進一步分析。

護照掃描應用程式的最佳實務

在生產環境中實施護照掃描時,請考慮這些額外因素:

1.影像品質:確保輸入的影像符合最低品質標準。 Filter Wizard 可協助最佳化影像,以獲得更好的辨識度。

2.效能:若要進行大量處理,請執行 async 支援,並考慮批次處理多本護照。

3.安全性: 由於護照資料相當敏感,因此必須確保資料處理得宜,並考慮與安全的文件管理系統整合。

4.驗證:針對擷取的 MRZ 資料執行校驗位元驗證,以確保準確性。 MRZ 格式包含多個校驗碼,可用於驗證擷取資訊的完整性。

5.錯誤處理:針對護照影像可能受損、光線不足或包含非標準格式的情況,實施健全的錯誤處理。

常見問題解答

如何使用 C# 從影像中萃取護照資料?

您可以使用 IronOCR 的 ReadPassport 方法提取護照資料。只需使用 OcrInput 載入您的護照影像,並呼叫 ReadPassport() 即可在一行程式碼中取得結構化資料,包括姓名、護照號碼、出生日期和有效日期。

哪些護照資訊可以自動擷取?

IronOCR 的 ReadPassport 方法可從護照影像中抽取 GivenNames、Country、PassportNumber、Surname、DateOfBirth 和 DateOfExpiry。所有資料都會以字串的形式傳回結構化的 PassportInfo 物件中。

我需要複雜的設定才能讀取 passport MRZ 資料嗎?

不需要複雜的設定。IronOCR 提供簡化的 API,只需一行程式碼即可擷取通行證 MRZ 資料,不像傳統的 Tesseract 實作需要更多的設定。

護照閱讀能力由哪些技術提供?

IronOCR 在引擎蓋下利用 Tesseract 5,搭配機器學習增強功能和先進的電腦視覺技術,可自動定位並擷取護照影像中的 MRZ(機器可讀區)區域。

這可以用於機場出入境系統嗎?

是的,IronOCR 是機場移民和安全應用的理想選擇,在機場,代理每天都要處理大量的護照。它提供可靠的關鍵任務旅客資訊擷取,以確保有效率的移民流程。

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,570,591 | 版本: 2026.4 剛剛發布
Still Scrolling Icon

還在捲動嗎?

想要快速證明? PM > Install-Package IronOcr
執行範例 觀看您的圖片變成可搜尋的文字。