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

Tesseract C# とIronOCR: .NETではどちらの OCR ライブラリを使用すべきでしょうか?

もしあなた for .NET Framework 4.5コードベースがまだOCRレイヤーを実行していて、最近PatagamesのTesseract .NET.SDKが.NET 6、 .NET 8、またはLinux Dockerイメージに対してコンパイルできないことを発見した場合、あなたはまさにこの記事で検討するトレードオフに直面していることになります。 Tesseract .NET.SDKは.NET Framework 2.0から4.5を対象とし、Windows専用のネイティブバイナリを提供し、無料のTesseractエンジンに加えて商用ライセンス料を請求します。この組み合わせは、ほとんどの組織がワークロードをコンテナ化し、ランタイムをアップグレードしているまさにその時に、チームを縮小しつつあるレガシーインフラストラクチャの孤立した領域に閉じ込めてしまいます。

Tesseract .NET.SDK を理解する

Tesseract .NET.SDKは、オープンソースのTesseract OCRエンジンをラップした商用.NETラッパーであり、Patagames社によって販売されています。 製品は、Windows x86 および x64 用に事前にコンパイルされた Tesseract バイナリが含まれており、C/C++ の Tesseract API を管理された .NET サーフェスにラップし、そのパッケージを NuGet 経由で Tesseract.Net.SDK パッケージ ID で提供します。

この製品は、.NET Framework 4.5が導入の基準であり、Windows Serverが唯一のターゲットであった時代向けに開発されたものです。 その時代はほとんどのチームにとって終わったが、SDKはそれに追いついていない。 公式のサポート対象は、 .NET Framework 2.0、3.0、3.5、4.0、および4.5です。.NET .NET Core、 .NET Standard、 .NET 5、 .NET 6、 .NET 7、 .NET 8、および.NET 9はサポートされていません。 Linuxはサポートされていません。 macOSはサポートされていません。 Dockerコンテナ(ほぼ例外なくLinuxベースのイメージを実行する)はサポートされていません。

Tesseract .NET.SDKの主なアーキテクチャ特性:

-ランタイムターゲット: .NET Framework 2.0~4.5のみ。 .NET Coreや最新 for .NETランタイムは使用していません。 -プラットフォーム: Windows x86 および x64 のみ。 Windows 固有のネイティブライブラリへ P/Invoke 呼び出しは、非 Windows ホストで DllNotFoundException をスローします。

  • Tessdata管理:言語はバンドルされていません。 開発者は Tesseract の GitHub リポジトリから .traineddata ファイルをダウンロードし、それらを bin/tessdata/ フォルダーに置き、Visual Studio で各ファイルのビルドアクションを設定します。
  • スレッドセーフ: OcrApi インスタンスはスレッドセーフではありません; 並列ワークロードでは、スレッドごとに1つのエンジンインスタンスが必要であり、それぞれが40~100MBの言語データをメモリにロードする。 -前処理:組み込み機能なし 歪んだ画像、ノイズの多い画像、または低解像度の画像には、OpenCVやImageMagickなどの外部ライブラリが必要です。
  • PDF入力:ネイティブではサポートされていません。 開発者は、OCRの前にPDFページを一時的な画像ファイルにレンダリングするために、PdfiumViewerなどの別のライブラリをインストールします。 -開発者: Patagamesは個人開発者によって運営されています。 SLAもEnterpriseサポートレベルもなく、開発者が対応できなくなった場合の冗長性もありません。

従来 for .NET Frameworkのターゲット設定の実践

.NET Framework 4.5における厳格な境界線は、単なるチェックボックスではなく、その後のすべてのアーキテクチャ上の決定に影響を与える。 Tesseract.Net.SDK に依存するプロジェクトは、その .csproj<TargetFramework>net8.0</TargetFramework> を対象にできません。 それは mcr.microsoft.com/dotnet/sdk:8.0 を使用する GitHub Actions ランナーによって構築できません。 Linuxコンテナを実行しているKubernetesポッドにはデプロイできません。 組織の他の部門がその一線を越えた瞬間、OCRサービスは孤立無援の状態になる。

SDK自体の初期化コードがこれを直接公開しています。 tesseract-net-sdk-basic-ocr.cs の基本的な使用パターンには、明示的な Windows プラットフォームガードが含まれています。

// Install: Install-Package Tesseract.Net.SDK
// Platform: Windows ONLY (.NET Framework 2.0-4.5)
using Patagames.Ocr;

public string ExtractTextSimple(string imagePath)
{
    // Platform check — Tesseract.Net.SDK is Windows-only
    if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
    {
        throw new PlatformNotSupportedException(
            "Tesseract.Net.SDK only supports Windows.");
    }

    // Verify tessdata exists
    if (!Directory.Exists(@".\tessdata"))
    {
        throw new DirectoryNotFoundException(
            "tessdata folder not found. Download traineddata files from GitHub.");
    }

    using (var api = OcrApi.Create())
    {
        api.Init(Languages.English);       // loads eng.traineddata (~40 MB)
        return api.GetTextFromImage(imagePath);
    }
}
// Install: Install-Package Tesseract.Net.SDK
// Platform: Windows ONLY (.NET Framework 2.0-4.5)
using Patagames.Ocr;

public string ExtractTextSimple(string imagePath)
{
    // Platform check — Tesseract.Net.SDK is Windows-only
    if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
    {
        throw new PlatformNotSupportedException(
            "Tesseract.Net.SDK only supports Windows.");
    }

    // Verify tessdata exists
    if (!Directory.Exists(@".\tessdata"))
    {
        throw new DirectoryNotFoundException(
            "tessdata folder not found. Download traineddata files from GitHub.");
    }

    using (var api = OcrApi.Create())
    {
        api.Init(Languages.English);       // loads eng.traineddata (~40 MB)
        return api.GetTextFromImage(imagePath);
    }
}
Imports Patagames.Ocr
Imports System.Runtime.InteropServices
Imports System.IO

