使用 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. using 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 物件,其中包含 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
$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校驗位(複合型)總校驗位

如何除錯並驗證 Passport 擷取結果?

我們亦可透過取得護照影像中原始擷取的文字及信心水準,來驗證 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

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

  • Confidence:來自 ConfidenceOcrPassportResult 屬性是一個浮點數,表示 OCR 統計準確度的置信度,此數值為每個字元的平均值。 若護照照片模糊或包含其他資訊,此浮動值會較低。 1 代表最高且最具信心,0 則代表最低且最缺乏信心。 針對生產環境的應用程式,建議實施結果可信度閾值以確保資料品質。
  • Text:來自 TextOcrPassportResult 屬性,包含從護照影像中擷取的原始、未解析文字。 開發人員可在單元測試中使用此功能,以驗證護照影像中擷取的文字。 針對進階情境,您可以將結果匯出為 hOCR 格式以供進一步分析。

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

在生產環境中實作護照掃描功能時,請考慮以下額外因素:

  1. 影像品質:確保輸入影像符合最低品質標準。 "濾鏡精靈"可協助優化圖片,以提升辨識效果。

  2. 效能:針對大量處理需求,應實作非同步支援,並考慮批次處理多份護照。

  3. 安全性:由於護照資料屬敏感資訊,請確保資料處理得當,並考慮與安全的文件管理系統整合。

  4. 驗證:對擷取的 MRZ 資料實施校驗位驗證,以確保準確性。 MRZ 格式包含多個校驗位數,可用於驗證所提取資訊的完整性。

  5. 錯誤處理:針對護照影像可能受損、光線不足或格式不標準的情況,實作穩健的錯誤處理機制。

常見問題

如何使用 C# 從圖片中擷取護照資料?

您可以使用 IronOCR 的 ReadPassport 方法擷取護照資料。只需透過 OcrInput 載入護照影像,並呼叫 ReadPassport(),即可透過單行程式碼取得包含姓名、護照號碼、出生日期及有效期限等結構化資料。

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

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

讀取護照 MRZ 資料需要複雜的設定嗎?

無需複雜的設定。IronOCR 提供簡化的 API,僅需一行程式碼即可擷取護照 MRZ 資料,有別於需要更多設定的傳統 Tesseract 實作。

護照讀取功能採用何種技術?

IronOCR 內建 Tesseract 5 引擎,並結合機器學習增強功能與先進的電腦視覺技術,可自動定位並從護照影像中擷取 MRZ(機器可讀區)區域。

這是否可用於機場出入境系統?

是的,IronOCR 非常適合用於機場的出入境及安檢應用場景,這些場合中工作人員每天需處理大量護照。它能可靠地擷取關鍵的旅客資訊,以確保出入境流程的效率。

IronOCR 是否支援多種語言?

IronOCR 支援多種語言,使其成為適用於需要識別不同語言文字的全球應用程式的多功能工具。

IronOCR 能否整合至現有應用程式中?

IronOCR 設計上可輕鬆透過 C# 整合至現有應用程式中,讓開發人員能以最少的努力,為其軟體增添 OCR 功能。

使用 IronOCR 進行文件管理有哪些好處?

使用 IronOCR 進行文件管理,可將掃描文件轉換為可搜尋且可編輯的文字,從而簡化工作流程,減少人工資料輸入的需求,並提升文件的可存取性。

IronOCR 如何提升資料準確性?

IronOCR 透過其先進的辨識演算法與影像校正功能來提升資料準確性,確保文字擷取過程既可靠又精確。

IronOCR 是否有提供免費試用版?

是的,Iron Software 提供 IronOCR 的免費試用版,讓使用者能在決定購買前測試其功能與效能。

Curtis Chau
技術撰稿人

Curtis Chau 擁有卡爾頓大學(Carleton University)的電腦科學學士學位,專精於前端開發,並精通 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 Summit 等微軟最大規模的開發者活動規劃內容。
準備開始了嗎?
Nuget 下載 5,896,332 | 版本: 2026.5 just released
Still Scrolling Icon

還在往下捲動嗎?

想要快速確認成果嗎? PM > Install-Package IronOcr
執行範例 觀看您的圖片轉為可搜尋文字。