MODI OCR C# vs IronOCR: C#における正しい光学式文字認識ライブラリの選択
Microsoft Office Document Imaging (MODI) は、かつて MS Office 2003 および 2007 にバンドルされていた定番の OCR コンポーネントであり、開発者は COM ベースのオブジェクト モデルを介してスキャン画像から直接テキストを抽出することができました。 長年にわたり、MODI.Document クラスは、Visual Studio ソリューション内で TIFF および BMP 画像ファイルを機械可読テキストに変換する、無数の文書デジタル化プロジェクトを支えてきました。
しかし、MODIには重大な落とし穴があります。MicrosoftはOffice 2010以降のバージョンからMODIを削除したため、開発者はOCR機能を維持するためだけに、古いOfficeのインストールやスタンドアロンインストーラーに頼らざるを得なくなりました。クロスプラットフォーム展開、クラウド環境、または最新のWindowsバージョンをターゲットとする最新の.NETプロジェクトにとって、MODIは深刻な障害となります。
この記事では、MODI OCR C# と、専用に構築された.NET光学文字認識ライブラリであるIronOCRを、コードの実装、機能、プラットフォームのサポート、ライセンスの観点から比較検討します。 既存コードの保守であれ、新規プロジェクトの立ち上げであれ、ここに記載された情報は適切な選択をするための参考になるでしょう。
以下のコード例を参考に、 IronOCRを30日間無料でお試しください。
比較結果が一目でわかるようにするにはどうすればよいでしょうか?
| カテゴリ | MODI OCR | IronOCR |
|---|---|---|
| コアアーキテクチャ | COM相互運用機能。Microsoft Office Document Imaging 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 Document Imaging Type Libraryへの参照を追加する必要があります。 ソリューションエクスプローラーで、[参照]フォルダーを右クリックし、[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
この関数は、標準的なMODIワークフローを示しています。Createメソッドはファイルを読み込み、OCRメソッドは指定された言語を使用して認識を実行し、Layout.Textは抽出された文字列を提供します。 return extractedText ステートメントは、出力を呼び出し元に渡します。
MODIは鮮明で高解像度の文書画像に対してはまずまずの精度を提供するものの、顕著な限界もある。 TIFF、MDI、BMP形式のみをサポートしています。 本アプリケーションを実行するすべてのコンピューター(運用サーバーを含む)に、Microsoft Officeがインストールされている必要があります。 低品質画像のスキャン、歪み補正、デジタルノイズ低減のための組み込みサポートはありません。さらに、MODIはCOM相互運用性に依存しているため、 .NET Core、 .NET 5以降、またはクロスプラットフォーム環境では使用できません。そのため、DockerコンテナやAzure App Servicesなどの最新のデプロイメントターゲットには適していません。
最新の.NETライブラリはOCR機能をどのように処理するのか?
IronOCRは、COM相互運用方式を、単一のNuGetパッケージでインストールできる純粋な.NET APIに置き換えます。 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
IronOCRの出力

上記のコードは、 IronOCRがTIFFスキャン画像を完全なOCRパイプラインを通してわずか数行で処理する様子を示しています。 OcrInputオブジェクトは、ほぼすべての画像ファイルまたはPDFドキュメントを受け入れます。また、Deskew()とDeNoise()は、MODIで低品質な結果が生じる原因となる一般的なスキャン時のアーティファクトを補正します。 Read メソッドは、プレーンテキストだけでなく、ページ、段落、行、単語ごとに整理された構造化データを含む OcrResult オブジェクトを返します。各データには、信頼度スコアと座標情報が含まれています。
請求書、フォーム、または複数ページのTIFFファイルを処理するプロジェクト向けに、 IronOCRには、テキスト領域を自動的に検出するコンピュータビジョン機能、バーコードとQRコードの同時読み取り機能、およびNuGetパッケージとしてインストール可能な125以上の言語のサポートも含まれています。
画像からテキストを抽出する際の主な違いは何ですか?
これら2つの選択肢の本当の差は、"完璧な"サンプルファイルの使用をやめて、実際の文書を扱い始めた瞬間に明らかになる。 ここで言っているのは、コーヒーの染みが付いていたり、ページが傾いていたり、スマートフォンで撮った低解像度の写真だったりする、あの見栄えの悪いスキャン画像のことです。
MODIは、特にクリーンで高コントラストなオフィス文書という、異なる時代のために開発された。 高性能スキャナーで鮮明なTIFFファイルを取得すれば、問題なく動作します。しかし、画像が少しでも回転していたり、デジタルノイズが含まれていると、MODIの精度は著しく低下します。 これらの問題を解決するための組み込みフィルターがないため、OCR処理を開始する前に、GDI+やSystem.Drawingなどの別のライブラリを使用して画像を自分で前処理する必要があります。 メモリ管理も少々面倒です。 Marshal.ReleaseComObject を手動で呼び出さないと、本番環境でメモリリークが発生する可能性が高くなります。
IronOCRは、箱から出してすぐにこの面倒な作業をすべて自動で行ってくれます。 画像をクリーンアップするためのカスタムコードを書く代わりに、input.Deskew() または input.DeNoise() を呼び出すだけで済みます。 これらのフィルターは画像を準備することで、たとえ"見栄えの悪い"文書であっても、エンジンが99.8%の精度を達成できるようにします。
プロのヒント: 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
マッピングはほぼ1対1です。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ニーズに最適なソリューションはどれか?
MODIは、Microsoft OfficeがすべてのWindowsコンピュータに標準搭載されていた時代に、その役割を果たした。 既にOffice 2003または2007に依存しているレガシーシステムを保守しているチームにとっては、まだ機能するかもしれないが、それは既にサポートが終了したソフトウェアへの脆弱な依存であり、将来への道筋は示されていない。
IronOCRは、新規プロジェクトはもちろん、近代化を必要とする既存システムに対しても、包括的で継続的にメンテナンスされるソリューションを提供します。 Officeへの依存を完全に排除し、主要なプラットフォームすべてで動作し、従来の方法では処理できなかった低品質の画像も処理でき、プレーンテキストをはるかに超える構造化されたOCR出力を提供します。 充実したドキュメント、直接的なエンジニアリングサポート、そして749ドルからの永久ライセンスにより、大規模な本番環境レベルの文書処理に対応できるように設計されています。
OCRを本番環境に導入する準備はできていますか? IronOCRのライセンスオプションを検討して、チームに最適なものを見つけてください。
よくある質問
Microsoft Office Document Imaging(MODI)とは何ですか?
Microsoft Office Document Imaging(MODI)は、MS Office 2003および2007に含まれていたOCRコンポーネントです。開発者は、COMベースのオブジェクトモデルを使用して、画像からテキストを抽出することができます。
なぜMODIの代わりにIronOCRの使用を検討する必要があるのですか?
IronOCRは、レガシーなMODIコンポーネントと比較して、強化された機能、より高い精度、.NETアプリケーションとのより良い統合を持つ、完全にサポートされた最新のOCRライブラリを提供します。
IronOCRはTIFFやBMPの画像ファイルを扱えますか?
IronOCRはTIFFやBMPを含む様々な画像フォーマットからテキストを処理・抽出することができます。
MODIからIronOCRに移行するメリットは何ですか?
IronOCRに移行することで、より高度なOCR機能、定期的なアップデート、積極的なサポートを利用することができ、OCRプロジェクトが将来にわたって発展することを保証します。
IronOCRはVisual Studioと互換性がありますか?
IronOCRはVisual Studioと完全に互換性があり、.NETプロジェクトにシームレスに統合することができます。
IronOCRの精度はMODIと比べてどうですか?
IronOCRは、特に最新の画像フォーマットや複雑な文書のテキスト認識において、旧来のMODIテクノロジーよりも高い精度を提供するように設計されています。
IronOCRは開発者にどのようなサポートを提供していますか?
IronOCRは、開発者がアプリケーションにOCR機能を統合できるように、包括的なドキュメント、コード例、プロフェッショナルなサポートを提供します。
IronOCRのコード例はありますか?
IronOCRは、開発者が.NETアプリケーションにOCRを素早く実装できるよう、様々なコード例を提供しています。
IronOCRはリアルタイムのテキスト抽出に使用できますか?
IronOCRはリアルタイムのテキスト抽出が可能で、スキャンした画像や文書を即座に処理する必要があるアプリケーションに適しています。
IronOCRは多言語のテキスト認識をサポートしていますか?
IronOCRは多言語テキスト認識をサポートしており、様々な言語のドキュメントを高い精度で処理することができます。