Public Function ExtractTextSimple(ByVal imagePath As String) As String
    ' Platform check — Tesseract.Net.SDK is Windows-only
    If Not RuntimeInformation.IsOSPlatform(OSPlatform.Windows) Then
        Throw New PlatformNotSupportedException("Tesseract.Net.SDK only supports Windows.")
    End If

    ' Verify tessdata exists
    If Not Directory.Exists(".\tessdata") Then
        Throw New DirectoryNotFoundException("tessdata folder not found. Download traineddata files from GitHub.")
    End If

    Using api = OcrApi.Create()
        api.Init(Languages.English) ' loads eng.traineddata (~40 MB)
        Return api.GetTextFromImage(imagePath)
    End Using
End Function
$vbLabelText   $csharpLabel

OCR処理の1行の前に、2つの防御チェックが表示されます。Windowsの確認、tessdataの確認です。 Windows以外のホストでは、このメソッドはエンジンに到達する前に例外をスローします。また、デプロイ時にtessdataフォルダがコピーされなかったマシンでは、再度例外をスローします。 どちらのチェックも定型的なものではなく、開発者が本番環境で遭遇する可能性のある障害モードを表しています。

IronOCRを理解する

IronOCRは、最適化されたTesseract 5エンジンをベースに構築された、 .NET向けの商用OCRライブラリです。自動画像前処理、ネイティブPDF入力、Windows、Linux、macOS、Docker、Azure、AWSといったクロスプラットフォーム対応といった特長を備えています。 これは単一のNuGetパッケージとして提供され、外部ネイティブ ライブラリの設定、tessdata フォルダーの管理、プラットフォーム固有のデプロイ スクリプトは含まれていません。

主な特徴:

-ランタイムサポート: .NET Framework 4.6.2 以降、 .NET Core 2.0 以降、 .NET 5、6、7、8、および 9。 単一のパッケージバイナリが、サポートされているすべてのランタイムで動作します。 -対応プラットフォーム: Windows x86/x64、Linux x64、macOS Dockerコンテナ、Azure App Service、AWS Lambda、Kubernetesポッドと全く同じようにデプロイできます。

  • 前処理: 組み込みフィルタ — Rotate()、他にもあります — エンジン実行前に OcrInput オブジェクトを通じて適用されます。
  • PDF入力: ネイティブ; input.LoadPdf() は、二次ライブラリなしでスキャンまたはデジタルPDFを受け入れます; パスワードで保護されたPDFは、パスワードをパラメータとして渡します。
  • 検索可能なPDF出力: result.SaveAsSearchablePdf() は、任意のスキャンされたドキュメントを一回の呼び出しでテキスト検索可能なPDFに変換します。
  • スレッドセーフ: IronTesseract インスタンスはスレッドセーフです。 単一のインスタンスがメモリ割り当てを増やすことなくすべてのスレッドを処理する -言語サポート: 125以上の言語が個別のNuGet言語パックパッケージとしてインストールされ、初回使用時に自動的にダウンロードされるため、手動でのファイル配置は不要です。
  • ライセンス: Lite ティアの$999から始まる一度の購入での永続ライセンス; no per-document or per-transaction billing

機能比較

フィーチャー Tesseract.Net.SDK IronOCR
.NET Frameworkのサポート 2.0~4.5のみ 4.6.2+
最新 for .NET (5/6/7/8/9) なし はい
Windows展開 はい はい
Linuxの展開 なし はい
Dockerコンテナ なし はい
PDF入力(ネイティブ) なし はい
自動前処理 なし はい
スレッドセーフエンジン なし はい

詳細な機能比較

フィーチャー Tesseract.Net.SDK IronOCR
ランタイム互換性
.NET Framework 2.0~4.5 はい なし
.NET Framework 4.6.2以降 なし はい
.NET Core 2.x/3.x なし はい
.NET 5 なし はい
.NET 6 なし はい
.NET 7 なし はい
.NET 8 なし はい
.NET 9 なし はい
プラットフォームサポート
Windows x86/x64 はい はい
Linux x64 なし はい
macOS なし はい
Docker(Linuxイメージ) なし はい
Azure App Service(Linux) なし はい
AWSラムダ なし はい
Kubernetesポッド なし はい
入力ソース
画像ファイル(BMP、PNG、JPEG、TIFF) はい はい
PDF入力(ネイティブ) なし はい
パスワードで保護されたPDF なし はい
バイト配列/ストリーム はい はい
前処理
デスキュー いいえ(外部ライブラリ) 内蔵
ノイズ除去 いいえ(外部ライブラリ) 内蔵
コントラスト強調 いいえ(外部ライブラリ) 内蔵
バイナリ化 いいえ(外部ライブラリ) 内蔵
解像度の向上 いいえ(外部ライブラリ) 内蔵
出力
プレーンテキスト はい はい
検索可能なPDF なし はい
hOCRエクスポート なし はい
構造化データ(座標を含む単語、行、段落) なし はい
信頼度スコア はい (GetMeanConfidence()) はい (result.Confidence)
言語サポート
言語数 120+(手動ダウンロード) 125個以上(NuGetパック)
言語の自動ダウンロード なし はい
ねじ切り
スレッドセーフなエンジンインスタンス なし はい
並列処理機能を内蔵 なし はい
スレッドごとのメモリオーバーヘッド エンジンあたり約40~100MB 共有単一インスタンス
ライセンスについて
ライセンスモデル 商用ワンタイム 永久一回限り
エントリー価格 約20~50ドル $999
文書ごとの課金 なし なし
Enterpriseサポート/SLA なし はい

.NETバージョンのサポートとランタイムの互換性

