フッターコンテンツにスキップ
他のコンポーネントと比較する

高度な文書分析

Tesseract OCR ではテキストを抽出する前に PDF ページを画像に変換する必要がありますが、IronOCR は組み込みの前処理機能を備えたネイティブ PDF サポートを提供し、スキャンされたドキュメントを大規模に処理する .NET 開発者にとって簡単なアプローチを提供します。

C#および.NETアプリケーションでは、スキャンしたPDF文書からテキストを抽出することが一般的な要件です。 請求書の処理、スキャンした文書のデジタル化、データ入力ワークフローの自動化など、開発者には PDF ファイルを編集可能で検索可能なデータに効率的に変換する信頼性の高いOCR ソリューションが必要です。 Tesseract OCRは、Googleによって保守されているオープンソースの光学式文字認識エンジンとして広く使われていますが、多くの.NET開発者は、特にPDFコンテンツを扱う際に大きな課題に遭遇します。

この比較では、Tesseract OCR とIronOCRを使用して C# でPDF からテキストへの変換を実行する方法を確認し、ソース コードの例と、運用システムに適したOCR ライブラリを選択するための実用的なガイダンスを提供します。 これにより、開発者は実稼働 OCR システムを構築するときに、各アプローチのアーキテクチャ上の意味を理解することができます。


PDF/スキャンした PDF の処理において、これらの OCR ソリューションはどのように比較されますか?

実装の詳細を検討する前に、スキャンされた PDF ファイルからのテキスト認識の主な機能の比較を示します。

機能 テッセラクト IronOCR
ネイティブPDF入力 なし(画像への変換が必要) はい
インストール 複数の依存関係 単一の NuGet パッケージ
パスワードで保護されたPDF サポートされていません サポート対象
画像の前処理 マニュアル(外部ツール) 内蔵フィルター
対応言語 100以上の言語 127以上の言語
ライセンス アパッチ2.0(無料) コマーシャル
.NET 統合 .NETラッパー経由 ネイティブ C# ライブラリ
画像フォーマット png、jpeg、tiff、bmp PNG、JPEG、TIFF、BMP、GIF、PDF
出力オプション プレーンテキスト、hOCR、HTML プレーンテキスト、検索可能なPDF、hOCR

比較すると、 IronOCR は、特に検索可能な PDF 生成バーコード認識を必要とするエンタープライズドキュメント管理システム向けに、より完全な PDF 処理機能を提供していることがわかります。


TesseractはどのようにPDFファイルを扱い、テキストを抽出しますか?

Tesseract OCRエンジンは、PDFドキュメントの入力をネイティブサポートしていません。 Tesseract の公式ドキュメントによると、開発者は OCR を実行する前に、まず PDF ページを PNG や JPEG などの入力画像形式に変換する必要があります。 このプロセスでは、各ページをレンダリングするために、Ghostscript、Docotic.Pdf、または同様のツールのような追加ライブラリが必要です。 変換ワークフローにより、生産システムが複雑になります。

以下は、C#でPDFからテキストを抽出する典型的なTesseractワークフローの簡略化した例です:

using Tesseract;
using System.Drawing;
using System.Threading.Tasks;

// Step 1: Convert PDF page to PNG image (requires separate PDF library)
// This example assumes you've already converted the scanned PDF to an image
string imagePath = "document-scan.png";

// Step 2: Initialize Tesseract with language data files path
var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default);

// Step 3: Load the input image and process
var img = Pix.LoadFromFile(imagePath);
var page = engine.Process(img);

// Step 4: Extract the recognized text
string extractedText = page.GetText();
Console.WriteLine($"Confidence: {page.GetMeanConfidence()}");
Console.WriteLine(extractedText);

// Optional: Get detailed results with bounding boxes
using (var iter = page.GetIterator())
{
    iter.Begin();
    do
    {
        if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out var bounds))
        {
            var word = iter.GetText(PageIteratorLevel.Word);
            Console.WriteLine($"Word: {word} at {bounds}");
        }
    } while (iter.Next(PageIteratorLevel.Word));
}

// Clean up resources
page.Dispose();
img.Dispose();
engine.Dispose();
using Tesseract;
using System.Drawing;
using System.Threading.Tasks;

// Step 1: Convert PDF page to PNG image (requires separate PDF library)
// This example assumes you've already converted the scanned PDF to an image
string imagePath = "document-scan.png";

// Step 2: Initialize Tesseract with language data files path
var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default);

// Step 3: Load the input image and process
var img = Pix.LoadFromFile(imagePath);
var page = engine.Process(img);

// Step 4: Extract the recognized text
string extractedText = page.GetText();
Console.WriteLine($"Confidence: {page.GetMeanConfidence()}");
Console.WriteLine(extractedText);

