跳過到頁腳內容
與其他組件的比較

MODI OCR C# 與 IronOCR:在 C# 中選擇適當的 OCR 光學字元辨識庫

Microsoft Office 文件影像 (MODI) 曾經是 MS Office 2003 和 2007 中捆綁的首選 OCR 元件,使開發人員能夠透過基於 COM 的物件模型直接從掃描影像中提取文字。 多年來,MODI.Document 類別為無數文件數位化專案提供了支持,在 Visual Studio 解決方案中將 TIFF 和 BMP 影像檔案轉換為機器可讀文字。

然而,MODI 的問題在於:微軟已將其從 Office 2010 及更高版本中移除,導致開發者必須依賴過時的 Office 版本或獨立安裝程式來維持其 OCR 功能。對於任何面向跨平台部署、雲端環境或最新 Windows 版本的現代 .NET 專案而言,MODI 都帶來了嚴重的阻礙。

本文從程式碼實作、功能、平台支援和授權等方面,探討了 OCR模式 C# 與 IronOCR(一個專用的 .NET 光學字元辨識庫)的比較情況。 無論是維護舊程式碼還是啟動新項目,這裡的詳細資訊都將有助於做出正確的選擇。

免費試用IronOCR30 天,並可參考以下程式碼範例。

對比結果一目了然?

類別 OCR模式 IronOCR
核心架構 COM 互通;需要 Microsoft Office 文件影像 DLL 引用 純 .NET 函式庫; Tesseract 5 引擎針對 C# 進行了最佳化
平台支援 僅限Windows系統; 需要電腦上安裝 Office 2003/2007。 Windows、Linux、macOS、Azure、Docker、iOS、Android
影像格式 TIFF、MDI、BMP TIFF、PNG、JPEG、BMP、GIF、PDF、多頁影像
語言支援 透過 miLANG 參數~22 種語言 透過 NuGet 語言套件支援 125 多種語言
OCR準確率 大量使用乾淨、標準字體的文檔 自動影像校正濾鏡的準確率超過 99.8%
輸出選項 來自佈局物件的純文字 純文字、可搜尋的 PDF、結構化資料(頁碼、行數、單字數、條碼)
安裝 Office 安裝程式 + 解決方案資源管理器中的 COM 參考 NuGet 套件:Install-Package IronOcr
主動開發 Office 2007 之後已停用 積極維護,定期更新
授權 需要符合資格的 Microsoft Office 許可證 永久授權價格從 $749 起; 免費試用 30 天
支援 僅限社群論壇 透過電子郵件、線上聊天和電話提供直接的工程支持

How Does Microsoft Office Document Imaging Perform OCR in C#?

MODI 透過基於 COM 的物件模型執行光學字元辨識 (OCR)。 過程首先建立一個 MODI.Document 對象,載入影像檔案路徑,然後呼叫 OCR 方法來分析影像並識別字元。 OCR 處理完成後,可以透過每個頁面的圖像和佈局物件存取文字和佈局資訊。

若要在 Visual Studio 專案中使用 MODI,必須新增對 Microsoft Office 文件影像類型庫的引用。 在解決方案資源管理器中,以滑鼠右鍵按一下"引用"資料夾,選擇"COM"選項卡,然後選擇對應的 MODI 版本(Office 2003 為 11.0,Office 2007 為 12.0)。

// MODI OCR: Extracting text from a scanned TIFF document
private string ExtractTextFromImage(string path)
{
    string extractedText = "";
    MODI.Document doc = new MODI.Document();
    try
    {
        // Create the document object from the image file path
        doc.Create(path);
        // Run optical character recognition with English language
        doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true);
        // Access the first page image and retrieve recognized text
        MODI.Image modiImage = (MODI.Image)doc.Images[0];
        extractedText = modiImage.Layout.Text;
    }
    catch (Exception ex)
    {
        // Handle OCR exceptions for unsupported or corrupted image files
        string message = ex.Message;
        Console.WriteLine(message);
    }
    finally
    {
        doc.Close(false);
        System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
    }
    return extractedText;
}
// MODI OCR: Extracting text from a scanned TIFF document
private string ExtractTextFromImage(string path)
{
    string extractedText = "";
    MODI.Document doc = new MODI.Document();
    try
    {
        // Create the document object from the image file path
        doc.Create(path);
        // Run optical character recognition with English language
        doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true);
        // Access the first page image and retrieve recognized text
        MODI.Image modiImage = (MODI.Image)doc.Images[0];
        extractedText = modiImage.Layout.Text;
    }
    catch (Exception ex)
    {
        // Handle OCR exceptions for unsupported or corrupted image files
        string message = ex.Message;
        Console.WriteLine(message);
    }
    finally
    {
        doc.Close(false);
        System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
    }
    return extractedText;
}
' MODI OCR: Extracting text from a scanned TIFF document
Private Function ExtractTextFromImage(ByVal path As String) As String
    Dim extractedText As String = ""
    Dim doc As New MODI.Document()
    Try
        ' Create the document object from the image file path
        doc.Create(path)
        ' Run optical character recognition with English language
        doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, True, True)
        ' Access the first page image and retrieve recognized text
        Dim modiImage As MODI.Image = CType(doc.Images(0), MODI.Image)
        extractedText = modiImage.Layout.Text
    Catch ex As Exception
        ' Handle OCR exceptions for unsupported or corrupted image files
        Dim message As String = ex.Message
        Console.WriteLine(message)
    Finally
        doc.Close(False)
        System.Runtime.InteropServices.Marshal.ReleaseComObject(doc)
    End Try
    Return extractedText