これら2つのライブラリの最も重要な違いは、APIの設計や正確性ではなく、実行時の互換性である。

Tesseract .NET.SDK アプローチ

Tesseract .NET.SDKは、 .NET Framework 2.0から4.5を対象としています。これに依存するすべてのプロジェクトは、これらのフレームワークバージョンのいずれかを対象とする必要があります。 移行比較ファイルは、セットアップセクションでこの制約を確認しています。

// Install: Install-Package Tesseract.Net.SDK
// License: Commercial (Patagames)
// Platform: Windows ONLY (.NET Framework 2.0-4.5)
//
// Requirements:
//   - tessdata folder must exist in bin/Debug/or bin/Release/
//   - Download traineddata files from https://github.com/tesseract-ocr/tessdata
//   - Windows operating system (no Linux/macOS support)

using Patagames.Ocr;

// Multi-language setup — all traineddata files must be manually downloaded
using (var api = OcrApi.Create())
{
    // Combine languages with bitwise OR
    api.Init(Languages.English | Languages.German | Languages.French);

    string text = api.GetTextFromImage(imagePath);
    return text;
}
// Install: Install-Package Tesseract.Net.SDK
// License: Commercial (Patagames)
// Platform: Windows ONLY (.NET Framework 2.0-4.5)
//
// Requirements:
//   - tessdata folder must exist in bin/Debug/or bin/Release/
//   - Download traineddata files from https://github.com/tesseract-ocr/tessdata
//   - Windows operating system (no Linux/macOS support)

using Patagames.Ocr;

// Multi-language setup — all traineddata files must be manually downloaded
using (var api = OcrApi.Create())
{
    // Combine languages with bitwise OR
    api.Init(Languages.English | Languages.German | Languages.French);

    string text = api.GetTextFromImage(imagePath);
    return text;
}
Imports Patagames.Ocr

' Install: Install-Package Tesseract.Net.SDK
' License: Commercial (Patagames)
' Platform: Windows ONLY (.NET Framework 2.0-4.5)
'
' Requirements:
'   - tessdata folder must exist in bin/Debug/or bin/Release/
'   - Download traineddata files from https://github.com/tesseract-ocr/tessdata
'   - Windows operating system (no Linux/macOS support)

' Multi-language setup — all traineddata files must be manually downloaded
Using api = OcrApi.Create()
    ' Combine languages with bitwise OR
    api.Init(Languages.English Or Languages.German Or Languages.French)

    Dim text As String = api.GetTextFromImage(imagePath)
    Return text
End Using
$vbLabelText   $csharpLabel

using (var api = OcrApi.Create()) パターンは、慣用的な .NET Framework 2.0 です。C# 1.0 の using ステートメントを使用し、C# 8.0 の using var 宣言ではありません。 名前空間は Patagames.Ocr です。 この言語の組み合わせでは、列挙型に対してビットごとのOR演算を使用します。 このコードは、SDKスタイルプロジェクトファイルの net6.0 または net8.0 ターゲットフレームワークに対してコンパイルされません。Tesseract.Net.SDK 自体が互換性のあるアセンブリを生成しないためです。

.NET Framework 4.5 に固執しているチームは、意図的にそこに留まっているわけではありません。 それらが存在しているのは、依存関係(場合によってはOCRライブラリを含む)をアップグレードできないためです。 Tesseract .NET.SDK を選択すると、その依存関係の連鎖がさらに深まります。

IronOCRのアプローチ

IronOCRは、 .NET Framework 4.6.2および.NET 9までのすべての最新 for .NETランタイムをサポートしています。同じパッケージバイナリがすべての環境で動作します。 プロジェクトを.NET Framework 4.8から.NET 8にアップグレードする場合、OCRライブラリを置き換える必要はありません。

// Works on .NET Framework 4.6.2, .NET Core, .NET 5/6/7/8/9
// Same NuGet package, same API, same results
using IronOcr;

IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
ocr.AddSecondaryLanguage(OcrLanguage.German);
ocr.AddSecondaryLanguage(OcrLanguage.French);

var result = ocr.Read("document.jpg");
Console.WriteLine(result.Text);
Console.WriteLine($"Confidence: {result.Confidence}%");
// Works on .NET Framework 4.6.2, .NET Core, .NET 5/6/7/8/9
// Same NuGet package, same API, same results
using IronOcr;

IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
ocr.AddSecondaryLanguage(OcrLanguage.German);
ocr.AddSecondaryLanguage(OcrLanguage.French);

var result = ocr.Read("document.jpg");
Console.WriteLine(result.Text);
Console.WriteLine($"Confidence: {result.Confidence}%");
Imports IronOcr

' Works on .NET Framework 4.6.2, .NET Core, .NET 5/6/7/8/9
' Same NuGet package, same API, same results

IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"

Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.English
ocr.AddSecondaryLanguage(OcrLanguage.German)
ocr.AddSecondaryLanguage(OcrLanguage.French)

Dim result = ocr.Read("document.jpg")
Console.WriteLine(result.Text)
Console.WriteLine($"Confidence: {result.Confidence}%")
$vbLabelText   $csharpLabel

言語列挙型に対してビットごとのOR演算は使用できません。 tessdataフォルダがありません。 プラットフォームチェックは行いません。 IronTesseractのセットアップガイドでは、サポートされているすべてのランタイムの設定オプションについて、1つのドキュメントで説明しています。

移行中のチームにとっての実質的なメリットは、 ASP.NET Core 8 プロジェクトと従来 for .NET Framework 4.8 プロジェクトが同じIronOCRサービス レイヤーを共有できる点です。 条件付きコンパイルも、ライブラリの別バージョンも、互換性のないAPIを覆い隠すための抽象化レイヤーも存在しない。

プラットフォームのカバー範囲とコンテナの展開

