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

IronOCRと Iris OCR: エンジニアリングチームはどちらの OCR ソリューションを選択すべきでしょうか?

Azure Computer Vision の Read API は 1,000 トランザクションごとに $1.00 の費用がかかり、Cognitive Services リソースをプロビジョニングするために Azure サブスクリプションが必要で、すべての OCR 呼び出しを 3 ステップの非同期ダンスを通して強制します。BinaryData にドキュメントをシリアライズし、AnalyzeAsync を呼び出し、その後ネストされたブロックとラインをたどってテキストを再構築します。 それが最低限必要な手順であり、複数ページのPDFの場合、各ページが個別の取引としてカウントされます。 IronOCRは、それらすべてを1つの同期メソッド呼び出しに集約し、完全にインフラストラクチャ内で動作し、トランザクションごとのメーターもありません。

Azure Computer Visionを理解する

Azure Computer Vision は Microsoft のクラウドベースの認知サービスであり、2 つの主要な API を通じて OCR を公開しています: 画像には ImageAnalysisClient を使用する Image Analysis API と VisualFeatures.Read、PDF には Azure Form Recognizer の DocumentAnalysisClient。 どちらも Azure データセンターでホストされている REST バックサービスであり、それぞれ Azure.AI.Vision.ImageAnalysis および Azure.AI.FormRecognizer.DocumentAnalysis NuGet パッケージを介してアクセスされます。

主な建築上の特徴:

-常にクラウドファースト:すべてのOCR処理は、HTTPS経由でMicrosoftが管理するサーバーにドキュメントデータを送信します。 ローカル処理モードはありません。 -サブスクリプションの前提条件:チームは、OCRコードを1行でも記述する前に、Azureアカウントを作成し、Cognitive Servicesリソースをプロビジョニングし、エンドポイントURLを取得し、APIキーを生成する必要があります。 -ページ単位の課金:Read APIは、画像単位またはPDFページ単位で課金されます。 50ページのPDFには50件の取引が記載されています。 料金は最初の100万件までは1,000件あたり1.00ドルから始まり、取引量が増えるにつれて0.60ドル、さらに0.40ドルへと下がります。 -無料プランの上限:無​​料プランでは月間5,000件のトランザクションまで。これはプロトタイプ作成には十分ですが、本番環境でのワークロードには適していません。

  • PDF用の分割サービス: 基本的な画像OCRは ImageAnalysisClient を使用します。 完全なPDF処理には、Form Recognizer の DocumentAnalysisClient という別のサービスが必要で、それぞれ独自のエンドポイントと構成があります。 -非同期専用設計:すべての読み取りAPI呼び出しは非同期です。 ローカルOCRは結果を同期的に返すことができる。 クラウドの往復通信はできません。 チェイン内のすべての呼び出しメソッドは async である必要があります。 -レート制限:S1ティアでは、1秒あたり10トランザクションが上限となります。 大量のバッチ処理を行うには、キューイングロジックの導入または階層のアップグレードが必要です。 -エラー発生範囲:本番コードでは、HTTP 429 レート制限応答、5xx Azure サービスエラー、ネットワークタイムアウト、認証失敗、エンドポイントの可用性などを処理する必要があり、それぞれに個別の再試行ロジックが必要です。

非同期ポーリングパターン

Read APIの非同期処理要件は、構造的なコードへの影響をもたらします。 AnalyzeAsync を使用した画像解析は即座に戻りますが await が必要です; Form Recognizer を介した PDF 処理では、操作が終了するまでブロックするため WaitUntil.Completed が必要です。または、真の非同期動作のために UpdateStatusAsync とのカスタムポーリングが必要です。 結果の階層構造では、ネストされたループを通してブロック、行、単語を走査する必要があります。

// Azure Computer Vision: image OCR
// Requires: Azure subscription + Cognitive Services resource + endpoint + API key
using Azure;
using Azure.AI.Vision.ImageAnalysis;

public class AzureOcrService
{
    private readonly ImageAnalysisClient _client;

    public AzureOcrService(string endpoint, string apiKey)
    {
        // Endpoint and key provisioned in Azure portal
        _client = new ImageAnalysisClient(
            new Uri(endpoint),
            new AzureKeyCredential(apiKey));
    }

    public async Task<string> ExtractTextAsync(string imagePath)
    {
        // Document is uploaded to Microsoft Azure
        using var stream = File.OpenRead(imagePath);
        var imageData = BinaryData.FromStream(stream);

        var result = await _client.AnalyzeAsync(
            imageData,
            VisualFeatures.Read);

        var text = new StringBuilder();
        foreach (var block in result.Value.Read.Blocks)
        {
            foreach (var line in block.Lines)
            {
                text.AppendLine(line.Text);
            }
        }

        return text.ToString();
    }
}
// Azure Computer Vision: image OCR
// Requires: Azure subscription + Cognitive Services resource + endpoint + API key
using Azure;
using Azure.AI.Vision.ImageAnalysis;

public class AzureOcrService
{
    private readonly ImageAnalysisClient _client;

    public AzureOcrService(string endpoint, string apiKey)
    {
        // Endpoint and key provisioned in Azure portal
        _client = new ImageAnalysisClient(
            new Uri(endpoint),
            new AzureKeyCredential(apiKey));
    }

    public async Task<string> ExtractTextAsync(string imagePath)
    {
        // Document is uploaded to Microsoft Azure
        using var stream = File.OpenRead(imagePath);
        var imageData = BinaryData.FromStream(stream);

        var result = await _client.AnalyzeAsync(
            imageData,
            VisualFeatures.Read);

        var text = new StringBuilder();
        foreach (var block in result.Value.Read.Blocks)
        {
            foreach (var line in block.Lines)
            {
                text.AppendLine(line.Text);
            }
        }

        return text.ToString();
    }
}
Imports Azure
Imports Azure.AI.Vision.ImageAnalysis
Imports System.IO
Imports System.Text
Imports System.Threading.Tasks

Public Class AzureOcrService
    Private ReadOnly _client As ImageAnalysisClient

    Public Sub New(endpoint As String, apiKey As String)
        ' Endpoint and key provisioned in Azure portal
        _client = New ImageAnalysisClient(
            New Uri(endpoint),
            New AzureKeyCredential(apiKey))
    End Sub

    Public Async Function ExtractTextAsync(imagePath As String) As Task(Of String)
        ' Document is uploaded to Microsoft Azure
        Using stream = File.OpenRead(imagePath)
            Dim imageData = BinaryData.FromStream(stream)

            Dim result = Await _client.AnalyzeAsync(
                imageData,
                VisualFeatures.Read)

            Dim text = New StringBuilder()
            For Each block In result.Value.Read.Blocks
                For Each line In block.Lines
                    text.AppendLine(line.Text)
                Next
            Next

            Return text.ToString()
        End Using
    End Function
