IronOCRと LLM ベースの OCR: .NET開発者はどちらを選択すべきでしょうか?
モデルファイル4点。 RapidOCR .NETが文字を認識する前にまず必要とするのは、検出モデル、方向分類器、認識モデル、文字辞書です。これらはそれぞれGitHubのリリースページから個別にダウンロードされ、明示的なパス設定によって相互に接続されます。 最初の.csprojにMSBuildコピー規則を追加し、ONNX Runtimeのネイティブバイナリがデプロイメントターゲットにマッチしていることを確認しました。 実運用向けにOCRオプションを評価するチームにとって、そのセットアップ手順こそがRapidOCR .NETの全貌を物語っていると言えるでしょう。
RapidOCR .NETについて理解する
RapidOCR .NETは、RapidOCRプロジェクトをラップしたコミュニティ主導 for .NETライブラリです。RapidOCRプロジェクト自体は、BaiduのPaddleOCRディープラーニングモデルをONNX形式に最適化してCPU向けに移植したものです。 NuGetパッケージ(RapidOcrNet)はGitHubのBobLdがApache 2.0ライセンスの下で管理しています。 系譜が重要であることを理解してください。このライブラリは、元のテクノロジーから3つの抽象化レイヤーを隔てたところに位置しています。Baidu PaddlePaddle、PaddleOCR、コミュニティによるRapidOCR ONNX変換、そして.NETラッパーです。
主な建築上の特徴:
- 4ファイルモデル要件: 検出(
keys.txt)はエンジンの初期化前に設定されたパスに全て存在する必要があります。 - ONNX Runtime依存性:
Microsoft.ML.OnnxRuntime.Gpu(CUDA)が必要であり、アプリケーションのフットプリントを30〜50 MB増加させます。 ランタイムバイナリは、デプロイ先のプラットフォームと一致している必要があります。 -言語制約:モデルは主に中国語と英語で学習されています。 ヨーロッパ言語(スペイン語、フランス語、ドイツ語)、キリル文字(ロシア語、ウクライナ語)、アラビア語、ヘブライ語、およびインド系文字はサポートされていません。 日本と韓国には、コミュニティから提供された実験モデルが限られている。 -画像のみの入力: RapidOCR .NETはネイティブの PDF サポートを持っていません。 PDFを処理するには、ページを画像に変換し、各画像を個別にOCR処理し、結果を手作業で再構成するための外部レンダリングライブラリが必要です。 -コールドスタート時の遅延:モデルの読み込みには初回実行時に2~5秒かかり、実行時に300~500MBのメモリを消費します。 -コミュニティ規模:このプロジェクトはStack Overflowでの存在感が限られており、README以外のドキュメントは最小限で、商用サポートやメンテナンスのSLAもありません。 -検索可能なPDF出力はありません:このライブラリは画像からテキストを抽出します。 OCRの結果を、検索可能なテキストレイヤーとしてPDFに書き戻すことはできません。
4モデル構成のオーバーヘッド
RapidOCR .NETアプリケーションは、複雑さに関わらず、すべてこの初期化ブロックから始まります。
// RapidOcrNet: 4 paths required — any missing file throws at runtime
var engine = new RapidOcrEngine(new RapidOcrOptions
{
DetModelPath = "./models/det.onnx", // ~3 MB download
ClsModelPath = "./models/cls.onnx", // ~1 MB download
RecModelPath = "./models/rec_en.onnx", // ~2–10 MB depending on language
KeysPath = "./models/en_keys.txt" // ~100 KB character dictionary
});
// Text blocks returned — must be sorted and joined manually
var result = engine.Run(imagePath);
var text = string.Join("\n", result.TextBlocks
.OrderBy(b => b.BoundingBox.Top)
.ThenBy(b => b.BoundingBox.Left)
.Select(b => b.Text));
// RapidOcrNet: 4 paths required — any missing file throws at runtime
var engine = new RapidOcrEngine(new RapidOcrOptions
{
DetModelPath = "./models/det.onnx", // ~3 MB download
ClsModelPath = "./models/cls.onnx", // ~1 MB download
RecModelPath = "./models/rec_en.onnx", // ~2–10 MB depending on language
KeysPath = "./models/en_keys.txt" // ~100 KB character dictionary
});
// Text blocks returned — must be sorted and joined manually
var result = engine.Run(imagePath);
var text = string.Join("\n", result.TextBlocks
.OrderBy(b => b.BoundingBox.Top)
.ThenBy(b => b.BoundingBox.Left)
.Select(b => b.Text));
Imports System.Linq
' RapidOcrNet: 4 paths required — any missing file throws at runtime
Dim engine = New RapidOcrEngine(New RapidOcrOptions With {
.DetModelPath = "./models/det.onnx", ' ~3 MB download
.ClsModelPath = "./models/cls.onnx", ' ~1 MB download
.RecModelPath = "./models/rec_en.onnx", ' ~2–10 MB depending on language
.KeysPath = "./models/en_keys.txt" ' ~100 KB character dictionary
})
' Text blocks returned — must be sorted and joined manually
Dim result = engine.Run(imagePath)
Dim text = String.Join(vbCrLf, result.TextBlocks _
.OrderBy(Function(b) b.BoundingBox.Top) _
.ThenBy(Function(b) b.BoundingBox.Left) _
.Select(Function(b) b.Text))
中国語OCRへの切り替えは構成の変更ではなく、ファイルの置き換えです。英語認識モデル(en_rec.onnx / ch_rec.onnx / ch_keys.txt)は別のダウンロードです。 文書に中国語とスペイン語の両方のテキストが含まれている場合、先に進む方法はありません。RapidOCRのモデルカタログにはスペイン語のモデルが全く存在しないためです。
.csprojは、ビルドで4つのファイル全てをコピーするための明示的なMSBuildエントリも必要とします。
<ItemGroup>
<Content Include="models\**\*.*">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<Content Include="models\**\*.*">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
その手順を省略すると、実行時にパスが解決されず、本番環境へのデプロイが静かに失敗します。
IronOCRを理解する
IronOCRは、最適化されたTesseract 5エンジンをベースに構築された商用.NET OCRライブラリであり、外部モデルファイル、tessdata管理、ネイティブバイナリ構成を必要とせず、単一のNuGetパッケージから動作するように設計されています。 これは、Windows、Linux、macOS、およびARM上で、 ASP.NET Webアプリケーション、コンソールバッチプロセッサ、WPFデスクトップツール、Azure Functions、AWS Lambda、Dockerコンテナ、MAUIモバイルアプリなど、あらゆる.NET開発シナリオを対象としています。
主な特徴:
- 単一パッケージの展開:
dotnet add package IronOcrが完全なインストールです。 エンジンバイナリ、デフォルト(英語)設定用の言語データ、および前処理アルゴリズムはすべてパッケージ内に含まれています。 -自動前処理パイプライン:必要に応じて、画像の傾き補正、ノイズ除去、コントラスト強調、二値化、解像度正規化が自動的に実行されます。 必要に応じて、手動フィルター適用も可能です。 - ネイティブPDFサポート: PDFsは変換ステップなしに直接
Passwordパラメータを受け取ります。 検索可能なPDF出力は、結果に対する単一のメソッド呼び出しで実現されます。 - NuGet経由で125以上の言語: 各言語パック(
IronOcr.Languages.French,IronOcr.Languages.Arabicなど)はNuGet依存関係としてインストールされます。 言語の切り替えはプロパティの割り当てであり、ファイルのダウンロードではありません。 - 構造化された結果モデル:
.Pages,.Paragraphs,.Lines,.Words, およびバウンディングボックス座標と単語ごとの信頼度スコアを公開します。 - スレッドセーフでステートレス: 複数の
IronTesseractインスタンスがロックや共有状態なしで並行して動作します。 - 商業サポート: メールサポートとアクティブメンテナンスのバージョンAPI付きで$999(Lite)からの永続ライセンス。
機能比較
| フィーチャー | RapidOCR.NET | IronOCR |
|---|---|---|
| インストール | NuGet + 4つのマニュアルモデルのダウンロード | 単一のNuGetパッケージ |
| 言語サポート | ~5 (CJK + 英語のみ) | NuGet言語パック経由で125種類以上 |
| ネイティブPDF入力 | なし | はい |
| 検索可能なPDF出力 | なし | はい |
| 組み込みの前処理 | なし | はい(自動フィルター+手動フィルター) |
| 商用サポート | なし(コミュニティ) | はい(ライセンスに含まれています) |
詳細な機能比較
| カテゴリー/機能 | RapidOCR.NET | IronOCR |
|---|---|---|
| セットアップとインストール | ||
| NuGetインストール | はい | はい |
| 外部モデルのダウンロードが必要です | はい(4ファイル) | なし |
| パス構成が必要です | はい | なし |
| MSBuild のコピー ルールが必要です | はい | なし |
| NuGetインストール後すぐに動作します | なし | はい |
| 言語サポート | ||
| 英語 | はい | はい |
| 中国語(簡体字/繁体字) | はい(主な焦点) | はい |
| 日本語 | 実験段階のみ | はい |
| 韓国語 | 実験段階のみ | はい |
| ヨーロッパ言語(スペイン語、フランス語、ドイツ語など) | なし | はい(30歳以上) |
| キリル文字(ロシア語、ウクライナ語など) | なし | はい(15歳以上) |
| アラビア語/ヘブライ語 | なし | はい |
| インド系文字(ヒンディー語、ベンガル語、タミル語) | なし | はい(10歳以上) |
| 多言語同時OCR | なし | はい |
| サポートされている言語の総数 | ~5 | 125+ |
| 入力フォーマット | ||
| JPEG / PNG / BMP / TIFF | はい | はい |
| PDF(ネイティブ形式、変換なし) | なし | はい |
| パスワードで保護されたPDF | なし | はい |
| ストリーム/バイト配列 | 制限的 | はい |
| URL入力 | なし | はい |
| 出力 | ||
| プレーンテキスト | はい | はい |
| テキストブロックの境界ボックス | はい | はい |
| 構造化された単語/行/段落 | 部分的(ブロックのみ) | はい |
| 単語ごとの信頼度スコア | はい(ブロックごと) | はい |
| 検索可能なPDF | なし | はい |
| hOCRエクスポート | なし | はい |
| 前処理 | ||
| 自動前処理 | なし | はい |
| デスキュー | なし | はい |
| ノイズ除去 | なし | はい |
| コントラスト/二値化 | なし | はい |
| 解像度の向上 | なし | はい |
| デプロイメント | ||
| 自己完結型の単一パッケージ | いいえ(外部ファイルが4つ以上) | はい |
| Dockerサポート | 取扱説明書のコピーが必要です | はい(箱から出してすぐに) |
| Linuxサポート | ONNXランタイムネイティブバイナリが必要です | はい |
| macOS対応 | ONNXランタイムネイティブバイナリが必要です | はい |
| サポートとメンテナンス | ||
| 商用サポート/SLA | なし | はい |
| 企業による積極的なメンテナンス | いいえ(単一のコミュニティ開発者) | はい |
| ライセンスの種類 | アパッチ2.0(無料) | 永続商業($999+) |
ONNXモデル管理とゼロコンフィギュレーションの比較
RapidOCR .NETとIronOCRの運用上の最大の相違点は、精度ではなく、アプリケーションが関わるすべての環境で4つの外部モデルファイルを管理するための継続的なコストです。
RapidOCR .NETアプローチ
モデルファイルはNuGetパッケージには同梱されていません。 それらはRapidOCRプロジェクトのGitHubリリースページにあり、別途ダウンロードし、手動でバージョン管理を行い、アプリケーションとともにデプロイする必要があります。 RapidOCRプロジェクトが精度向上のために更新されたモデルをリリースした場合、ダウンロード手順を繰り返して、デプロイメント内のファイルを置き換えます。
CI/CDパイプラインでは、モデルファイルはリポジトリにコミットされるか(Git履歴に15〜25 MBのバイナリデータが追加されます)、カスタムスクリプトでビルドステップ中に取得される必要があります。Dockerコンテナでは、各言語のモデルセットが専用のCOPY命令と非自明なレイヤーを追加します。 Kubernetesのデプロイメントでは、モデルファイルは通常、マウントされたボリュームに格納されるか、イメージに組み込まれますが、どちらの場合も、更新がどのように伝播されるかに関するポリシーが必要です。
ソースファイル内の検証ロジックが、その脆弱性を具体的に示している。
// RapidOcrNet: Runtime validation needed because any missing file crashes the engine
public static bool ValidateModelFiles()
{
var requiredFiles = new[]
{
Path.Combine(ModelDirectory, "det.onnx"),
Path.Combine(ModelDirectory, "cls.onnx"),
Path.Combine(ModelDirectory, "rec_en.onnx"),
Path.Combine(ModelDirectory, "en_keys.txt")
};
var missingFiles = requiredFiles.Where(f => !File.Exists(f)).ToList();
if (missingFiles.Any())
{
Console.WriteLine("ERROR: Missing required model files:");
foreach (var file in missingFiles)
Console.WriteLine($" - {file}");
return false;
}
return true;
}
// RapidOcrNet: Runtime validation needed because any missing file crashes the engine
public static bool ValidateModelFiles()
{
var requiredFiles = new[]
{
Path.Combine(ModelDirectory, "det.onnx"),
Path.Combine(ModelDirectory, "cls.onnx"),
Path.Combine(ModelDirectory, "rec_en.onnx"),
Path.Combine(ModelDirectory, "en_keys.txt")
};
var missingFiles = requiredFiles.Where(f => !File.Exists(f)).ToList();
if (missingFiles.Any())
{
Console.WriteLine("ERROR: Missing required model files:");
foreach (var file in missingFiles)
Console.WriteLine($" - {file}");
return false;
}
return true;
}
Imports System
Imports System.IO
Imports System.Linq
Public Class RapidOcrNet
Public Shared Function ValidateModelFiles() As Boolean
Dim requiredFiles = {
Path.Combine(ModelDirectory, "det.onnx"),
Path.Combine(ModelDirectory, "cls.onnx"),
Path.Combine(ModelDirectory, "rec_en.onnx"),
Path.Combine(ModelDirectory, "en_keys.txt")
}
Dim missingFiles = requiredFiles.Where(Function(f) Not File.Exists(f)).ToList()
If missingFiles.Any() Then
Console.WriteLine("ERROR: Missing required model files:")
For Each file In missingFiles
Console.WriteLine($" - {file}")
Next
Return False
End If
Return True
End Function
End Class
RapidOCR .NETを使用する実稼働アプリケーションでは、モデルファイルが見つからない場合、パッケージのインストール時に明確なエラーが発生しないため、このような起動検証が日常的に含まれています。モデルファイルが見つからないと、エンジンが最初に初期化されるときに実行時クラッシュが発生します。 その不具合は開発段階ではなく、本番環境で顕在化する。
IronOCRのアプローチ
管理すべきモデルファイルはありません。 dotnet add package IronOcrの後、エンジンは準備が整います:
// IronOCR: no model downloads, no path configuration, no validation boilerplate
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var text = new IronTesseract().Read("document.jpg").Text;
// IronOCR: no model downloads, no path configuration, no validation boilerplate
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var text = new IronTesseract().Read("document.jpg").Text;
' IronOCR: no model downloads, no path configuration, no validation boilerplate
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim text = New IronTesseract().Read("document.jpg").Text
IronTesseractのセットアップガイドには、完全なインストールパスが記載されています。 英語以外の言語パックはNuGetパッケージです— dotnet add package IronOcr.Languages.French — そして、復元ステップがすべてを処理し、既にNuGet依存関係を復元するCI/CDパイプラインでも対応。 バイナリモデルファイルに関する.gitignoreの決定はなく、Dockerfileにコピー層もなく、起動時の検証スクリプトもありません。
Dockerにデプロイするチーム向けに、IronOCR Dockerガイドが、必要なシステム依存関係(Debian/Ubuntuベースのイメージ上のlibgdiplus)とそれ以上何もカバーしていません。
言語サポート
RapidOCR .NETアプローチ
RapidOCR.NETの対応言語は、その起源を反映している。 PaddleOCRは、中国語のインターネット検索サービスを提供するためにBaiduによって開発されました。 そのモデルは、中国語簡体字と中国語繁体字の両方に最適です。 英語サポートは含まれていますが、主要な設計目標ではありませんでした。 日本語版と韓国語版には、実験的モデルとしてマークされたコミュニティ提供モデルが存在する。 それ以外の言語、つまりスペイン語、フランス語、ドイツ語、ロシア語、アラビア語、ヒンディー語、ポルトガル語、その他100以上の言語には、利用可能なモデルが存在しない。
対応言語を切り替えるには、異なるモデルファイルをダウンロードする必要があります。
// RapidOcrNet: 英語 engine
var englishEngine = new RapidOcrEngine(new RapidOcrOptions
{
DetModelPath = Path.Combine(modelPath, "det.onnx"),
ClsModelPath = Path.Combine(modelPath, "cls.onnx"),
RecModelPath = Path.Combine(modelPath, "en_rec.onnx"), // English-specific
KeysPath = Path.Combine(modelPath, "en_keys.txt") // English-specific
});
// RapidOcrNet: Chinese engine — different rec and keys files required
var chineseEngine = new RapidOcrEngine(new RapidOcrOptions
{
DetModelPath = Path.Combine(modelPath, "det.onnx"),
ClsModelPath = Path.Combine(modelPath, "cls.onnx"),
RecModelPath = Path.Combine(modelPath, "ch_rec.onnx"), // Different download
KeysPath = Path.Combine(modelPath, "ch_keys.txt") // Different download
});
// Spanish? NotSupportedException — no model exists
// RapidOcrNet: 英語 engine
var englishEngine = new RapidOcrEngine(new RapidOcrOptions
{
DetModelPath = Path.Combine(modelPath, "det.onnx"),
ClsModelPath = Path.Combine(modelPath, "cls.onnx"),
RecModelPath = Path.Combine(modelPath, "en_rec.onnx"), // English-specific
KeysPath = Path.Combine(modelPath, "en_keys.txt") // English-specific
});
// RapidOcrNet: Chinese engine — different rec and keys files required
var chineseEngine = new RapidOcrEngine(new RapidOcrOptions
{
DetModelPath = Path.Combine(modelPath, "det.onnx"),
ClsModelPath = Path.Combine(modelPath, "cls.onnx"),
RecModelPath = Path.Combine(modelPath, "ch_rec.onnx"), // Different download
KeysPath = Path.Combine(modelPath, "ch_keys.txt") // Different download
});
// Spanish? NotSupportedException — no model exists
' RapidOcrNet: 英語 engine
Dim englishEngine = New RapidOcrEngine(New RapidOcrOptions With {
.DetModelPath = Path.Combine(modelPath, "det.onnx"),
.ClsModelPath = Path.Combine(modelPath, "cls.onnx"),
.RecModelPath = Path.Combine(modelPath, "en_rec.onnx"), ' English-specific
.KeysPath = Path.Combine(modelPath, "en_keys.txt") ' English-specific
})
' RapidOcrNet: Chinese engine — different rec and keys files required
Dim chineseEngine = New RapidOcrEngine(New RapidOcrOptions With {
.DetModelPath = Path.Combine(modelPath, "det.onnx"),
.ClsModelPath = Path.Combine(modelPath, "cls.onnx"),
.RecModelPath = Path.Combine(modelPath, "ch_rec.onnx"), ' Different download
.KeysPath = Path.Combine(modelPath, "ch_keys.txt") ' Different download
})
' Spanish? NotSupportedException — no model exists
同じキューから英語、中国語、スペイン語の文書を処理する必要があるアプリケーションの場合、RapidOCR .NETではスペイン語文書を処理するための有効な方法がありません。
IronOCRのアプローチ
IronOCRは125以上の言語をサポートしており、各言語はNuGet言語パックとして利用可能です。 切り替えはIronTesseractインスタンスのenumプロパティ割り当てです — ファイルダウンロードなしで、エンジンの再作成なし:
// IronOCR: language switching is a property change, not a file swap
var ocr = new IronTesseract();
// English
ocr.Language = OcrLanguage.English;
// Chinese Simplified
ocr.Language = OcrLanguage.ChineseSimplified;
// Spanish — no model download needed
ocr.Language = OcrLanguage.Spanish;
// Arabic — just works
ocr.Language = OcrLanguage.Arabic;
// Russian — just works
ocr.Language = OcrLanguage.Russian;
var result = ocr.Read("document.jpg");
// IronOCR: language switching is a property change, not a file swap
var ocr = new IronTesseract();
// English
ocr.Language = OcrLanguage.English;
// Chinese Simplified
ocr.Language = OcrLanguage.ChineseSimplified;
// Spanish — no model download needed
ocr.Language = OcrLanguage.Spanish;
// Arabic — just works
ocr.Language = OcrLanguage.Arabic;
// Russian — just works
ocr.Language = OcrLanguage.Russian;
var result = ocr.Read("document.jpg");
Imports IronOcr
Dim ocr As New IronTesseract()
' English
ocr.Language = OcrLanguage.English
' Chinese Simplified
ocr.Language = OcrLanguage.ChineseSimplified
' Spanish — no model download needed
ocr.Language = OcrLanguage.Spanish
' Arabic — just works
ocr.Language = OcrLanguage.Arabic
' Russian — just works
ocr.Language = OcrLanguage.Russian
Dim result = ocr.Read("document.jpg")
多言語文書はAddSecondaryLanguageを使用します:
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
ocr.AddSecondaryLanguage(OcrLanguage.English);
var result = ocr.Read("mixed-document.jpg");
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
ocr.AddSecondaryLanguage(OcrLanguage.English);
var result = ocr.Read("mixed-document.jpg");
Imports IronOcr
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.ChineseSimplified
ocr.AddSecondaryLanguage(OcrLanguage.English)
Dim result = ocr.Read("mixed-document.jpg")
複数の言語に関する手順と国際言語の例では、言語パックのインストールとセカンダリ言語の設定について詳しく説明しています。
PDF処理および出力機能
RapidOCR .NETアプローチ
RapidOCR .NETは画像を処理します。 PDFファイルは画像ではありません。 このライブラリには、PDFレンダリング機能、PDF書き込み機能、および検索可能なPDF出力を生成する仕組みがありません。 RapidOCR .NETを使用してスキャンされたPDFからテキストを抽出するには、少なくとも3つの独立したコンポーネントが必要です。
// RapidOcrNet: PDF processing requires external library + manual assembly
public async Task<string> ExtractTextFromPdf(string pdfPath)
{
// Step 1: Requires PdfPig, Docotic, or similar external library
var pageImages = await RenderPdfToImages(pdfPath);
// Step 2: Initialize RapidOcr with 4 model files (must already be downloaded)
using var engine = new RapidOcrEngine(new RapidOcrOptions
{
DetModelPath = "models/det.onnx",
ClsModelPath = "models/cls.onnx",
RecModelPath = "models/rec_en.onnx",
KeysPath = "models/en_keys.txt"
});
// Step 3: OCR each image individually
var results = new List<string>();
foreach (var pageImage in pageImages)
{
var result = engine.Run(pageImage);
results.Add(string.Join("\n", result.TextBlocks.Select(b => b.Text)));
}
// Step 4: Combine manually — page structure not preserved
return string.Join("\n\n", results);
}
// RapidOcrNet: PDF processing requires external library + manual assembly
public async Task<string> ExtractTextFromPdf(string pdfPath)
{
// Step 1: Requires PdfPig, Docotic, or similar external library
var pageImages = await RenderPdfToImages(pdfPath);
// Step 2: Initialize RapidOcr with 4 model files (must already be downloaded)
using var engine = new RapidOcrEngine(new RapidOcrOptions
{
DetModelPath = "models/det.onnx",
ClsModelPath = "models/cls.onnx",
RecModelPath = "models/rec_en.onnx",
KeysPath = "models/en_keys.txt"
});
// Step 3: OCR each image individually
var results = new List<string>();
foreach (var pageImage in pageImages)
{
var result = engine.Run(pageImage);
results.Add(string.Join("\n", result.TextBlocks.Select(b => b.Text)));
}
// Step 4: Combine manually — page structure not preserved
return string.Join("\n\n", results);
}
Imports System.Threading.Tasks
Imports System.Collections.Generic
Imports System.Linq
Public Class PdfTextExtractor
' RapidOcrNet: PDF processing requires external library + manual assembly
Public Async Function ExtractTextFromPdf(pdfPath As String) As Task(Of String)
' Step 1: Requires PdfPig, Docotic, or similar external library
Dim pageImages = Await RenderPdfToImages(pdfPath)
' Step 2: Initialize RapidOcr with 4 model files (must already be downloaded)
Using engine As New RapidOcrEngine(New RapidOcrOptions With {
.DetModelPath = "models/det.onnx",
.ClsModelPath = "models/cls.onnx",
.RecModelPath = "models/rec_en.onnx",
.KeysPath = "models/en_keys.txt"
})
' Step 3: OCR each image individually
Dim results As New List(Of String)()
For Each pageImage In pageImages
Dim result = engine.Run(pageImage)
results.Add(String.Join(vbLf, result.TextBlocks.Select(Function(b) b.Text)))
Next
' Step 4: Combine manually — page structure not preserved
Return String.Join(vbLf & vbLf, results)
End Using
End Function
' Placeholder for the RenderPdfToImages method
Private Async Function RenderPdfToImages(pdfPath As String) As Task(Of List(Of Object))
' Implementation goes here
Return New List(Of Object)()
End Function
End Class
これにより、 NuGetの依存関係が1つ増え、学習すべきAPIの範囲も増え、大きなドキュメントの場合、ページレンダリングされたビットマップをメモリに保持することによるメモリ負荷も増加します。 検索可能なPDF出力(認識されたテキストを元のスキャン画像の上に隠しOCRレイヤーとして書き戻す機能)は、この処理パイプラインのどの段階でも実現できません。
IronOCRのアプローチ
IronOCRはPDFをネイティブに読み取ります。 同じIronTesseract.Read()メソッドが画像パスとPDFパスの両方を受け付けます:
// IronOCR: direct PDF OCR — no conversion, no external library
var text = new IronTesseract().Read("scanned-document.pdf").Text;
// パスワードで保護されたPDF — one parameter
using var input = new OcrInput();
input.LoadPdf("encrypted.pdf", Password: "secret");
var result = new IronTesseract().Read(input);
// 検索可能なPDF — one method call on the result
var result = new IronTesseract().Read("scanned.pdf");
result.SaveAsSearchablePdf("searchable-output.pdf");
// IronOCR: direct PDF OCR — no conversion, no external library
var text = new IronTesseract().Read("scanned-document.pdf").Text;
// パスワードで保護されたPDF — one parameter
using var input = new OcrInput();
input.LoadPdf("encrypted.pdf", Password: "secret");
var result = new IronTesseract().Read(input);
// 検索可能なPDF — one method call on the result
var result = new IronTesseract().Read("scanned.pdf");
result.SaveAsSearchablePdf("searchable-output.pdf");
Imports IronOcr
' IronOCR: direct PDF OCR — no conversion, no external library
Dim text As String = New IronTesseract().Read("scanned-document.pdf").Text
' パスワードで保護されたPDF — one parameter
Using input As New OcrInput()
input.LoadPdf("encrypted.pdf", Password:="secret")
Dim result = New IronTesseract().Read(input)
End Using
' 検索可能なPDF — one method call on the result
Dim result2 = New IronTesseract().Read("scanned.pdf")
result2.SaveAsSearchablePdf("searchable-output.pdf")
PDF入力に関する手順書では、ページ選択、パスワード処理、複数ページ処理について説明しています。 検索可能なPDF形式のハウツーガイドでは、元のスキャン画像と視覚的に同一でありながら、全文検索レイヤーを追加した、コンプライアンス基準を満たす出力を作成する方法を解説しています。 文書アーカイブパイプラインを構築するチームにとって、その出力形式は最終目標であり、 IronOCRパッケージ自体以外に一切の依存関係を必要としません。
生産準備状況とコミュニティの成熟度
RapidOCR .NETアプローチ
RapidOCR .NETは比較的新しいプロジェクトです。 そのGitHubリポジトリは、既存 for .NET OCRライブラリと比較して、スター数や貢献活動が限られている。 Stack Overflowのカバー範囲は最小限です。 本番環境で特殊なケース(通常とは異なる画像方向、特定の文字セット、ONNXランタイムのバージョン競合、GPUモード構成など)が発生した場合、主なリソースはGitHubの課題追跡システムです。 商用サポートのティアはなく、メンテナンスに関するSLAも、応答時間の保証もありません。
依存関係の連鎖は、さらなるリスクをもたらす。 RapidOCR .NETは、RapidOCRプロジェクトのモデルリリースに依存しています。 RapidOCRプロジェクトは、PaddleOCRのモデルアーキテクチャに依存している。 そのチェーンのどの層であれ、互換性を損なう変更が発生した場合、ユーザーがアップデートを行う前に.NETラッパーのメンテナーが対応する必要がある。しかも、そのラッパーは組織的な支援を受けていない、たった一人のコミュニティ開発者によって維持されている。
導入によって、ONNXランタイムのバージョン管理に関する問題も明らかになった。 Microsoft.ML.OnnxRuntimeパッケージには、マイナーバージョン間での互換性のない変更があり、それと共に出荷されるネイティブバイナリはプラットフォーム固有です。 linux/arm64上に構築されたものと同じONNX Runtimeバイナリを使用できません。 各展開対象には検証が必要です。
IronOCRのアプローチ
IronOCRは10年以上にわたり、活発な商業開発が続けられてきた。 このライブラリは、バージョン管理されたAPIで提供され、互換性のない変更点が文書化されており、 .NET SDKのリリースに合わせた定期的なリリースが行われ、すべての商用ライセンスにメールサポートが含まれています。 本番環境構築チームは、一人の開発者が空き時間に監視するGitHubの課題キューではなく、直接的なサポートを受けることができます。
単一パッケージ設計により、導入検証ループが完全に不要になります。 NuGetの復元手順は決定論的です。同じパッケージバージョンを使用すれば、プラットフォーム固有のネイティブバイナリ管理を行うことなく、Windows、Linux、macOSのいずれのプラットフォームでも同じように動作するインストール環境を構築できます。 AWS LambdaおよびAzureへのデプロイの場合、関数バンドルには公開されたアプリケーションのみが含まれており、モデルファイルサイドカー、ボリュームマウント、起動検証ロジックは含まれていません。
低品質スキャンの例と画像品質補正の手順では、 ONNXベースのパイプラインでカスタムコードが必要となることが多い前処理シナリオ(傾いたスキャン、ノイズの多い背景、低コントラストの文書など)を、適切なフィルタ方法を選択するだけで、コードを一切記述することなく処理する方法を解説しています。
APIマッピングリファレンス
| RapidOCR.NET | IronOCR相当値 |
|---|---|
new RapidOcrEngine(new RapidOcrOptions { ... }) |
new IronTesseract() |
RapidOcrOptions.DetModelPath |
不要 — バンドル済み |
RapidOcrOptions.ClsModelPath |
不要 — バンドル済み |
RapidOcrOptions.RecModelPath |
不要 — バンドル済み |
RapidOcrOptions.KeysPath |
不要 — バンドル済み |
RapidOcrOptions.UseGpu |
直接的な同等機能はありません(内部的にCPU最適化されています) |
RapidOcrOptions.NumThreads |
IronTesseract(スレッドセーフ; Parallel.ForEachを使用) |
engine.Run(imagePath) |
new IronTesseract().Read(imagePath) |
result.TextBlocks |
result.Words / result.Lines / result.Paragraphs |
result.TextBlocks[i].Text |
result.Words[i].Text |
result.TextBlocks[i].Confidence |
result.Words[i].Confidence |
result.TextBlocks[i].BoundingBox |
result.Words[i].X, .Y, .Width, .Height |
string.Join("\n", result.TextBlocks.Select(b => b.Text)) |
result.Text |
| 手動言語ファイル交換 | ocr.Language = OcrLanguage.French |
PDFから画像への変換 + engine.Run() |
new IronTesseract().Read("doc.pdf") |
| 不可 | result.SaveAsSearchablePdf("output.pdf") |
| 不可 | result.SaveAsHocrFile("output.hocr") |
engine.Dispose() |
using var ocr = new IronTesseract() |
チームがRapidOCR .NETからIronOCRへの移行を検討する際
モデルファイル管理がデプロイメントのボトルネックになる場合
RapidOCR .NETをプロトタイプ開発に使用したチームは、本番環境への移行を試みる際に、モデルファイルの管理という壁にぶつかることがよくあります。4 つのモデルファイルは、バージョン管理、追跡、ビルド時のコピー、CI アーティファクトへの組み込み、ステージング環境へのデプロイ、そして本番環境へのデプロイといった作業を、 NuGet の依存関係グラフとは別に行う必要があります。 小規模チームの場合、そうした運用上の諸経費は一度負担すれば、その後は忘れ去られる。 複数のサービス、複数の環境、複数のCIパイプラインを維持するチームでは、モデルファイル分配に関するカスタムスクリプティングが意味のあるメンテナンスコストに蓄積されます。チームメイトが"なぜリポジトリにこのmodels/フォルダがあり、それを削除するとどうなるのか?"と尋ね、答えが5分の説明を必要とする場合、それは通常評価が始まる時です。 IronOCRはモデル管理のあらゆる側面を排除します。別途ダウンロードする必要も、CIにコピーする必要も、起動時に検証する必要もありません。
サポートされていない言語で文書が届いた場合
言語対応のギャップは、設定の問題ではなく、絶対的な制約です。 組織がドイツ語の契約書、フランス語の請求書、ロシア語の発注書、またはアラビア語の通信文書を受け取った場合、RapidOCR .NETはそれらの文書を処理する手段を提供しません。"精度が限定的"というわけではなく、モデルも結果も提供されないのです。 当初CJKに特化したユースケースのためにRapidOCR .NETを選択したチームは、その範囲外の文書を処理する必要が生じた際に、この限界に気づくことになる。 IronOCRの言語機能は、 NuGet経由でインストール可能な125以上の言語をカバーしているため、アプリケーションコードに手を加えることなく、OCRパイプラインが処理できる範囲を拡大できます。言語パックを追加し、列挙型プロパティを変更するだけで済みます。
アプリケーションがPDFの入力または出力を必要とする場合
ビジネス文書OCRの重要なカテゴリーの一つにPDFファイルがあります。スキャンされた契約書、アーカイブされた請求書、複合機でPDFに変換されたファックス送信フォームなどです。 RapidOCR .NETは、別途PDFレンダリングライブラリ、カスタム変換コード、およびページサイズのビットマップのメモリ管理がなければ、これらのファイルを読み取ることができません。 ドキュメント取り込みパイプラインを構築するチームは、RapidOCR for .NETスタックには少なくとも2つのライブラリ(PDFレンダリング用とOCR用)が必要であり、それぞれに独自のアップグレードサイクルと互換性があることにすぐに気づくでしょう。 IronOCRは、これら両方を単一のパッケージで処理します。 検索可能な PDF を生成する機能、つまりスキャンされたアーカイブを検索可能なインデックスに変換する機能は、RapidOCR .NETの範囲外であり、 IronOCRの単一のメソッド呼び出しで実現できます。 コンプライアンス要件を満たす文書管理アプリケーションを開発するチームは、検索可能なPDF出力機能を決定的な機能として挙げることが多い。
サポートパスがないまま本番環境でインシデントが発生した場合
コミュニティプロジェクトは、貢献者の都合に合わせて運営されます。 RapidOCR .NETの運用環境で、特定のONNXランタイムバージョンの競合、通常とは異なる画像フォーマットでのモデル推論の失敗、持続的な負荷下でのメモリリークなど、これまで経験したことのないエッジケースが発生した場合、サポートの手順はGitHubに問題を報告して対応を待つことになります。 SLA(サービスレベル契約)の義務を負うチームや、業務上重要な文書処理パイプラインを運用するチームにとって、それは実行可能なインシデント対応モデルではありません。 IronOCRの商用ライセンスには、直接メールによるサポートが含まれており、月曜日の締め切り前の金曜日の夜に何か問題が発生した場合でも、チームは実際に連絡を取ることができます。
プロジェクトがプロトタイプの想定を超える規模になったとき
RapidOCR .NETは、実験的な概念実証には妥当な選択肢です。無料であり、ライセンス交渉も不要で、モデル設定後もインストールは迅速です。しかし、その概念実証が製品版の機能になると、ラボ環境では許容範囲だった制約(PDF非対応、対応言語範囲の狭さ、手動モデル管理、商用サポートなしなど)が障害となります。 RapidOCR .NETからIronOCRへの移行手順は機械的です。パッケージを削除し、モデルディレクトリを削除し、MSBuild のコピールールを削除し、エンジン初期化ブロックを引数なしの単一の OCR エンジンコンストラクタに置き換え、PDF 入力、125 言語対応、自動前処理、検索可能な出力を同時に有効化します。
一般的な移行の考慮事項
エンジン初期化の置き換え
最も直接的なコード変更は、IronTesseractインスタンス化に置き換えることです。 4つのパスを持つ構成オブジェクトが完全に消滅します。
// Before: RapidOcrNet — engine needs all 4 paths populated
var engine = new RapidOcrEngine(new RapidOcrOptions
{
DetModelPath = "models/det.onnx",
ClsModelPath = "models/cls.onnx",
RecModelPath = "models/rec_en.onnx",
KeysPath = "models/en_keys.txt"
});
var result = engine.Run(imagePath);
var text = string.Join("\n", result.TextBlocks
.OrderBy(b => b.BoundingBox.Top)
.Select(b => b.Text));
// After: IronOCR — no configuration required
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var text = new IronTesseract().Read(imagePath).Text;
// Before: RapidOcrNet — engine needs all 4 paths populated
var engine = new RapidOcrEngine(new RapidOcrOptions
{
DetModelPath = "models/det.onnx",
ClsModelPath = "models/cls.onnx",
RecModelPath = "models/rec_en.onnx",
KeysPath = "models/en_keys.txt"
});
var result = engine.Run(imagePath);
var text = string.Join("\n", result.TextBlocks
.OrderBy(b => b.BoundingBox.Top)
.Select(b => b.Text));
// After: IronOCR — no configuration required
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var text = new IronTesseract().Read(imagePath).Text;
Imports System.Linq
' Before: RapidOcrNet — engine needs all 4 paths populated
Dim engine As New RapidOcrEngine(New RapidOcrOptions With {
.DetModelPath = "models/det.onnx",
.ClsModelPath = "models/cls.onnx",
.RecModelPath = "models/rec_en.onnx",
.KeysPath = "models/en_keys.txt"
})
Dim result = engine.Run(imagePath)
Dim text = String.Join(vbCrLf, result.TextBlocks _
.OrderBy(Function(b) b.BoundingBox.Top) _
.Select(Function(b) b.Text))
' After: IronOCR — no configuration required
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim text = New IronTesseract().Read(imagePath).Text
手動のresult.Textに収まります。 result.Wordsが結果の読み方ハウツーで文書化された構造化APIを通じて同じ単語ごとの座標と信頼度を公開します。
モデルファイルインフラストラクチャの削除
コードを置き換えた後、models/ディレクトリを削除し、ビルド時にモデルファイルをコピーしたMSBuild <Content>エントリを削除し、欠落ファイルを確認した起動時検証ロジックを削除します。 これらは不要です。IronOCRはデータを内部的に送信します。 CI/CDパイプラインでは、モデルファイルを取得またはキャッシュするステップをすべて削除してください。 この画像入力に関するハウツーガイドでは、既存のRapidOCR .NETコードでよく使用される一般的なファイルパス、ストリーム、バイト配列といったシナリオにおける入力処理パターンについて説明します。
低品質画像の取り扱い
RapidOCR.NETのONNXモデルは推論時に内部的に前処理を行いますが、ライブラリは呼び出し元に対して前処理APIを公開していません。 既存のコードがengine.Run()に渡す前に画像操作を適用する場合、そのコードは別の画像ライブラリに対して書かれました。 IronOCRはOcrInputで直接前処理APIを公開します:
using var input = new OcrInput();
input.LoadImage("low-quality-scan.jpg");
input.Deskew(); // Correct skewed scans
input.DeNoise(); // Remove scanner noise
input.Contrast(); // Enhance contrast
input.Binarize(); // Convert to black/white
input.EnhanceResolution(300);
var result = new IronTesseract().Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");
using var input = new OcrInput();
input.LoadImage("low-quality-scan.jpg");
input.Deskew(); // Correct skewed scans
input.DeNoise(); // Remove scanner noise
input.Contrast(); // Enhance contrast
input.Binarize(); // Convert to black/white
input.EnhanceResolution(300);
var result = new IronTesseract().Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");
Imports IronOcr
Using input As New OcrInput()
input.LoadImage("low-quality-scan.jpg")
input.Deskew() ' Correct skewed scans
input.DeNoise() ' Remove scanner noise
input.Contrast() ' Enhance contrast
input.Binarize() ' Convert to black/white
input.EnhanceResolution(300)
Dim result = New IronTesseract().Read(input)
Console.WriteLine($"Confidence: {result.Confidence}%")
End Using
画像方向補正の方法とDPI設定の方法について解説します。これらは、スキャンした文書の精度に最も影響を与える2つの前処理上の問題点です。 信頼度スコアはresult.Words[i].Confidenceを通じて単語ごとに利用可能です。
PDFサポートを追加
engine.Run()を呼び出す前にPDFから画像への変換を行ったコードはすべて完璧に削除できます。 IronTesseract.Read()はPDFパスを直接受け入れます。 PDFレンダリングライブラリへの依存関係と変換パイプラインコードを削除します。これは依存関係の追加ではなく、純粋な削減となります。
IronOCRの追加機能
比較セクションで説明した機能以外にも、 IronOCRはRapidOCR .NETにはない機能を提供しています。
-領域ベースのOCR:ページ全体を処理することなく、画像の特定領域からテキストを抽出します。 地域ベースのOCRハウツーとクロップ長方形の例は、請求書ヘッダー抽出、フォームフィールドターゲッティング、類似の部分ドキュメントシナリオに関するCropRectangle使用について説明しています。
- OCR中のバーコード読み取り: バーコード値をテキストとともに単一のパスで抽出するために
ocr.Configuration.ReadBarCodes = trueを設定します。 バーコードOCRハウツーとバーコードOCR例は、result.Barcodesが標準OCR出力と統合する方法を示しています。 -特殊な文書タイプ: IronOCR は、パスポート、ナンバープレート、手書き文字、表の抽出に関するテスト済みのガイダンスを提供します。 -非同期OCR:非同期OCRのハウツーでは、 ASP.NETリクエストハンドラーとバックグラウンドサービスにおけるノンブロッキング処理パターンを紹介します。 - hOCRと構造化エクスポート: IronOCRはOCR結果をhOCR XMLとして保存でき、単語レベルのバウンディングボックスを、下流の文書処理ツールと互換性のある標準形式で保持します。 hOCRのエクスポート方法については、出力フォーマットのオプションを説明しています。
.NETの互換性と将来の準備
IronOCRは、.NET 8、 .NET 9、 .NET Standard 2.0、および.NET Framework 4.6.2以降を対象としており、現在のEnterprise.NET環境のあらゆる範囲を網羅しています。 ライブラリは、Windows x64/x86、Linux x64、macOS x64、およびmacOS ARM(Apple Silicon)のクロスプラットフォームバイナリを提供し、コンテナ画像は標準のmcr.microsoft.com/dotnet/aspnetベース画像に対してテストされています。 RapidOCR.NETの互換性は、プラットフォーム固有のNuGetパッケージ選択(CPU用Microsoft.ML.OnnxRuntime.Gpu)が必要であり、同じバイナリインパッケージのシンプルさを保証しないONNX Runtimeのプラットフォームサポートマトリックスに制限されています。 IronOCRは、積極的なリリースサイクルを通じて.NET 10(2026年11月リリース予定)との互換性を維持しており、SDKのアップデート時にアプリケーションコードの変更は一切必要ありません。
結論
RapidOCR .NETは、特定の課題をうまく解決します。それは、Pythonのエコシステム全体を必要とせずに、CPUに最適化されたPaddleOCRモデルを.NETで実行することです。 モデルファイルを手動で管理できる管理された環境で、中国語または英語の画像のみを処理するチームにとっては、無料で十分な精度が得られます。 それが、その製品における使用事例の範囲です。
モデル管理のオーバーヘッドが決定的な制約となる。 外部のGitHubリポジトリから取得した4つの別々のファイルは、アプリケーションと同時にデプロイされ、実行時に検証され、上流プロジェクトが新しい重みをリリースするたびに手動で更新されます。これはプロトタイプでは問題になりません。 CI/CDパイプライン、複数環境へのデプロイ、複数の開発者を抱える本番サービスにとって、これはエンジニアリングの四半期を通して何時間もの時間を静かに浪費する、一種の運用上の摩擦である。 言語対応範囲の上限が問題をさらに悪化させている。ビジネス要件にCJK以外の言語が加わった途端、RapidOCR .NETは完全に機能しなくなってしまうのだ。
IronOCRは、RapidOCR.NETの限界が始まるところから始まる。 NuGetパッケージ1つ、外部ファイル不要、125以上の言語に対応、ネイティブPDF入力と検索可能なPDF出力、自動前処理、構造化された結果抽出、バージョン管理されたAPIによる商用サポート。 $999 Liteライセンスは、トランザクションごとのメーターや更新の必要なく一度限りの費用です。 モデル管理、PDF変換の回避策、サポート対象外言語に関するエスカレーションに費やされるエンジニアリング時間を算出したチームは、一貫して、無料の代替手段よりも商用ライブラリの方が経済的に有利であることを発見している。
現在RapidOCR .NETを本番環境で運用しているチーム、または新規プロジェクトでRapidOCR .NETを評価しているチームにとって、 IronOCRのチュートリアルハブとハウツーガイドは実践的な出発点となります。 移行は機械的で、コードはよりシンプルになり、操作対象は単一のパッケージ参照に縮小されます。
よくある質問
RapidOCR.NETとは何ですか?
RapidOCR.NETは、開発者や企業が画像や文書からテキストを抽出するために使用するOCRソリューションです。.NETアプリケーション開発のためにIronOCRとともに評価されるいくつかのOCRオプションの一つです。
IronOCRは.NET開発者向けのRapidOCR.NETと比較してどうですか?
IronOCRはNuGetネイティブ for .NET OCRライブラリで、.CoreエンジンとしてIronTesseractを使用しています。RapidOCR.NETと比較して、よりシンプルなデプロイメント(SDKインストーラーなし)、定額価格、COMインターオプやクラウド依存のないクリーンなC# APIを提供します。
IronOCRのセットアップはRapidOCR.NETより簡単ですか?
IronOCRは単一のNuGetパッケージでインストールされます。SDKインストーラー、ライセンスファイルのコピー、COMコンポーネントの登録、ランタイムバイナリの管理は必要ありません。OCRエンジン全体がパッケージにバンドルされています。
RapidOCR.NETとIronOCRにはどのような精度の違いがありますか?
IronOCRは、標準的なビジネス文書、請求書、領収書、スキャンしたフォームに対して高い認識精度を達成します。高度に劣化した文書や一般的でないスクリプトの場合、精度はソースの品質によって異なります。IronOCRは低品質入力の認識を向上させる画像前処理フィルターを含んでいます。
IronOCRはPDFテキスト抽出をサポートしていますか?
IronOCRは、ネイティブPDFとスキャンしたPDFイメージの両方から、一回の呼び出しでテキストを抽出します。また、複数ページのTIFFファイル、画像、ストリームもサポートします。スキャンしたPDFの場合、OCRはページごとに適用され、ページごとの結果オブジェクトを持ちます。
RapidOCR.NETのライセンスはIronOCRと比べてどうですか?
IronOCRは、定額制の永久ライセンスで、ページ毎やスキャン毎の課金はありません。大量のドキュメントを処理する組織は、ボリュームに関係なく同じライセンス費用を支払います。詳しくはIronOCRライセンスページをご覧ください。
IronOCR はどの言語をサポートしていますか?
IronOCRは個別のNuGet言語パックにより127言語をサポートしています。言語を追加するには'dotnet add package IronOcr.Languages.{Language}'コマンドを実行するだけです。手動でのファイル配置やパス設定は必要ありません。
.NETプロジェクトにIronOCRをインストールするにはどうすればよいですか?
NuGet経由でインストールします:パッケージマネージャーコンソールで'Install-Package IronOcr'、またはCLIで'dotnet add package IronOcr'。追加の言語パックも同様にインストールされます。ネイティブSDKインストーラーは必要ありません。
IronOCRはRapidOCR.NETと違い、Dockerやコンテナ・デプロイメントに適していますか?
IronOCRはNuGetパッケージによってDockerコンテナで動作します。ライセンスキーは環境変数で設定します。OCRエンジン自体にはライセンスファイル、SDKパス、ボリュームマウントは必要ありません。
RapidOCR.NETと比較して、購入前にIronOCRを試すことはできますか?
IronOCRのトライアルモードでは、ドキュメントを処理し、出力に透かしをオーバーレイしたOCR結果を返します。ライセンスを購入する前に、ご自身の文書で精度を確認することができます。
IronOCRはテキスト抽出とバーコード読み取りをサポートしていますか?
IronOCRはテキスト抽出とOCRに重点を置いています。バーコード読み取りについては、Iron SoftwareはIronBarcodeをコンパニオンライブラリとして提供しています。どちらも個別に、あるいはIron Suiteのバンドルとして提供されています。
RapidOCR.NETからIronOCRへの移行は簡単ですか?
RapidOCR.NETからIronOCRへの移行は通常、初期化シーケンスをIronTesseractのインスタンス生成に置き換え、COMライフサイクル管理を削除し、APIコールを更新します。ほとんどの移行はコードの複雑さを大幅に軽減する。