Tesseract .NET.SDK アプローチ

Tesseract .NET.SDKには、Windows x86およびx64ネイティブバイナリが同梱されています。 Tesseractエンジンを初期化するP/Invoke呼び出しは、これらのWindows DLLに解決されます。 Linux ホスト — ubuntu、または alpine に基づく任意の Docker コンテナを含む — では、DLL を読み込むことができず、アプリケーションは実行時に DllNotFoundException をスローします。

tesseract-net-sdk-pdf-processing.cs の並列処理の例は、Linux を考慮する前に、Windows 自体でのバッチワークロードが何を意味するのかを示しています。

// Windows-only: Parallel.ForEach with separate engine per thread
// Each engine loads ~40-100 MB per language
Parallel.ForEach(
    imagePaths,
    new ParallelOptions { MaxDegreeOfParallelism = 4 },
    imagePath =>
    {
        // WARNING: Must create separate OcrApi for each thread!
        // Memory usage: 4 threads × 100MB = 400MB minimum
        using (var api = OcrApi.Create())
        {
            api.Init(Languages.English);
            string text = api.GetTextFromImage(imagePath);
            results[imagePath] = text;
        }
    });
// Windows-only: Parallel.ForEach with separate engine per thread
// Each engine loads ~40-100 MB per language
Parallel.ForEach(
    imagePaths,
    new ParallelOptions { MaxDegreeOfParallelism = 4 },
    imagePath =>
    {
        // WARNING: Must create separate OcrApi for each thread!
        // Memory usage: 4 threads × 100MB = 400MB minimum
        using (var api = OcrApi.Create())
        {
            api.Init(Languages.English);
            string text = api.GetTextFromImage(imagePath);
            results[imagePath] = text;
        }
    });
$vbLabelText   $csharpLabel

4つの並列スレッド、4つのエンジンインスタンス、400MBの言語データの同時読み込み――しかもこれは英語だけの場合だ。 ドイツ語とフランス語を加えると、その基準値は倍になる。 このSDKには、この問題を軽減するためのプーリングメカニズムは提供されていません。 このアーキテクチャは、通常ポッドごとにメモリの上限を課す最新のコンテナリソース制限と互換性がありません。

Linux従量課金プランでは、Azure Functions、AWS Lambda(Amazon Linux上で動作)、Google Cloud Runへのアクセスは提供されていません。 主要なサーバーレスプラットフォームはすべて、デフォルトでLinuxを使用している。 Tesseract .NET.SDK は、意図的にそれらすべてから除外されています。

IronOCRのアプローチ

IronOCR は、Debian ベースのイメージでの libgdiplus のための単一の apt-get 行を超える追加の設定なしで Docker へデプロイします。 Dockerの導入ガイドでは、 LinuxコンテナとWindowsコンテナの両方について解説しています。 Linux環境AzureAWSについても同様です。

スレッドセーフは IronTesseract に組み込まれています。 1つのインスタンスがすべての並列ワーカーにサービスを提供する。

// Cross-platform: Windows, Linux, macOS, Docker
// Single instance — thread-safe
using IronOcr;

var ocr = new IronTesseract();

// Single engine instance shared across all threads
// なし memory multiplication
Parallel.ForEach(imagePaths, imagePath =>
{
    using var input = new OcrInput();
    input.LoadImage(imagePath);
    var result = ocr.Read(input);
    SaveResult(imagePath, result.Text);
});
// Cross-platform: Windows, Linux, macOS, Docker
// Single instance — thread-safe
using IronOcr;

var ocr = new IronTesseract();

// Single engine instance shared across all threads
// なし memory multiplication
Parallel.ForEach(imagePaths, imagePath =>
{
    using var input = new OcrInput();
    input.LoadImage(imagePath);
    var result = ocr.Read(input);
    SaveResult(imagePath, result.Text);
});
Imports IronOcr

' Cross-platform: Windows, Linux, macOS, Docker
' Single instance — thread-safe
Dim ocr As New IronTesseract()

' Single engine instance shared across all threads
' なし memory multiplication
Parallel.ForEach(imagePaths, Sub(imagePath)
    Using input As New OcrInput()
        input.LoadImage(imagePath)
        Dim result = ocr.Read(input)
        SaveResult(imagePath, result.Text)
    End Using
End Sub)
$vbLabelText   $csharpLabel

4つのスレッド、1つのエンジンインスタンス、メモリ内の言語データのコピーが1つ。 スループットベンチマークを含む マルチスレッドの例については、 IronOCRのドキュメントに設定オプションの詳細が記載されています。

PDF処理

Tesseract .NET.SDK アプローチ

Tesseract .NET.SDK は PDF をサポートしていません。 tesseract-net-sdk-pdf-processing.cs ファイルは、その制限についてヘッダーで率直に述べています。

// 重大な制限事項:
// Tesseract .NET.SDK は PDF 入力をネイティブにサポートしていません。
// まず、PDFページを画像に変換するには、別のライブラリを使用する必要があります。
// この例では PdfiumViewer を使用していますが、代替として以下のものも使用できます。
// - iTextSharp
// - Ghostscript .NET
// - Docnet.Core

結果は、複数のライブラリパイプラインです。PdfiumViewer をインストールします。 各PDFページを 200–300 DPI で Bitmap にレンダリングします。 そのビットマップを一時ファイルに書き込みます。一時ファイル上で api.GetTextFromImage() を実行し、その後一時ファイルを削除します。各ページごとに繰り返します。 文書の途中の部分的なエラーに対するエラー処理を実装する。 メモリを明示的に管理する — ProcessLargeTiff の例では、メモリエラーを防ぐために毎 10 ページごとに GC.Collect() を強制しています。

これは実際の製品版コードであり、簡略化された例ではありません。 これはWindows上でのみ、 .NET Framework上でのみ動作し、さらに、展開管理が必要な別の商用またはオープンソースの依存関係を必要とします。