End Class
$vbLabelText   $csharpLabel

PDF 処理はさらに複雑さを増します — 独自のエンドポイントを持つ別の AnalyzeDocumentAsyncresult.Pages および .Text の代わりに .Content にアクセスします。

IronOCRを理解する

IronOCRは、 .NET向けの商用オンプレミスOCRライブラリであり、単一のNuGetパッケージとして提供されます。 これは、最適化されたTesseract 5エンジンをベースに、自動前処理、ネイティブPDFサポート、クラウド認証情報、エンドポイント構成、非同期処理を必要としない同期APIを備えています。

主な特徴:

  • 単一の NuGet デプロイメント: dotnet add package IronOcr で OCR エンジン、ネイティブバイナリ、英語用の言語データがすべてインストールされます。 tessdataフォルダも、個別のネイティブライブラリのダウンロードもありません。
  • 永続ライセンス: $999 Lite / $1,499 Plus / $2,999 Professional / $5,999 Unlimited — 一回のみの購入、サブスクリプションではありません。 文書数に関わらず、文書ごとの料金は一切かかりません。 -ローカル処理:すべてのOCR処理は、お客様のプロセス内で実行されます。 文書はあなたのインフラストラクチャから決して外部に出ません。
  • 自動前処理: デスクュー、デノイズ、コントラスト、バイナライズ、および解像度の向上は OcrInput で自動的に、または明示的なフィルター呼び出しを介して適用されます。
  • ネイティブ PDF サポート: IronTesseract.Read("document.pdf") が PDF を直接処理し、パスワード保護されたファイルを含み、別のサービスや追加の NuGet パッケージを必要としません。
  • 125 以上の言語: IronOcr.Languages.ChineseSimplified などを使用して、別個の言語 NuGet パッケージとしてインストールされ、手動の tessdata 管理は必要ありません。
  • スレッドセーフ: IronTesseract は同時に使用することが安全です。 バッチワークロードには追加の同期なしで Parallel.ForEach を使用できます。
  • 構造化出力: OcrResult.Words、および .Barcodes コレクションを要素ごとの座標、信頼スコア、およびバウンディング矩形を伴って公開します。

機能比較

フィーチャー Azure コンピュータービジョン IronOCR
処理場所 Microsoft Azureクラウド 地元、店内
価格設定モデル トランザクションごとの料金(現在の価格についてはマイクロソフトにお問い合わせください) 永続ライセンス ($999+)
インターネット接続が必要です はい、常に なし
PDFサポート フォーム認識機能経由(別売) 組み込み、ネイティブ
セットアップの複雑さ Azureアカウント + リソース + キー NuGetインストール
APIパターン 非同期処理(クラウドI/O) 同期(ローカル)
レート制限 10 TPS (S1) ハードウェア依存のみ

詳細な機能比較

フィーチャー Azure コンピュータービジョン IronOCR
セットアップと展開
NuGetインストール 複数のパッケージ dotnet add package IronOcr
認証情報の設定 エンドポイントURL + APIキー ライセンスキー文字列
Azure サブスクリプションが必要です はい なし
インターネット接続が必要 はい、すべてのリクエスト なし
エアギャップ展開 不可能 完全サポート
Dockerデプロイメント 発信ネットワークが必要です 自己完結型
OCR機能
画像OCR はい (AnalyzeAsync) はい (Read())
PDF OCR フォーム認識機能経由(追加サービス) ネイティブ、組み込み
パスワードで保護されたPDF フォーム認識機能経由 単一の Password: パラメータ
複数ページPDF(ページごとの課金) はい、各ページは1件の取引に相当します。 ページごとの料金はかかりません
検索可能なPDF出力 手作業による組み立て SaveAsSearchablePdf()
自動前処理 サーバー側の制限 デスクスキュー、ノイズ除去、コントラスト調整、二値化
OCR中のバーコード読み取り 制限的 ReadBarCodes = true
地域ベースのOCR 直接切り取らない(手動でトリミングする) CropRectangle at OcrInput
言語サポート
言語数 164+ 125+
言語のインストール サービスレベル(クラウドが対応) NuGet言語パック
複数の言語の同時使用 はい はい (AddSecondaryLanguage)
出力と構造
プレーンテキスト はい はい
単語ごとの境界ボックス ポリゴンベース 長方形ベース
単語ごとの信頼度スコア はい はい(0~100点)
構造化された階層 ブロック/線/単語 ページ数/段落数/行数/単語数
hOCRエクスポート なし はい (SaveAsHocrFile)
コストとコンプライアンス
文書ごとの費用 1ページあたり0.001ドル(フォーム認識機能) None
HIPAA準拠の導入 複合体(BAA + クラウド) シンプル(地元限定)
ITAR適合性 管理データには使用しないでください 完全なオンプレミス
FedRAMPエアギャップ なし はい
信頼性
ネットワーク障害モード はい None
レート制限エラー はい(10 TPSで429) None
サービス可用性SLA 99.9% (Azure) インフラストラクチャ

コストモデル

Azure Computer VisionとIronOCRの取引価格の差は、本番環境での取引量において決定的な要素となる。 Azureのソースファイルに含まれるコスト計算ツールは、計算結果を正確に示しています。

Azure コンピュータビジョンアプローチ

Azureは、ボリュームに基づいて階層化された価格でトランザクションごとに請求します。 Azure Computer Visionの料金ページを確認して、現在の料金をご確認ください。 PDFの各ページは1件の取引に相当します。 10ページのPDFファイルは、10回の課金対象となる通話に相当します。 月間5,000トランザクションの無料ティアがあります。

// Azure bills per transaction — costs grow with every document processed
// Free tier: 5,000 transactions/month
// Volume tiers apply at higher usage levels
// (Every PDF page multiplies the bill)
// Azure bills per transaction — costs grow with every document processed
// Free tier: 5,000 transactions/month
// Volume tiers apply at higher usage levels
// (Every PDF page multiplies the bill)
' Azure bills per transaction — costs grow with every document processed
' Free tier: 5,000 transactions/month
' Volume tiers apply at higher usage levels
' (Every PDF page multiplies the bill)
$vbLabelText   $csharpLabel

中程度から高いドキュメント量で、IronOCRの永続ライセンスは、継続的なAzureトランザクションコストと比較して迅速に元を取り、それ以降の追加ドキュメントごとに節約がされます。

IronOCRのアプローチ

IronOCRの料金体系は、単一の数値で表されます。 NuGetパッケージをインストールし、ライセンスキーを設定すれば、カウンターがカウントアップすることなく、任意のボリュームを処理できます。

// Install: dotnet add package IronOcr
// License: one-time, perpetual

IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");

var ocr = new IronTesseract();

// Process 1 document or 1 million — same cost
foreach (var path in documentPaths)
{
    var result = ocr.Read(path);
    Console.WriteLine($"Processed: {path}");
}

