フッターコンテンツにスキップ
IRONOCRの使い方

IronOCRを使用して.NET OCR SDKを作成する方法

スキャンしたドキュメント、PDF、または画像からテキストを抽出する必要がある場合を考えてみましょう。 その場合、さまざまなファイル形式、複数の言語、低品質のスキャンを処理するのがいかに難しいかがわかるでしょう。 ここで OCR (光学文字認識) が役立ち、スキャンした画像やドキュメント ファイルをプログラムで操作できる編集可能なテキストに変換します。

このガイドでは、 IronOCRを用いた高性能 .NET OCR SDK の構築方法を説明します。OCR の実行、構造化データの抽出、そして複数のドキュメントタイプから検索可能な PDF の生成方法をご紹介します。スキャンした PDF、画像、その他のテキストファイルを、高速かつ信頼性が高く、デスクトップ、Web、モバイルデバイス上の .NET アプリケーションにシームレスに統合できる方法で処理する方法を習得できます。

IronOCR が理想的な .NET OCR SDK である理由は何ですか?

OCR ライブラリをゼロから構築するには、数か月の開発、画像の前処理、広範なテストが必要です。 IronOCR は、さまざまな形式をサポートし、.NET アプリケーションにシームレスに統合される包括的な .NET OCR SDK を提供することで、このオーバーヘッドを排除します。

SDK は、テキスト認識の面倒な処理を処理すると同時に、通常はエンタープライズ ソリューションにのみ搭載されている機能も提供します。

  • さまざまなドキュメント形式とスキャン画像で高いパフォーマンスを実現
  • 125以上の言語と手書きテキスト認識をサポート
  • 適応型二値化、フォント情報、ゾーンOCRの境界ボックスのサポート
  • スキャンしたPDF、画像形式、テキストブロックを処理する機能
  • 隠しテキストレイヤーを使用した検索可能なドキュメントの即時作成

生の Tesseract 実装とは異なり、IronOCR はWindows、Linux、macOS 、クラウド プラットフォームですぐに動作し、追加構成なしで OCR API、AI 支援認識、シームレスな統合をサポートします。

IronOCRを使い始める

NuGet パッケージ マネージャーを使用するとインストールに数秒かかります。 走る:

Install-Package IronOcr

詳細なインストール手順については、 IronOCR のドキュメントを参照してください。 インストールすると、スキャンした文書からテキストを抽出するのが簡単になります。