End Function
$vbLabelText   $csharpLabel

此功能演示了標準的 MODI 工作流程:Create 方法載入文件,OCR 方法使用指定的語言執行識別,Layout.Text 提供提取的字串。 return extractedText 語句將輸出傳遞給呼叫者。

雖然 MODI 能夠為清晰、高解析度的文件影像提供相當不錯的精確度,但它也存在明顯的限制。 它僅支援 TIFF、MDI 和 BMP 格式。 它要求運行該應用程式的每台電腦(包括生產伺服器)都必須安裝 Microsoft Office。 MODI 本身不具備掃描低品質影像、校正影像傾斜或降低數位雜訊的功能。此外,由於 MODI 依賴 COM 互通,因此無法在 .NET Core、.NET 5+ 或任何跨平台場景中使用,這使其不適用於 Docker 容器或 Azure 應用服務等現代部署目標。

現代 .NET 函式庫如何處理 OCR 功能?

IronOCR 使用純 .NET API取代了 COM 互通方法,可透過單一 NuGet 套件進行安裝。 IronTesseract 類別封裝了一個經過高度最佳化的 Tesseract 5 引擎,OcrInput 類別處理影像載入、預處理和多格式支持,所有這些都不需要 Microsoft Office 或目標電腦上的任何外部依賴項。

using IronOcr;
// Create the IronTesseract OCR engine object
var ocr = new IronTesseract();
using var input = new OcrInput();
// Load images in any common format — PNG, JPEG, TIFF, BMP, GIF, or PDF
input.LoadImage("scanned-document.tiff");
// Apply filters to correct low-quality scans automatically
input.Deskew();   // Straighten skewed page images
input.DeNoise();  // Remove digital noise from scanning artifacts
// Read text from the processed document
var result = ocr.Read(input);
// Output plain text
Console.WriteLine(result.Text);
// Save as a searchable PDF for document management system integration
result.SaveAsSearchablePdf("output-searchable.pdf");
using IronOcr;
// Create the IronTesseract OCR engine object
var ocr = new IronTesseract();
using var input = new OcrInput();
// Load images in any common format — PNG, JPEG, TIFF, BMP, GIF, or PDF
input.LoadImage("scanned-document.tiff");
// Apply filters to correct low-quality scans automatically
input.Deskew();   // Straighten skewed page images
input.DeNoise();  // Remove digital noise from scanning artifacts
// Read text from the processed document
var result = ocr.Read(input);
// Output plain text
Console.WriteLine(result.Text);
// Save as a searchable PDF for document management system integration
result.SaveAsSearchablePdf("output-searchable.pdf");
Imports IronOcr

' Create the IronTesseract OCR engine object
Dim ocr As New IronTesseract()
Using input As New OcrInput()
    ' Load images in any common format — PNG, JPEG, TIFF, BMP, GIF, or PDF
    input.LoadImage("scanned-document.tiff")
    ' Apply filters to correct low-quality scans automatically
    input.Deskew()   ' Straighten skewed page images
    input.DeNoise()  ' Remove digital noise from scanning artifacts
    ' Read text from the processed document
    Dim result = ocr.Read(input)
    ' Output plain text
    Console.WriteLine(result.Text)
    ' Save as a searchable PDF for document management system integration
    result.SaveAsSearchablePdf("output-searchable.pdf")
End Using
$vbLabelText   $csharpLabel

IronOCR輸出