// Multi-page PDFs — no per-page billing
foreach (var path in pdfPaths)
{
    // 1 page or 100 pages, still no extra cost
    var result = ocr.Read(path);
    Console.WriteLine($"{path}: {result.Pages.Length} pages processed");
}
// Install: dotnet add package IronOcr
// License: one-time, perpetual

IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");

var ocr = new IronTesseract();

// Process 1 document or 1 million — same cost
foreach (var path in documentPaths)
{
    var result = ocr.Read(path);
    Console.WriteLine($"Processed: {path}");
}

// Multi-page PDFs — no per-page billing
foreach (var path in pdfPaths)
{
    // 1 page or 100 pages, still no extra cost
    var result = ocr.Read(path);
    Console.WriteLine($"{path}: {result.Pages.Length} pages processed");
}
' Install: dotnet add package IronOcr
' License: one-time, perpetual

IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE")

Dim ocr As New IronTesseract()

' Process 1 document or 1 million — same cost
For Each path In documentPaths
    Dim result = ocr.Read(path)
    Console.WriteLine($"Processed: {path}")
Next

' Multi-page PDFs — no per-page billing
For Each path In pdfPaths
    ' 1 page or 100 pages, still no extra cost
    Dim result = ocr.Read(path)
    Console.WriteLine($"{path}: {result.Pages.Length} pages processed")
Next
$vbLabelText   $csharpLabel

計測も、使用状況の追跡も、予算アラートも不要です。 初日から費用が予測可能。 画像からテキストを読み取る方法に関するチュートリアルを参照して、詳しい手順を確認してください。

データ主権とオフライン機能

クラウドOCRのコンプライアンス上の影響は、理論上の問題ではない。 Azure Computer Visionで処理されるすべての文書は、組織の境界を越えます。 Azure の README には、影響を受ける具体的な規制フレームワークが記載されています。具体的には、HIPAA の対象となる事業体、ITAR の防衛関連企業、CMMC 認証を受けた組織、GDPR の規制を受ける欧州企業、およびエアギャップ ネットワーク内でのあらゆる運用が含まれます。

Azure コンピュータビジョンアプローチ

地域別のエンドポイント選択とビジネスアソシエイト契約の締結を行ったとしても、データフローは固定されている。

// Azure: data flow for every OCR call
// 1. Your application reads the file
// 2. File is serialized to BinaryData
// 3. HTTPS transmission to Azure data center
// 4. Microsoft infrastructure processes the document
// 5. Result returned over HTTPS
// 6. You parse the result

using var stream = File.OpenRead(imagePath);
var imageData = BinaryData.FromStream(stream);  // Document in memory

// This call transmits your document to Azure
var result = await _client.AnalyzeAsync(
    imageData,           // Document leaves your network here
    VisualFeatures.Read);
// Azure: data flow for every OCR call
// 1. Your application reads the file
// 2. File is serialized to BinaryData
// 3. HTTPS transmission to Azure data center
// 4. Microsoft infrastructure processes the document
// 5. Result returned over HTTPS
// 6. You parse the result

using var stream = File.OpenRead(imagePath);
var imageData = BinaryData.FromStream(stream);  // Document in memory

// This call transmits your document to Azure
var result = await _client.AnalyzeAsync(
    imageData,           // Document leaves your network here
    VisualFeatures.Read);
Imports System.IO
Imports Azure.AI.FormRecognizer.DocumentAnalysis

' Azure: data flow for every OCR call
' 1. Your application reads the file
' 2. File is serialized to BinaryData
' 3. HTTPS transmission to Azure data center
' 4. Microsoft infrastructure processes the document
' 5. Result returned over HTTPS
' 6. You parse the result

Using stream As FileStream = File.OpenRead(imagePath)
    Dim imageData As BinaryData = BinaryData.FromStream(stream) ' Document in memory

    ' This call transmits your document to Azure
    Dim result = Await _client.AnalyzeAsync(
        imageData,           ' Document leaves your network here
        VisualFeatures.Read)
End Using
$vbLabelText   $csharpLabel

エアギャップされたネットワークではエンドポイントURLに全くアクセスできません。Azure Computer Visionにはオフラインモードがないためです。 SCIF(機密情報隔離施設)、軍事施設、または隔離された処理環境を運用している組織にとって、このサービスは価格に関係なく、アーキテクチャ的に互換性がありません。

IronOCRのアプローチ

IronOCRは、呼び出しプロセス内で文書を処理します。 発信接続がありません。

// IronOCR: data never leaves your infrastructure
using IronOcr;

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

    public string ExtractText(string imagePath)
    {
        // Runs entirely in-process
        // なし network call, no serialization to external endpoint
        var result = _ocr.Read(imagePath);
        return result.Text;
    }

    public string ExtractFromPdf(string pdfPath)
    {
        // PDF processed entirely on-premise, native support
        using var input = new OcrInput();
        input.LoadPdf(pdfPath);
        return _ocr.Read(input).Text;
    }

    public string ExtractFromEncryptedPdf(string pdfPath, string password)
    {
        // Encrypted PDFs also stay local
        using var input = new OcrInput();
        input.LoadPdf(pdfPath, Password: password);
        return _ocr.Read(input).Text;
    }
}
// IronOCR: data never leaves your infrastructure
using IronOcr;

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

    public string ExtractText(string imagePath)
    {
        // Runs entirely in-process
        // なし network call, no serialization to external endpoint
        var result = _ocr.Read(imagePath);
        return result.Text;
    }

    public string ExtractFromPdf(string pdfPath)
    {
        // PDF processed entirely on-premise, native support
        using var input = new OcrInput();
        input.LoadPdf(pdfPath);
        return _ocr.Read(input).Text;
    }

    public string ExtractFromEncryptedPdf(string pdfPath, string password)
    {
        // Encrypted PDFs also stay local
        using var input = new OcrInput();
        input.LoadPdf(pdfPath, Password: password);
        return _ocr.Read(input).Text;
    }
}
Imports IronOcr

Public Class OnPremiseOcrService
    Private ReadOnly _ocr As New IronTesseract()

    Public Function ExtractText(imagePath As String) As String
        ' Runs entirely in-process
        ' なし network call, no serialization to external endpoint
        Dim result = _ocr.Read(imagePath)
        Return result.Text
    End Function

    Public Function ExtractFromPdf(pdfPath As String) As String
        ' PDF processed entirely on-premise, native support
        Using input As New OcrInput()
            input.LoadPdf(pdfPath)
            Return _ocr.Read(input).Text
        End Using
    End Function

    Public Function ExtractFromEncryptedPdf(pdfPath As String, password As String) As String
        ' Encrypted PDFs also stay local
        Using input As New OcrInput()
            input.LoadPdf(pdfPath, Password:=password)
            Return _ocr.Read(input).Text
        End Using
    End Function
End Class
$vbLabelText   $csharpLabel

