IRONOCRの使い方

.NET OCR SDK: C# 用テキスト認識ライブラリ

Kannaopat Udonpant
Kannapat Udonpant
Updated: 2026年4月21日

.NET OCR SDKは、C#および.NETアプリケーションが画像、スキャンされたPDF、その他のドキュメント形式からプログラムによってテキストを抽出できるようにするソフトウェア開発キットです。 IronOCRは、本番環境ですぐに使用できる.NET OCR SDKです。調整済みのTesseract 5エンジンをベースに、前処理フィルター、バーコード読み取り、検索可能なPDF出力、125以上の言語のサポートなど、様々な機能を搭載しています。これらの機能はすべて、Windows、Linux、macOS、クラウドプラットフォームで動作するクリーンなC# APIを通じて利用可能です。

IronOCRがあなたのプロジェクトに最適な.NET OCR SDKである理由とは?

ゼロからテキスト認識システムを構築するということは、画像前処理パイプライン、言語データファイル、スレッドモデル、出力解析などを管理することを意味し、最初の単語を抽出するまでに数ヶ月の作業が必要となる。 IronOCRは、実績のあるエンジンを搭載することで、そうした負担を解消します。チームは数分でプロジェクトに組み込むことができます。

Tesseractの生のバインディングと一線を画す主な機能:

  • 手書き文字を含む125以上の言語と文字体系を認識
  • 内蔵フィルター:ノイズ除去、傾き補正、二値化、解像度向上、コントラスト補正
  • 同一読み取りパス内でバーコードとQRコードを検出
  • アーカイブワークフロー用の非表示テキストレイヤーを備えた検索可能なPDF生成
  • 高スループットパイプライン向けの非同期および並列バッチ処理
  • 特定のページ領域を対象としたゾーンOCRにより、処理時間を短縮
  • Windows、Linux、macOS、Docker、Azureでのクロスプラットフォーム対応

Tesseract OCRプロジェクトのドキュメントによると、Tesseractの生データでは、言語パック、DPI設定、出力モードなどを手動で設定する必要がある。 IronOCRはこれらすべてを自動的に処理するため、抽出方法ではなく、抽出されたテキストの意味に集中できます。

IronOCRはRaw Tesseractと比べてどう違うのか?

P/InvokeラッパーまたはTesseract NuGetパッケージを使用して、以下をあなた自身で管理する必要があります:tessdata言語ファイルのダウンロードと配置、正しいページ分割モードの選択、マルチページのTIFFおよびPDFの分割の処理、パラレル処理を希望する場合のスレッド設定。 これらの詳細はどれも、あなたのビジネス上の問題に特有のものではありません。

IronOCRは、そうした配管システム全体を包み込みます。 型付きAPIインターフェース、自動的なtessdata管理、組み込みのPDF分割・再結合機能、そして複数のリクエストで再利用できるスレッドセーフなエンジンが利用できます。 その代償として、本番環境で使用するには有料ライセンスが必要になります。ライセンスページには、無料の開発ライセンスを含む現在の価格帯が表示されています。

オープンソースのみの依存関係を必要とするチームにとって、Tesseractの生データにPlusのプリプロセス処理を組み合わせる方法は有効な選択肢となる。 信頼性の高いOCRを迅速に提供する必要があるチームにとって、 IronOCRは統合対象をわずか数行のC#コードにまで削減します。

IronOCR .NET SDKはどのようにインストールするのですか?

インストールは、標準 for .NETパッケージマネージャーであるNuGetを通じて行います。 プロジェクトディレクトリで次のコマンドを実行します:

PM > Install-Package IronOcr

Visual Studioユーザーの場合、NuGetパッケージマネージャーGUIでIronOcrを検索し、そこからインストールしてください。 手動でのDLL参照を含む完全なインストールオプションについては、 IronOCRのインストールに関するドキュメントを参照してください。

インストール後、アプリケーションのスタートアップまたはappsettings.jsonにライセンスキーを追加してください。 無料トライアルを開始すると、評価期間中にすべての機能が利用できるトライアルキーが入手できます。

インストールの確認

インストール後の簡単な確認で、すべてが正しく配線されていることが確認できます。 .NET 10 をターゲットとするコンソールアプリケーションを作成します。

using IronOcr;

// Minimal smoke test -- reads a single image and prints extracted text
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("sample.png");
var result = ocr.Read(input);
Console.WriteLine(result.Text);

