使用 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的免費試用版,允許使用者在做出購買決定前測試其功能和能力。