Dockerデプロイメントでは、アウトバウンドネットワークの要件が完全に不要になります。

FROM mcr.microsoft.com/dotnet/aspnet:8.0
RUN apt-get update && apt-get install -y libgdiplus
WORKDIR /app
COPY --from=build /app/publish .
ENV IRONOCR_LICENSE=your-key
# なし Azure endpoint, no API key, no outbound network rules needed
ENTRYPOINT ["dotnet", "YourApp.dll"]

HIPAAの対象となる事業体、ITARのコンプライアンス、またはFedRAMPのエアギャップ環境においては、 IronOCRはサードパーティデータ処理業者のリスクというカテゴリー全体を排除します。 Azureインフラストラクチャ内でIronOCRを実行し、ドキュメントをコンピューティングインスタンスのローカルに保持する方法については、 Azureデプロイガイドを参照してください。コンテナ構成については、 Dockerデプロイガイドを参照してください。

同期型API設計と非同期型API設計

Azure Read API は非同期です。同期処理は不可能だからです。クラウド I/O にはネットワーク遅延が発生します。 IronOCR はローカルで処理を行い、同期的に結果を返すことができ、コードの呼び出しが簡素化され、async がコールスタックを通じて伝播することを排除し、ネットワーク I/O に固有の失敗モードを排除します。

Azure コンピュータビジョンアプローチ

すべての Azure OCR 呼び出しには await が必要です。 本番環境のコードでは、429レート制限エラーと5xxサービスエラーに対する再試行ロジックが追加されました。 最小限の運用実装は次のようになります。

public async Task<string> RobustExtractAsync(string imagePath)
{
    const int maxRetries = 3;
    int attempt = 0;

    while (attempt < maxRetries)
    {
        try
        {
            using var stream = File.OpenRead(imagePath);
            var imageData = BinaryData.FromStream(stream);

            var result = await _client.AnalyzeAsync(
                imageData,
                VisualFeatures.Read);

            return string.Join("\n",
                result.Value.Read.Blocks
                    .SelectMany(b => b.Lines)
                    .Select(l => l.Text));
        }
        catch (RequestFailedException ex) when (ex.Status == 429)
        {
            // Rate limited — Azure caps S1 at 10 TPS
            attempt++;
            await Task.Delay(TimeSpan.FromSeconds(Math.Pow(2, attempt)));
        }
        catch (RequestFailedException ex) when (ex.Status >= 500)
        {
            // Azure service error
            attempt++;
            await Task.Delay(TimeSpan.FromSeconds(1));
        }
        catch (RequestFailedException ex)
        {
            // Client error — bad credential, invalid endpoint
            throw new Exception($"Azure OCR failed: {ex.Message}", ex);
        }
    }

    throw new Exception("Max retries exceeded for Azure OCR");
}
public async Task<string> RobustExtractAsync(string imagePath)
{
    const int maxRetries = 3;
    int attempt = 0;

    while (attempt < maxRetries)
    {
        try
        {
            using var stream = File.OpenRead(imagePath);
            var imageData = BinaryData.FromStream(stream);

            var result = await _client.AnalyzeAsync(
                imageData,
                VisualFeatures.Read);

            return string.Join("\n",
                result.Value.Read.Blocks
                    .SelectMany(b => b.Lines)
                    .Select(l => l.Text));
        }
        catch (RequestFailedException ex) when (ex.Status == 429)
        {
            // Rate limited — Azure caps S1 at 10 TPS
            attempt++;
            await Task.Delay(TimeSpan.FromSeconds(Math.Pow(2, attempt)));
        }
        catch (RequestFailedException ex) when (ex.Status >= 500)
        {
            // Azure service error
            attempt++;
            await Task.Delay(TimeSpan.FromSeconds(1));
        }
        catch (RequestFailedException ex)
        {
            // Client error — bad credential, invalid endpoint
            throw new Exception($"Azure OCR failed: {ex.Message}", ex);
        }
    }

    throw new Exception("Max retries exceeded for Azure OCR");
}
Imports System.IO
Imports System.Threading.Tasks

Public Async Function RobustExtractAsync(imagePath As String) As Task(Of String)
    Const maxRetries As Integer = 3
    Dim attempt As Integer = 0

    While attempt < maxRetries
        Try
            Using stream = File.OpenRead(imagePath)
                Dim imageData = BinaryData.FromStream(stream)

                Dim result = Await _client.AnalyzeAsync(
                    imageData,
                    VisualFeatures.Read)

                Return String.Join(vbCrLf,
                    result.Value.Read.Blocks _
                        .SelectMany(Function(b) b.Lines) _
                        .Select(Function(l) l.Text))
            End Using
        Catch ex As RequestFailedException When ex.Status = 429
            ' Rate limited — Azure caps S1 at 10 TPS
            attempt += 1
            Await Task.Delay(TimeSpan.FromSeconds(Math.Pow(2, attempt)))
        Catch ex As RequestFailedException When ex.Status >= 500
            ' Azure service error
            attempt += 1
            Await Task.Delay(TimeSpan.FromSeconds(1))
        Catch ex As RequestFailedException
            ' Client error — bad credential, invalid endpoint
            Throw New Exception($"Azure OCR failed: {ex.Message}", ex)
        End Try
    End While

    Throw New Exception("Max retries exceeded for Azure OCR")
End Function
$vbLabelText   $csharpLabel

これは防御的な過剰設計ではなく、本番環境におけるあらゆるAzure API呼び出しに必要な最低限の要件です。 レート制限、サービス停止、一時的なエラーは、Azureの利用者が実際に遭遇する可能性のある状況です。

IronOCRのアプローチ

ローカル処理により、ネットワーク障害発生領域が排除される。 エラー処理の範囲は、ファイルシステムと入力検証に限定される。

// なし async required — local processing returns synchronously
public string ExtractText(string imagePath)
{
    var result = new IronTesseract().Read(imagePath);
    return result.Text;
}

// One line for simple cases
public string OneLineOcr(string imagePath)
{
    return new IronTesseract().Read(imagePath).Text;
}

// Confidence-aware extraction
public (string Text, double Confidence) ExtractWithConfidence(string imagePath)
{
    var result = new IronTesseract().Read(imagePath);
    return (result.Text, result.Confidence);
}
// なし async required — local processing returns synchronously
public string ExtractText(string imagePath)
{
    var result = new IronTesseract().Read(imagePath);
    return result.Text;
}

// One line for simple cases
public string OneLineOcr(string imagePath)
{
    return new IronTesseract().Read(imagePath).Text;
}

// Confidence-aware extraction
public (string Text, double Confidence) ExtractWithConfidence(string imagePath)
{
    var result = new IronTesseract().Read(imagePath);
    return (result.Text, result.Confidence);
}
Imports IronTesseract