IronOCRのアプローチ

IronOCRはPDFをネイティブに読み取ります。 二次ライブラリなし、一時ファイルなし、ページレンダリングループなし:

// Native PDF OCR — no PdfiumViewer, no temp files
using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadPdf("scanned-report.pdf");   // native PDF support
var result = ocr.Read(input);

// Access page-by-page results
foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber}: {page.Text}");
}

// Or produce a searchable PDF output
result.SaveAsSearchablePdf("searchable-report.pdf");
// Native PDF OCR — no PdfiumViewer, no temp files
using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadPdf("scanned-report.pdf");   // native PDF support
var result = ocr.Read(input);

// Access page-by-page results
foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber}: {page.Text}");
}

// Or produce a searchable PDF output
result.SaveAsSearchablePdf("searchable-report.pdf");
Imports IronOcr

Dim ocr As New IronTesseract()

Using input As New OcrInput()
    input.LoadPdf("scanned-report.pdf") ' native PDF support
    Dim result = ocr.Read(input)

    ' Access page-by-page results
    For Each page In result.Pages
        Console.WriteLine($"Page {page.PageNumber}: {page.Text}")
    Next

    ' Or produce a searchable PDF output
    result.SaveAsSearchablePdf("searchable-report.pdf")
End Using
$vbLabelText   $csharpLabel

パスワード保護されたPDFには、1つの追加パラメータが必要です: input.LoadPdf("encrypted.pdf", Password: "secret")。 特定のページ範囲には input.LoadPdfPages("document.pdf", 1, 10) が使用されます。 PDF入力ガイド検索可能なPDF操作手順書には、すべてのバリエーションが網羅されています。

PDF OCRの例では、信頼度チェックと構造化出力を含む完全なパターンが示されています。 検索可能なPDFの例は、スキャンされたPDFがインデックス化され、検索可能になるという文書アーカイブのユースケースを示しています。

画像前処理と実世界の文書品質

Tesseract .NET.SDK アプローチ

Tesseractエンジンは画像品質に敏感です。 歪みのある文書、低解像度の文書、またはノイズの多い文書は、前処理を行わないと著しく劣化した出力を生成します。 Tesseract .NET.SDK にはそのような機能はありません。

移行比較ファイルは、そのギャップを直接的に定量化します。

// Tesseract.Net.SDK: なし preprocessing available
// Direct OCR on problematic image = garbage output
using (var api = OcrApi.Create())
{
    api.Init(Languages.English);

    // Direct OCR on problematic image — poor results
    string text = api.GetTextFromImage(imagePath);
    return text;

    // To preprocess, you need:
    // 1. Install Emgu CV or OpenCvSharp
    // 2. Implement Hough transform for skew detection
    // 3. Implement affine rotation for deskew
    // 4. Implement FastNlMeansDenoising for noise reduction
    // 5. Handle all the native OpenCV dependencies
    // This is often 200+ lines of code
}
// Tesseract.Net.SDK: なし preprocessing available
// Direct OCR on problematic image = garbage output
using (var api = OcrApi.Create())
{
    api.Init(Languages.English);

    // Direct OCR on problematic image — poor results
    string text = api.GetTextFromImage(imagePath);
    return text;

    // To preprocess, you need:
    // 1. Install Emgu CV or OpenCvSharp
    // 2. Implement Hough transform for skew detection
    // 3. Implement affine rotation for deskew
    // 4. Implement FastNlMeansDenoising for noise reduction
    // 5. Handle all the native OpenCV dependencies
    // This is often 200+ lines of code
}
Imports Tesseract.Net.SDK

' Tesseract.Net.SDK: なし preprocessing available
' Direct OCR on problematic image = garbage output
Using api = OcrApi.Create()
    api.Init(Languages.English)

    ' Direct OCR on problematic image — poor results
    Dim text As String = api.GetTextFromImage(imagePath)
    Return text

    ' To preprocess, you need:
    ' 1. Install Emgu CV or OpenCvSharp
    ' 2. Implement Hough transform for skew detection
    ' 3. Implement affine rotation for deskew
    ' 4. Implement FastNlMeansDenoising for noise reduction
    ' 5. Handle all the native OpenCV dependencies
    ' This is often 200+ lines of code
End Using
$vbLabelText   $csharpLabel

そのコメントは誇張ではない。 .NETでOpenCVを使用した実用レベルの傾き補正の実装は、初期化、角度検出、行列計算、アフィン変換を含む100~200行のコードで済みます。 そのコードは、テスト、保守、デプロイを行う必要があるが、そのコードは独自のネイティブ依存関係チェーンを持ち、これもまたWindows上でしか動作しない。

IronOCRのアプローチ

IronOCR は、OcrInput 上のファーストクラスの API メソッドとして前処理をバンドルしています。 Tesseract .NET.SDKでOpenCVとの統合を必要とする操作は、ここでは単一のメソッド呼び出しで済みます。

// 内蔵 preprocessing — no external library required
using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadImage("skewed-invoice-scan.jpg");

input.Deskew();               // automatic angle detection and correction
input.DeNoise();              // scanner artifact removal
input.Contrast();             // contrast enhancement
input.Binarize();             // optimal threshold conversion
input.EnhanceResolution(300); // scale low-DPI images to 300 DPI

var result = ocr.Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");
// 内蔵 preprocessing — no external library required
using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadImage("skewed-invoice-scan.jpg");

input.Deskew();               // automatic angle detection and correction
input.DeNoise();              // scanner artifact removal
input.Contrast();             // contrast enhancement
input.Binarize();             // optimal threshold conversion
input.EnhanceResolution(300); // scale low-DPI images to 300 DPI

var result = ocr.Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");
Imports IronOcr