// Optional: Get detailed results with bounding boxes
using (var iter = page.GetIterator())
{
    iter.Begin();
    do
    {
        if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out var bounds))
        {
            var word = iter.GetText(PageIteratorLevel.Word);
            Console.WriteLine($"Word: {word} at {bounds}");
        }
    } while (iter.Next(PageIteratorLevel.Word));
}

// Clean up resources
page.Dispose();
img.Dispose();
engine.Dispose();
Imports Tesseract
Imports System.Drawing
Imports System.Threading.Tasks

' Step 1: Convert PDF page to PNG image (requires separate PDF library)
' This example assumes you've already converted the scanned PDF to an image
Dim imagePath As String = "document-scan.png"

' Step 2: Initialize Tesseract with language data files path
Dim engine As New TesseractEngine("./tessdata", "eng", EngineMode.Default)

' Step 3: Load the input image and process
Dim img As Pix = Pix.LoadFromFile(imagePath)
Dim page As Page = engine.Process(img)

' Step 4: Extract the recognized text
Dim extractedText As String = page.GetText()
Console.WriteLine($"Confidence: {page.GetMeanConfidence()}")
Console.WriteLine(extractedText)

' Optional: Get detailed results with bounding boxes
Using iter As ResultIterator = page.GetIterator()
    iter.Begin()
    Do
        Dim bounds As Rect
        If iter.TryGetBoundingBox(PageIteratorLevel.Word, bounds) Then
            Dim word As String = iter.GetText(PageIteratorLevel.Word)
            Console.WriteLine($"Word: {word} at {bounds}")
        End If
    Loop While iter.Next(PageIteratorLevel.Word)
End Using

' Clean up resources
page.Dispose()
img.Dispose()
engine.Dispose()
$vbLabelText   $csharpLabel

このコードは、NuGetで利用可能な.NETラッパーを使用した標準的なTesseractのアプローチを示しています。 engine初期化には、言語データ ファイルを含むtessdataフォルダーへのパスが必要です。これらのファイルは、 tessdata リポジトリから個別にダウンロードする必要があります。 img割り当ては、入力イメージを Leptonica の PIX 形式で読み込みます。これは、メモリ リークを防ぐために慎重なメモリ管理を必要とするアンマネージ C++ オブジェクトです。 Processからのpage結果によって、実際の光学文字認識操作が実行されます。

実稼働環境では、複数ページのドキュメントを処理するには追加のオーケストレーションが必要です。

// Example: Processing multiple PDF pages (after conversion)
public async Task<string> ProcessMultiPagePdf(string[] imagePaths)
{
    var results = new StringBuilder();
    var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default);

    foreach (var imagePath in imagePaths)
    {
        using (var img = Pix.LoadFromFile(imagePath))
        using (var page = engine.Process(img))
        {
            results.AppendLine($"Page confidence: {page.GetMeanConfidence():F2}");
            results.AppendLine(page.GetText());
            results.AppendLine("---");
        }
    }

    engine.Dispose();
    return results.ToString();
}
// Example: Processing multiple PDF pages (after conversion)
public async Task<string> ProcessMultiPagePdf(string[] imagePaths)
{
    var results = new StringBuilder();
    var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default);

    foreach (var imagePath in imagePaths)
    {
        using (var img = Pix.LoadFromFile(imagePath))
        using (var page = engine.Process(img))
        {
            results.AppendLine($"Page confidence: {page.GetMeanConfidence():F2}");
            results.AppendLine(page.GetText());
            results.AppendLine("---");
        }
    }

    engine.Dispose();
    return results.ToString();
}
Imports System.Text
Imports Tesseract

Public Async Function ProcessMultiPagePdf(imagePaths As String()) As Task(Of String)
    Dim results As New StringBuilder()
    Dim engine As New TesseractEngine("./tessdata", "eng", EngineMode.Default)

    For Each imagePath In imagePaths
        Using img = Pix.LoadFromFile(imagePath)
            Using page = engine.Process(img)
                results.AppendLine($"Page confidence: {page.GetMeanConfidence():F2}")
                results.AppendLine(page.GetText())
                results.AppendLine("---")
            End Using
        End Using
    Next

    engine.Dispose()
    Return results.ToString()
End Function
$vbLabelText   $csharpLabel

Tesseract ではなぜ最初にイメージ変換が必要なのでしょうか?

合計 500 ドルの請求書番号 1001 を表示する PDF ビューア。スキャンされた PDF 処理のドキュメント表示機能を示しています。

Tesseract のアーキテクチャは、ドキュメント処理ではなく画像処理にのみ重点を置いています。 この設計選択により、開発者は PDF から画像への変換パイプラインを自分で管理する必要があり、パスワードで保護された PDF複数ページのドキュメント、またはテキストと画像の両方を含む混合コンテンツの PDFを扱うときに複雑さが増します。 変換品質はOCR の精度に直接影響するため、結果を改善するには適切なDPI 設定が重要になります。

基本的な Tesseract 処理からどのような結果が期待できますか?

