Tesseract C#과 IronOCR: .NET 에서 어떤 OCR 라이브러리를 사용해야 할까요?
.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는 Patagames에서 판매하는 오픈 소스 Tesseract OCR 엔진을 기반으로 하는 상 for .NET 래퍼입니다. 제품은 Windows x86 및 x64용으로 미리 컴파일된 Tesseract 바이너리를 번들링하고, 관리되는 .NET 표면에 C/C++ Tesseract API를 감싸며, 이를 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 Core, .NET Standard, .NET 5, .NET 6, .NET 7, .NET 8및 .NET 9는 지원되지 않습니다. 리눅스는 지원되지 않습니다. macOS는 지원되지 않습니다. Docker 컨테이너(거의 전적으로 Linux 기반 이미지를 실행함)는 지원되지 않습니다.
Tesseract .NET.SDK의 주요 아키텍처 특징:
- 런타임 대상: .NET Framework 2.0~4.5만 해당; .NET Core 또는 최신 .NET 런타임은 지원하지 않습니다.
- 플랫폼: Windows x86 및 x64만 지원; Windows 전용 네이티브 라이브러리에 대한 P/Invoke 호출은 비-Windows 호스트에서
DllNotFoundException을(를) 던집니다 - Tessdata 관리: 언어는 번들로 제공되지 않습니다. 개발자들은 Tesseract GitHub 저장소에서
.traineddata파일을 다운로드 받아bin/tessdata/폴더에 배치한 후, Visual Studio에서 각 파일의 빌드 작업을 구성합니다 - 스레드 안전성:
OcrApi인스턴스는 스레드 안전하지 않습니다; 병렬 워크로드에는 스레드당 하나의 엔진 인스턴스가 필요하며, 각 인스턴스는 40~100MB의 언어 데이터를 메모리에 로드합니다. - 전처리: 내장된 전처리 기능 없음; 왜곡되거나, 노이즈가 많거나, 해상도가 낮은 이미지를 처리하려면 OpenCV 또는 ImageMagick과 같은 외부 라이브러리가 필요합니다.
- PDF 입력: 기본적으로 지원되지 않습니다. 개발자는 OCR을 수행하기 전에 PDF 페이지를 임시 이미지 파일로 렌더링하기 위해 PdfiumViewer와 같은 두 번째 라이브러리를 설치합니다.
- 개발자: Patagames는 개인 개발자가 운영합니다. 서비스 수준 계약(SLA)도 없고, Enterprise 지원 등급도 없으며, 개발자가 이용할 수 없게 될 경우를 대비한 백업 시스템도 없습니다.
실제 레거시 .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 Pod에는 배포할 수 없습니다. 조직의 나머지 부분이 그 선을 넘어서는 순간, 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
OCR 작업 한 줄을 시작하기 전에 두 가지 방어 검사가 나타납니다. Windows 확인 및 tessdata 확인입니다. Windows 이외의 호스트에서는 해당 메서드가 엔진에 도달하기 전에 예외가 발생합니다. 배포 중에 tessdata 폴더가 복사되지 않은 시스템에서도 동일한 예외가 발생합니다. 두 검사 모두 정형화된 검사가 아닙니다. 둘 다 개발자가 실제 운영 환경에서 마주치는 오류 유형을 나타냅니다.
IronOCR 이해하기
IronOCR 은 최적화된 Tesseract 5 엔진을 기반으로 구축된 .NET 용 상용 OCR 라이브러리로, 자동 이미지 전처리, 네이티브 PDF 입력, Windows, Linux, macOS, Docker, Azure 및 AWS를 아우르는 크로스 플랫폼 지원을 제공합니다. 이 제품은 외부 네이티브 라이브러리 구성, tessdata 폴더 관리, 플랫폼별 배포 스크립트 없이 단일 NuGet 패키지로 제공됩니다.
주요 특징:
- 런타임 지원: .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 람다 및 Kubernetes Pod에 동일하게 배포됩니다.
- 전처리: 내장 필터 —
Deskew(),DeNoise(),Contrast(),Binarize(),EnhanceResolution(),Sharpen(),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+ |
| 최신 .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 | 아니요 | 예 |
| 플랫폼 지원 | ||
| 윈도우 x86/x64 | 예 | 예 |
| 리눅스 x64 | 아니요 | 예 |
| macOS | 아니요 | 예 |
| Docker(리눅스 이미지) | 아니요 | 예 |
| Azure 앱 서비스(리눅스) | 아니요 | 예 |
| AWS 람다 | 아니요 | 예 |
| Kubernetes 포드 | 아니요 | 예 |
| 입력 소스 | ||
| 이미지 파일(BMP, PNG, JPEG, TIFF) | 예 | 예 |
| PDF 입력(기본) | 아니요 | 예 |
| 비밀번호로 보호된 PDF | 아니요 | 예 |
| 바이트 배열 / 스트림 | 예 | 예 |
| 전처리 | ||
| 디스큐 | 아니요 (외부 라이브러리) | 내장형 |
| 디노이즈 | 아니요 (외부 라이브러리) | 내장형 |
| 명암 대비 강화 | 아니요 (외부 라이브러리) | 내장형 |
| 이진화 | 아니요 (외부 라이브러리) | 내장형 |
| 해상도 향상 | 아니요 (외부 라이브러리) | 내장형 |
| 산출 | ||
| 일반 텍스트 | 예 | 예 |
| 검색 가능한 PDF | 아니요 | 예 |
| hOCR 내보내기 | 아니요 | 예 |
| 구조화된 데이터(단어, 줄, 단락 및 좌표) | 아니요 | 예 |
| 신뢰도 점수 | 예 (GetMeanConfidence()) |
예 (result.Confidence) |
| 언어 지원 | ||
| 언어 개수 | 120개 이상 (수동 다운로드) | 125개 이상 (NuGet 팩) |
| 자동 언어 다운로드 | 아니요 | 예 |
| 실꿰기 | ||
| 스레드 안전 엔진 인스턴스 | 아니요 | 예 |
| 내장 병렬 처리 | 아니요 | 예 |
| 스레드별 메모리 오버헤드 | 엔진당 약 40~100MB | 공유되는 단일 인스턴스 |
| 라이선스 | ||
| 라이선스 모델 | 상업용 일회성 | 영구적인 일회성 |
| 입장료 | 약 20~50달러 | $999 |
| 문서별 청구 | 아니요 | 아니요 |
| Enterprise 지원/서비스 수준 계약(SLA) | 아니요 | 예 |
.NET 버전 지원 및 런타임 호환성
이 두 라이브러리 간의 가장 중요한 차이점은 API 설계나 정확성이 아니라 런타임 호환성입니다.
Tesseract .NET.SDK 접근 방식
Tesseract .NET.SDK는 .NET Framework 2.0부터 4.5까지를 대상으로 합니다. 따라서 이 SDK에 의존하는 모든 프로젝트는 해당 프레임워크 버전 중 하나를 대상으로 해야 합니다. 마이그레이션 비교 파일은 설정 섹션에서 이러한 제약 조건을 확인합니다.
// 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
using (var api = OcrApi.Create()) 패턴은 관용적인 .NET Framework 2.0입니다. C# 8.0의 using var 선언 대신 C# 1.0의 using 문을 사용합니다. 네임스페이스는 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까지의 모든 최신 .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}%")
언어 열거형에 비트 단위 OR 연산을 사용할 수 없습니다. tessdata 폴더가 없습니다. 플랫폼 확인 없음. IronTesseract 설정 가이드는 지원되는 모든 런타임에 대한 구성 옵션을 단일 문서에 다룹니다.
마이그레이션 중인 팀에게 미치는 실질적인 영향은 다음과 같습니다. ASP.NET Core 8 프로젝트와 기존 .NET Framework 4.8 프로젝트가 동일한IronOCR서비스 계층을 공유할 수 있습니다. 조건부 컴파일도 없고, 별도의 라이브러리 버전도 없고, 호환되지 않는 API를 감추기 위한 추상화 계층도 없습니다.
플랫폼 지원 범위 및 컨테이너 배포
Tesseract .NET.SDK 접근 방식
Tesseract .NET.SDK는 Windows x86 및 x64 네이티브 바이너리를 제공합니다. Tesseract 엔진을 초기화하는 P/Invoke 호출은 해당 Windows DLL을 가리킵니다. Linux 호스트에서 — mcr.microsoft.com/dotnet/aspnet:8.0, 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;
}
});
4개의 병렬 스레드, 4개의 엔진 인스턴스, 400MB의 언어 데이터가 동시에 로드되었습니다. 그리고 이것은 영어 데이터에만 해당되는 수치입니다. 독일어와 프랑스어를 추가하면 기본 점수가 두 배가 됩니다. SDK는 이러한 문제를 완화하기 위한 풀링 메커니즘을 제공하지 않습니다. 이 아키텍처는 일반적으로 파드당 메모리 제한을 적용하는 최신 컨테이너 리소스 제한과 호환되지 않습니다.
Linux 사용량 기반 요금제에서는 Azure Functions, AWS Lambda(Amazon Linux에서 실행됨), Google Cloud Run에 액세스할 수 있는 경로가 없습니다. 모든 주요 서버리스 플랫폼은 기본적으로 리눅스를 사용합니다. Tesseract .NET.SDK는 의도적으로 이러한 모든 항목에서 제외되었습니다.
IronOCR 접근법
IronOCR는 Debian 기반 이미지에서 apt-get 라인 하나 이상 추가 구성이 필요 없이 Docker에 배포됩니다. Docker 배포 가이드는 Linux 및 Windows 컨테이너 모두를 다룹니다. 리눅스 배포 , Azure 및 AWS 에도 동일하게 적용됩니다.
스레드 안전성은 IronTesseract에 내장되어 있습니다. 하나의 인스턴스가 모든 병렬 워커에 서비스를 제공합니다.
// 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)
스레드 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
// - 고스트스크립트 .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
암호로 보호된 PDF는 추가 매개변수 하나가 필요합니다: input.LoadPdf("encrypted.pdf", Password: "secret"). 특정 페이지 범위는 input.LoadPdfPages("document.pdf", 1, 10)을 사용합니다. PDF 입력 가이드 와 검색 가능한 PDF 사용 설명서는 모든 변형을 다룹니다.
PDF OCR 예시는 신뢰도 검사 및 구조화된 출력을 포함한 전체 패턴을 보여줍니다. 검색 가능한 PDF 예시는 스캔한 PDF 파일이 색인화되어 검색 가능하게 되는 문서 아카이브 활용 사례를 보여줍니다.
이미지 전처리 및 실제 문서 품질
Tesseract .NET.SDK 접근 방식
테서랙트 엔진은 이미지 품질에 민감합니다. 기울어지거나 해상도가 낮거나 노이즈가 많은 문서는 전처리 없이는 출력 품질이 크게 저하됩니다. 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
그 말은 과장이 아닙니다. .NET 에서 OpenCV를 사용한 고품질 기울기 보정 구현은 초기화, 각도 감지, 행렬 계산 및 아핀 변환을 포함하여 100~200줄 정도면 충분합니다. 그런 다음 해당 코드를 테스트하고 유지 관리하고 배포해야 하는데, 이 과정에서 윈도우에서만 작동하는 고유한 네이티브 종속성 체인을 사용해야 합니다.
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
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
이미지 품질 보정 가이드 와 이미지 색상 보정 가이드 에는 사용 가능한 모든 필터와 보정 전후의 정확도 비교 내용이 포함되어 있습니다. 저품질 스캔 예시는 일반적인 실제 문서 환경에서의 정확도 향상 수치를 보여줍니다.
특히 스캔 문서 워크플로의 경우, 스캔 문서 처리 가이드 에서는 문서 방향 감지, 여러 페이지 처리 및 일괄 처리량 최적화에 대한 내용을 단일 문서에 다룹니다.
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는 나사산에 안전합니다. 애플리케이션당 하나의 인스턴스 |
api.Init(Languages.English) |
ocr.Language = OcrLanguage.English |
IronOCR메서드 호출이 아닌 속성 할당을 사용합니다. |
api.Init(Languages.English \| 언어.독일어) |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 이미지 빌드 단계에서 실패하는 것을 발견했습니다. 선택지는 Windows 컨테이너와 Linux를 실제로 지원하는 라이브러리 두 가지입니다. Windows 컨테이너는 라이선스 비용이 발생하고 이미지 크기가 더 크며 대부분의 관리형 Kubernetes 서비스(기본적으로 Linux 노드 풀을 사용함)와 호환되지 않습니다.IronOCR표준 Dockerfile을 사용하는 모든 Linux 컨테이너에 배포할 수 있습니다. Docker 배포 가이드에는 Debian 및 Alpine 기본 이미지 모두에 대한 정확한 Dockerfile 구성이 나와 있습니다.
대규모 병렬 배치 처리
Tesseract .NET.SDK를 사용하여 4개의 병렬 작업자로 하루 50,000건의 문서를 처리하는 송장 처리 파이프라인은 영어 데이터가 로드된 4개의 엔진 인스턴스에만 최소 400MB의 메모리를 할당합니다. 두 번째 언어를 추가하면 그 효과는 두 배가 됩니다. OpenCV를 통한 전처리 과정을 추가하면 메모리 사용량이 더욱 증가합니다. 서버 용량이 제한적이거나 Pod당 메모리 제한이 2GB인 컨테이너 배포 환경에서는 이러한 계산이 배포를 막는 요인이 됩니다. IronOCR의 스레드 안전 단일 인스턴스 모델은 스레드별 메모리 증가를 제거합니다. 하나의 엔진 인스턴스가 단일 언어 모델을 한 번만 로드하여 4개, 8개 또는 16개의 병렬 워커를 처리할 수 있습니다. 멀티스레딩 예제는 구성 방법을 보여줍니다.
보조 종속성 없이 PDF 네이티브 워크플로
보험 청구서, 계약서, 송장, 세금 양식 등 주로 PDF 형식의 문서를 받는 조직은 Tesseract .NET.SDK를 사용할 때 복합적인 문제에 직면합니다. 바로 OCR 라이브러리와 함께 PDF 렌더링 라이브러리도 유지 관리해야 한다는 점입니다. PdfiumViewer 또는 iText가 보안 패치를 릴리스할 때, 두 라이브러리는 조정된 업데이트와 회귀 테스트가 필요합니다. PDF 라이브러리에 특정 PDF 버전을 렌더링하는 버그가 있을 경우, OCR 파이프라인은 명확한 원인 없이 알아볼 수 없는 텍스트를 생성합니다. IronOCR의 기본 PDF 지원 기능 덕분에 두 개의 라이브러리를 사용해야 했던 문제가 하나로 해결됩니다. 하나의 Install-Package로 두 가지 모두를 대체할 수 있습니다. 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으로 대체하세요. 호출하는 코드의 기능적 논리는 변경되지 않습니다. 간단한 데이터 추출 서비스는 한 시간 이내에 이전할 수 있습니다.
// 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
이미지에서 텍스트를 읽는 튜토리얼 과 기본 OCR 예제는 입력 유효성 검사 및 신뢰도 검사를 포함한 완전한 실행 가능한 샘플을 제공합니다.
Tessdata 폴더 제거
마이그레이션 후, 전체 tessdata/ 폴더를 프로젝트에서 삭제할 수 있습니다.IronOCR NuGet 패키지에 언어 데이터를 포함하여 제공합니다. .traineddata 레퍼런스를 .csproj에서 모두 제거하고 배포 스크립트에서 tessdata 디렉터리를 제거하며, 학습된 데이터 파일을 복사하는 모든 CI/CD 파이프라인 단계를 제거하세요. 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 예제를 참조하십시오.
- Async OCR는 ASP.NET Core 요청 파이프라인에 비차단 통합을 위한
ReadAsync()를 제공합니다 - 표 추출 기능은 문서 내의 표 구조를 식별하여 재무제표, 송장 및 보고서에서 구조화된 데이터를 추출할 수 있도록 합니다.
- 여권 및 신분증 인식은 기계 판독 가능한 여행 서류 및 신분증에 맞춰 조정된 특수 인식 기술을 적용합니다.
- 진행률 추적 기능은 여러 페이지로 구성된 문서를 처리하는 동안 페이지별 진행률 이벤트를 발생시켜 장시간 실행되는 배치 작업에서 정확한 진행률 표시를 제공합니다.
.NET 호환성 및 미래 준비
IronOCR는 .NET Framework 4.6.2부터 현재 .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까지를 대상으로 하며, 최신 .NET 지원에 대한 공개된 로드맵은 없습니다. 이는 매년 11월에 새로운 주요 버전을 출시하는 현재 마이크로소프트 .NET 릴리스 주기와 구조적으로 호환되지 않습니다. 6개월 후든 3년 후든 .NET Framework 4.5 이상으로 업그레이드할 계획이 있는 팀은 다른 평가 기준과 관계없이 해당 전환 시점에 Tesseract .NET.SDK를 교체해야 합니다.
결론
Tesseract .NET.SDK는 특정한, 그리고 점점 줄어드는 틈새시장을 차지하고 있습니다. Windows Server 배포 및 .NET Framework 4.5에 전념하고 있으며, tessdata 구성, 외부 전처리 구현, 별도의 라이브러리를 사용한 PDF 렌더링 파이프라인 구축에 15~40시간의 개발 시간을 투자할 의향이 있는 팀에게 적합한 선택입니다. 라이선스 비용 자체가 비용이 아닙니다. 비용은 그 주변의 모든 것을 포함합니다.
이 기사에서 서두에 언급한 문제, 즉 업그레이드 도중에 OCR 종속성이 .NET 8을 대상으로 할 수 없다는 사실을 발견한 것은 예외적인 경우가 아닙니다. 이는 최신 .NET 런타임을 명시적으로 지원하지 않는 라이브러리를 선택했을 때 예상되는 결과입니다.IronOCR이러한 제약을 완전히 제거합니다. 하나의 NuGet 패키지가 .NET Framework 4.6.2부터 .NET 9까지 모든 런타임을 대상으로 하며, Windows, Linux, macOS및 Docker에서 실행되고, 기존에는 두 개의 추가 종속성과 수백 줄의 통합 코드가 필요했던 전처리 및 PDF 지원 기능을 포함합니다.
현재 안정적인 .NET Framework 4.5 애플리케이션에서 Tesseract .NET .SDK를 실행 중이며 런타임을 현대화할 계획이 없는 팀의 경우, 컨테이너 의무화, Linux 마이그레이션 또는 프레임워크 업그레이드로 인해 문제가 발생하기 전까지는 현 상태가 유지됩니다. 컨테이너화된 서비스, .NET 8도입, Linux 인프라로의 이전 또는 배치 문서 파이프라인 확장과 같이 적극적으로 현대화를 추진하는 팀에게 Tesseract .NET.SDK는 기반이 아니라 오히려 걸림돌이 됩니다. 기존 API에서IronOCR로 전환하는 데는 몇 시간의 코드 수정만 필요합니다. 다른 방법은 현대화된 아키텍처의 변두리에 윈도우 전용 서비스를 고립된 채로 무기한 유지하는 것입니다.
IronOCR 라이선스 비용은 Patagames SDK 비용보다 높지만, 실제 비용 비교에는 Tesseract .NET.SDK를 사용하여 프로덕션 환경에서 문서를 처리하기 전에 필요한 15~40시간의 tessdata 구성, 외부 전처리 라이브러리 통합 및 PDF 렌더링 파이프라인 구축 작업까지 포함해야 합니다. 위 비교표에서 볼 수 있듯이, 이러한 설정 오버헤드는 팀 규모가 커지거나 문서 양이 증가하더라도 줄어들지 않습니다.
자주 묻는 질문
테서랙트 .NET SDK(공식)란 무엇인가요?
Tesseract .NET SDK(공식)는 개발자와 기업이 이미지와 문서에서 텍스트를 추출하는 데 사용하는 OCR 솔루션입니다. 이 솔루션은 .NET 애플리케이션 개발을 위해 IronOCR과 함께 평가된 여러 OCR 옵션 중 하나입니다.
IronOCR은 .NET 개발자를 위한 Tesseract .NET SDK(공식)와 어떻게 다른가요?
IronOCR은 IronTesseract를 핵심 엔진으로 사용하는 NuGet 네이티브 .NET OCR 라이브러리입니다. Tesseract .NET SDK(공식)에 비해 배포가 간편하고(SDK 설치 프로그램 없음), 정액제 요금이 적용되며, COM 인터롭이나 클라우드 종속성이 없는 깔끔한 C# API를 제공합니다.
IronOCR이 테서랙트 .NET SDK(공식)보다 설정하기가 더 쉬운가요?
IronOCR은 단일 NuGet 패키지를 통해 설치됩니다. SDK 설치 프로그램, 복사할 라이선스 파일, 등록할 COM 구성 요소 또는 관리해야 할 별도의 런타임 바이너리가 없습니다. 전체 OCR 엔진이 패키지에 번들로 제공됩니다.
테서랙트 .NET SDK(공식)와 IronOCR 사이에는 어떤 정확도 차이가 있나요?
IronOCR은 표준 비즈니스 문서, 송장, 영수증, 스캔 양식에 대해 높은 인식 정확도를 달성합니다. 품질이 많이 저하된 문서나 일반적이지 않은 스크립트의 경우 정확도는 소스 품질에 따라 달라집니다. IronOCR에는 이미지 전처리 필터가 포함되어 있어 저품질 입력에 대한 인식률을 향상시킵니다.
IronOCR은 PDF 텍스트 추출을 지원하나요?
예. IronOCR은 한 번의 호출로 원본 PDF와 스캔한 PDF 이미지 모두에서 텍스트를 추출합니다. 또한 여러 페이지의 TIFF 파일, 이미지, 스트림도 지원합니다. 스캔한 PDF의 경우 OCR은 페이지별 결과 개체를 사용하여 페이지별로 적용됩니다.
테서랙트 .NET SDK(공식) 라이선스는 IronOCR과 어떻게 다른가요?
IronOCR은 페이지당 또는 스캔당 요금이 없는 정액제 영구 라이선스를 사용합니다. 대량의 문서를 처리하는 조직은 문서 양에 관계없이 동일한 라이선스 비용을 지불합니다. 자세한 내용과 볼륨 가격은 IronOCR 라이선스 페이지에서 확인할 수 있습니다.
IronOCR 어떤 언어를 지원하나요?
IronOCR은 별도의 NuGet 언어 팩을 통해 127개 언어를 지원합니다. 언어를 추가하려면 '닷넷 추가 패키지 IronOcr.Languages.{Language}' 명령 하나만 있으면 됩니다. 수동으로 파일을 배치하거나 경로를 구성할 필요가 없습니다.
.NET 프로젝트에 IronOCR 설치하는 방법은 무엇인가요?
NuGet을 통해 설치합니다: 패키지 관리자 콘솔에서 '설치-패키지 IronOcr' 또는 CLI에서 '닷넷 추가 패키지 IronOcr'을 실행합니다. 추가 언어 팩도 같은 방법으로 설치됩니다. 기본 SDK 인스톨러가 필요하지 않습니다.
IronOCR은 테서랙트 .NET SDK와 달리 Docker 및 컨테이너화된 배포에 적합하나요?
예. IronOCR은 NuGet 패키지를 통해 Docker 컨테이너에서 작동합니다. 라이선스 키는 환경 변수를 통해 설정됩니다. OCR 엔진 자체에는 라이선스 파일, SDK 경로 또는 볼륨 마운트가 필요하지 않습니다.
Tesseract .NET SDK와 비교하여 구매하기 전에 IronOCR을 사용해 볼 수 있나요?
예. IronOCR 평가판 모드는 문서를 처리하고 출력물에 워터마크 오버레이가 포함된 OCR 결과를 반환합니다. 라이선스를 구매하기 전에 자신의 문서에서 정확성을 확인할 수 있습니다.
IronOCR은 텍스트 추출과 함께 바코드 판독을 지원하나요?
IronOCR은 텍스트 추출과 OCR에 중점을 둡니다. 바코드 판독을 위해 Iron Software는 동반 라이브러리로 IronBarcode를 제공합니다. 두 가지 모두 개별적으로 또는 Iron Suite 번들의 일부로 사용할 수 있습니다.
테서랙트 .NET SDK(공식)에서 IronOCR로 쉽게 마이그레이션할 수 있나요?
Tesseract .NET SDK(공식)에서 IronOCR로 마이그레이션하려면 일반적으로 초기화 시퀀스를 IronTesseract 인스턴스화로 대체하고, COM 수명 주기 관리를 제거하며, API 호출을 업데이트해야 합니다. 대부분의 마이그레이션은 코드 복잡성을 크게 줄여줍니다.