' 内蔵 preprocessing — no external library required
Dim ocr As New IronTesseract()

Using input As New OcrInput()
    input.LoadImage("skewed-invoice-scan.jpg")

    input.Deskew()               ' automatic angle detection and correction
    input.DeNoise()              ' scanner artifact removal
    input.Contrast()             ' contrast enhancement
    input.Binarize()             ' optimal threshold conversion
    input.EnhanceResolution(300) ' scale low-DPI images to 300 DPI

    Dim result = ocr.Read(input)
    Console.WriteLine($"Confidence: {result.Confidence}%")
End Using
$vbLabelText   $csharpLabel

画像品質補正ガイド画像色補正ガイドには、利用可能なすべてのフィルターとその適用前後の精度比較が記載されています。 低品質スキャンの例では、実際の文書における一般的な条件下での精度向上率を示しています。

特にスキャン文書のワークフローに関しては、スキャン文書処理ガイドでは、向きの検出、複数ページの処理、バッチ処理の最適化について、1つの記事で解説しています。

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

Tesseract.Net.SDK IronOCR相当値 ノート
Install-Package Tesseract.Net.SDK dotnet add package IronOcr IronOCRはすべての最新ランタイムをサポートしています
using Patagames.Ocr; using IronOcr;
OcrApi.Create() new IronTesseract() IronTesseractはスレッドセーフです。 アプリケーションごとに1インスタンス
api.Init(Languages.English) ocr.Language = OcrLanguage.English IronOCRはメソッド呼び出しではなく、プロパティ代入を使用します。
api.Init(言語.英語) 言語.ドイツ語) ocr.AddSecondaryLanguage(OcrLanguage.German) ビットごとのOR演算は不要です
api.GetTextFromImage(path) ocr.Read("path.jpg").Text 直接チェーンするか、OcrInput を使用してください
OcrImage.FromFile(path) new OcrInput("path.jpg") OcrInputは、ファイル、ストリーム、バイト配列、URL、ビットマップを受け入れます。
OcrImage.FromBitmap(bmp) input.LoadImage(bitmap)
api.SetImage(img); api.GetText()|ocr.Read(input).Text` OcrInput は SetImage と同等です
api.GetMeanConfidence() result.Confidence 結果オブジェクトとともに返されます
api.SetRectangle(x, y, w, h) new CropRectangle(x, y, w, h)input.LoadImage() に渡されました 地域別OCRガイド
api.SetVariable("tessedit_char_whitelist", x) ocr.Configuration.WhiteListCharacters = x
api.SetVariable("tessedit_char_blacklist", x) ocr.Configuration.BlackListCharacters = x
(no PDF support) input.LoadPdf("file.pdf") 二次図書館は不要
(no preprocessing) `input.Deskew(); input.DeNoise(); など。 すべての前処理が組み込まれています
(no structured output) result.Words, result.Lines, result.Pages 単語レベルの座標と信頼度
(no searchable PDF) result.SaveAsSearchablePdf("out.pdf") ワンコールで検索可能なPDF出力

チームがTesseract .NET.SDKからIronOCRへの移行を検討する場合

.NETのアップグレードが問題を引き起こす

最も一般的な原因は、OCRの品質に対する不満ではなく、計画された.NET FrameworkのアップグレードがOCRレイヤーで完全に停止してしまうことである。 .NET Framework 4.7 から.NET 8へのドキュメント管理アプリケーションをアップグレードするチームは、Tesseract.Net.SDK が互換性のあるターゲットフレームワークアセンブリを生成しないことを発見しました。 アップグレードが停止するか、OCRサービスがHTTP経由で通信するWindows専用の別プロセスに分離されるかのどちらかです。後者の場合、ネットワークホップが発生し、別のデプロイメントアーティファクトと、無期限に維持しなければならない互換性シムが導入されます。 どちらの結果も、現在アップグレードを進めているほとんどのチームにとっては受け入れられない。 Tesseract .NET.SDK をIronOCRに置き換えることで、障害が解消され、アップグレードがスムーズに進むようになります。これは、 IronOCR が古い.NET Framework 4.6.2 以降と新しい.NET 8 の両方のターゲットで同時に動作するため、サービスを段階的に移行できるからです。

処理パイプラインのコンテナ化

文書処理ワークロードは、コンテナ化の有力な候補の一つです。なぜなら、それらはステートレスでCPU依存であり、水平スケーリングの恩恵を受けるからです。 パイプラインの残りの部分をコンテナ化したチームが、ベースイメージがLinuxの場合、Tesseract .NET.SDKがDockerイメージのビルドステップで失敗することを発見しました。 選択肢としては、ライセンス費用がかかり、イメージサイズが大きく、デフォルトでLinuxノードプールを使用するほとんどのマネージドKubernetesサービスと互換性がないWindowsコンテナ、または実際にLinuxをサポートするライブラリのどちらかです。 IronOCRは、標準的なDockerfileを使用してあらゆるLinuxコンテナにデプロイできます。Dockerデプロイガイドには、 DebianとAlpineの両方のベースイメージに対応した正確なDockerfile構成が記載されています。

大規模な並列バッチ処理

Tesseract .NET.SDK を使用して 4 つの並列ワーカーで 1 日あたり 50,000 件のドキュメントを処理する請求書処理パイプラインでは、英語のデータがロードされた 4 つのエンジンインスタンスだけで最低 400 MB のメモリが割り当てられます。 第二言語を加えると、その数は倍になる。 OpenCVによる前処理を追加すると、メモリ消費量がさらに増加する。 メモリ容量が制限されたサーバーや、ポッドあたり2GBのメモリ制限があるコンテナ化されたデプロイメントでは、この計算がデプロイメントの障害となる。 IronOCRのスレッドセーフなシングルインスタンスモデルは、スレッドごとのメモリ使用量の増加を排除します。 1つのエンジンインスタンスは、一度ロードされた単一の言語モデルで、4つ、8つ、または16個の並列ワーカーを処理します。 マルチスレッドの例は、その構成方法を示しています。