! Visual Studio デバッグコンソールに、.NET 9.0 アプリケーションから"請求書番号 1001"と"合計: $500.00"を含む PDF テキストの抽出が成功したことが表示されます。

ここでの重要な制限は、このコードが画像ファイルしか扱えないということです。 複数ページの PDF ドキュメントからテキストを抽出するには、開発者は各ページを PNG 画像としてレンダリングし、一時ファイルを保存し、各ページをOCR エンジンで個別に処理し、認識されたテキストの結果を集約する追加ロジックを実装する必要があります。 この複数ステップのワークフローにより複雑さが増し、潜在的な障害ポイントが発生します。 デジタルカメラで撮影した画像や白い背景の文書では、正確なテキスト認識を実現するために前処理が必要になる場合があります。 信頼スコアは抽出品質の検証に役立ちますが、手動での解釈としきい値の設定が必要です。


IronOCRはどのようにPDFや画像フォーマットを直接処理するのですか?

IronOCR はネイティブ PDF サポートを提供するため、スキャンしたドキュメントを中間画像形式に変換する必要がありません。 ライブラリは PDF レンダリングを内部的に処理し、 .NET アプリケーションのワークフローを簡素化します。 このアプローチは、パフォーマンス信頼性が重要なエンタープライズ ドキュメント処理に役立ちます。 統合されたTesseract 5 エンジンは、クロスプラットフォームの互換性を維持しながら、以前のバージョンよりも精度が向上しています。

using IronOcr;
using System.Linq;

// Initialize the OCR engine (improved Tesseract 5)
var ocr = new IronTesseract();

// Configure for improved accuracy
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto;
ocr.Configuration.ReadBarCodes = true; // Also detect barcodes/QR codes

// Load PDF document directly - no conversion needed
var input = new OcrInput();
input.LoadPdf("scanned-document.pdf", Password: "optional-password");

// Optional: Pre-process for better accuracy on low-quality scans
input.DeNoise();  // Remove noise from scanned paper documents
input.Deskew();   // Fix rotation from images captured at angles
input.EnhanceResolution(300); // Ensure improved DPI

// Extract text from all pages and create searchable data
OcrResult result = ocr.Read(input);

// Access detailed results
Console.WriteLine($"Overall Confidence: {result.Confidence}%");
Console.WriteLine($"Pages Processed: {result.Pages.Count()}");
Console.WriteLine(result.Text);

// Export as searchable PDF
result.SaveAsSearchablePdf("searchable-output.pdf");
using IronOcr;
using System.Linq;

// Initialize the OCR engine (improved Tesseract 5)
var ocr = new IronTesseract();

// Configure for improved accuracy
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto;
ocr.Configuration.ReadBarCodes = true; // Also detect barcodes/QR codes

// Load PDF document directly - no conversion needed
var input = new OcrInput();
input.LoadPdf("scanned-document.pdf", Password: "optional-password");

// Optional: Pre-process for better accuracy on low-quality scans
input.DeNoise();  // Remove noise from scanned paper documents
input.Deskew();   // Fix rotation from images captured at angles
input.EnhanceResolution(300); // Ensure improved DPI

// Extract text from all pages and create searchable data
OcrResult result = ocr.Read(input);

// Access detailed results
Console.WriteLine($"Overall Confidence: {result.Confidence}%");
Console.WriteLine($"Pages Processed: {result.Pages.Count()}");
Console.WriteLine(result.Text);

// Export as searchable PDF
result.SaveAsSearchablePdf("searchable-output.pdf");
Imports IronOcr
Imports System.Linq

' Initialize the OCR engine (improved Tesseract 5)
Dim ocr As New IronTesseract()

' Configure for improved accuracy
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto
ocr.Configuration.ReadBarCodes = True ' Also detect barcodes/QR codes

' Load PDF document directly - no conversion needed
Dim input As New OcrInput()
input.LoadPdf("scanned-document.pdf", Password:="optional-password")

' Optional: Pre-process for better accuracy on low-quality scans
input.DeNoise()  ' Remove noise from scanned paper documents
input.Deskew()   ' Fix rotation from images captured at angles
input.EnhanceResolution(300) ' Ensure improved DPI

' Extract text from all pages and create searchable data
Dim result As OcrResult = ocr.Read(input)

' Access detailed results
Console.WriteLine($"Overall Confidence: {result.Confidence}%")
Console.WriteLine($"Pages Processed: {result.Pages.Count()}")
Console.WriteLine(result.Text)

' Export as searchable PDF
result.SaveAsSearchablePdf("searchable-output.pdf")
$vbLabelText   $csharpLabel

IronTesseractクラスは、.NET Coreおよび.NET Framework環境向けに特別に構築された、最適化されたTesseract 5エンジンをラップしています。 標準の.NETラッパーとは異なり、この実装はメモリ管理を自動的に処理し、.NETアプリケーションのパフォーマンス最適化を含んでいます。 OcrInputクラスは、LoadPdfメソッドを介してPDFファイルを直接受け入れ、ダウンロードする追加ライブラリを必要とせずに内部でページをレンダリングします。

