使用 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 物件,其中包含 國籍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
我可以期待 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 | 校驗位(複合) | 整體校驗位 |
如何調試和驗證護照擷取結果?
我們也可以從 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)

護照掃描應用程式的最佳實務
在生產環境中實施護照掃描時,請考慮這些額外因素:
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 是機場移民和安全應用的理想選擇,在機場,代理每天都要處理大量的護照。它提供可靠的關鍵任務旅客資訊擷取,以確保有效率的移民流程。

