使用 IronOCR 在 C# 中擷取護照資料
IronOCR 的 ReadPassport 方法能透過單行 C# 程式碼,從護照影像中擷取結構化資料,包括姓名、護照號碼、出生日期及有效期限,使其成為移民及安全應用的理想選擇。
在機場的報到櫃檯及出入境安檢等應用與系統中,工作人員每日需處理大量護照,因此擁有能精準擷取關鍵旅客資訊的可靠系統,對於確保出入境流程高效順暢至關重要。 IronOCR程式庫提供先進的 OCR 功能,專為護照讀取進行優化,底層採用 Tesseract 5 並結合機器學習增強技術。
快速入門:一行指令提取護照 MRZ 資訊
此範例展示如何使用 OcrInput 載入護照影像,運用 ReadPassport() 提取資料,並從回傳的 PassportInfo 中存取姓名、號碼及日期等結構化欄位。 無需複雜設定——僅需一行簡單的代碼。與傳統的 Tesseract 實作不同,IronOCR 提供專為文件擷取設計的簡化 API。
簡化工作流程(5 個步驟)
- 下載 C# 函式庫以讀取護照
- 匯入護照照片以供讀取
- 請確保文件僅包含護照照片,不含頁首或頁尾
- 請使用
ReadPassport方法從圖片中提取資料 - 透過存取 OcrPassportResult 屬性,即可檢視並進一步處理已擷取的護照資料
如何在 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
ReadPassport 能提供哪些輸出結果?
擷取的資料將以結構化格式回傳,便於與現有系統整合。 OcrResult 類別可提供對所有擷取資訊的全面存取。
接著,我們存取從 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.Female或Gender.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 結構有助於排除資料擷取問題並驗證結果。
第一行
| 職位 | 領域 | 描述 |
|---|---|---|
| 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 物件的 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)

護照掃描應用程式的最佳實務
在生產環境中實作護照掃描功能時,請考慮以下額外因素:
常見問題
如何使用 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 的免費試用版,讓使用者能在決定購買前測試其功能與效能。