DeNoise()Deskew()メソッドは、画像前処理フィルタを適用し、背景のノイズや斑点、わずかな回転があるスキャン文書の精度を大幅に向上させることができます。 これらのフィルタは、理想的な条件下でキャプチャされたものではない、実際にスキャンされた紙文書を扱う場合に特に役立ちます。 OcrResultオブジェクトは、抽出されたプレーンテキストと、信頼度スコアや後処理の検証のための文字位置などの追加メタデータを含んでいます。 結果を検索可能なPDFまたはHTML形式で出力することもできます。

よりコントロールするために、開発者は特定のページ、あるいはPDFドキュメント内の領域を指定することができます:

using IronOcr;
using System.Drawing;

var ocr = new IronTesseract();

// Advanced configuration for specific document types
ocr.Configuration = new TesseractConfiguration()
{
    WhiteListCharacters = "0123456789.$,", // For financial documents
    BlackListCharacters = "`~", 
    PageSegmentationMode = TesseractPageSegmentationMode.SingleColumn
};

// Load specific pages from a PDF file (pages 1 and 2)
var input = new OcrInput();
input.LoadPdfPages("web-report.pdf", new[] { 0, 1 });

// Target specific regions for extraction (e.g., invoice totals)
var cropRegion = new CropRectangle(x: 100, y: 500, width: 400, height: 200);
foreach (var page in input.Pages)
{
    page.AddCropRegion(cropRegion);
}

// Perform OCR and get searchable text
OcrResult result = ocr.Read(input);

// Access structured data
foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber}:");
    foreach (var paragraph in page.Paragraphs)
    {
        Console.WriteLine($"  Paragraph (Confidence: {paragraph.Confidence}%):");
        Console.WriteLine($"  {paragraph.Text}");
    }
}
using IronOcr;
using System.Drawing;

var ocr = new IronTesseract();

// Advanced configuration for specific document types
ocr.Configuration = new TesseractConfiguration()
{
    WhiteListCharacters = "0123456789.$,", // For financial documents
    BlackListCharacters = "`~", 
    PageSegmentationMode = TesseractPageSegmentationMode.SingleColumn
};

// Load specific pages from a PDF file (pages 1 and 2)
var input = new OcrInput();
input.LoadPdfPages("web-report.pdf", new[] { 0, 1 });

// Target specific regions for extraction (e.g., invoice totals)
var cropRegion = new CropRectangle(x: 100, y: 500, width: 400, height: 200);
foreach (var page in input.Pages)
{
    page.AddCropRegion(cropRegion);
}

// Perform OCR and get searchable text
OcrResult result = ocr.Read(input);

// Access structured data
foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber}:");
    foreach (var paragraph in page.Paragraphs)
    {
        Console.WriteLine($"  Paragraph (Confidence: {paragraph.Confidence}%):");
        Console.WriteLine($"  {paragraph.Text}");
    }
}
Imports IronOcr
Imports System.Drawing

Dim ocr = New IronTesseract()

' Advanced configuration for specific document types
ocr.Configuration = New TesseractConfiguration() With {
    .WhiteListCharacters = "0123456789.$,", ' For financial documents
    .BlackListCharacters = "`~",
    .PageSegmentationMode = TesseractPageSegmentationMode.SingleColumn
}

' Load specific pages from a PDF file (pages 1 and 2)
Dim input = New OcrInput()
input.LoadPdfPages("web-report.pdf", {0, 1})

' Target specific regions for extraction (e.g., invoice totals)
Dim cropRegion = New CropRectangle(x:=100, y:=500, width:=400, height:=200)
For Each page In input.Pages
    page.AddCropRegion(cropRegion)
Next

' Perform OCR and get searchable text
Dim result As OcrResult = ocr.Read(input)

' Access structured data
For Each page In result.Pages
    Console.WriteLine($"Page {page.PageNumber}:")
    For Each paragraph In page.Paragraphs
        Console.WriteLine($"  Paragraph (Confidence: {paragraph.Confidence}%):")
        Console.WriteLine($"  {paragraph.Text}")
    Next
Next
$vbLabelText   $csharpLabel

LoadPdfPagesメソッドは、ゼロベースのページインデックス値の配列を受け入れ、すべてのページをメモリに読み込むことなく、大きなPDF文書の選択的な処理を可能にします。 また、API は、同じドキュメント内の複数の言語を認識するように Tesseract を構成する追加の言語パックを通じて、複数の言語をサポートします。 領域ベースの抽出機能は、請求書フォーム財務諸表などの構造化ドキュメントの処理に不可欠です。 トリミング領域機能を使用すると、ヘッダー、フッター、データ テーブルなどの特定の領域をターゲットにすることができます。

IronOCR はどのような種類の PDF を処理できますか?

