C# での OcrProgress トラッキングの使用方法

IronOCRを使ったC#での進捗追跡の使い方

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronOCRはOCR操作のためのイベント・ベースの進捗追跡システムを提供し、開発者はOcrProgressイベントを通して読み取り進捗をモニターすることができます。

. 。 *as-heading:2(クイックスタート: OcrProgress を購読して PDF を読む)* この例では、IronOCRでOCRの進捗をモニターする方法を示します:組み込みの`OcrProgress`イベントを購読し、PDFを読みながらパーセンテージ、完了したページ、総ページ数などのフィードバックを即座に受け取ることができます。 ほんの数行で始められます。 ```cs :title=Track OCR Progress in Seconds var ocr = new IronOcr.IronTesseract(); ocr.OcrProgress += (s, e) => Console.WriteLine(e.ProgressPercent + "% (" + e.PagesComplete + "/" + e.TotalPages + ")"); var result = ocr.Read(new IronOcr.OcrInput().LoadPdf("file.pdf")); ```
## 私の OCR アプリケーションに進捗追跡を実装するにはどうすればよいですか? .

<!コードの概念を示す図またはスクリーンショット -->。

OCRで大規模な文書やバッチファイルを処理する場合、進行状況の追跡は不可欠です。 OcrProgressイベントをサブスクライブすると、読み取りプロセスの進行状況の更新を受信できます。 これは、PDFのOCR操作や、複数ページのTIFFファイルを扱うときに特に役立ちます。

このイベントは、開始時間、総ページ数、パーセンテージとしての進捗、継続時間、終了時間など、OCRジョブの進捗に関する情報を含むインスタンスを渡します。この機能は、async オペレーションとシームレスに動作し、multithreading と組み合わせてパフォーマンスを向上させることができます。

The following example uses this document as a sample: "Experiences in Biodiversity Research: A Field Course" by Thea B. アイオワ州立大学のゲスラー氏。

:path=/static-assets/ocr/content-code-examples/how-to/progress-tracking-progress-tracking.cs
using IronOcr;
using System;

var ocrTesseract = new IronTesseract();

// Subscribe to OcrProgress event
ocrTesseract.OcrProgress += (_, ocrProgressEventsArgs) =>
{
    Console.WriteLine("Start time: " + ocrProgressEventsArgs.StartTimeUTC.ToString());
    Console.WriteLine("Total pages number: " + ocrProgressEventsArgs.TotalPages);
    Console.WriteLine("Progress(%) | Duration");
    Console.WriteLine("    " + ocrProgressEventsArgs.ProgressPercent + "%     | " + ocrProgressEventsArgs.Duration.TotalSeconds + "s");
    Console.WriteLine("End time: " + ocrProgressEventsArgs.EndTimeUTC.ToString());
    Console.WriteLine("----------------------------------------------");
};

using var input = new OcrInput();
input.LoadPdf("Experiences-in-Biodiversity-Research-A-Field-Course.pdf");

// Progress events will fire during the read operation
var result = ocrTesseract.Read(input);
Imports IronOcr
Imports System

Private ocrTesseract = New IronTesseract()

' Subscribe to OcrProgress event
Private ocrTesseract.OcrProgress += Sub(underscore, ocrProgressEventsArgs)
	Console.WriteLine("Start time: " & ocrProgressEventsArgs.StartTimeUTC.ToString())
	Console.WriteLine("Total pages number: " & ocrProgressEventsArgs.TotalPages)
	Console.WriteLine("Progress(%) | Duration")
	Console.WriteLine("    " & ocrProgressEventsArgs.ProgressPercent & "%     | " & ocrProgressEventsArgs.Duration.TotalSeconds & "s")
	Console.WriteLine("End time: " & ocrProgressEventsArgs.EndTimeUTC.ToString())
	Console.WriteLine("----------------------------------------------")
End Sub

Private input = New OcrInput()
input.LoadPdf("Experiences-in-Biodiversity-Research-A-Field-Course.pdf")

' Progress events will fire during the read operation
Dim result = ocrTesseract.Read(input)
$vbLabelText   $csharpLabel
95%から100%完了までの進捗追跡をタイムスタンプと期間データで示すコンソール出力

イベントからどのような進捗情報にアクセスできますか?