MODI OCR C# 與 IronOCR:如何在 C# 中選擇適當的 OCR 庫:圖 1 -IronOCR範例輸出

上面的程式碼展示了IronOCR如何只用幾行程式碼就完成 TIFF 掃描檔案的 OCR 流程。 OcrInput 物件幾乎可以接受任何影像文件或 PDF 文檔,而 Deskew() 和 DeNoise() 可以糾正常見的掃描瑕疵,這些瑕疵會導致 MODI 產生較差的結果。 Read 方法傳回一個 OcrResult 對象,其中不僅包含純文本,還包含按頁、段落、行和單字組織的結構化數據,每個部分都包含置信度分數和座標資訊。

對於處理發票、表格或多頁 TIFF 檔案的項目,IronOCR 還包含電腦視覺功能,可自動定位文字區域,在同一次掃描中讀取條碼和二維碼,並支援125 多種語言,這些語言可以作為 NuGet 套件安裝。

從圖像中提取文字有哪些主要區別?

當你不再使用"完美"的範例文件而開始處理真實世界的文件時,這兩種選擇之間的真正差距就會顯現出來。 我們說的是那些掃描品質很差的文件,上面有咖啡漬、頁面傾斜,或是用智慧型手機拍攝的低解析度照片。

MODI是為不同的時代而設計的,專門用於清晰、高對比度的辦公室文件。 如果你用高階掃描器掃描清晰的TIFF文件,MODI就能很好地完成任務。但如果你的影像哪怕只有輕微的旋轉,或者有一些數字"雜訊",MODI的精度就會急劇下降。 由於它沒有任何內建濾鏡來解決這些問題,因此在開始 OCR 過程之前,您只能使用 GDI+ 或 System.Drawing 等第二個函式庫自行預處理影像。 管理記憶體也有些麻煩; 如果您不手動呼叫 Marshal.ReleaseComObject,則很可能在生產環境中遇到記憶體洩漏問題。

IronOCR 開箱即用,即可為您處理這些繁重的工作。 無需編寫自訂程式碼來清理圖像,只需呼叫 input.Deskew() 或 input.DeNoise() 即可。 這些濾鏡可以對影像進行預處理,使引擎即使處理"醜陋"的文件也能達到99.8% 的準確率

專業提示:如果您要從 MODI 遷移,不要只是替換程式碼,還要利用佈局資料。 與 MODI 不同,MODI 主要提供一大塊文本,而IronOCR將文本分解成段落和行,並給出置信度評分。 如果你正在建立一個自動化發票處理系統,並且需要標記可能需要人工審核的文檔,那麼這個功能簡直是救星。

值得一提的是,IronOCR 可以將多頁 TIFF 和 PDF 檔案作為一個物件進行處理。 您不必像使用舊的 MODI.Images 集合那樣手動遍歷影像。 它速度更快、更清潔,而且說實話,也更不容易損壞。

開發人員如何從傳統方法遷移?

在現有項目中替換 MODI 非常簡單。 核心遷移包括將 COM 引用替換為 NuGet 套件並更新 OCR 方法呼叫。 以下是 MODI 模式與其現代對應模式的對應關係:

using IronOcr;
// Replace: MODI.Document doc = new MODI.Document();
var ocr = new IronTesseract();
// Replace: doc.Create(filePath); with OcrInput
using var input = new OcrInput();
input.LoadImage("document.tiff");  // Accepts the same TIFF files MODI used
// Replace: doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true);
ocr.Language = OcrLanguage.English;
// Replace: modiImage.Layout.Text
var result = ocr.Read(input);
string text = result.Text;
Console.WriteLine(text);
using IronOcr;
// Replace: MODI.Document doc = new MODI.Document();
var ocr = new IronTesseract();
// Replace: doc.Create(filePath); with OcrInput
using var input = new OcrInput();
input.LoadImage("document.tiff");  // Accepts the same TIFF files MODI used
// Replace: doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true);
ocr.Language = OcrLanguage.English;
// Replace: modiImage.Layout.Text
var result = ocr.Read(input);
string text = result.Text;
Console.WriteLine(text);
Imports IronOcr

Dim ocr As New IronTesseract()

Using input As New OcrInput()
    input.LoadImage("document.tiff") ' Accepts the same TIFF files MODI used
    ocr.Language = OcrLanguage.English
    Dim result = ocr.Read(input)
    Dim text As String = result.Text
    Console.WriteLine(text)
End Using
$vbLabelText   $csharpLabel