! IronPDF ホームページでは、HTML から PDF への変換、編集、1500 万回以上の NuGet ダウンロードを含む完全な C# PDF ライブラリ機能を紹介

IronOCR は、スキャンされたドキュメントネイティブ テキスト PDF混合コンテンツパスワードで保護されたファイルなど、さまざまな PDF タイプを処理します。 ライブラリは、PDF に抽出可能なテキストが含まれているか、 OCR 処理が必要かどうかを自動的に検出し、各シナリオに合わせてパフォーマンスを最適化します。 この汎用性により、文書のデジタル化プロジェクト自動データ抽出に適しています。 ストリーム サポートにより、一時ファイルを使用せずにメモリからドキュメントを処理できるため、クラウド展開安全な環境に最適です。

ページ固有の処理はどのように機能しますか?

! RenderUrlAsPdf、RenderHtmlFileAsPdf、RenderHtmlAsPdf メソッドを使用した HTML から PDF への変換の C# コード例を示した IronPDF ドキュメント

ページ固有の処理により、関連するページのみをターゲットにして大規模なドキュメントを効率的に処理できます。 この機能は、複数ページのドキュメントの特定のセクションからデータを抽出する必要がある バッチ処理システムにとって非常に重要です。 非同期サポートにより、メイン スレッドをブロックせずに複数のドキュメントを並列処理できます。 中止トークンなどの高度な機能は、長時間実行される操作のキャンセル サポートを提供し、タイムアウト構成はリソースの枯渇を防ぎます。## セットアップとワークフローの主な違いは何ですか?

Tesseract ではなぜインストールがより複雑になるのでしょうか?

Visual StudioでTesseractを動作させるには、Tesseract OCRエンジンのバイナリ、 Leptonicaイメージングライブラリ、Windows用Visual C++再頒布可能パッケージ、そして認識する各言語の言語データファイルなど、いくつかのコンポーネントが必要です。開発者はTessdataファイルをダウンロードし、パスを正しく設定する必要があります。 AzureDocker コンテナーLinux サーバーなどの環境へのクロスプラットフォーム展開では、多くの場合、プラットフォーム固有の構成と依存関係パスのトラブルシューティングが必要になります。 フォントや編集可能なドキュメントを扱うには、追加の設定が必要になる場合があります。libgdiplusへの依存関係により、 Windows 以外のプラットフォームでは追加の課題が生じます。

ランタイム環境では外部依存関係とメモリ割り当てに厳しい制限があるため、 Azure FunctionsまたはAWS Lambda のデプロイメントを扱う場合には依存関係の管理が特に困難になります。 AVX をサポートしていない古い CPU でのSEHException エラーにより、複雑さがさらに増します。 開発者は、ランタイム フォルダーのアクセス許可tessdata の場所のエラーに悩まされることがよくあります。

IronOCR は、外部依存関係のない単一の NuGet パッケージへのインストールを簡素化します。

Install-Package IronOcr
Install-Package IronOcr
SHELL

特殊なドキュメント タイプの場合、追加のパッケージによって機能が向上します。

Install-Package IronOcr.Extensions.AdvancedScan

# For specific languages
Install-Package IronOcr.Languages.French
Install-Package IronOcr.Languages.Japanese
Install-Package IronOcr.Extensions.AdvancedScan

# For specific languages
Install-Package IronOcr.Languages.French
Install-Package IronOcr.Languages.Japanese
SHELL

! NuGet パッケージ マネージャー コンソールに IronOCR のインストールが成功し、依存関係の自動解決が約 20 秒で完了したことが示されています。

必要なコンポーネントはすべてライブラリにバンドルされています。 追加言語の言語パックは、同様に簡単にインストールできる個別の NuGet パッケージとして提供されており、手動でのファイル管理やフォルダー構成は不要になります。 OCR ライブラリは、 WindowsmacOSLinux、.NET Framework 4.6.2+ 、. NET Core 、.NET 5-10 をデフォルトでサポートします。 ドキュメントは、開発者が OCR ソリューションを迅速に作成するのに役立ちます。 Windows インストーラーは、エンタープライズ環境向けの代替インストール方法を提供します。

PDF 処理のワークフローを比較するとどうなりますか?

PDF テキスト抽出のための Tesseract アプローチには、複数のステップが含まれます。PDF ドキュメントを読み込む → 個別のライブラリを使用して各ページを PNG などの画像形式に変換する → PIX 形式を使用して画像を Tesseract に読み込む → 各ページを処理する → すべてのページの文字列結果を集約する。 各ステップは潜在的な障害点を招き、エラー処理を必要とし、コードベース全体のサイズを増加させます。開発者は、管理されていないPIXオブジェクトからのメモリリークを防ぐために、メモリ管理を慎重に行う必要があります。 コード例では、基本的なPDF処理を処理するために数十行を必要とすることがよくあります。 System.Drawing の依存関係により、 .NET 7 以降の環境では追加の課題が生じます。