OcrProgress イベントは、OCR パフォーマンスの監視と最適化に役立つ包括的な進捗データを提供します。 各プロパティは、操作の追跡において特定の目的を果たします:

  • ProgressPercent:OCRジョブの進捗を、完了したページのパーセンテージとして、0から100の範囲で表示します。GUIアプリケーションでプログレスバーを更新するのに便利です。
  • TotalPages:OCRエンジンによって処理されているページの総数。完了予定時間の計算に不可欠です。
  • PagesComplete:OCR読み取りが完全に完了したページ数。 このカウントは、ページが処理されるにつれて徐々に増えていきます。
  • 所要時間: OCRジョブの総所要時間で、プロセス全体が完了するまでの時間を示します。 TimeSpanフォーマットで測定され、イベントがトリガーされるたびに更新されます。
  • StartTimeUTC:協定世界時(UTC)形式で表される、OCRジョブの開始日時。
  • EndTimeUTC:OCRジョブが100%完了した日時(UTC形式)。 このプロパティは、OCRの処理中はNULLで、処理が終了すると入力されます。

高度な進捗追跡の実装

本番アプリケーションでは、より洗練された進捗管理を実装します。 この例には、エラー処理と詳細なロギングが含まれています:

using IronOcr;
using System;
using System.Diagnostics;

public class OcrProgressTracker
{
    private readonly IronTesseract _tesseract;
    private Stopwatch _stopwatch;
    private int _lastReportedPercent = 0;

    public OcrProgressTracker()
    {
        _tesseract = new IronTesseract();

        // Configure for optimal performance
        _tesseract.Language = OcrLanguage.EnglishBest;
        _tesseract.Configuration.ReadBarCodes = false;

        // Subscribe to progress event
        _tesseract.OcrProgress += OnOcrProgress;
    }

    private void OnOcrProgress(object sender, OcrProgressEventsArgs e)
    {
        // Only report significant progress changes (every 10%)
        if (e.ProgressPercent - _lastReportedPercent >= 10 || e.ProgressPercent == 100)
        {
            _lastReportedPercent = e.ProgressPercent;

            Console.WriteLine($"Progress: {e.ProgressPercent}%");
            Console.WriteLine($"Pages: {e.PagesComplete}/{e.TotalPages}");
            Console.WriteLine($"Elapsed: {e.Duration.TotalSeconds:F1}s");

            // Estimate remaining time
            if (e.ProgressPercent > 0 && e.ProgressPercent < 100)
            {
                var estimatedTotal = e.Duration.TotalSeconds / (e.ProgressPercent / 100.0);
                var remaining = estimatedTotal - e.Duration.TotalSeconds;
                Console.WriteLine($"Estimated remaining: {remaining:F1}s");
            }

            Console.WriteLine("---");
        }
    }

    public OcrResult ProcessDocument(string filePath)
    {
        _stopwatch = Stopwatch.StartNew();

        using var input = new OcrInput();
        input.LoadPdf(filePath);

        // Apply image filters for better accuracy
        input.Deskew();
        input.DeNoise();

        var result = _tesseract.Read(input);

        _stopwatch.Stop();
        Console.WriteLine($"Total processing time: {_stopwatch.Elapsed.TotalSeconds:F1}s");

        return result;
    }
}
using IronOcr;
using System;
using System.Diagnostics;

public class OcrProgressTracker
{
    private readonly IronTesseract _tesseract;
    private Stopwatch _stopwatch;
    private int _lastReportedPercent = 0;

    public OcrProgressTracker()
    {
        _tesseract = new IronTesseract();

        // Configure for optimal performance
        _tesseract.Language = OcrLanguage.EnglishBest;
        _tesseract.Configuration.ReadBarCodes = false;

        // Subscribe to progress event
        _tesseract.OcrProgress += OnOcrProgress;
    }

    private void OnOcrProgress(object sender, OcrProgressEventsArgs e)
    {
        // Only report significant progress changes (every 10%)
        if (e.ProgressPercent - _lastReportedPercent >= 10 || e.ProgressPercent == 100)
        {
            _lastReportedPercent = e.ProgressPercent;

            Console.WriteLine($"Progress: {e.ProgressPercent}%");
            Console.WriteLine($"Pages: {e.PagesComplete}/{e.TotalPages}");
            Console.WriteLine($"Elapsed: {e.Duration.TotalSeconds:F1}s");

            // Estimate remaining time
            if (e.ProgressPercent > 0 && e.ProgressPercent < 100)
            {
                var estimatedTotal = e.Duration.TotalSeconds / (e.ProgressPercent / 100.0);
                var remaining = estimatedTotal - e.Duration.TotalSeconds;
                Console.WriteLine($"Estimated remaining: {remaining:F1}s");
            }

            Console.WriteLine("---");
        }
    }