Public Class OcrProcessor
    ' なし async required — local processing returns synchronously
    Public Function ExtractText(imagePath As String) As String
        Dim result = New IronTesseract().Read(imagePath)
        Return result.Text
    End Function

    ' One line for simple cases
    Public Function OneLineOcr(imagePath As String) As String
        Return New IronTesseract().Read(imagePath).Text
    End Function

    ' Confidence-aware extraction
    Public Function ExtractWithConfidence(imagePath As String) As (Text As String, Confidence As Double)
        Dim result = New IronTesseract().Read(imagePath)
        Return (result.Text, result.Confidence)
    End Function
End Class
$vbLabelText   $csharpLabel

RequestFailedException がなく、リトライループもなし Task.WhenAll バッチジョブのための調整。 非同期コントローラパイプラインとの統合のために非同期が必要な場合、Task.Run(() => ocr.Read(path)) が同期呼び出しを内部の OCR ロジックに構造的変更を加えることなくラップします。 IronTesseract APIリファレンスには、同期インターフェースの全機能が網羅されています。 非同期パターンを真に必要とするワークロード向けに、 IronOCRは専用の非同期OCRガイドも提供しています。

認証情報とエンドポイントの設定

Azure Computer Visionでは、最初のテストを行う前にインフラストラクチャをプロビジョニングする必要があります。IronOCRIronOCR、 NuGetのインストールと、必要に応じてライセンスキー文字列が必要です。

Azure コンピュータビジョンアプローチ