IronOCRはこのワークフロー全体を、PDFの読み込み→処理→結果へのアクセスに凝縮しています。 ライブラリは、PDF のレンダリング、メモリの割り当て、複数ページの処理、結果の集約を内部で管理します。 この単純化されたアプローチは、コードの複雑さと開発時間を削減し、バグの機会を最小限に抑えます。 認識されたテキストは、1 回の API 呼び出しでプレーンテキスト、検索可能な PDF 、またはその他の形式で保存できます。 エクスポート機能には、検証用の OCR 要素の画像の抽出が含まれます。

以下は、エラー処理と進捗状況の追跡を示す本番環境対応の例です。

using IronOcr;
using System;
using System.Threading.Tasks;

public class PdfOcrService
{
    private readonly IronTesseract _ocr;

    public PdfOcrService()
    {
        _ocr = new IronTesseract();

        // Subscribe to progress events
        _ocr.OcrProgress += (sender, e) => 
        {
            Console.WriteLine($"Processing page {e.PagesComplete}/{e.TotalPages} - {e.ProgressPercent}%");
        };
    }

    public async Task<OcrResult> ProcessPdfWithErrorHandling(string pdfPath)
    {
        try
        {
            var input = new OcrInput();

            // Check file size for large documents
            var fileInfo = new System.IO.FileInfo(pdfPath);
            if (fileInfo.Length > 100_000_000) // 100MB
            {
                // Use lower DPI for large files
                input.TargetDPI = 150;
            }

            input.LoadPdf(pdfPath);

            // Apply filters based on document quality assessment
            if (RequiresPreprocessing(input))
            {
                input.DeNoise();
                input.Deskew();
                input.EnhanceResolution(300);
            }

            // Process with timeout protection
            using (var cts = new System.Threading.CancellationTokenSource(TimeSpan.FromMinutes(5)))
            {
                return await _ocr.ReadAsync(input, cts.Token);
            }
        }
        catch (Exception ex)
        {
            // Log and handle specific exceptions
            throw new ApplicationException($"OCR processing failed: {ex.Message}", ex);
        }
    }

    private bool RequiresPreprocessing(OcrInput input)
    {
        // Implement quality assessment logic
        return true;
    }
}
using IronOcr;
using System;
using System.Threading.Tasks;

public class PdfOcrService
{
    private readonly IronTesseract _ocr;

    public PdfOcrService()
    {
        _ocr = new IronTesseract();

        // Subscribe to progress events
        _ocr.OcrProgress += (sender, e) => 
        {
            Console.WriteLine($"Processing page {e.PagesComplete}/{e.TotalPages} - {e.ProgressPercent}%");
        };
    }

    public async Task<OcrResult> ProcessPdfWithErrorHandling(string pdfPath)
    {
        try
        {
            var input = new OcrInput();

            // Check file size for large documents
            var fileInfo = new System.IO.FileInfo(pdfPath);
            if (fileInfo.Length > 100_000_000) // 100MB
            {
                // Use lower DPI for large files
                input.TargetDPI = 150;
            }

            input.LoadPdf(pdfPath);

            // Apply filters based on document quality assessment
            if (RequiresPreprocessing(input))
            {
                input.DeNoise();
                input.Deskew();
                input.EnhanceResolution(300);
            }

            // Process with timeout protection
            using (var cts = new System.Threading.CancellationTokenSource(TimeSpan.FromMinutes(5)))
            {
                return await _ocr.ReadAsync(input, cts.Token);
            }
        }
        catch (Exception ex)
        {
            // Log and handle specific exceptions
            throw new ApplicationException($"OCR processing failed: {ex.Message}", ex);
        }
    }

    private bool RequiresPreprocessing(OcrInput input)
    {
        // Implement quality assessment logic
        return true;
    }
}
Imports IronOcr
Imports System
Imports System.Threading.Tasks
Imports System.IO

Public Class PdfOcrService
    Private ReadOnly _ocr As IronTesseract

    Public Sub New()
        _ocr = New IronTesseract()

        ' Subscribe to progress events
        AddHandler _ocr.OcrProgress, Sub(sender, e)
                                         Console.WriteLine($"Processing page {e.PagesComplete}/{e.TotalPages} - {e.ProgressPercent}%")
                                     End Sub
    End Sub

    Public Async Function ProcessPdfWithErrorHandling(pdfPath As String) As Task(Of OcrResult)
        Try
            Dim input As New OcrInput()

            ' Check file size for large documents
            Dim fileInfo As New FileInfo(pdfPath)
            If fileInfo.Length > 100_000_000 Then ' 100MB
                ' Use lower DPI for large files
                input.TargetDPI = 150
            End If

            input.LoadPdf(pdfPath)

            ' Apply filters based on document quality assessment
            If RequiresPreprocessing(input) Then
                input.DeNoise()
                input.Deskew()
                input.EnhanceResolution(300)
            End If

            ' Process with timeout protection
            Using cts As New Threading.CancellationTokenSource(TimeSpan.FromMinutes(5))
                Return Await _ocr.ReadAsync(input, cts.Token)
            End Using
        Catch ex As Exception
            ' Log and handle specific exceptions
            Throw New ApplicationException($"OCR processing failed: {ex.Message}", ex)
        End Try
    End Function

    Private Function RequiresPreprocessing(input As OcrInput) As Boolean
        ' Implement quality assessment logic
        Return True
    End Function