using IronOcr;
public class OcrService
{
    private readonly IronTesseract _ocr;
    public OcrService()
    {
        _ocr = new IronTesseract();
    }
    public string ExtractText(string imagePath)
    {
        using var input = new OcrInput();
        input.LoadImage(imagePath);
        var result = _ocr.Read(input);
        return result.Text;
    }
}
using IronOcr;
public class OcrService
{
    private readonly IronTesseract _ocr;
    public OcrService()
    {
        _ocr = new IronTesseract();
    }
    public string ExtractText(string imagePath)
    {
        using var input = new OcrInput();
        input.LoadImage(imagePath);
        var result = _ocr.Read(input);
        return result.Text;
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

このコードは、JPEG、PNG、TIFF、BMP などのさまざまな画像形式、および PDF ドキュメントやその他のドキュメント形式をすべて自動的に処理する再利用可能な OCR サービスを作成します。

テストするには、次のサンプル画像を使用してメインクラスで実行します。

class Program
{
    static void Main(string[] args)
    {
        var ocrService = new OcrService();
        string imagePath = "test.png"; // Replace with your image path
        string extractedText = ocrService.ExtractText(imagePath);
        Console.WriteLine(extractedText);
    }
}
class Program
{
    static void Main(string[] args)
    {
        var ocrService = new OcrService();
        string imagePath = "test.png"; // Replace with your image path
        string extractedText = ocrService.ExtractText(imagePath);
        Console.WriteLine(extractedText);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

出力

! IronOCRで.NET OCR SDKを作成する方法: 図2 - コンソール出力の例

コアOCR機能の構築

実際のアプリケーションでは、基本的なテキスト抽出以上のものが必要です。 IronOCR は包括的なドキュメント処理機能を提供します。

// Async document processing with barcodes
 public async Task<ProcessedDocument> ProcessDocumentAsync(string filePath)
 {
     using var input = new OcrInput();
     LoadFile(input, filePath);
     input.DeNoise();
     input.Deskew();
     var result = await _ocr.ReadAsync(input);
     return new ProcessedDocument
     {
         Text = result.Text,
         Confidence = result.Confidence,
         Barcodes = result.Barcodes.Select(b => b.Value).ToList()
     };
 }
// Helper to load image or PDF
private void LoadFile(OcrInput input, string filePath)
{
    if (filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
        input.LoadPdf(filePath);
    else
        input.LoadImage(filePath);
}
// Model for processed documents with barcodes
public class ProcessedDocument
{
    public string Text { get; set; }
    public double Confidence { get; set; }
    public List<string> Barcodes { get; set; }
}
// Async document processing with barcodes
 public async Task<ProcessedDocument> ProcessDocumentAsync(string filePath)
 {
     using var input = new OcrInput();
     LoadFile(input, filePath);
     input.DeNoise();
     input.Deskew();
     var result = await _ocr.ReadAsync(input);
     return new ProcessedDocument
     {
         Text = result.Text,
         Confidence = result.Confidence,
         Barcodes = result.Barcodes.Select(b => b.Value).ToList()
     };
 }
// Helper to load image or PDF
private void LoadFile(OcrInput input, string filePath)
{
    if (filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
        input.LoadPdf(filePath);
    else
        input.LoadImage(filePath);
}
// Model for processed documents with barcodes
public class ProcessedDocument
{
    public string Text { get; set; }
    public double Confidence { get; set; }
    public List<string> Barcodes { get; set; }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

この実装では、複数のドキュメントを処理し、画像の前処理を適用し、同じドキュメントからバーコードとテキストを抽出します。 非同期パターンにより、.NET アプリケーションで高いパフォーマンスが保証されます。

出力

! IronOCRを使った.NET OCR SDKの作成方法: 図3 - OCR入力画像と出力テキスト

内蔵機能で精度を向上

IronOCR の前処理機能により、実際の文書の認識精度が大幅に向上します。

// OCR optimized for low-quality images
    public string ProcessLowQualityDocument(string filePath)
    {
        using var input = new OcrInput();
        LoadFile(input, filePath);
        // Preprocessing for low-quality documents
        input.DeNoise();
        input.Deskew();
        input.Scale(150);
        input.Binarize();
        input.EnhanceResolution(300);
        var result = _ocr.Read(input);
        return result.Text;
    }
// OCR optimized for low-quality images
    public string ProcessLowQualityDocument(string filePath)
    {
        using var input = new OcrInput();
        LoadFile(input, filePath);
        // Preprocessing for low-quality documents
        input.DeNoise();
        input.Deskew();
        input.Scale(150);
        input.Binarize();
        input.EnhanceResolution(300);
        var result = _ocr.Read(input);
        return result.Text;
    }
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

各フィルターは、ドキュメントの品質に関する特定の問題を対象としています。 DeNoise()はスキャンからアーティファクトを除去し、 Deskew() は傾いたページを修正し、EnhanceResolution() はぼやけたテキストを鮮明にします。

これらのフィルターは連携して動作し、品質の低いソースからでも正確なテキスト抽出を実現します。 Stack Overflowでの議論によると、適切な前処理により OCR の精度が最大 40% 向上します。

高度なデータ抽出SDK機能

IronOCR は、基本的なテキスト抽出を超えて、最新の .NET OCR SDK アプリケーションに不可欠な機能を拡張します。

// Create a searchable PDF from an image or PDF
  public void CreateSearchablePdf(string inputPath, string outputPath)
  {
      using var input = new OcrInput();
      LoadFile(input, inputPath);
      _ocr.Read(input).SaveAsSearchablePdf(outputPath);
  }
  // Extract structured data (phone numbers, emails, amounts) from text
  public List<string> ExtractStructuredData(string filePath)
  {
      using var input = new OcrInput();
      LoadFile(input, filePath);
      var result = _ocr.Read(input);
      var text = result.Text;
      var phoneNumbers = Regex.Matches(text, @"\+?\d[\d\s\-]{7,}\d")
                              .Select(m => m.Value).ToList();
      var emails = Regex.Matches(text, @"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-z]{2,}")
                        .Select(m => m.Value).ToList();
      var amounts = Regex.Matches(text, @"\$\d+(?:\.\d{2})?")
                         .Select(m => m.Value).ToList();
      return phoneNumbers.Concat(emails).Concat(amounts).ToList();
  }
// Create a searchable PDF from an image or PDF
  public void CreateSearchablePdf(string inputPath, string outputPath)
  {
      using var input = new OcrInput();
      LoadFile(input, inputPath);
      _ocr.Read(input).SaveAsSearchablePdf(outputPath);
  }
  // Extract structured data (phone numbers, emails, amounts) from text
  public List<string> ExtractStructuredData(string filePath)
  {
      using var input = new OcrInput();
      LoadFile(input, filePath);
      var result = _ocr.Read(input);
      var text = result.Text;
      var phoneNumbers = Regex.Matches(text, @"\+?\d[\d\s\-]{7,}\d")
                              .Select(m => m.Value).ToList();
      var emails = Regex.Matches(text, @"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-z]{2,}")
                        .Select(m => m.Value).ToList();
      var amounts = Regex.Matches(text, @"\$\d+(?:\.\d{2})?")
                         .Select(m => m.Value).ToList();
      return phoneNumbers.Concat(emails).Concat(amounts).ToList();
  }
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

ここで記述したコードは、2 つの主要な OCR 操作を示しています。 CreateSearchablePdf は、入力されたスキャンされた PDF または画像を編集可能なテキストを含む検索可能なドキュメントに変換し、複数のドキュメント形式でのテキスト認識を容易にします。

ExtractStructuredData は、同じスキャンされたドキュメントを処理して、さまざまなドキュメント タイプから電話番号、電子メール、金額などのデータを抽出し、.NET アプリケーションがスキャンされた画像、テキスト ファイル、PDF ドキュメントを効率的に処理できるようにします。

本番環境対応の実装

組み込みの製品機能を使用して、IronOCR を自信を持って導入します。

public class ProductionOcrService
{
    private readonly IronTesseract _ocr;
    private readonly ILogger _logger;
    public ProductionOcrService(ILogger logger)
    {
        _logger = logger;
        _ocr = new IronTesseract();
        // Production configuration
        _ocr.Configuration.RenderSearchablePdfsAndHocr = true;
        _ocr.Configuration.ReadBarCodes = true;
    }
    public async Task<string> ProcessBatchAsync(string[] documents)
    {
        var results = new List<string>();
        // Parallel processing for performance
        await Parallel.ForEachAsync(documents, async (doc, ct) =>
        {
            try
            {
                var text = await ExtractTextAsync(doc);
                results.Add(text);
                _logger.LogInformation($"Processed: {doc}");
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, $"Failed: {doc}");
            }
        });
        return string.Join("\n", results);
    }
}
public class ProductionOcrService
{
    private readonly IronTesseract _ocr;
    private readonly ILogger _logger;
    public ProductionOcrService(ILogger logger)
    {
        _logger = logger;
        _ocr = new IronTesseract();
        // Production configuration
        _ocr.Configuration.RenderSearchablePdfsAndHocr = true;
        _ocr.Configuration.ReadBarCodes = true;
    }
    public async Task<string> ProcessBatchAsync(string[] documents)
    {
        var results = new List<string>();
        // Parallel processing for performance
        await Parallel.ForEachAsync(documents, async (doc, ct) =>
        {
            try
            {
                var text = await ExtractTextAsync(doc);
                results.Add(text);
                _logger.LogInformation($"Processed: {doc}");
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, $"Failed: {doc}");
            }
        });
        return string.Join("\n", results);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

このパターンは、バッチ操作の並列処理、監視のための構造化されたログ記録、および単一ドキュメントの障害によってバッチ全体が停止するのを防ぐ適切なエラー処理を示します。

実際のアプリケーション: 請求書処理

組織が IronOCR を .NET OCR SDK として使用して請求書処理を自動化する方法は次のとおりです。

// Extract structured invoice data
    public Invoice ExtractInvoiceData(string invoicePath)
    {
        using var input = new OcrInput();
        LoadFile(input, invoicePath);
        // Preprocessing for documents
        input.DeNoise();
        input.Deskew();
        var result = _ocr.Read(input);
        var text = result.Text;
        return new Invoice
        {
            InvoiceNumber = ExtractInvoiceNumber(text),
            Date = ExtractDate(text),
            TotalAmount = ExtractAmount(text),
            RawText = text
        };
    }
    // --- Helper methods for invoice parsing ---
    private string ExtractInvoiceNumber(string text)
    {
        // Example: Invoice #: 12345
        var match = Regex.Match(text, @"Invoice\s*#?:?\s*(\S+)");
        return match.Success ? match.Groups[1].Value : null;
    }
    private DateOnly? ExtractDate(string text)
    {
        // Numeric dates
        var numericMatch = Regex.Match(text, @"\b(\d{1,2}/\d{1,2}/\d{2,4})\b");
        if (numericMatch.Success && DateTime.TryParse(numericMatch.Groups[1].Value, out var numericDate))
            return DateOnly.FromDateTime(numericDate);
        // Written-out dates
        var writtenMatch = 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 (writtenMatch.Success && DateTime.TryParse(writtenMatch.Value, out var writtenDate))
            return DateOnly.FromDateTime(writtenDate);
        return null;
    }
    private decimal? ExtractAmount(string text)
    {
        var match = Regex.Match(text, @"\$\s*(\d+(?:\.\d{2})?)");
        if (match.Success && decimal.TryParse(match.Groups[1].Value, out var amount))
            return amount;
        return null;
    }
// Extract structured invoice data
    public Invoice ExtractInvoiceData(string invoicePath)
    {
        using var input = new OcrInput();
        LoadFile(input, invoicePath);
        // Preprocessing for documents
        input.DeNoise();
        input.Deskew();
        var result = _ocr.Read(input);
        var text = result.Text;
        return new Invoice
        {
            InvoiceNumber = ExtractInvoiceNumber(text),
            Date = ExtractDate(text),
            TotalAmount = ExtractAmount(text),
            RawText = text
        };
    }
    // --- Helper methods for invoice parsing ---
    private string ExtractInvoiceNumber(string text)
    {
        // Example: Invoice #: 12345
        var match = Regex.Match(text, @"Invoice\s*#?:?\s*(\S+)");
        return match.Success ? match.Groups[1].Value : null;
    }
    private DateOnly? ExtractDate(string text)
    {
        // Numeric dates
        var numericMatch = Regex.Match(text, @"\b(\d{1,2}/\d{1,2}/\d{2,4})\b");
        if (numericMatch.Success && DateTime.TryParse(numericMatch.Groups[1].Value, out var numericDate))
            return DateOnly.FromDateTime(numericDate);
        // Written-out dates
        var writtenMatch = 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 (writtenMatch.Success && DateTime.TryParse(writtenMatch.Value, out var writtenDate))
            return DateOnly.FromDateTime(writtenDate);
        return null;
    }
    private decimal? ExtractAmount(string text)
    {
        var match = Regex.Match(text, @"\$\s*(\d+(?:\.\d{2})?)");
        if (match.Success && decimal.TryParse(match.Groups[1].Value, out var amount))
            return amount;
        return null;
    }
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

このアプローチでは、毎日何千もの請求書を処理し、会計システムに自動的に入力するための重要なフィールドを抽出します。

出力

! IronOCRを使った.NET OCR SDKの作成方法: 図4 - 請求書OCR出力

結論

IronOCR は、OCR をゼロから構築する複雑さを伴わずに、.NET アプリケーションを高度なドキュメント処理ソリューションに変換します。 広範な言語サポート、優れた精度、本番環境ですぐに使用できる機能を備え、エンタープライズ アプリケーション開発者が信頼する完全な .NET OCR SDK です。

IronOCR は、単一の開発者が使用する場合の $liteLicense から始まる柔軟なライセンス オプションを提供し、オプションはエンタープライズ展開に拡張できます。 ロイヤリティフリー モデルでは、OCR SDK アプリケーションを顧客に配布する際に追加コストは発生しません。

.NET OCR SDK を構築する準備はできていますか? 今すぐ無料トライアルを開始して、本番環境アプリケーションの構築を始めましょう。

NuGet 購入の準備ができていませんか?

PM >  Install-Package IronOcr

IronOCRNuGet でチェックしてください。1000万回以上のダウンロードで、C#によるPDF開発を変革しています。 DLL または Windowsインストーラー をダウンロードすることもできます。

よくある質問

.NET OCR SDKとは何ですか?

IronOCRによる.NET OCR SDKは、C#アプリケーションに光学文字認識機能を統合するために設計されたライブラリであり、開発者は画像、PDF、およびスキャンされた文書からテキストを抽出できます。

IronOCRの.NET SDKは、シンプルなAPI、複数の言語のサポート、クロスプラットフォームの互換性、さまざまなファイル形式や低品質スキャンに対応するための高度な機能を提供します。

IronOCRの.NET SDKは、シンプルなAPI、複数言語のサポート、クロスプラットフォーム互換性、さまざまなファイル形式および低品質スキャンの処理に関する高度な機能を提供します。

IronOCRはどのように異なる言語を処理しますか?

IronOCRは低品質のスキャンを処理できますか?

はい、IronOCRは低品質のスキャンに効果的に対応するように設計されており、困難なシナリオであってもテキスト認識精度を向上させる高度なアルゴリズムを採用しています。

IronOCRの.NET SDKはクロスプラットフォームですか?

IronOCRの.NET SDKはクロスプラットフォームであり、さまざまなオペレーティングシステムで使用できるため、さまざまな開発環境にとって柔軟性があります。

IronOCRはどのようなファイル形式をサポートしていますか?

IronOCRは、画像、PDF、スキャンされたドキュメントなどの幅広いファイル形式をサポートし、異なるメディアでのテキスト認識タスクに柔軟性を提供します。

開発者はIronOCRをどのようにプロジェクトに統合できますか?

開発者はIronOCRのシンプルなAPIを使用して、C#プロジェクトに簡単に統合し、アプリケーションにOCR機能を追加するプロセスを簡素化できます。

IronOCRのユースケースにはどのようなものがありますか?

IronOCRは、ドキュメント管理システム、自動データ入力、コンテンツのデジタル化、画像やPDFからのテキスト抽出を必要とするあらゆるアプリケーションで利用できます。

このウェブページでは、IronOCRの.NET OCR SDKの概要を提供し、C#アプリケーション向けのテキスト認識機能において、シンプルなAPI、企業レベルのサポート、さまざまなドキュメント形式や言語を扱うためのクロスプラットフォーム機能などの機能に焦点を当てています。

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