OCRコードを書き込む前に必要なAzureのセットアップ手順:

  1. Azureアカウントが存在しない場合は作成します。
  2. Azure ポータルに移動し、Cognitive Services リソース (または Azure AI Services リソース) を作成します。
  3. 料金プランと地域を選択してください。
  4. エンドポイント URL をコピーします(形式: https://your-resource.cognitiveservices.azure.com/)。
  5. 2つのAPIキーのうち1つをコピーします。
  6. 両方の値を安全に保存してください。環境変数、Azure Key Vault、または appsettings.json(非本番環境のみ)で。
  7. Azure.AI.Vision.ImageAnalysis を NuGet 経由でインストールします。
  8. エンドポイントと資格情報を使用して ImageAnalysisClient を初期化します。

PDF 処理のためには、Form Recognizer リソースと別の NuGet パッケージ (Azure.AI.FormRecognizer)、および別のクライアントクラス (DocumentAnalysisClient) のステップ 2-8 を繰り返します。

appsettings.json はエンドポイントとキーを保存します。

{
  "Azure": {
    "ComputerVision": {
      "Endpoint": "https://your-resource.cognitiveservices.azure.com/",
      "ApiKey": "your-api-key"
    }
  }
}

APIキーのローテーション、認証情報の有効期限の処理、環境(開発、ステージング、本番)間でのエンドポイントURLの管理は、ローカル処理では対応できない継続的な運用タスクです。

IronOCRのアプローチ

IronTesseractのセットアップガイドでは、セットアップ手順を2ステップに簡略化しています。

dotnet add package IronOcr
// Set once at application startup — environment variable recommended
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");

// Then use immediately — no endpoint, no credential rotation, no portal setup
var text = new IronTesseract().Read("document.jpg").Text;
// Set once at application startup — environment variable recommended
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");

// Then use immediately — no endpoint, no credential rotation, no portal setup
var text = new IronTesseract().Read("document.jpg").Text;
Imports System

' Set once at application startup — environment variable recommended
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE")

' Then use immediately — no endpoint, no credential rotation, no portal setup
Dim text As String = (New IronTesseract()).Read("document.jpg").Text
$vbLabelText   $csharpLabel

ライセンスキーは固定の文字列です。 リクエストごとに有効期限が切れることはなく、ローテーションも不要で、アクティベーション後に検証のためにサーバーにコールすることもありません。 展開環境では、OCRが機能するために送信ファイアウォールルールは必要ありません。

APIマッピングリファレンス

Azure コンピュータービジョン IronOCR相当値
ImageAnalysisClient IronTesseract
new AzureKeyCredential(apiKey) IronOcr.License.LicenseKey = key
client.AnalyzeAsync(data, VisualFeatures.Read) ocr.Read(imagePath)
BinaryData.FromStream(stream) input.LoadImage(stream)
result.Value.Read.Blocks result.Paragraphs
block.Lines result.Lines
line.Text line.Text
line.Words result.Words
word.Confidence word.Confidence(Azure の 0-1 スケールに対して 0-100 スケール)
word.BoundingPolygon word.X, word.Y, word.Width, word.Height
DocumentAnalysisClient IronTesseract + OcrInput
AnalyzeDocumentAsync(WaitUntil.Completed, "prebuilt-read", stream) ocr.Read(input) with input.LoadPdf(path)
operation.Value.Pages result.Pages
page.Lines / line.Content result.Lines / line.Text
RequestFailedException (429 リトライ) 該当なし - レート制限なし
RequestFailedException (500 リトライ) 該当なし - サービスエラーなし

チームがAzure Computer VisionからIronOCRへの移行を検討する際

コンプライアンス要件 ブロッククラウド処理

医療分野のISV(独立系ソフトウェアベンダー)が文書管理システムを構築する際、統合が迅速なため、Azure Computer Visionから開発を始める。 そして最初のEnterprise顧客である病院システムに到着し、HIPAAセキュリティ担当者から"私たちのPHIはどこに送られるのか?"と"その第三者に関するビジネスアソシエイト契約を見せていただけますか?"という2つの質問を受けました。AzureにはBAAがありましたが、最初の質問に対する答えである"マイクロソフトのデータセンター"がきっかけとなり、長期間にわたるセキュリティレビュー、マイクロソフトの監査レポートの要求、そして契約を遅らせるコンプライアンスのタイムラインが発生しました。 IronOCRに切り替えると、その質問自体が完全に消えます。 PHI(保護対象医療情報)は、顧客の環境から決して持ち出されません。 コンプライアンスの範囲は、顧客自身の組織内に留まります。

取引量の増加により、取引ごとの価格設定は維持不可能になる

運用チームは、月間5,000件の請求書を処理するパイプラインを立ち上げた。これはAzureの無料利用枠の範囲内に十分収まる。 ボリュームが増えると、トランザクションごとのコストがすべての処理されたドキュメントに蓄積されます。 IronOCR Professional ($2,999) は一回のみの購入であり、ドキュメントごとの料金は発生しません。 中程度の業務量増加を見込んでいるチームでも、すぐに損益分岐点に達し、その後は追加の文書はすべてコスト削減につながります。

ネットワーク遅延は処理SLAに影響を与える

文書処理サービスは、エンドツーエンドで2秒のSLA(サービスレベル契約)を目標としている。 Azure Computer Visionでは、OCR処理自体が行われる前に、同一リージョン内の通話では200~800ミリ秒、リージョンをまたぐ展開では500~2000ミリ秒のネットワーク遅延が発生します。 負荷がかかると、S1の10 TPSというレート制限によってキューイングが発生し、レイテンシがさらに増大する。 IronOCRは、汎用サーバーハードウェア上で、キュー、レート制限、ネットワークホップなしで、300 DPIの画像を100~400ミリ秒で処理します。サービスレベル契約(SLA)は、Azureサービスの健全性やネットワーク状況ではなく、ハードウェアのみに依存するため、予測可能になります。

エアギャップインフラストラクチャの要件

防衛関連企業、情報機関、重要インフラ事業者は、意図的にインターネット接続のないネットワーク上でワークロードを実行している。 Azure Computer Visionは、これらの環境とは技術的に互換性がありません。エンドポイントにアクセスできないためです。 これらの分野のチームは、自己完結型のバイナリとしてデプロイされ、外部接続を必要とせず、クラウドへのデータ送信を明確に禁止するセキュリティレビューに合格するライブラリを必要としています。 IronOCRはLinux環境へのデプロイとDockerのサポートにより、変更を加えることなく制限された環境にもデプロイ可能です。

複数環境への展開を簡素化する

SaaSアプリケーションの開発環境、ステージング環境、および本番環境を管理するチームは、3つのAzure Cognitive Servicesリソース、3組のAPIキー、および3つのエンドポイントURLを管理しており、それぞれに安全なストレージ、ローテーションポリシー、および環境固有の構成が必要です。 すべてのデプロイ環境において、Azureへのアウトバウンドネットワークアクセスが必要です。 IronOCR は環境設定を 1 つの環境変数 (IRONOCR_LICENSE) に削減し、ネットワークアクセス要件を排除し、環境全体での資格情報管理の運用上のオーバーヘッドを取り除きます。

一般的な移行の考慮事項

非同期から同期へのパターン

Azure コンシューマーコードは必要に迫られて async です。 IronOCRは非同期処理を必要としませんが、その移行は機械的なものです。 戻りの型を async Task<string> から string に置き換え、awaitasync のキーワードを削除し、リトライループを削除します。呼び出しメソッドが非同期である必要がある ASP.NET コントローラまたはサービスである場合、IronOCR の呼び出しを Task.Run にラップしてください。

// Before: Azure async chain
public async Task<string> ReadTextAsync(string imagePath)
{
    using var stream = File.OpenRead(imagePath);
    var data = BinaryData.FromStream(stream);
    var result = await _client.AnalyzeAsync(data, VisualFeatures.Read);
    return string.Join("\n", result.Value.Read.Blocks
        .SelectMany(b => b.Lines)
        .Select(l => l.Text));
}

// After: IronOCR synchronous
public string ReadText(string imagePath)
{
    return new IronTesseract().Read(imagePath).Text;
}

// If async signature must be preserved for interface compatibility
public Task<string> ReadTextAsync(string imagePath)
{
    return Task.Run(() => new IronTesseract().Read(imagePath).Text);
}
// Before: Azure async chain
public async Task<string> ReadTextAsync(string imagePath)
{
    using var stream = File.OpenRead(imagePath);
    var data = BinaryData.FromStream(stream);
    var result = await _client.AnalyzeAsync(data, VisualFeatures.Read);
    return string.Join("\n", result.Value.Read.Blocks
        .SelectMany(b => b.Lines)
        .Select(l => l.Text));
}

// After: IronOCR synchronous
public string ReadText(string imagePath)
{
    return new IronTesseract().Read(imagePath).Text;
}

// If async signature must be preserved for interface compatibility
public Task<string> ReadTextAsync(string imagePath)
{
    return Task.Run(() => new IronTesseract().Read(imagePath).Text);
}
Imports System.IO
Imports System.Threading.Tasks
Imports System.Linq

' Before: Azure async chain
Public Async Function ReadTextAsync(imagePath As String) As Task(Of String)
    Using stream = File.OpenRead(imagePath)
        Dim data = BinaryData.FromStream(stream)
        Dim result = Await _client.AnalyzeAsync(data, VisualFeatures.Read)
        Return String.Join(vbLf, result.Value.Read.Blocks _
            .SelectMany(Function(b) b.Lines) _
            .Select(Function(l) l.Text))
    End Using
End Function

' After: IronOCR synchronous
Public Function ReadText(imagePath As String) As String
    Return New IronTesseract().Read(imagePath).Text
End Function

' If async signature must be preserved for interface compatibility
Public Function ReadTextAsync(imagePath As String) As Task(Of String)
    Return Task.Run(Function() New IronTesseract().Read(imagePath).Text)
End Function
$vbLabelText   $csharpLabel

信頼度スケールの正規化

Azure Computer Vision は単語の信頼度を 0 から 1 までの float として返します。IronOCR は信頼度を 0-100 スケールの double として返します。 Azureの信頼度値に基づいてしきい値を設定するコードはすべて調整が必要です。

// Azure: confidence is 0.0 - 1.0
foreach (var word in line.Words)
{
    if (word.Confidence > 0.85f) { /* high confidence */ }
}

// IronOCR: confidence is 0 - 100
var result = new IronTesseract().Read(imagePath);
foreach (var word in result.Words)
{
    if (word.Confidence > 85.0) { /* equivalent threshold */ }
}
Console.WriteLine($"Overall: {result.Confidence}%");
// Azure: confidence is 0.0 - 1.0
foreach (var word in line.Words)
{
    if (word.Confidence > 0.85f) { /* high confidence */ }
}

// IronOCR: confidence is 0 - 100
var result = new IronTesseract().Read(imagePath);
foreach (var word in result.Words)
{
    if (word.Confidence > 85.0) { /* equivalent threshold */ }
}
Console.WriteLine($"Overall: {result.Confidence}%");
Imports IronOcr

' Azure: confidence is 0.0 - 1.0
For Each word In line.Words
    If word.Confidence > 0.85F Then
        ' high confidence
    End If
Next

' IronOCR: confidence is 0 - 100
Dim result = New IronTesseract().Read(imagePath)
For Each word In result.Words
    If word.Confidence > 85.0 Then
        ' equivalent threshold
    End If
Next
Console.WriteLine($"Overall: {result.Confidence}%")
$vbLabelText   $csharpLabel

OcrResult APIリファレンスには、信頼度スケールを含むすべての結果プロパティが記載されています。 信頼度スコアの算出方法に関するガイドでは、閾値の選択方法と要素ごとの解釈について解説しています。

PDF処理サービスの統合

Azure では、画像 OCR とPDF OCRを別々のサービスに分割し、それぞれに個別のクライアント、 NuGetパッケージ、エンドポイント構成を用意しています。 移行とは、両方のパスを単一の IronTesseract インスタンスに統合することを意味します。 OcrInput.LoadPdf メソッドはファイルパス、ストリーム、またはバイト配列を受け入れ、暗号化ファイル用のオプションの Password パラメータを備えています。二つ目のクライアントは必要ありません。

// Before: Two separate Azure clients for images vs PDFs
// Image: ImageAnalysisClient + AnalyzeAsync
// PDF:   DocumentAnalysisClient + AnalyzeDocumentAsync(WaitUntil.Completed, ...)

// After: One IronTesseract instance handles both
var ocr = new IronTesseract();

// Image
var imageResult = ocr.Read("document.jpg");

// PDF (same client, same Read method)
using var pdfInput = new OcrInput();
pdfInput.LoadPdf("document.pdf");
var pdfResult = ocr.Read(pdfInput);

// Password-protected PDF
using var encInput = new OcrInput();
encInput.LoadPdf("secured.pdf", Password: "secret");
var encResult = ocr.Read(encInput);

// 検索可能なPDF出力 — no manual construction
pdfResult.SaveAsSearchablePdf("searchable-output.pdf");
// Before: Two separate Azure clients for images vs PDFs
// Image: ImageAnalysisClient + AnalyzeAsync
// PDF:   DocumentAnalysisClient + AnalyzeDocumentAsync(WaitUntil.Completed, ...)

// After: One IronTesseract instance handles both
var ocr = new IronTesseract();

// Image
var imageResult = ocr.Read("document.jpg");

// PDF (same client, same Read method)
using var pdfInput = new OcrInput();
pdfInput.LoadPdf("document.pdf");
var pdfResult = ocr.Read(pdfInput);

// Password-protected PDF
using var encInput = new OcrInput();
encInput.LoadPdf("secured.pdf", Password: "secret");
var encResult = ocr.Read(encInput);

// 検索可能なPDF出力 — no manual construction
pdfResult.SaveAsSearchablePdf("searchable-output.pdf");
Imports IronOcr

' Before: Two separate Azure clients for images vs PDFs
' Image: ImageAnalysisClient + AnalyzeAsync
' PDF:   DocumentAnalysisClient + AnalyzeDocumentAsync(WaitUntil.Completed, ...)

' After: One IronTesseract instance handles both
Dim ocr As New IronTesseract()

' Image
Dim imageResult = ocr.Read("document.jpg")

' PDF (same client, same Read method)
Using pdfInput As New OcrInput()
    pdfInput.LoadPdf("document.pdf")
    Dim pdfResult = ocr.Read(pdfInput)

    ' Password-protected PDF
    Using encInput As New OcrInput()
        encInput.LoadPdf("secured.pdf", Password:="secret")
        Dim encResult = ocr.Read(encInput)
    End Using

    ' 検索可能なPDF出力 — no manual construction
    pdfResult.SaveAsSearchablePdf("searchable-output.pdf")
End Using
$vbLabelText   $csharpLabel

PDF入力ガイドでは、ページ範囲の選択、ストリーム入力、およびネイティブPDFレンダリングパイプラインについて説明しています。画像入力については、画像入力ガイドを参照してください。

フォーム認識機能を使用しない構造化データ抽出

フィールド抽出のために、Form Recognizer の組み込みモデル(請求書、レシート、身分証明書)を使用しているチームは、IronOCR で CropRectangle を使用して地域ベースの OCR による抽出ロジックを模倣する必要があります。 位置情報の抽出は、モデルベースではなく明示的な方法で行われる。

// Form Recognizer extracted named fields automatically
// IronOCR: define extraction zones for known document layouts
var ocr = new IronTesseract();

// Define regions matching the document template
var vendorZone   = new CropRectangle(0,   0,   300, 100);
var invoiceDate  = new CropRectangle(400, 0,   200, 50);
var totalAmount  = new CropRectangle(400, 500, 200, 100);

string vendor, date, total;

using (var input = new OcrInput())
{
    input.LoadImage("invoice.jpg", vendorZone);
    vendor = ocr.Read(input).Text.Trim();
}

using (var input = new OcrInput())
{
    input.LoadImage("invoice.jpg", invoiceDate);
    date = ocr.Read(input).Text.Trim();
}

using (var input = new OcrInput())
{
    input.LoadImage("invoice.jpg", totalAmount);
    total = ocr.Read(input).Text.Trim();
}
// Form Recognizer extracted named fields automatically
// IronOCR: define extraction zones for known document layouts
var ocr = new IronTesseract();

// Define regions matching the document template
var vendorZone   = new CropRectangle(0,   0,   300, 100);
var invoiceDate  = new CropRectangle(400, 0,   200, 50);
var totalAmount  = new CropRectangle(400, 500, 200, 100);

string vendor, date, total;

using (var input = new OcrInput())
{
    input.LoadImage("invoice.jpg", vendorZone);
    vendor = ocr.Read(input).Text.Trim();
}

using (var input = new OcrInput())
{
    input.LoadImage("invoice.jpg", invoiceDate);
    date = ocr.Read(input).Text.Trim();
}

using (var input = new OcrInput())
{
    input.LoadImage("invoice.jpg", totalAmount);
    total = ocr.Read(input).Text.Trim();
}
Imports IronOcr

' Form Recognizer extracted named fields automatically
' IronOCR: define extraction zones for known document layouts
Dim ocr As New IronTesseract()

' Define regions matching the document template
Dim vendorZone As New CropRectangle(0, 0, 300, 100)
Dim invoiceDate As New CropRectangle(400, 0, 200, 50)
Dim totalAmount As New CropRectangle(400, 500, 200, 100)

Dim vendor As String
Dim [date] As String
Dim total As String

Using input As New OcrInput()
    input.LoadImage("invoice.jpg", vendorZone)
    vendor = ocr.Read(input).Text.Trim()
End Using

Using input As New OcrInput()
    input.LoadImage("invoice.jpg", invoiceDate)
    [date] = ocr.Read(input).Text.Trim()
End Using

Using input As New OcrInput()
    input.LoadImage("invoice.jpg", totalAmount)
    total = ocr.Read(input).Text.Trim()
End Using
$vbLabelText   $csharpLabel

地域ベースの OCR ガイド は、CropRectangle の詳細な使用法について説明しています。 請求書固有のワークフローについては、請求書OCRチュートリアルで完全な抽出パターンが説明されています。

IronOCRの追加機能

上記の比較点に加え、 IronOCRはAzure Computer Visionが標準のOCR APIを通じて公開していない機能を提供します。

-スキャン文書の処理:OCRエンジンが画像を認識する前に、完全な前処理パイプライン(傾き補正、ノイズ除去、コントラスト調整、二値化、シャープ化)が適用され、クラウドAPIから空または信頼性の低い結果が返されるスキャンの精度が向上します。 -長文ドキュメントの進捗状況追跡:複数ページのPDF処理中に進捗状況イベントを購読します。UIフィードバックが必要な長時間実行バッチジョブに役立ちます。 -コンピュータビジョン前処理:斜めから撮影された写真や、照明条件が一定でない写真など、処理が難しい文書に対する、深層学習に基づく前処理。

.NETの互換性と将来の準備

IronOCRは、単一のNuGetパッケージから.NET 8、 .NET 9、 .NET Standard 2.0、および.NET Framework 4.6.2から4.8までを対象としています。 Windows x64、Windows x86、Linux x64、macOS(IntelおよびApple Silicon)、ARM64をサポートしており、Azure App Service、AWS Lambda、Dockerコンテナ、オンプレミスLinuxサーバーなど、最新 for .NET展開ターゲットを網羅しています。 Azure コンピュータービジョン の .NET SDK (Azure.AI.Vision.ImageAnalysis) もモダンな .NET 互換性を維持していますが、クラウドアーキテクチャのため、SDKとは独立してバージョン管理および更新されているAzureエンドポイントとの互換性がランタイムとの互換性に優先します。 IronOCRは、言語とエンジンのアップデートをNuGet経由で提供することで、 .NETエコシステム全体とのアップデートモデルの一貫性を維持しています。

結論

Azure Computer Visionは、Azureエコシステム内で既に運用しているチームにとって、クラウド送信に関する規制上の制約がなく、かつ処理量が無料枠または少量有料枠の範囲内である場合に利用できる、高性能なOCRサービスです。 非同期APIは機能的で、標準文書における精度は信頼性が高く、フォーム認識機能の事前構築済みモデルにより、請求書や領収書などの構造化文書タイプの開発作業が軽減されます。

しかし、このコストモデルは規模拡大に対応できない。 月間5万件の文書を処理する場合、 IronOCR LiteはAzureのトランザクション手数料の節約分だけで2か月以内に元が取れます。 複数ページのPDFファイルの場合、ページごとの課金が発生するため、コストはさらに膨らみます。損益分岐点を超えた事業年度ごとに、マイクロソフトに支払われない資金が増えることになります。 月間1万件以上の文書処理が見込まれるチームにとって、長期的な経済性を考えると、永続的なオンプレミスライセンスが有利となる。

データ主権の主張は、より絶対的なものだ。 PHI(保護対象医療情報)、ITAR(国際武器取引規則)で規制されているデータ、弁護士と依頼人の間の秘匿通信、または法的もしくは契約上の理由で組織の境界を越えることができない文書カテゴリがOCRパイプラインを通過する場合、Azure Computer Visionは設計から除外されます。不利になるのではなく、完全に除外されるのです。 IronOCRのローカル処理モデルは、アーキテクチャ上の妥協をすることなく、これらのワークロードを処理します。

非同期ポーリングの複雑さは、実際のオーバーヘッドとなる。 リトライロジック、レート制限処理、ネットワーク失敗モード、ImageAnalysisClientDocumentAnalysisClient の分割により、OCR の価値がないコードが追加されます。それはクラウド統合コードです。 IronOCR の同期 Read() メソッドは、画像と PDF を同一のコードで扱い、非同期の伝播が必要なく、リトライロジックも不要です。 クラウドAPIの基盤構築ではなく、アプリケーション自体の開発にエンジニアリングの労力を費やしたいチームにとって、そのシンプルさはプロジェクトのライフサイクル全体を通して大きな価値をもたらします。

ご注意Azure Computer Vision および Tesseract はそれぞれの所有者の登録商標です。 本サイトはGoogleやMicrosoftと提携しておらず、推薦またはスポンサーされていません。 すべての製品名、ロゴ、およびブランドは各所有者の所有物です。 比較は情報提供のみを目的としており、執筆時点で公開されている情報を反映しています。

よくある質問

Azure Computer Vision OCRとは何ですか?

Azure Computer Vision OCRは、開発者や企業が画像や文書からテキストを抽出するために使用するOCRソリューションです。これは、.NETアプリケーション開発のためのIronOCRとともに評価されるいくつかのOCRオプションの1つです。

IronOCRとAzure Computer Vision OCR for .NET開発者との比較は?

IronOCRは、NuGetネイティブ for .NET OCRライブラリで、.CoreエンジンとしてIronTesseractを使用しています。Azure Computer Vision OCRと比較して、よりシンプルなデプロイメント(SDKインストーラーなし)、定額制の価格設定、COMインターオプやクラウド依存のないクリーンなC# APIを提供します。

IronOCRはAzure Computer Vision OCRよりもセットアップが簡単ですか?

IronOCRは単一のNuGetパッケージでインストールされます。SDKインストーラー、ライセンスファイルのコピー、COMコンポーネントの登録、ランタイムバイナリの管理は必要ありません。OCRエンジン全体がパッケージにバンドルされています。

Azure Computer Vision OCRとIronOCRにはどのような精度の違いがありますか?

IronOCRは、標準的なビジネス文書、請求書、領収書、スキャンしたフォームに対して高い認識精度を達成します。高度に劣化した文書や一般的でないスクリプトの場合、精度はソースの品質によって異なります。IronOCRは低品質入力の認識を向上させる画像前処理フィルターを含んでいます。

IronOCRはPDFテキスト抽出をサポートしていますか?

IronOCRは、ネイティブPDFとスキャンしたPDFイメージの両方から、一回の呼び出しでテキストを抽出します。また、複数ページのTIFFファイル、画像、ストリームもサポートします。スキャンしたPDFの場合、OCRはページごとに適用され、ページごとの結果オブジェクトを持ちます。

Azure Computer Vision OCRライセンスは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は、Azure Computer Visionとは異なり、Dockerやコンテナ化されたデプロイメントに適していますか?

IronOCRはNuGetパッケージによってDockerコンテナで動作します。ライセンスキーは環境変数で設定します。OCRエンジン自体にはライセンスファイル、SDKパス、ボリュームマウントは必要ありません。

Azure Computer Visionと比較して、購入前にIronOCRを試すことはできますか?

IronOCRのトライアルモードでは、ドキュメントを処理し、出力に透かしをオーバーレイしたOCR結果を返します。ライセンスを購入する前に、ご自身の文書で精度を確認することができます。

IronOCRはテキスト抽出とバーコード読み取りをサポートしていますか?

IronOCRはテキスト抽出とOCRに重点を置いています。バーコード読み取りについては、Iron SoftwareはIronBarcodeをコンパニオンライブラリとして提供しています。どちらも個別に、あるいはIron Suiteのバンドルとして提供されています。

Azure Computer Vision OCRからIronOCRへの移行は簡単ですか?

Azure Computer Vision OCRからIronOCRへの移行は通常、初期化シーケンスをIronTesseractのインスタンス生成に置き換え、COMライフサイクル管理を削除し、APIコールを更新します。ほとんどの移行はコードの複雑さを大幅に軽減します。

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

アイアンサポートチーム

私たちは週5日、24時間オンラインで対応しています。
チャット
メール
電話してね