End Class
$vbLabelText   $csharpLabel

このパターンでは、IronOCR の非同期機能進捗状況の追跡によって、大規模なドキュメントを処理し、ユーザー フィードバックを提供し、適切なタイムアウト処理を実装する信頼性の高い運用システムを構築する方法を説明します。 詳細な設定オプションにより、特定のドキュメント タイプを微調整できます。

特殊なドキュメントの場合、IronOCR は専用のメソッドを提供します。

// Process different document types with optimized settings
var ocr = new IronTesseract();

// For license plates
var licensePlateResult = ocr.ReadLicensePlate("car-photo.jpg");
Console.WriteLine($"License Plate: {licensePlateResult.Text}");

// For passports with MRZ
var passportResult = ocr.ReadPassport("passport-scan.pdf");
Console.WriteLine($"Passport Number: {passportResult.PassportNumber}");
Console.WriteLine($"Name: {passportResult.GivenNames} {passportResult.Surname}");

// For handwritten text
var handwritingResult = ocr.ReadHandwriting("handwritten-note.png");
Console.WriteLine($"Handwriting: {handwritingResult.Text}");

// For MICR cheques
var chequeResult = ocr.ReadMicrCheque("cheque-image.tiff");
Console.WriteLine($"Account: {chequeResult.AccountNumber}");
Console.WriteLine($"Routing: {chequeResult.RoutingNumber}");
// Process different document types with optimized settings
var ocr = new IronTesseract();

// For license plates
var licensePlateResult = ocr.ReadLicensePlate("car-photo.jpg");
Console.WriteLine($"License Plate: {licensePlateResult.Text}");

// For passports with MRZ
var passportResult = ocr.ReadPassport("passport-scan.pdf");
Console.WriteLine($"Passport Number: {passportResult.PassportNumber}");
Console.WriteLine($"Name: {passportResult.GivenNames} {passportResult.Surname}");

// For handwritten text
var handwritingResult = ocr.ReadHandwriting("handwritten-note.png");
Console.WriteLine($"Handwriting: {handwritingResult.Text}");

// For MICR cheques
var chequeResult = ocr.ReadMicrCheque("cheque-image.tiff");
Console.WriteLine($"Account: {chequeResult.AccountNumber}");
Console.WriteLine($"Routing: {chequeResult.RoutingNumber}");
' Process different document types with optimized settings
Dim ocr = New IronTesseract()

' For license plates
Dim licensePlateResult = ocr.ReadLicensePlate("car-photo.jpg")
Console.WriteLine($"License Plate: {licensePlateResult.Text}")

' For passports with MRZ
Dim passportResult = ocr.ReadPassport("passport-scan.pdf")
Console.WriteLine($"Passport Number: {passportResult.PassportNumber}")
Console.WriteLine($"Name: {passportResult.GivenNames} {passportResult.Surname}")

' For handwritten text
Dim handwritingResult = ocr.ReadHandwriting("handwritten-note.png")
Console.WriteLine($"Handwriting: {handwritingResult.Text}")

' For MICR cheques
Dim chequeResult = ocr.ReadMicrCheque("cheque-image.tiff")
Console.WriteLine($"Account: {chequeResult.AccountNumber}")
Console.WriteLine($"Routing: {chequeResult.RoutingNumber}")
$vbLabelText   $csharpLabel

これらの特殊な方法では、機械学習モデルと特定のドキュメント タイプに最適化された構成が使用され、一般的な OCR アプローチよりも高い精度が実現されます。 ナンバープレート認識はさまざまな国際形式に対応し、パスポート読み取りでは MRZ データを自動的に抽出します。 手書き認識は英語テキストで約 90% の精度を実現し、 MICR 小切手処理は銀行文書を効率的に処理します。


開発者はどのソリューションを選択すべきですか?

TesseractとIronOCRのどちらを選択するかは、特定のプロジェクトの要件と制約によって決まります。

Tesseractをお選びください:

  • 予算の制約により無料のソリューションが必要
  • 画像ファイルのみを扱う
  • プロジェクトタイムラインによりセットアップのトラブルシューティングが可能
  • カスタムOCRエンジンのトレーニングが必要です
  • チームはC++相互運用性の経験がある
  • カスタム辞書が必要です