    public OcrResult ProcessDocument(string filePath)
    {
        _stopwatch = Stopwatch.StartNew();

        using var input = new OcrInput();
        input.LoadPdf(filePath);

        // Apply image filters for better accuracy
        input.Deskew();
        input.DeNoise();

        var result = _tesseract.Read(input);

        _stopwatch.Stop();
        Console.WriteLine($"Total processing time: {_stopwatch.Elapsed.TotalSeconds:F1}s");

        return result;
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

進捗追跡を UI アプリケーションに統合する

Windows FormsやWPFでデスクトップアプリケーションを構築する場合、進捗管理はユーザーエクスペリエンスにとって非常に重要です。 progressイベントは、UI要素を安全に更新することができます:

using System;
using System.Windows.Forms;
using IronOcr;

public partial class OcrForm : Form
{
    private IronTesseract _tesseract;
    private ProgressBar progressBar;
    private Label statusLabel;

    public OcrForm()
    {
        InitializeComponent();
        _tesseract = new IronTesseract();
        _tesseract.OcrProgress += UpdateProgress;
    }

    private void UpdateProgress(object sender, OcrProgressEventsArgs e)
    {
        // Ensure UI updates happen on the main thread
        if (InvokeRequired)
        {
            BeginInvoke(new Action(() => UpdateProgress(sender, e)));
            return;
        }

        progressBar.Value = e.ProgressPercent;
        statusLabel.Text = $"Processing page {e.PagesComplete} of {e.TotalPages}";

        // Show completion message
        if (e.ProgressPercent == 100)
        {
            MessageBox.Show($"OCR completed in {e.Duration.TotalSeconds:F1} seconds");
        }
    }
}
using System;
using System.Windows.Forms;
using IronOcr;

public partial class OcrForm : Form
{
    private IronTesseract _tesseract;
    private ProgressBar progressBar;
    private Label statusLabel;

    public OcrForm()
    {
        InitializeComponent();
        _tesseract = new IronTesseract();
        _tesseract.OcrProgress += UpdateProgress;
    }

    private void UpdateProgress(object sender, OcrProgressEventsArgs e)
    {
        // Ensure UI updates happen on the main thread
        if (InvokeRequired)
        {
            BeginInvoke(new Action(() => UpdateProgress(sender, e)));
            return;
        }

        progressBar.Value = e.ProgressPercent;
        statusLabel.Text = $"Processing page {e.PagesComplete} of {e.TotalPages}";

        // Show completion message
        if (e.ProgressPercent == 100)
        {
            MessageBox.Show($"OCR completed in {e.Duration.TotalSeconds:F1} seconds");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

大きなドキュメントとタイムアウトを扱う

広範なドキュメントを処理する場合、進行状況の追跡がさらに重要になります。 タイムアウト設定アボートトークンと組み合わせることで、より優れた制御が可能になります:

using IronOcr;
using System;
using System.Threading;

public async Task ProcessLargeDocumentWithTimeout()
{
    var cts = new CancellationTokenSource();
    var tesseract = new IronTesseract();

    // Set a timeout of 5 minutes
    cts.CancelAfter(TimeSpan.FromMinutes(5));

    tesseract.OcrProgress += (s, e) =>
    {
        Console.WriteLine($"Progress: {e.ProgressPercent}% - Page {e.PagesComplete}/{e.TotalPages}");

        // Check if we should cancel based on progress
        if (e.Duration.TotalMinutes > 4 && e.ProgressPercent < 50)
        {
            Console.WriteLine("Processing too slow, cancelling...");
            cts.Cancel();
        }
    };

    try
    {
        using var input = new OcrInput();
        input.LoadPdf("large-document.pdf");

        var result = await Task.Run(() => 
            tesseract.Read(input, cts.Token), cts.Token);

        Console.WriteLine("OCR completed successfully");
    }
    catch (OperationCanceledException)
    {
        Console.WriteLine("OCR operation was cancelled");
    }
}
using IronOcr;
using System;
using System.Threading;

public async Task ProcessLargeDocumentWithTimeout()
{
    var cts = new CancellationTokenSource();
    var tesseract = new IronTesseract();

    // Set a timeout of 5 minutes
    cts.CancelAfter(TimeSpan.FromMinutes(5));

    tesseract.OcrProgress += (s, e) =>
    {
        Console.WriteLine($"Progress: {e.ProgressPercent}% - Page {e.PagesComplete}/{e.TotalPages}");

        // Check if we should cancel based on progress
        if (e.Duration.TotalMinutes > 4 && e.ProgressPercent < 50)
        {
            Console.WriteLine("Processing too slow, cancelling...");
            cts.Cancel();
        }
    };

    try
    {
        using var input = new OcrInput();
        input.LoadPdf("large-document.pdf");

        var result = await Task.Run(() => 
            tesseract.Read(input, cts.Token), cts.Token);

        Console.WriteLine("OCR completed successfully");
    }
    catch (OperationCanceledException)
    {
        Console.WriteLine("OCR operation was cancelled");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

進捗追跡のベストプラクティス

1.更新の頻度: OcrProgressイベントは処理中に頻繁に発生します。 UIやログを圧迫しないよう、更新のフィルタリングを検討してください。

2.パフォーマンスへの影響:進行状況の追跡はパフォーマンスのオーバーヘッドを最小限に抑えますが、過剰なロギングや UI の更新は OCR プロセスを遅くする可能性があります。

3.メモリ管理大きな TIFF ファイルまたは PDF の場合、最適なパフォーマンスを確保するために、進行状況とともにメモリ使用量を監視します。

4.エラー処理:例外によって OCR プロセスが中断されるのを防ぐため、進行イベントハンドラには常にエラー処理を含めてください。

5.スレッドの安全性:進捗イベントから UI 要素を更新する場合、Invoke または BeginInvoke メソッドを使用して適切なスレッド同期を確保します。

結論

IronOCRのプログレス・トラッキングはOCR処理に必要不可欠な可視性を提供し、開発者は処理状況をユーザーに知らせる応答性の高いアプリケーションを作成することができます。 OcrProgressイベントを効果的に活用することで、1ページのドキュメントから広範なPDFファイルまで、あらゆるものを扱うプロフェッショナルなアプリケーションを自信を持って構築することができます。

より高度な OCR テクニックについては、画像フィルターおよび 結果オブジェクトに関するガイドを参照して、OCR 実装をさらに強化してください。

よくある質問

OCRの進捗状況をリアルタイムで追跡するにはどうすればよいですか?

IronOCRはOcrProgressイベントを通してイベントベースの進捗管理システムを提供します。IronTesseractインスタンス上でこのイベントをサブスクライブするだけで、OCR処理中の完了率、処理されたページ、時間メトリクスを含むリアルタイムの最新情報を受け取ることができます。

OcrProgressイベントはどのような情報を提供しますか?

IronOCRのOcrProgressイベントは、ProgressPercent (0-100%)、TotalPagesカウント、PagesCompleteカウント、開始・終了時刻、総所要時間を含む包括的なデータを提供します。この情報は、GUIアプリケーションでプログレスバーを更新したり、OCRのパフォーマンスを監視したりする際に特に役立ちます。

非同期 OCR 操作で進捗管理を使用できますか?

IronOCRの進捗管理機能は非同期処理とシームレスに連動します。OcrProgressイベントを通してリアルタイムの進捗アップデートを受け取りながら、非同期処理やマルチスレッドと組み合わせてパフォーマンスを向上させることができます。

PDF OCRの簡単な進捗管理機能を実装するにはどうすればよいですか?

IronOCRで基本的な進捗トラッキングを実装するには、IronTesseractインスタンスを作成し、ラムダ式またはイベントハンドラでOcrProgressイベントをサブスクライブし、PDFでReadメソッドを呼び出します。イベントは定期的に発生し、完了率と処理されたページの情報を提供します。

進捗管理は大規模な文書処理に役立ちますか?

IronOCRで大きな文書やバッチファイルを処理する場合、進捗管理は不可欠です。特にPDFのOCR処理や複数ページのTIFFファイルの処理に有効で、処理状況の監視、完了時間の見積もり、長時間の処理中のユーザーフィードバックが可能です。

Chaknith Bin
ソフトウェアエンジニア
ChaknithはIronXLとIronBarcodeに取り組んでいます。彼はC#と.NETの深い専門知識を持ち、ソフトウェアの改善や顧客サポートに貢献しています。ユーザーとの対話から得られる洞察が、より良い製品、ドキュメント、および全体的な経験に寄与しています。
準備はできましたか?
Nuget ダウンロード 5,246,844 | バージョン: 2025.12 リリース