コンソールにテキストが表示された場合、SDKはインストールされており、ライセンスキーは有効です。 これで、本番環境のワークフローを構築する準備が整いました。

画像やPDFからテキストを抽出するにはどうすればよいですか?

コア抽出パターンはすべての入力タイプにおいて一貫しています。Read()を呼び出してください。 IronOCRは拡張子からファイル形式を自動検出するため、JPEG、PNG、TIFF、BMP、および複数ページのPDFファイルを同じコードパスで処理できます。

using IronOcr;

// Reusable OCR service encapsulating the IronTesseract engine
public class OcrService
{
    private readonly IronTesseract _ocr = new IronTesseract();

    public string ExtractText(string filePath)
    {
        using var input = new OcrInput();

        // LoadPdf for PDF files; LoadImage for raster formats
        if (filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
            input.LoadPdf(filePath);
        else
            input.LoadImage(filePath);

        return _ocr.Read(input).Text;
    }

    public async Task<string> ExtractTextAsync(string filePath)
    {
        using var input = new OcrInput();

        if (filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
            input.LoadPdf(filePath);
        else
            input.LoadImage(filePath);

        var result = await _ocr.ReadAsync(input);
        return result.Text;
    }
}

サービス利用のための最上位エントリーポイント:

using IronOcr;

var service = new OcrService();
string text = await service.ExtractTextAsync("invoice.pdf");
Console.WriteLine(text);

IronTesseractインスタンスはスレッドセーフで再利用を目的に設計されています。 リクエストごとにインスタンス化するのではなく、アプリケーションの起動時に一度だけ作成します(例えば、 ASP.NET Coreの依存性注入を使用)。

マルチページPDFの場合、result.Pagesはページごとのテキスト、信頼スコア、バウンディングボックスへのアクセスを提供します。 マルチページ PDF OCR ガイド で、ページ単位のイテレーションについて詳しく学べます。

前処理フィルターを使用してOCRの精度を向上させるにはどうすればよいですか?

フラットベッドスキャナー、スマートフォンのカメラ、ファックス機などでスキャンした生データは、ノイズ、回転、コントラストの低下、解像度の不足といった問題が頻繁に発生する。 IronOCRの画像品質補正パイプラインは、読み取り呼び出しの前に連結されるターゲットフィルターによって、それぞれの問題に対処します。

using IronOcr;

public class AccuracyOptimizedOcr
{
    private readonly IronTesseract _ocr = new IronTesseract();

    public string ProcessLowQualityDocument(string filePath)
    {
        using var input = new OcrInput();

        if (filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
            input.LoadPdf(filePath);
        else
            input.LoadImage(filePath);

        // Chain preprocessing filters in order of operation
        input.DeNoise();              // Remove scan artifacts and speckling
        input.Deskew();               // Correct page tilt up to 35 degrees
        input.Scale(150);             // Enlarge small text for better recognition
        input.Binarize();             // Convert to black/white for cleaner edges
        input.EnhanceResolution(300); // Sharpen blurry or low-DPI input

        var result = _ocr.Read(input);

        // Confidence below 70 often signals a preprocessing mismatch
        if (result.Confidence < 70)
            Console.WriteLine($"Warning: low confidence ({result.Confidence:F1}%)");

        return result.Text;
    }
}

フィルター選択ガイド:

  • DeNoise() -- 大量のしみや圧縮アーティファクトがあるスキャンに使用します。
  • Deskew() -- 文書が角度をつけて撮影されている場合に使用します。 自動検出については、ページ回転検出を参照してください。
  • Scale() -- 小さい文字や150DPI未満の入力に使用します。 150~200の値で通常は最良の結果が得られます
  • Binarize() -- カラーやグラデーションの背景に使用します。 画像を厳密な白黒に変換する
  • EnhanceResolution() -- 不鮮明またはコントラストの低いテキストに使用します。 Tesseractの最適な解像度は300 DPIとされています。

国際文書解析認識誌に掲載された研究によると、文字認識率を向上させる上で、二値化と傾き補正が最も効果的な前処理ステップであることが一貫して示されている。 両方とも、あらゆる生産パイプラインの基準として適用してください。

IronOCRの前処理フィルターとその主な使用例
フィルター問題解決応募時期
DeNoise()スキャナーのアーティファクト、スペックルノイズフラットベッドまたはファックスのスキャン
Deskew()ページの傾きと回転撮影された書類または位置ずれした書類
Scale()文字が小さい、またはDPIが低い150 DPI未満の入力
Binarize()カラー背景、グラデーション色付きの紙または透かし入りの用紙
EnhanceResolution()を使用してください。ぼやけと低コントラストカメラで撮影した画像と圧縮されたJPEG画像

本番環境向けのバッチ処理パイプラインはどのように構築すればよいですか?

単一ドキュメントの抽出は簡単ですが、実際の運用環境では、数百または数千ものファイルがキュー、共有フォルダ、またはクラウドストレージに到着します。 IronOCRの非同期APIとスレッドセーフなエンジンは、並列ワークロードに適しています。

using IronOcr;
using Microsoft.Extensions.Logging;

public class ProductionOcrService
{
    private readonly IronTesseract _ocr;
    private readonly ILogger<ProductionOcrService> _logger;

    public ProductionOcrService(ILogger<ProductionOcrService> logger)
    {
        _logger = logger;
        _ocr = new IronTesseract
        {
            Configuration =
            {
                RenderSearchablePdfsAndHocr = true,
                ReadBarCodes = true
            }
        };
    }

    public async Task<IReadOnlyList<string>> ProcessBatchAsync(
        IEnumerable<string> filePaths,
        int maxDegreeOfParallelism = 4)
    {
        var results = new System.Collections.Concurrent.ConcurrentBag<string>();

        var options = new ParallelOptions
        {
            MaxDegreeOfParallelism = maxDegreeOfParallelism
        };

        await Parallel.ForEachAsync(filePaths, options, async (filePath, ct) =>
        {
            try
            {
                using var input = new OcrInput();

                if (filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
                    input.LoadPdf(filePath);
                else
                    input.LoadImage(filePath);

                var result = await _ocr.ReadAsync(input);
                results.Add(result.Text);
                _logger.LogInformation("Processed {FilePath} at {Confidence:F1}% confidence",
                    filePath, result.Confidence);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "OCR failed for {FilePath}", filePath);
                results.Add(string.Empty);
            }
        });

        return results.ToList();
    }

    public void CreateSearchablePdf(string inputPath, string outputPath)
    {
        using var input = new OcrInput();

        if (inputPath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
            input.LoadPdf(inputPath);
        else
            input.LoadImage(inputPath);

        _ocr.Read(input).SaveAsSearchablePdf(outputPath);
        _logger.LogInformation("Searchable PDF written to {OutputPath}", outputPath);
    }
}

MaxDegreeOfParallelismキャップはファイルが大きい場合のメモリ枯渇を防ぎます。 4コアサーバーでは、値4がうまく機能します。 メモリ使用量を分析した後でのみ、値を増やしてください。 Azure Functions または AWS Lambda の展開 のために、関数インスタンスごとに並行処理を 1 に設定し、横方向にスケーリングしてください。

CreateSearchablePdfは、元の画像が可視層として保存され、認識されたテキストがその下に見えないように埋め込まれたPDFを生成します。 これにより、PDFビューアでの全文検索や検索エンジンによるインデックス作成が可能になります。これは、文書管理システムにおいて一般的な要件です。

生産における信頼度スコアのモニタリング

すべてのConfidenceプロパティ(0-100)を公開します。 ログ記録インフラストラクチャでこの指標を追跡することで、文書の品質が低下した際に早期警告信号を受け取ることができます。たとえば、スキャナーのキャリブレーションがずれたり、新しい文書サプライヤーが予想よりも低いDPIのスキャンデータを送ってきた場合などです。

実用的な閾値戦略としては、信頼度が80未満の場合に警告をログに記録し、70未満の場合に前処理の再試行をトリガーし、60未満の場合に文書を人間によるレビュー対象としてフラグ付けする。この段階的なアプローチにより、下流システムでデータ破損が発生する前に品質問題を捕捉できる。

Microsoft .NET logging documentation は、ASP.NET Coreの組み込みDIコンテナと統合するチーム向けに上記のバッチサービスで使用されるILoggerパターンをカバーしています。

スキャンした文書から構造化データを抽出するにはどうすればよいですか?

テキスト抽出が最初のステップです。2番目のステップは、抽出したテキストをアプリケーションが処理できる型付きフィールドに解析することです。 このパターンはIronOCRの読み込みパスと.NETのRegexを組み合わせて、請求書、フォーム、レポートから構造化データを引き出します。

using IronOcr;
using System.Text.RegularExpressions;

public record Invoice(
    string? InvoiceNumber,
    DateOnly? Date,
    decimal? TotalAmount,
    string RawText
);

public class InvoiceOcrService
{
    private readonly IronTesseract _ocr = new IronTesseract();

    public Invoice ExtractInvoiceData(string invoicePath)
    {
        using var input = new OcrInput();

        if (invoicePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
            input.LoadPdf(invoicePath);
        else
            input.LoadImage(invoicePath);

        input.DeNoise();
        input.Deskew();

        var result = _ocr.Read(input);
        string text = result.Text;

        return new Invoice(
            InvoiceNumber: ExtractInvoiceNumber(text),
            Date: ExtractDate(text),
            TotalAmount: ExtractAmount(text),
            RawText: text
        );
    }

    private static string? ExtractInvoiceNumber(string text)
    {
        var match = Regex.Match(text, @"Invoice\s*#?:?\s*(\S+)", RegexOptions.IgnoreCase);
        return match.Success ? match.Groups[1].Value : null;
    }

    private static DateOnly? ExtractDate(string text)
    {
        // Numeric format: MM/DD/YYYY
        var numeric = Regex.Match(text, @"\b(\d{1,2}/\d{1,2}/\d{2,4})\b");
        if (numeric.Success && DateTime.TryParse(numeric.Groups[1].Value, out var d1))
            return DateOnly.FromDateTime(d1);

        // Written format: January 15, 2025
        var written = Regex.Match(text,
            @"\b(January|February|March|April|May|June|July|August|September|October|November|December)\s+(\d{1,2}),?\s+(\d{4})\b",
            RegexOptions.IgnoreCase);
        if (written.Success && DateTime.TryParse(written.Value, out var d2))
            return DateOnly.FromDateTime(d2);

        return null;
    }

    private static decimal? ExtractAmount(string text)
    {
        var match = Regex.Match(text, @"\$\s*(\d+(?:\.\d{2})?)");
        return match.Success && decimal.TryParse(match.Groups[1].Value, out var amt)
            ? amt
            : null;
    }
}

このアプローチは、フォーム上の各フィールドがどこに表示されるかを正確に知っている場合、ゾーンOCR にも適しています。 境界矩形を指定することで、ページ全体の認識を省略し、請求書番号または合計金額を含む領域のみを対象とすることができるため、固定レイアウト文書の処理時間を大幅に短縮できます。

表や構造化フォームなど、より高度な抽出シナリオについては、製品サイトにあるIronOCRのデータ抽出例を参照してください。

.NETで多言語OCRをどのように処理しますか?

多くの組織は、輸出入書類、国際契約書、多言語対応の顧客提出書類など、複数の言語で書かれた文書を処理しています。 IronOCRは、読み取り呼び出しの前に言語パックを設定できるようにすることで、この問題を解決します。

using IronOcr;

// Configure multi-language recognition
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.EnglishBest;  // Swap for any of 125+ supported languages

// For mixed-language documents, combine language packs
ocr.AddSecondaryLanguage(OcrLanguage.German);

using var input = new OcrInput();
input.LoadPdf("multilingual-contract.pdf");
var result = ocr.Read(input);
Console.WriteLine(result.Text);

IronOCRの言語サポートページには、利用可能な125種類以上の言語パックすべてとダウンロード手順が掲載されています。 言語パックはNuGetパッケージとして提供され(例:IronOcr.Languages.German)、すでに使用しているパッケージ管理ワークフローと統合します。

ラテン文字以外の文字セット(アラビア語、中国語、日本語、韓国語など)については、 IronOCRは右から左へのテキスト方向と表意文字に対応した最適化されたモデルを提供します。設定の詳細については、 CJK OCRガイドを参照してください。

次のステップは何ですか?

これで、あらゆる.NET 10アプリケーションに実用レベルのOCR機能を追加するために必要なパターンが揃いました。基本的なテキスト抽出、困難なスキャンに対する前処理、非同期バッチ処理、構造化データ解析、および多言語サポートなどです。

ここから、プロジェクトのニーズに基づいて以下の分野を探索してください。

バーコードおよびQRコードの読み取り -- 同じ画像パスから機械が読み取れるコードを抽出 HOCR出力形式 -- レイアウト対応の下流処理のための単語レベルの境界ボックスを取得

まずは無料トライアルライセンスで、ご自身のドキュメントを使って全機能を評価してから、有料プランへの加入を検討してください。

NuGetNuGetでインストール

PM > Install-Package IronOcr

Install IronOCR by running the command above in the NuGet Package Manager Console, or search for the package in the NuGet Package Manager.

関連する記事