二次的な依存関係のないPDFネイティブワークフロー

保険金請求書、契約書、請求書、税務申告書など、主にPDF形式で文書を受け取る組織は、Tesseract .NET.SDKに関して、OCRライブラリに加えてPDFレンダリングライブラリも維持しなければならないという、より複雑な問題に直面します。 PdfiumViewerまたはiTextがセキュリティパッチをリリースする際は、両方のライブラリが協調した更新と回帰テストを必要とします。 PDFライブラリに特定のPDFバージョンのレンダリングに関するバグがあると、OCRパイプラインは明らかな根本原因のない意味不明なテキストを生成します。 IronOCRのネイティブPDFサポートにより、これまで必要だった2つのライブラリが1つに統合されます。 単一のパッケージをインストールすることで、両方を置き換えることができます。 PDF OCRのユースケースページでは、ワークフロー全体を網羅しています。

Enterprise展開要件

PatagamesのTesseract .NET.SDKライセンスには、一人の開発者によるメールおよびフォーラムでのサポートが含まれています。 SLA(サービスレベル契約)も、応答時間の保証も、エスカレーション経路もありません。 医療、金融、政府といった規制対象業界におけるアプリケーションの場合、調達チームはソフトウェアベンダーに対し、文書化されたサービスレベル契約(SLA)、セキュリティ開示プロセス、および組織継続性の保証を提供するよう求める傾向が強まっている。 個人開発者によって運営されているPatagamesは、これらの要件を満たすことができません。 IronOCRは、専用のサポート、セキュリティプロセス、およびEnterprise調達要件に適合したライセンス条件を備えた商用企業であるIron Softwareによって開発されています。 ライセンスページには、利用可能なサポートレベルが記載されています。

一般的な移行の考慮事項

名前空間とインスタンスパターン

Tesseract .NET.SDK からIronOCRへのコード変更は軽微なものです。 using Patagames.Ocr;using IronOcr; に置き換えます。 OcrApi.Create()new IronTesseract() に置き換えます。 api.Init(Languages.English)ocr.Language = OcrLanguage.English に置き換えます。 呼び出し元のコードの機能的なロジックは変更されません。 シンプルなデータ抽出サービスであれば、1時間以内に移行できます。

// Before: Tesseract.Net.SDK
using Patagames.Ocr;

using (var api = OcrApi.Create())
{
    api.Init(Languages.English);
    return api.GetTextFromImage(imagePath);
}

// After: IronOCR
using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage(imagePath);
return ocr.Read(input).Text;
// Before: Tesseract.Net.SDK
using Patagames.Ocr;

using (var api = OcrApi.Create())
{
    api.Init(Languages.English);
    return api.GetTextFromImage(imagePath);
}

// After: IronOCR
using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage(imagePath);
return ocr.Read(input).Text;
Imports Patagames.Ocr

Using api = OcrApi.Create()
    api.Init(Languages.English)
    Return api.GetTextFromImage(imagePath)
End Using

Imports IronOcr

Dim ocr As New IronTesseract()
Using input As New OcrInput()
    input.LoadImage(imagePath)
    Return ocr.Read(input).Text
End Using
$vbLabelText   $csharpLabel

画像からテキストを読み取るチュートリアル基本的なOCRの例には、入力検証と信頼度チェックを備えた、実行可能な完全なサンプルが含まれています。

Tessdataフォルダの削除

移行後、プロジェクトから tessdata/ フォルダー全体を削除できます。 IronOCRは、 NuGetパッケージに言語データを同梱しています。 デプロイメントスクリプトから tessdata ディレクトリを削除し、特訓済みデータファイルをコピーする CI/CD パイプライン手順を削除し、.csproj からすべての .traineddata 参照を削除します。 IronOcr.Languages.* NuGet パッケージは、通常のパッケージリストア手順の一部として言語データをインストールします — 別途ダウンロードは不要、手動フォルダ設定は不要、Visual Studio でのビルドアクション設定も不要です。 多言語対応ガイドでは、言語パックのインストール方法について説明しています。

PDFパイプラインの簡素化

OCRの前にPDFページをレンダリングするためにPdfiumViewer、iText、またはGhostscript.NETをインストールしたコードはすべて完全に削除することができます。 複数ステップのテンポラリファイルへのレンダリングからOCRパイプライン全体を input.LoadPdf(pdfPath) に置き換えます。 パスワードで保護されたPDF、特定のページ範囲、100ページを超える大規模なドキュメントなどについて、特にテストを実施してください。これらは、検証中に動作の違いが顕在化する可能性が最も高い特殊なケースです。

スレッドモデルとインスタンスのライフタイム

Tesseract.Net.SDK コードは、通常、スレッドセーフ性の問題を避けるためにリクエストごとまたはスレッドごとに OcrApi インスタンスを作成します。 IronOCR はスレッドセーフであるため、IronTesseract インスタンスは一度作成(アプリケーション起動時または DI コンテナのシングルトンとして)のみ行い、すべてのリクエストに対して再利用すべきです。 リクエストごとに新しい IronTesseract() を作成すると、初期化オーバーヘッドを浪費します。 ASP.NET Coreのサービスコンテナにシングルトンとして登録し、必要な場所に注入してください。

IronOCRの追加機能