IronOCRをお選びください:

  • PDFファイルとスキャンした文書が主な入力フォーマットです。
  • 開発時間とコードの簡素化が優先されます。
  • Azure、Docker、Linuxへのクロスプラットフォーム展開が必要です。
  • 組み込みの前処理機能により、実際のスキャンでの精度が向上します。
  • 商用サポート、ドキュメント、定期的な更新が価値を提供します。
  • プロジェクトでは、複数言語サポートやパスワードで保護されたPDFハンドリングなどの機能が必要です。
  • スキャンした紙文書から検索可能なPDF出力を作成する必要があります。

どちらのソリューションも、光学文字認識の中核として Tesseract の OCR エンジンを使用しています。 ただし、IronOCR はネイティブ .NET 統合、組み込みの前処理フィルター、および直接 PDF サポートによって機能を拡張し、開発者が運用 .NET アプリケーションで OCR を実装する際に遭遇する一般的な問題点に対処します。 ライセンス モデルには、使用要件に基づいたアップグレードおよび拡張のオプションが含まれています。

IronOCRIronBarcode の両方を評価しているチームにとって、統合された機能により、単一のソリューションで完全なドキュメント処理機能が提供されます。

.NET 開発者にとっての肝心なことは何でしょうか?

無料トライアルを開始してIronOCRを特定のPDF文書で評価するか、ライセンスオプションを確認して本番展開を行ってください。

BRACKET-i-OPEN--Googleは各所有者の登録商標です。 このサイトは、Google と提携しているわけでも、Google が推奨しているわけでも、Google がスポンサーしているわけでもありません。 すべての製品名、ロゴ、およびブランドは各所有者の所有物です。 比較は情報提供のみを目的としており、執筆時点で公開されている情報を反映しています。

よくある質問

PDFテキスト抽出にTesseract OCRを使用する際の主な課題は何ですか?

Tesseract OCRは、PDFの様々な機能へのサポートが限られているため、PDFコンテンツの処理に課題があることが多く、テキスト抽出の精度と効率に影響を与える可能性があります。

IronOCRはPDFからのテキスト抽出をどのように改善しますか?

IronOCRはPDFをテキストに変換するための高度な機能を提供し、複雑な文書構造をより良くサポートし、OCRの精度とパフォーマンスを向上させる機能を統合しています。

なぜ開発者は.NETアプリケーションにTesseract OCRではなくIronOCRを選ぶのですか?

開発者はIronOCRを.NETアプリケーションへの統合のしやすさ、様々なPDF要素のロバストな処理、Tesseract OCRの能力を凌駕する信頼性の高いテキスト抽出結果から選択することが多い。

IronOCRはスキャン文書を効果的に処理できますか?

IronOcrはスキャンされたドキュメントを効率的に処理し、高い精度で編集・検索可能なテキストに変換するように設計されています。

IronOCRはデータ入力ワークフローの自動化に適していますか?

IronOCRはPDFから素早く正確にデータを抽出できるため、データ入力ワークフローの自動化に適しており、手作業による入力を減らし、効率を高めます。

IronOCRを使用するとどのようなPDF文書に最も効果がありますか?

請求書、契約書、スキャンした紙の記録などの文書は、IronOCRの高度なテキスト抽出機能によって大きな恩恵を受け、簡単にデジタルフォーマットに変換することができます。

IronOCR は Tesseract OCR のようなオープンソースのソリューションと比較してどうですか?

Tesseract OCRは人気のあるオープンソースのソリューションですが、IronOCRはより高い精度、より優れたPDF処理、C#や.NETとのシームレスな統合といった強化された機能を提供し、多くの開発者に選ばれています。

IronOCRはどのようなプログラミング環境に対応していますか?

IronOCRはC#と.NET環境と完全に互換性があり、これらのフレームワークで作業する開発者にとって多用途で強力なツールとなります。

IronOCRは検索可能なPDFをサポートしていますか?

IronOCRはスキャンしたPDFを検索可能な文書に変換することができます。

PDFテキスト抽出にIronOCRを使用する主な利点は何ですか?

IronOCRを使用する主な利点は、複雑なPDF文書から正確にテキストを抽出し、テキスト変換プロセスを簡素化する信頼性の高い結果を提供できることです。

Kannaopat Udonpant
ソフトウェアエンジニア
ソフトウェアエンジニアになる前に、Kannapatは北海道大学で環境資源の博士号を修了しました。博士号を追求する間に、彼はバイオプロダクションエンジニアリング学科の一部である車両ロボティクスラボラトリーのメンバーになりました。2022年には、C#のスキルを活用してIron Softwareのエンジニアリングチームに参加し、IronPDFに注力しています。Kannapatは、IronPDFの多くのコードを執筆している開発者から直接学んでいるため、この仕事を大切にしています。同僚から学びながら、Iron Softwareでの働く社会的側面も楽しんでいます。コードやドキュメントを書いていない時は、KannapatはPS5でゲームをしたり、『The Last of Us』を再視聴したりしていることが多いです。