映射幾乎是一對一的:MODI.Document.Create 變成 OcrInput.LoadImage,語言參數的 OCR 方法變成 ocr.Language 加上 ocr.Read,Layout.Text 變成 result.Text。 沒有 COM 引用,沒有 Office 依賴,無需手動使用 Marshal.ReleaseComObject 管理記憶體。

除了直接替換之外,遷移還解鎖了 MODI 中根本不存在的功能:跨平台部署到 Linux 和 macOS、雲端和容器部署、可搜尋的 PDF 輸出,以及具有自訂字體訓練功能的完整 Tesseract 5 引擎。

哪種解決方案最符合現代 OCR 需求?

在微軟Office是每台Windows電腦的標準軟體的時代,MODI發揮了它的作用。 對於維護已依賴 Office 2003 或 2007 的舊系統的團隊來說,它可能仍然可以運行,但這代表著對已停產軟體的脆弱依賴,而且沒有前進的方向。

對於任何新專案或面臨現代化改造的遺留系統,IronOCR 都能提供完整、積極維護的解決方案。 它完全消除了對 Office 的依賴,可在所有主流平台上運行,能夠處理舊方法難以處理的低品質影像,並提供遠超純文字的結構化 OCR 輸出。 它擁有豐富的文檔直接的工程支持,以及749美元起的永久許可,專為大規模生產級文件處理而構建。

!{--01001100010010010100001001010010010000010101001001011001010111110100011101000101010101 01000101111101010011010101000100000101010010010101000100010101000100010111110101011101001000110 1010101000100100001011111010100000101001001001111010001000101010101010000110101010100101010101011 10101010001010010010010010010000010100110001011111010000100100110001001111101000011010010111111010000110100101110--

準備好在生產環境中部署OCR了嗎? 了解IronOCR的授權選項,找到最適合您團隊的方案。

常見問題解答

什麼是 Microsoft Office 文件影像 (MODI)?

Microsoft Office Document Imaging (MODI) 是 MS Office 2003 和 2007 中包含的 OCR 元件。它允許開發人員使用基於 COM 的物件模型從圖像中提取文字。

為什麼我應該考慮使用 IronOCR 而不是 MODI?

IronOCR 提供了一個現代化的、完全支援的 OCR 庫,與傳統的 MODI 組件相比,它具有增強的功能、更高的準確性以及與 .NET 應用程式更好的整合。

IronOCR 可以處理 TIFF 和 BMP 影像檔案嗎?

是的,IronOCR 可以處理和提取各種圖像格式(包括 TIFF 和 BMP)中的文本,為不同的文件數位化需求提供靈活性。

從 MODI 遷移到 IronOCR 有哪些好處?

遷移到 IronOCR 可獲得更高級的 OCR 功能、定期更新和積極支持,確保您的 OCR 專案面向未來。

IronOCR 與 Visual Studio 相容嗎?

是的,IronOCR 與 Visual Studio 完全相容,可以無縫整合到您的 .NET 專案中。

IronOCR 的準確度與 MODI 相比如何?

與較早的 MODI 技術相比,IronOCR 旨在提供更高的文字辨識準確率,尤其是在處理現代影像格式和複雜文件方面。

IronOCR 為開發者提供哪些支援?

IronOCR 提供全面的文件、程式碼範例和專業支持,以幫助開發人員將 OCR 功能整合到他們的應用程式中。

IronOCR有可用的程式碼範例嗎?

是的,IronOCR 提供了各種程式碼範例,幫助開發人員快速地在他們的 .NET 應用程式中實作 OCR。

IronOCR 可以用於即時文字擷取嗎?

IronOCR 能夠即時提取文本,因此適用於需要立即處理掃描影像或文件的應用。

IronOCR 支援多語言文字識別嗎?

是的,IronOCR 支援多語言文字識別,能夠高精度地處理各種語言的文檔。

Kannaopat Udonpant
軟體工程師
在成為軟件工程師之前,Kannapat 從日本北海道大學完成了環境資源博士學位。在追逐學位期间,Kannapat 還成為了生產工程系一部份——汽車机器人實验室的成員。2022 年,他利用他的 C# 技能加入 Iron Software 的工程團隊, 專注於 IronPDF。Kannapat 珍惜他的工作,因為他直接向编写大部分 IronPDF 使用的代碼的開發者学习。除了同行学习,Kannapat 还喜欢在 Iron Software 工作的社交十环。当他不编写代碼或文檔時,Kannapat 通常在他的 PS5 上打游戏或重看《The Last of Us》。

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我