上記で直接比較した機能以外にも、 IronOCRはTesseract .NET.SDKにはない機能を提供します。

  • OCR中のバーコード読み取りでは、同じドキュメントパスに埋め込まれたQRコードとリニアバーコードを読み取るため、別途バーコードスキャン手順が不要になります。設定については、バーコードOCRの例を参照してください。
  • 非同期OCR は、ASP.NET Core リクエストパイプラインへの非ブロッキング統合のために ReadAsync() を提供します。 -表抽出機能は、文書内の表形式構造を識別し、財務諸表、請求書、レポートから構造化データを抽出できるようにします。 パスポートとIDの読み取りには、機械読み取り可能な旅行書類と身分証明書に特化した認識技術が用いられます。 -進捗状況追跡機能は、複数ページの文書処理中にページごとの進捗イベントを発生させ、長時間実行されるバッチジョブで正確な進捗状況指標を提供します。

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

IronOCR は .NET Framework 4.6.2 から現在 for .NET 9リリースまでサポートし、将来の .NET リリースが出荷されると引き続きサポートします。このライブラリは、netstandard2.0 を標的にして広範なフレームワーク互換性を提供し、同じ NuGet パッケージ内に Windows、Linux、macOS 用のプラットフォーム固有のネイティブバイナリを提供します。 .NET Framework から.NET 8または.NET 9へのアップグレードするチームは、OCR ライブラリを変更する必要はありません — 同じ IronOcr パッケージ参照がコンパイルされ、両方で動作します。 Tesseract .NET.SDKは.NET Framework 2.0から4.5を対象としており、最新 for .NETサポートに関するロードマップは公開されていません。 これは、毎年11月に新しいメジャーバージョンをリリースするという、現在のMicrosoft .NETのリリースサイクルとは構造的に互換性がありません。 .NET Framework 4.5 を超えるバージョンへの移行を計画しているチーム(それが6か月後であろうと3年後であろうと)は、他の評価基準に関係なく、その移行時点で Tesseract .NET.SDK を置き換える必要があります。

結論

Tesseract .NET.SDK は、特定のニッチ市場を占めていますが、その市場は縮小傾向にあります。つまり、Windows Server の展開、 .NET Framework 4.5 に恒久的にコミットし、tessdata の構成、外部での前処理の実装、および別のライブラリからの PDF レンダリング パイプラインの構築に 15 ~ 40 時間の開発者時間を確保しているチームにとって最適な選択肢です。 ライセンス料は費用そのものではない。費用とは、ライセンス料を取り巻くあらゆるものを指す。

この記事の冒頭で取り上げた問題――アップグレードの途中でOCRの依存関係が.NET 8をターゲットにできないことが判明する――は、特殊なケースではない。 これは、最新 for .NETランタイムを明示的にサポートしていないライブラリを選択した場合に、当然起こりうる結果である。 IronOCRは、その制約を完全に解消します。1つのNuGetパッケージで.NET Framework 4.6.2から.NET 9までのすべてのランタイムに対応し、Windows、Linux、macOS、Docker上で動作し、さらに、通常であれば2つの追加依存関係と数百行の統合コードが必要となる前処理とPDFサポートも含まれています。

現在、安定した.NET Framework 4.5アプリケーションでTesseract .NET .SDKを実行しており、ランタイムの近代化を計画していないチームにとっては、コンテナ化の義務化、Linuxへの移行、またはフレームワークのアップグレードによって問題が発生するまでは、現状維持となります。 サービスのコンテナ化、.NET 8の採用、Linux インフラストラクチャへの移行、バッチ ドキュメント パイプラインのスケーリングなど、積極的に近代化を進めているチームにとって、Tesseract .NET.SDK は基盤ではなく、むしろ障害となります。 従来のAPIからIronOCRへの移行は、数時間のコード変更で済みます。 代替案としては、近代化されたアーキテクチャの端っこに、Windows専用サービスを孤立した状態で無期限に維持するという方法がある。

IronOCRのライセンス料はPatagames SDKの料金よりも高いですが、実際のコスト比較には、Tesseract .NET.SDKが本番環境で単一のドキュメントを処理する前に必要とする、tessdataの設定、外部前処理ライブラリの統合、およびPDFレンダリングパイプラインの構築にかかる15~40時間を含める必要があります。 上記の比較で示されているように、そのセットアップにかかるオーバーヘッドは、チームの規模が拡大したり、ドキュメントの量が増加したりしても減少することはありません。

ご注意Ghostscript, PDFium, Tesseract, iTextは全てそれぞれの所有者に登録商標されています。 このサイトはArtifex Software, Chromium Project, Google, iText Groupとの提携、支援またはスポンサーシップを受けていません。全ての製品名、ロゴ、ブランドはそれぞれの所有者に帰属します。 比較は情報提供のみを目的としており、執筆時点で公開されている情報を反映しています。

よくある質問

Tesseract .NET SDK(公式)とは?

Tesseract .NET SDK(公式)は、開発者や企業が画像や文書からテキストを抽出するために使用するOCRソリューションです。.NETアプリケーション開発においてIronOCRと共に評価されるいくつかのOCRオプションの一つです。

IronOCR と.NET開発者向けTesseract .NET SDK (公式)との比較は?

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

IronOCR はTesseract .NET SDK (公式)よりもセットアップが簡単ですか?

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

Tesseract .NET SDK (公式)とIronOCRにはどのような精度の違いがありますか?

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

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

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

Tesseract .NET SDK (公式)のライセンスは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 はTesseract .NET SDKと違い、Dockerやコンテナでのデプロイメントに適していますか?

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

Tesseract .NET SDKと比較して、購入前にIronOCRを試すことはできますか?

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

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

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

Tesseract .NET SDK (公式)からIronOCRへの移行は簡単ですか?

Tesseract .NET SDK(公式)からIronOCRへの移行は、初期化シーケンスをIronTesseractのインスタンス化に置き換え、COMライフサイクル管理を削除し、APIコールを更新します。ほとんどの移行はコードの複雑さを大幅に軽減します。

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

アイアンサポートチーム

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