IronOCR 과 Syncfusion OCR 비교
Aspose.OCR은 영구적인 옵션 없이 개발자당 매년 $783을 부과합니다. 따라서 팀의 결제가 중단되면 모든 새로운 배포가 규정을 위반하게 됩니다. 여러 해에 걸친 더 큰 팀에게는 구독료가 상당히 누적됩니다. IronOCR은 $2,999를 한 번으로 10명 개발자 팀을 지원합니다. 가격 차이 외에도, Aspose.OCR은 각 인식 호출 전에 수동으로 모든 전처리 필터를 선언해야 하지만, IronOCR은 단 하나의 .Read()으로 노이즈가 많고 기울어진 스캔을 읽고 내부적으로 수정 작업을 처리합니다. 이 글에서는 가격 모델, 전처리 아키텍처, PDF 지원, API 상세도 등 다양한 측면에서 두 라이브러리를 비교 분석하여, 독자들이 구체적인 수치에 기반한 결정을 내릴 수 있도록 돕습니다.
Aspose.OCR 이해하기
Aspose.OCR은 WORD, Excel, PDF 및 이미지 형식을 아우르는 문서 처리 SDK로 잘 알려진 기업인 Aspose의 상용 온프레미스 OCR 라이브러리입니다. Aspose.OCR은 해당 제품군을 광학 문자 인식(OCR) 분야로 확장하여, 이미 다른 Aspose 제품을 사용하고 있는 Enterprise 고객을 대상으로 합니다.
Aspose.OCR의 주요 아키텍처 특징:
- 구독형 라이선스: 영구 라이선스 옵션은 없습니다. 개발자 소규모 비즈니스 등급은 개발자당 연간 $783입니다. 현재 소기업 및 OEM 라이선싱 계층에 대한 가격 정보를 Aspose에 문의하세요.
- 수동 전처리 파이프라인: 라이브러리는
RecognitionSettings에 연결된PreprocessingFilter컬렉션을 노출합니다. 당신은PreprocessingFilter.AutoSkew(),PreprocessingFilter.ContrastCorrectionFilter(),PreprocessingFilter.Median()등을 명확히 채웁니다. 이 라이브러리는 이를 자동으로 적용하지 않습니다. - 별도의 PDF 라이선싱 종속성: Aspose.OCR은
RecognizePdf()을 통해 표준 PDF를 읽을 수 있습니다. 비밀번호로 보호된 PDF를 처리하려면 별도의 연간 구독이 필요한 독립형 제품인 Aspose.PDF가 필요합니다. 이것은throw new NotSupportedException("Aspose.OCR requires Aspose.PDF (additional license) to handle password-protected PDFs")와 함께 자신의 코드 샘플에 문서화되어 있습니다. - 주요 엔진 클래스
AsposeOcr: 인식 결과는RecognitionText문자열 및.Average()가 필요한RecognitionAreasConfidence배열과 함께RecognitionResult객체로 돌아옵니다. - 메인 패키지에 130개 이상의 언어 포함: 언어 데이터는 별도로 다운로드하는 방식이 아닌 NuGet 패키지와 함께 제공됩니다.
- PDF 입력을 위한
DocumentRecognitionSettings: PDF 전용 설정은StartPage(0 기반) 및PagesNumber매개변수를 사용하는 별도의 설정 클래스를 사용합니다.
수동 전처리 모델
Aspose.OCR의 기본 설계 원칙은 사용자가 주어진 이미지에 어떤 수정이 필요한지 파악해야 한다는 점입니다. 올바른 필터를 지정하지 않고 왜곡되거나 노이즈가 많은 스캔 파일을 입력하면, 엔진은 이를 있는 그대로 처리합니다:
// Aspose.OCR: developer decides which corrections to apply
var api = new AsposeOcr();
var filters = new Aspose.OCR.Models.PreprocessingFilters.PreprocessingFilter();
// Every filter must be declared explicitly
filters.Add(PreprocessingFilter.AutoSkew());
filters.Add(PreprocessingFilter.AutoDenoising());
filters.Add(PreprocessingFilter.ContrastCorrectionFilter());
filters.Add(PreprocessingFilter.Threshold(128)); // must tune the threshold value
var settings = new RecognitionSettings
{
PreprocessingFilters = filters,
Language = Language.Eng
};
var result = api.RecognizeImage("poor-quality-scan.jpg", settings);
return result.RecognitionText;
// Aspose.OCR: developer decides which corrections to apply
var api = new AsposeOcr();
var filters = new Aspose.OCR.Models.PreprocessingFilters.PreprocessingFilter();
// Every filter must be declared explicitly
filters.Add(PreprocessingFilter.AutoSkew());
filters.Add(PreprocessingFilter.AutoDenoising());
filters.Add(PreprocessingFilter.ContrastCorrectionFilter());
filters.Add(PreprocessingFilter.Threshold(128)); // must tune the threshold value
var settings = new RecognitionSettings
{
PreprocessingFilters = filters,
Language = Language.Eng
};
var result = api.RecognizeImage("poor-quality-scan.jpg", settings);
return result.RecognitionText;
Imports Aspose.OCR
Imports Aspose.OCR.Models.PreprocessingFilters
' Aspose.OCR: developer decides which corrections to apply
Dim api As New AsposeOcr()
Dim filters As New PreprocessingFilter()
' Every filter must be declared explicitly
filters.Add(PreprocessingFilter.AutoSkew())
filters.Add(PreprocessingFilter.AutoDenoising())
filters.Add(PreprocessingFilter.ContrastCorrectionFilter())
filters.Add(PreprocessingFilter.Threshold(128)) ' must tune the threshold value
Dim settings As New RecognitionSettings With {
.PreprocessingFilters = filters,
.Language = Language.Eng
}
Dim result = api.RecognizeImage("poor-quality-scan.jpg", settings)
Return result.RecognitionText
임계값을 잘못 선택하면 텍스트가 흐려집니다. 소금과 후추 스캔에서 AutoDenoising을 잊으면 정확도가 떨어집니다. 이 라이브러리는 이미지를 분석하여 수정 사항을 제안하지 않습니다. 해당 분석은 전적으로 사용자의 책임입니다. 또한 필터 순서가 타당한지 확인하는 내장 메커니즘은 없습니다; 순서가 중요하며, 이 문서는 모든 상호작용을 다루지는 않습니다.
IronOCR 이해하기
IronOCR은 최적화된 Tesseract 5 엔진을 기반으로 한 Iron Software의 상 for .NET OCR 라이브러리입니다. 단일 NuGet 패키지로 제공되며, 외부 API 호출 없이 온프레미스 환경에서 문서를 완전히 처리합니다. 이 설계는 구성 부담을 최소화하면서도 실제 운영 환경에서 요구되는 수준의 정확성을 제공하는 데 중점을 둡니다.
IronOCR의 주요 특징:
- 일시불 지급으로 영구 라이선스: $999 Lite (1 개발자, 1 프로젝트), $1,499 Plus (3 개발자, 3 프로젝트), $2,999 Professional (10 개발자, 10 프로젝트), $5,999 Unlimited. 각 티어에는 1년간의 업데이트가 포함되어 있으며, 구매 후 무기한으로 배포할 수 있습니다.
- 기본적으로 자동 전처리:
new IronTesseract().Read("document.jpg")호출은 이미지 특성에 따라 내부적으로 회전 감지, 노이즈 제거, 대비 정규화, 이진화를 적용합니다. 필요한 경우 명시적인 전처리 작업을 수행할 수 있습니다. - 암호로 보호된 파일을 포함한 네이티브 PDF 지원: 표준 및 암호화된 PDF는 추가 제품 라이선스 없이 동일한
OcrInput클래스를 통해 로드합니다. - 주요 엔진 클래스
IronTesseract: 결과는 단일.Confidence비율과.Text문자열 그리고 완벽하게 탐색 가능한.Pages,.Paragraphs,.Lines,.Words,.Characters컬렉션이 있는OcrResult객체로 돌아옵니다. - NuGet 패키지로 제공되는 125개 이상의 언어: Core English 포함; 추가 언어는
dotnet add package IronOcr.Languages.French등을 사용하여 설치합니다. - 스레드 안전 및 크로스 플랫폼: 플랫폼별 구성 없이 Windows, Linux, macOS, Docker, Azure 및 AWS에서 작동합니다.
기능 비교
| 기능 | Aspose.OCR | IronOCR |
|---|---|---|
| 가격 모델 | 연간 구독 ($783+/년/개발자) | 일회적인 영구 ($999+) |
| PDF 지원 | 표준 PDF는 기본적으로 지원되며, 암호화된 PDF의 경우 Aspose.PDF가 필요합니다. | 암호화된 파일을 포함한 모든 PDF 원본 |
| 전처리 | 수동 필터 선언 필요 | 자동 번역(선택적 수동 제어 가능) |
| 주요 API 클래스 | AsposeOcr |
IronTesseract |
| 단어 수 | 130개 이상 (패키지에 포함) | 125개 이상 (NuGet 패키지 제공) |
| 검색 가능한 PDF 출력 | SaveMultipageDocument(..., SaveFormat.Pdf, ...) |
result.SaveAsSearchablePdf(path) |
| 플랫폼 지원 | .NET Standard 2.0 이상, .NET 6/7/8, .NET Framework 4.6.1 이상 | .NET Standard 2.0 이상, .NET 6/7/8, .NET Framework 4.6.2 이상 |
상세 기능 비교
| 기능 | Aspose.OCR | IronOCR |
|---|---|---|
| 라이선스 | ||
| 라이선스 모델 | 연간 구독 | 영구적인 일회성 |
| 1-개발자 비용 | $783/년 | $999 한 번 |
| 영구 라이선스 | 아니요 | 예 |
| PDF 처리 | ||
| 표준 PDF OCR | 예 (RecognizePdf) |
예 (Read 또는 LoadPdf) |
| 비밀번호로 보호된 PDF | Aspose.PDF 필요 (추가 라이선스) | 내장 (Password: 매개변수) |
| 특정 페이지 선택 | 예 (0 기반 StartPage + PagesNumber) |
예 (1 기반 LoadPdfPages) |
| 비연속 페이지 선택 | 여러 번 호출 필요 | 예 (페이지 번호 배열) |
| 검색 가능한 PDF 출력 | SaveMultipageDocument |
SaveAsSearchablePdf |
| 전처리 | ||
| 자동 기울기 보정 | PreprocessingFilter.AutoSkew() 선언 필요 |
자동 또는 input.Deskew() |
| 노이즈 제거 | PreprocessingFilter.AutoDenoising() 선언 필요 |
자동 또는 input.DeNoise() |
| 명암 대비 강화 | PreprocessingFilter.ContrastCorrectionFilter() 선언 필요 |
자동 또는 input.Contrast() |
| 이진화 | PreprocessingFilter.Binarize() 또는 Threshold(value) |
input.Binarize() (자동 임계값) |
| 확장/고급화 | PreprocessingFilter.Scale(factor) |
input.Scale(percent) 또는 input.EnhanceResolution(dpi) |
| 코드 없이 전처리하기 | 사용 불가 | 예 (모든 Read 호출 시 자동으로 수행됨) |
| 인식 결과 | ||
| 일반 텍스트 | result.RecognitionText |
result.Text |
| 신뢰도 점수 | result.RecognitionAreasConfidence.Average() (배열) |
result.Confidence (단일 값) |
| 단어 단위 데이터 | 제한됨 (지역 기반) | result.Words X, Y, 높이, 폭, 신뢰도와 함께 |
| 라인 레벨 데이터 | 기초적인 | result.Lines 전체 위치 지정으로 |
| 단락 구조 | 기초적인 | result.Paragraphs 컬렉션 |
| 문자 수준 데이터 | 직접 노출되지 않음 | result.Characters 컬렉션 |
| 입력 소스 | ||
| 파일 경로 | 예 | 예 |
| 스트림 | 예 (RecognizeImage(MemoryStream, ...)) |
예 (input.LoadImage(stream)) |
| 바이트 배열 | MemoryStream을 통해 | 예 (input.LoadImage(byte[])) |
| 비트맵 | 직접적이지 않음 | 예 (input.LoadImage(Bitmap)) |
| URL | 수동 HTTP 다운로드 필요 | 예 (input.AddImage(url)) |
| 출력 형식 | ||
| 일반 텍스트 | 예 | 예 |
| 검색 가능한 PDF | 예 | 예 |
| 워드/DOCX | 예 (SaveFormat.Docx) |
hOCR내보내기를 통해 |
| hOCR | 제한적 | 전체 (result.SaveAsHocrFile) |
| 실꿰기 | ||
| 나사 안전 | 병행 사용 시 발생하는 문제점들이 문서로 기록되어 있습니다. | 완전한 스레드 안전성 |
| 내장 병렬 처리 | ThreadsCount 설정 |
내부 자동 병렬 처리 |
| 배포 | ||
| NuGet 패키지 개수 | 기본 언어 팩 1개 + 선택적 언어 팩 | 기본 언어 팩 1개 + 선택적 언어 팩 |
| Docker 지원 | 정상 작동합니다 (네이티브 라이브러리 설정이 필요할 수 있습니다). | 개봉 즉시 작동 |
| 에어갭 배포 | 지원됨 | 지원됨 |
가격 모델: 구독형 vs 영구형
가격 구조는 이 두 라이브러리 간의 가장 두드러진 실질적인 차이점이며, 시간이 지남에 따라 누적되므로 별도의 분석이 필요합니다.
Aspose.OCR 접근 방식
Aspose는 영구 라이선스 없이 연간 구독 방식으로 판매합니다. 갱신을 중단하는 순간부터 새로운 빌드를 합법적으로 배포할 수 없으며 보안 패치에 대한 접근 권한을 잃게 됩니다. README 파일에서 발췌:
소규모 팀 (개발자 3명):
Aspose.OCR: 3 × $783 = 연간
5년 비용: 누적되는 연간 구독 요금
중규모 팀(개발자 10명):
Aspose.OCR 사이트: 현재 가격에 대한 Aspose 문의
5년 비용: 누적되는 연간 구독 요금
프로젝트 도중에 개발자 팀 규모가 3명에서 10명으로 늘어나면 사이트 라이선스로 업그레이드해야 하며, 연간 구독료는 더 높은 금액으로 재설정됩니다. 예산 계획을 세우려면 인력 규모를 예측하고 매년 증가할 것으로 예상해야 합니다. Aspose에서 문서화한 라이선스 만료의 결과는 다음과 같습니다. 새 버전을 배포할 수 없으며, 기존 배포에는 유효한 라이선스가 필요하고, 라이선스를 갱신하지 않으면 보안 패치를 받을 수 없습니다.
IronOCR 접근법
IronOCR의 라이선스 모델 은 프로젝트 등급별로 일회성 결제 방식입니다. $2,999의 Professional 등급은 10개 프로젝트에 10명의 개발자를 지원합니다. 해당 버전은 영구적으로 소유하게 됩니다. 1년간의 업데이트가 포함되어 있습니다. 그 후에는 마지막으로 받은 버전을 계속 사용하거나 할인된 가격으로 업데이트를 갱신할 수 있습니다. 납부 불이행으로 인한 규정 준수 위험은 없습니다.
10인 개발자 팀 비교:
Aspose.OCR 사이트 (5년): 현재 가격에 대한 Aspose 문의 × 5년
IronOCR Professional: $professionalLicense 일회성
절약: 여러 해에 걸쳐 상당한
제품 수명 주기가 5년 이상인 내부 도구를 출시하는 팀의 경우, 누적되는 비용은 무시할 수 없는 수준입니다. 그 차이는 의미 있는 엔지니어링 연구에 자금을 지원합니다.
전처리 기능
전처리 과정은 두 라이브러리가 개발자의 일상적인 경험에서 차이를 보이는 부분입니다. Aspose.OCR은 개발자에게 결정을 맡깁니다.IronOCR사용자를 대신하여 결정을 내리고, 사용자가 이를 재정의할 수 있도록 합니다.
Aspose.OCR 접근 방식
이미지 보정이 필요한 모든 인식 호출에는 명시적인 필터 체인이 필요합니다. API는 PreprocessingFilter — RecognitionSettings를 구축하기 전에 구성하는 컬렉션입니다. 필터 순서는 중요하며 자동으로 유효성 검사가 되지 않습니다.
// Aspose.OCR: full pipeline for a typical scanned document
var api = new AsposeOcr();
var filters = new Aspose.OCR.Models.PreprocessingFilters.PreprocessingFilter();
// Step 1: fix rotation (must know to do this first)
filters.Add(PreprocessingFilter.AutoSkew());
// Step 2: remove noise
filters.Add(PreprocessingFilter.AutoDenoising());
// Step 3: contrast
filters.Add(PreprocessingFilter.ContrastCorrectionFilter());
// Step 4: binarize with a threshold you must choose
filters.Add(PreprocessingFilter.Binarize());
var settings = new RecognitionSettings
{
PreprocessingFilters = filters,
Language = Language.Eng
};
var result = api.RecognizeImage("scanned-invoice.jpg", settings);
Console.WriteLine(result.RecognitionText);
// Aspose.OCR: full pipeline for a typical scanned document
var api = new AsposeOcr();
var filters = new Aspose.OCR.Models.PreprocessingFilters.PreprocessingFilter();
// Step 1: fix rotation (must know to do this first)
filters.Add(PreprocessingFilter.AutoSkew());
// Step 2: remove noise
filters.Add(PreprocessingFilter.AutoDenoising());
// Step 3: contrast
filters.Add(PreprocessingFilter.ContrastCorrectionFilter());
// Step 4: binarize with a threshold you must choose
filters.Add(PreprocessingFilter.Binarize());
var settings = new RecognitionSettings
{
PreprocessingFilters = filters,
Language = Language.Eng
};
var result = api.RecognizeImage("scanned-invoice.jpg", settings);
Console.WriteLine(result.RecognitionText);
Imports Aspose.OCR
Imports Aspose.OCR.Models
' Aspose.OCR: full pipeline for a typical scanned document
Dim api As New AsposeOcr()
Dim filters As New PreprocessingFilters.PreprocessingFilter()
' Step 1: fix rotation (must know to do this first)
filters.Add(PreprocessingFilter.AutoSkew())
' Step 2: remove noise
filters.Add(PreprocessingFilter.AutoDenoising())
' Step 3: contrast
filters.Add(PreprocessingFilter.ContrastCorrectionFilter())
' Step 4: binarize with a threshold you must choose
filters.Add(PreprocessingFilter.Binarize())
Dim settings As New RecognitionSettings With {
.PreprocessingFilters = filters,
.Language = Language.Eng
}
Dim result = api.RecognizeImage("scanned-invoice.jpg", settings)
Console.WriteLine(result.RecognitionText)
퇴색된 열 전산 인쇄가 있는 영수증의 경우 Threshold 값을 수동으로 조정해야 합니다. aspose-ocr-preprocessing-comparison.cs에 있는 예제는 임계값 찾기 루프를 보여줍니다: 20씩 증가하는 80에서 180까지의 값을 시도하고 가장 많은 문자를 추출하는 값을 선택합니다. 그것은 합법적인 해결책이며, 또한 팀이 애플리케이션 기능 개발 대신 OCR 관련 작업에 개발 시간을 투자하는 것이기도 합니다.
IronOCR 접근법
IronOCR 의 기본 경로는 엔진이 각 이미지를 분석하고 필요에 따라 보정을 적용하기 때문에 코드에 명시적인 필터를 적용하지 않습니다. 명시적 필터 메서드 — Deskew(), DeNoise(), Contrast(), Binarize(), EnhanceResolution() —는 자동 동작을 무시하거나 특히 열화된 입력에 대해 공격적인 수정을 적용하려는 경우에 존재합니다:
// IronOCR: automatic preprocessing, zero filter configuration
var text = new IronTesseract().Read("scanned-invoice.jpg").Text;
// IronOCR: explicit preprocessing for a heavily degraded low-quality scan
using var input = new OcrInput();
input.LoadImage("poor-quality-photo.jpg");
input.Deskew();
input.DeNoise();
input.Contrast();
input.Binarize();
input.EnhanceResolution(300);
var result = new IronTesseract().Read(input);
// IronOCR: automatic preprocessing, zero filter configuration
var text = new IronTesseract().Read("scanned-invoice.jpg").Text;
// IronOCR: explicit preprocessing for a heavily degraded low-quality scan
using var input = new OcrInput();
input.LoadImage("poor-quality-photo.jpg");
input.Deskew();
input.DeNoise();
input.Contrast();
input.Binarize();
input.EnhanceResolution(300);
var result = new IronTesseract().Read(input);
Imports IronOcr
' IronOCR: automatic preprocessing, zero filter configuration
Dim text As String = New IronTesseract().Read("scanned-invoice.jpg").Text
' IronOCR: explicit preprocessing for a heavily degraded low-quality scan
Using input As New OcrInput()
input.LoadImage("poor-quality-photo.jpg")
input.Deskew()
input.DeNoise()
input.Contrast()
input.Binarize()
input.EnhanceResolution(300)
Dim result = New IronTesseract().Read(input)
End Using
이미지 품질 보정 가이드는 명시적 전처리가 자동 경로보다 우수한 경우를 다룹니다. 스캔한 PDF, 사무 문서 사진, 양식 캡처 등 대부분의 생성 입력의 경우 단일 라인 호출만으로 조정 없이 정확한 결과를 얻을 수 있습니다. 입력 품질이 저하된 경우의 벤치마크 결과는 저품질 스캔 예시를 참조하십시오.
실질적인 결과는 다음과 같습니다. 다양한 문서 유형을 처리하는 Aspose.OCR 통합에는 문서 유형별 전처리 구성 전략이 필요합니다.IronOCR통합은 동일한 코드 경로를 통해 다양한 입력을 처리합니다.
PDF 지원
PDF 처리는 두 라이브러리 간의 가장 구체적인 기능적 차이를 드러냅니다.
Aspose.OCR 접근 방식
표준 PDF는 DocumentRecognitionSettings와 함께 RecognizePdf()을 통해 작동합니다. 설정은 StartPage와 PagesNumber가 있는 0 기반 페이지 인덱싱을 사용합니다. 비연속 페이지 선택에는 페이지당 RecognizePdf를 한 번 호출하는 루프가 필요합니다.
// Aspose.OCR: standard PDF, all pages
var api = new AsposeOcr();
var settings = new DocumentRecognitionSettings { Language = Language.Eng };
var results = api.RecognizePdf("document.pdf", settings);
var sb = new StringBuilder();
foreach (var page in results)
{
sb.AppendLine(page.RecognitionText);
}
return sb.ToString();
// Aspose.OCR: standard PDF, all pages
var api = new AsposeOcr();
var settings = new DocumentRecognitionSettings { Language = Language.Eng };
var results = api.RecognizePdf("document.pdf", settings);
var sb = new StringBuilder();
foreach (var page in results)
{
sb.AppendLine(page.RecognitionText);
}
return sb.ToString();
Imports Aspose.OCR
Imports System.Text
Dim api As New AsposeOcr()
Dim settings As New DocumentRecognitionSettings With {.Language = Language.Eng}
Dim results = api.RecognizePdf("document.pdf", settings)
Dim sb As New StringBuilder()
For Each page In results
sb.AppendLine(page.RecognitionText)
Next
Return sb.ToString()
비밀번호로 보호된 PDF 파일은 접근하기 어려운 장벽입니다. aspose-ocr-pdf-processing.cs 예제는 명확합니다.
// Aspose.OCR: encrypted PDFs require Aspose.PDF (separate license)
public string ExtractFromProtectedPdf(string pdfPath, string password)
{
// Aspose.OCR alone CANNOT decrypt PDFs
// You need Aspose.PDF (additional license cost)
// Step 1: Decrypt with Aspose.PDF
// Step 2: Convert pages to images (complex multi-step process)
// Step 3: OCR the images
// Step 4: Cleanup temp files
throw new NotSupportedException(
"Aspose.OCR requires Aspose.PDF (additional license) to handle " +
"password-protected PDFs. This adds significant cost and complexity.");
}
// Aspose.OCR: encrypted PDFs require Aspose.PDF (separate license)
public string ExtractFromProtectedPdf(string pdfPath, string password)
{
// Aspose.OCR alone CANNOT decrypt PDFs
// You need Aspose.PDF (additional license cost)
// Step 1: Decrypt with Aspose.PDF
// Step 2: Convert pages to images (complex multi-step process)
// Step 3: OCR the images
// Step 4: Cleanup temp files
throw new NotSupportedException(
"Aspose.OCR requires Aspose.PDF (additional license) to handle " +
"password-protected PDFs. This adds significant cost and complexity.");
}
' Aspose.OCR: encrypted PDFs require Aspose.PDF (separate license)
Public Function ExtractFromProtectedPdf(pdfPath As String, password As String) As String
' Aspose.OCR alone CANNOT decrypt PDFs
' You need Aspose.PDF (additional license cost)
' Step 1: Decrypt with Aspose.PDF
' Step 2: Convert pages to images (complex multi-step process)
' Step 3: OCR the images
' Step 4: Cleanup temp files
Throw New NotSupportedException(
"Aspose.OCR requires Aspose.PDF (additional license) to handle " &
"password-protected PDFs. This adds significant cost and complexity.")
End Function
Aspose.PDF는 별도의 연간 구독료가 있는 제품입니다. 워크플로에 암호화된 PDF가 포함되어 있는 경우(대부분 Enterprise 문서 파이프라인에는 이러한 내용이 포함되어 있음) 두 개의 구독과 그 둘 사이의 통합 계층이 필요합니다.
검색 가능한 PDF 생성을 위해서는 결과를 List<RecognitionResult>에 누적하고 api.SaveMultipageDocument(outputPdf, SaveFormat.Pdf, results)를 호출해야 합니다. 결과를 수집하고 목록에 정리하는 단계는 귀하의 책임입니다.
IronOCR 접근법
IronOCR은 동일한 OcrInput API를 통해 표준 PDF, 암호로 보호된 PDF 및 페이지 범위 선택을 처리합니다. PDF OCR 기능에는 추가 제품이 필요하지 않습니다.
// IronOCR: standard PDF — direct, no settings object needed
var text = new IronTesseract().Read("document.pdf").Text;
// IronOCR: password-protected PDF — built-in, no extra license
using var input = new OcrInput();
input.LoadPdf("encrypted.pdf", Password: "secret123");
var result = new IronTesseract().Read(input);
// IronOCR: non-contiguous pages — single call
using var input = new OcrInput();
input.LoadPdfPages("large-report.pdf", new[] { 1, 3, 5, 12 });
var result = new IronTesseract().Read(input);
// IronOCR: standard PDF — direct, no settings object needed
var text = new IronTesseract().Read("document.pdf").Text;
// IronOCR: password-protected PDF — built-in, no extra license
using var input = new OcrInput();
input.LoadPdf("encrypted.pdf", Password: "secret123");
var result = new IronTesseract().Read(input);
// IronOCR: non-contiguous pages — single call
using var input = new OcrInput();
input.LoadPdfPages("large-report.pdf", new[] { 1, 3, 5, 12 });
var result = new IronTesseract().Read(input);
Imports IronOcr
' IronOCR: standard PDF — direct, no settings object needed
Dim text As String = New IronTesseract().Read("document.pdf").Text
' IronOCR: password-protected PDF — built-in, no extra license
Using input As New OcrInput()
input.LoadPdf("encrypted.pdf", Password:="secret123")
Dim result = New IronTesseract().Read(input)
End Using
' IronOCR: non-contiguous pages — single call
Using input As New OcrInput()
input.LoadPdfPages("large-report.pdf", {1, 3, 5, 12})
Dim result = New IronTesseract().Read(input)
End Using
검색 가능한 PDF 출력은 결과에 대한 단일 메서드 호출입니다.
// IronOCR: searchable PDF — one line
var result = new IronTesseract().Read("scanned-document.pdf");
result.SaveAsSearchablePdf("searchable-output.pdf");
// IronOCR: searchable PDF — one line
var result = new IronTesseract().Read("scanned-document.pdf");
result.SaveAsSearchablePdf("searchable-output.pdf");
Imports IronOcr
' IronOCR: searchable PDF — one line
Dim result = New IronTesseract().Read("scanned-document.pdf")
result.SaveAsSearchablePdf("searchable-output.pdf")
검색 가능한 PDF 사용법 가이드 와 PDF OCR 예제는 여러 페이지로 구성되거나 다양한 콘텐츠가 혼합된 PDF 시나리오를 다룹니다. 검색 가능한 PDF를 출력물로 요구하는 문서 보관 워크플로의 경우,IronOCR사용하면 입력에서 출력까지 단 세 줄의 경로만 거치면 되며 중간 단계를 관리할 필요가 없습니다.
API 상세 출력
API의 장황함은 프로덕션 코드베이스 전체에 걸쳐 누적됩니다. 문서 인식 호출당 5줄의 설정 작업은 수백 가지 유형의 문서를 처리하거나 새로운 팀원을 온보딩할 때 상당한 오버헤드가 됩니다.
Aspose.OCR 접근 방식
모든 Aspose.OCR 인식 호출은 동일한 패턴을 따릅니다: AsposeOcr 생성, RecognitionSettings(또는 PDF의 경우 DocumentRecognitionSettings) 구축, PreprocessingFilter 컬렉션 선택적으로 채우기, RecognizeImage 또는 RecognizePdf 호출, 그리고 result.RecognitionText에 접근. 신뢰도는 API가 지역별 값을 반환하기 때문에 result.RecognitionAreasConfidence.Average()를 계산해야 합니다:
// Aspose.OCR: basic text extraction with confidence
var api = new AsposeOcr();
var settings = new RecognitionSettings
{
Language = Language.Eng,
AutoSkew = true
};
var result = api.RecognizeImage("document.jpg", settings);
string text = result.RecognitionText;
float confidence = result.RecognitionAreasConfidence.Average();
// Aspose.OCR: basic text extraction with confidence
var api = new AsposeOcr();
var settings = new RecognitionSettings
{
Language = Language.Eng,
AutoSkew = true
};
var result = api.RecognizeImage("document.jpg", settings);
string text = result.RecognitionText;
float confidence = result.RecognitionAreasConfidence.Average();
Imports Aspose.OCR
' Aspose.OCR: basic text extraction with confidence
Dim api As New AsposeOcr()
Dim settings As New RecognitionSettings With {
.Language = Language.Eng,
.AutoSkew = True
}
Dim result = api.RecognizeImage("document.jpg", settings)
Dim text As String = result.RecognitionText
Dim confidence As Single = result.RecognitionAreasConfidence.Average()
대량 처리를 위해 각 이미지에는 해당 호출이 필요하며 스레드 패턴은 문서화된 스레드 안전성 문제를 피하기 위해 각 스레드에 AsposeOcr를 인스턴싱해야 합니다:
// Aspose.OCR: parallel batch — instance per thread due to thread-safety considerations
Parallel.ForEach(imagePaths,
new ParallelOptions { MaxDegreeOfParallelism = 4 },
path =>
{
var api = new AsposeOcr(); // new instance per thread
var result = api.RecognizeImage(path, new RecognitionSettings());
// handle result
});
// Aspose.OCR: parallel batch — instance per thread due to thread-safety considerations
Parallel.ForEach(imagePaths,
new ParallelOptions { MaxDegreeOfParallelism = 4 },
path =>
{
var api = new AsposeOcr(); // new instance per thread
var result = api.RecognizeImage(path, new RecognitionSettings());
// handle result
});
Imports System.Threading.Tasks
Imports Aspose.OCR
' Aspose.OCR: parallel batch — instance per thread due to thread-safety considerations
Parallel.ForEach(imagePaths, New ParallelOptions With {.MaxDegreeOfParallelism = 4}, Sub(path)
Dim api As New AsposeOcr() ' new instance per thread
Dim result = api.RecognizeImage(path, New RecognitionSettings())
' handle result
End Sub)
IronOCR 접근법
IronOCR의 API는 일반적인 사례를 한 줄로 압축합니다. IronTesseract 클래스는 스레드 간에 재인스턴싱 없이 스레드 안전하고 재사용 가능합니다:
// IronOCR: basic text extraction with confidence
var result = new IronTesseract().Read("document.jpg");
string text = result.Text;
double confidence = result.Confidence; // single value, no average needed
// IronOCR: basic text extraction with confidence
var result = new IronTesseract().Read("document.jpg");
string text = result.Text;
double confidence = result.Confidence; // single value, no average needed
Imports IronOcr
' IronOCR: basic text extraction with confidence
Dim result = New IronTesseract().Read("document.jpg")
Dim text As String = result.Text
Dim confidence As Double = result.Confidence ' single value, no average needed
이미지에서 텍스트를 읽어 오는 경우, 절차 간소화는 일괄 처리 시나리오에서 가장 두드러지게 나타납니다. 단일 IronTesseract 인스턴스가 모든 병렬 작업을 처리합니다:
// IronOCR: parallel batch — single shared instance, thread-safe
var ocr = new IronTesseract();
Parallel.ForEach(imagePaths, path =>
{
var result = ocr.Read(path);
// handle result
});
// IronOCR: parallel batch — single shared instance, thread-safe
var ocr = new IronTesseract();
Parallel.ForEach(imagePaths, path =>
{
var result = ocr.Read(path);
// handle result
});
Imports IronOcr
Imports System.Threading.Tasks
' IronOCR: parallel batch — single shared instance, thread-safe
Dim ocr As New IronTesseract()
Parallel.ForEach(imagePaths, Sub(path)
Dim result = ocr.Read(path)
' handle result
End Sub)
단어 위치, 줄 경계, 단락 구조와 같은 구조화된 데이터의 경우IronOCROcrResult 참조를 통해 직접 객체 모델을 제공합니다. Aspose.OCR은 RecognitionAreasRectangles를 통해 단어 수준 데이터를 접근하여 개별 신뢰도 값이 있는 단어 수준 컬렉션이 아닌 영역 수준의 기하학을 제공합니다.
API 매핑 참조
| Aspose.OCR | IronOCR에 상응하는 |
|---|---|
AsposeOcr |
IronTesseract |
RecognitionSettings |
OcrInput + IronTesseract 속성 |
DocumentRecognitionSettings |
OcrInput 것과 LoadPdf / LoadPdfPages 함께 |
api.RecognizeImage(path, settings) |
ocr.Read(path) 또는 ocr.Read(input) |
api.RecognizePdf(path, settings) |
ocr.Read(path) 또는 ocr.Read(input) |
result.RecognitionText |
result.Text |
result.RecognitionAreasConfidence.Average() |
result.Confidence |
RecognitionResult |
OcrResult |
Language.Eng |
OcrLanguage.English |
settings.AutoSkew = true |
input.Deskew() |
PreprocessingFilter.AutoDenoising() |
input.DeNoise() |
PreprocessingFilter.ContrastCorrectionFilter() |
input.Contrast() |
PreprocessingFilter.Binarize() |
input.Binarize() |
PreprocessingFilter.Threshold(value) |
input.Binarize() (자동 임계값) |
PreprocessingFilter.AutoSkew() |
input.Deskew() |
PreprocessingFilter.Median() |
input.DeNoise() |
PreprocessingFilter.Scale(factor) |
input.Scale(percent) |
PreprocessingFilter.Invert() |
input.Invert() |
PreprocessingFilter.Rotate(angle) |
input.Rotate(angle) |
settings.RecognitionAreas = new List<Rectangle> { region } |
input.LoadImage(path, cropRectangle) |
api.SaveMultipageDocument(path, SaveFormat.Pdf, results) |
result.SaveAsSearchablePdf(path) |
api.PreprocessImage(path, filters) |
input.GetPages()[0].SaveAsImage(path) |
api.CalculateSkew(imagePath) |
input.Deskew() (탐지된 각도를 자동 적용) |
new Aspose.Pdf.Document(path, password) + 페이지 변환 |
input.LoadPdf(path, Password: password) |
settings.ThreadsCount = n |
기본적으로 스레드 안전하고, Parallel.ForEach 지원 |
result.RecognitionAreasRectangles |
result.Words (X, Y, 너비, 높이, 신뢰도 포함) |
팀이 Aspose.OCR에서IronOCR로 전환을 고려할 때
연간 구독료가 예산 항목으로 편성될 때
구독 방식에서 영구 라이선스 방식으로의 전환은 재무 부서에서 OCR이 왜 매년 갱신하는지 묻기 시작할 때 발생합니다. 개별 개발자 수준에서 개발자당 연간 $783은 주목을 끄는 항목입니다. 더 큰 팀에게는, 그것이 직원 수와 함께 누적됩니다. Aspose.OCR을 2~3년 사용한 팀은 이미 $2,999에서 IronOCR의 일회성 Professional 비용보다 더 많은 비용을 지불했음을 종종 계산하고 전환 결정을 쉽게 합니다.
PDF 암호화 요구 사항이 늦게 나타날 때
문서 파이프라인은 대개 간단하게 시작합니다. 이미지를 스캔하고 텍스트를 추출하는 방식이죠. 암호로 보호된 PDF 파일은 규정 준수 또는 법무팀에서 모든 문서 내보내기를 암호화해야 한다고 지정할 때 나중에 제공됩니다. 이때 Aspose.OCR 고객은 암호 해독을 위해 Aspose.PDF가 필요하다는 사실을 알게 됩니다. 즉, 두 번째 제품을 평가하고, 두 번째 구독을 구매하고, OCR 호출 전에 복호화 단계를 통합하고, 두 개의 라이선스 갱신을 관리해야 한다는 의미입니다. Aspose.OCR에 이미 투자한 팀은 때때로 이러한 복잡성을 감수해야 합니다. 평가 초반에 참여하는 팀일수록 암호화된 PDF를 기본적으로 처리하는 라이브러리를 처음부터 선택하는 것이 더 쉽습니다.
전처리 튜닝이 지원 부담이 될 때
Aspose.OCR의 수동 필터 모델은 입력 문서가 균일할 때, 즉 동일한 스캐너, 동일한 설정, 동일한 문서 유형을 사용할 때 제대로 작동합니다. 제작 문서 파이프라인은 대부분 균일하지 않습니다. 고객이 제출한 청구서는 휴대전화 사진, 브라우저 스크린샷, 팩스 사본, 컬러 복사본 계약서 등 다양한 형태로 도착합니다. 각 이미지 유형은 서로 다른 필터 조합에서 최상의 결과를 얻습니다. 다양한 입력 유형을 지원하는 Aspose.OCR 통합을 유지 관리하는 팀은 종종 문서 유형별 필터 구성 레지스트리와 알려진 패턴에서 벗어나는 이미지 유형에 대한 지원 대기열을 갖게 됩니다. 스프린트 계획 단계에서 유지 관리 부담이 가시화되면 자동 사전 처리가 문제를 해결할 수 있는지 여부를 진지하게 검토해 볼 가치가 생깁니다.
개발자 온보딩 과정에서 API의 중요성을 강조할 때
통화 내용의 상세도 차이는 개별 통화 단위로 보면 미미하지만, 온보딩 과정에서는 확연히 드러납니다. 팀에 새로 합류하는 엔지니어는 네 가지 구성 객체, 이미지 및 PDF 인식 진입점의 차이점, 0부터 시작하는 페이지 인덱싱 규칙, 그리고 배열 기반 신뢰도 모델을 이해해야 합니다. 이러한 개념들은 어렵지 않지만, 첫 번째 기능을 출시하기 전에 숙지해야 할 만만치 않은 영역입니다. OCR 관련 코드 개발에 대한 장벽을 낮추는 데 관심 있는 팀은 간소화된IronOCR API를 통해 "엔지니어가 팀에 합류하는 시점"부터 "엔지니어가 OCR 기능을 출시하는 시점"까지 걸리는 시간을 상당히 단축할 수 있다는 것을 알게 됩니다.
Docker 또는 Linux 배포가 도입될 때
Aspose.OCR의 네이티브 라이브러리 종속성은 Docker 환경에서 특정 구성을 필요로 합니다. 차이점은 일반적으로 Dockerfile의 몇 줄과 일부 라이브러리 설치에 있지만, 이는 CI 파이프라인 설정 또는 스테이징 환경 프로비저닝 중에 드러나는 문서화되지 않은 단계입니다. IronOCR의 자체 포함 패키지는 표준 .NET 기본 이미지와 Linux 시스템에 단일 시스템 라이브러리 설치를 통해 배포됩니다. 배포 과정의 어려움이 엔지니어링 시간 손실로 이어지는 팀의 경우, 이러한 간소화는 매우 중요합니다.
일반적인 마이그레이션 고려사항
네임스페이스 및 패키지 스왑
패키지 교체는 간단합니다: dotnet remove package Aspose.OCR 후 dotnet add package IronOcr. using Aspose.OCR; 가져오기는 using IronOcr;이 됩니다. 라이선스 활성화가 Aspose.OCR.License 파일 기반 접근을 대체합니다:
// Remove Aspose license initialization
// var license = new Aspose.OCR.License();
// license.SetLicense("Aspose.OCR.lic");
// AddIronOCR license at application startup
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
// Or from environment variable (recommended for production)
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");
// Remove Aspose license initialization
// var license = new Aspose.OCR.License();
// license.SetLicense("Aspose.OCR.lic");
// AddIronOCR license at application startup
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
// Or from environment variable (recommended for production)
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");
' Remove Aspose license initialization
' Dim license As New Aspose.OCR.License()
' license.SetLicense("Aspose.OCR.lic")
' Add IronOCR license at application startup
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"
' Or from environment variable (recommended for production)
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE")
IronTesseract 설정 가이드에서는 ASP.NET, Azure Functions 및 Windows 서비스 호스트에 라이선스를 배치하는 방법을 설명합니다.
페이지 색인 규칙
Aspose.OCR은 DocumentRecognitionSettings.StartPage에서 0 기반 페이지 인덱싱을 사용합니다. IronOCR의 LoadPdfPages은 1 기반 인덱싱을 사용합니다. 전환은 기계적입니다: 기존의 모든 StartPage 값에 1을 더하고 종료 페이지 계산을 조정합니다. 이는 Aspose에서 IronOCR로 마이그레이션할 때 가장 흔하게 발생하는 오차 오류이며, 여러 페이지로 구성된 PDF 파일을 대상으로 집중적인 테스트를 해볼 가치가 있습니다.
// Aspose.OCR: 0-based — first page is StartPage = 0, PagesNumber = 1
var settings = new DocumentRecognitionSettings { StartPage = 0, PagesNumber = 5 };
// IronOCR: 1-based — first page is page 1
using var input = new OcrInput();
input.LoadPdfPages("document.pdf", 1, 5); // pages 1 through 5
// IronOCR: non-contiguous pages
input.LoadPdfPages("document.pdf", new[] { 1, 3, 7 }); // specific page numbers
// Aspose.OCR: 0-based — first page is StartPage = 0, PagesNumber = 1
var settings = new DocumentRecognitionSettings { StartPage = 0, PagesNumber = 5 };
// IronOCR: 1-based — first page is page 1
using var input = new OcrInput();
input.LoadPdfPages("document.pdf", 1, 5); // pages 1 through 5
// IronOCR: non-contiguous pages
input.LoadPdfPages("document.pdf", new[] { 1, 3, 7 }); // specific page numbers
Imports Aspose.OCR
Imports IronOcr
' Aspose.OCR: 0-based — first page is StartPage = 0, PagesNumber = 1
Dim settings As New DocumentRecognitionSettings With {.StartPage = 0, .PagesNumber = 5}
' IronOCR: 1-based — first page is page 1
Using input As New OcrInput()
input.LoadPdfPages("document.pdf", 1, 5) ' pages 1 through 5
' IronOCR: non-contiguous pages
input.LoadPdfPages("document.pdf", {1, 3, 7}) ' specific page numbers
End Using
PDF 입력 가이드는 연속되지 않은 페이지 배열을 포함하여 모든 페이지 선택 변형을 다룹니다.
신뢰도 값 해석
Aspose.OCR은 RecognitionAreasConfidence을 지역별 실수 값 배열로 반환하며, 이는 일반적으로 0과 1 사이의 어느 정도 평균화되며, 버전별로 스케일링이 다릅니다. IronOCR은 result.Confidence을 단일 이중 소수점 백분율(0–100)로 반환합니다. 기존 코드가 신뢰도 임계값을 기준으로 게이트를 설정하는 경우, 비교 값을 그에 맞게 조정하십시오. 단어 단위의 세부적인 신뢰도 정보를 얻으려면IronOCR직접 표시합니다.
// Aspose.OCR: per-region confidence array averaged to a float
float asposeConfidence = result.RecognitionAreasConfidence.Average();
// IronOCR: single overall confidence value
double confidence = result.Confidence; // 0–100
// IronOCR: per-word confidence when granularity is needed
foreach (var word in result.Words)
{
Console.WriteLine($"'{word.Text}': {word.Confidence:F1}%");
}
// Aspose.OCR: per-region confidence array averaged to a float
float asposeConfidence = result.RecognitionAreasConfidence.Average();
// IronOCR: single overall confidence value
double confidence = result.Confidence; // 0–100
// IronOCR: per-word confidence when granularity is needed
foreach (var word in result.Words)
{
Console.WriteLine($"'{word.Text}': {word.Confidence:F1}%");
}
Imports System
Imports System.Linq
' Aspose.OCR: per-region confidence array averaged to a float
Dim asposeConfidence As Single = result.RecognitionAreasConfidence.Average()
' IronOCR: single overall confidence value
Dim confidence As Double = result.Confidence ' 0–100
' IronOCR: per-word confidence when granularity is needed
For Each word In result.Words
Console.WriteLine($"'{word.Text}': {word.Confidence:F1}%")
Next
신뢰도 점수 사용 방법 안내 에서는 문서 유효성 검사 워크플로에서 문자별, 단어별, 줄별 신뢰도 값을 사용하는 방법을 설명합니다.
전처리 파이프라인 변환
특정 문서 유형에 맞게 조정된 Aspose.OCR 전처리 파이프라인이 있는 경우 필터와 메서드 간의 매핑은 직접적입니다. 각 PreprocessingFilter 정적 메서드는 OcrInput 인스턴스 메서드에 맵핑됩니다. 자동 전처리로 이미 만족스러운 결과가 나오는 문서의 경우, 명시적인 필터를 완전히 제거하고 결과를 정확도 기준선과 비교하여 테스트할 수 있습니다.
// Aspose.OCR preprocessing pipeline
var filters = new PreprocessingFilter();
filters.Add(PreprocessingFilter.AutoSkew());
filters.Add(PreprocessingFilter.ContrastCorrectionFilter());
filters.Add(PreprocessingFilter.AutoDenoising());
filters.Add(PreprocessingFilter.Binarize());
//IronOCR equivalent
using var input = new OcrInput();
input.LoadImage("document.jpg");
input.Deskew();
input.Contrast();
input.DeNoise();
input.Binarize();
var result = new IronTesseract().Read(input);
// Aspose.OCR preprocessing pipeline
var filters = new PreprocessingFilter();
filters.Add(PreprocessingFilter.AutoSkew());
filters.Add(PreprocessingFilter.ContrastCorrectionFilter());
filters.Add(PreprocessingFilter.AutoDenoising());
filters.Add(PreprocessingFilter.Binarize());
//IronOCR equivalent
using var input = new OcrInput();
input.LoadImage("document.jpg");
input.Deskew();
input.Contrast();
input.DeNoise();
input.Binarize();
var result = new IronTesseract().Read(input);
Imports Aspose.OCR
Imports IronOcr
' Aspose.OCR preprocessing pipeline
Dim filters As New PreprocessingFilter()
filters.Add(PreprocessingFilter.AutoSkew())
filters.Add(PreprocessingFilter.ContrastCorrectionFilter())
filters.Add(PreprocessingFilter.AutoDenoising())
filters.Add(PreprocessingFilter.Binarize())
' IronOCR equivalent
Using input As New OcrInput()
input.LoadImage("document.jpg")
input.Deskew()
input.Contrast()
input.DeNoise()
input.Binarize()
Dim result = New IronTesseract().Read(input)
End Using
IronOCR의 추가 기능
위에서 언급한 비교 영역 외에도IronOCR Aspose.OCR의 핵심 범위에서 벗어나는 기능들이 포함되어 있습니다.
- OCR 동안 바코드 읽기:
ocr.Configuration.ReadBarCodes = true를 설정하면 바코드가 단일 패스에서 텍스트와 함께 감지됩니다. 바코드 OCR 예시는 QR 코드, Code 128, 텍스트가 같은 페이지에 공존하는 혼합 문서 처리 방식을 보여줍니다. - 영역 기반 OCR: 문서의 명명된 영역으로 인식을 제한하기 위해
input.LoadImage()에CropRectangle를 전달합니다 — 청구서 번호가 항상 좌표 (200, 100)에서 (400, 130) 사이에 있는 고정 형식 양식에 유용합니다. 지역별 작물 재배 예시를 참조하세요. - 비동기 OCR:
IronTesseract.ReadAsync()가 비동기 ASP.NET 컨트롤러와 통합되어 차단을 방지합니다. 비동기 OCR 가이드는 처리량이 높은 웹 서비스를 위한 작업 구성 패턴을 다룹니다. - 진행 상황 추적: 장시간 소요되는 다중 페이지 PDF 작업 시 UI 피드백을 위한 진행 상황 이벤트가 표시됩니다. 진행 상황 추적 가이드는 Windows Forms 및 WPF 애플리케이션의 이벤트 구독 패턴을 보여줍니다.
- 필기 인식: 필기 문서 처리는 연결된 획에 맞춰 조정된 명시적인 전처리 과정을 통해 효율성을 높입니다.
- 특수 문서 유형: 여권 판독 , MICR/수표 판독 및 차량 번호판 인식 에 대한 전용 가이드가 제공됩니다.
.NET 호환성 및 미래 준비
IronOCR .NET Standard 2.0 이상을 대상으로 하며, 이는 .NET Framework 4.6.2 이상, .NET Core 2.0 이상, .NET 5, 6, 7, 8 및 9를 포함합니다. 이 라이브러리는 Windows x64/x86, Linux x64 및 macOS용 크로스 플랫폼 바이너리를 모두 동일한 NuGet 패키지에 포함하여 제공합니다. 배포 가이드는 플랫폼별 NuGet 패키지 변형 없이 Docker 컨테이너 , Azure App Service , AWS Lambda 및 Linux 서버를 다룹니다. Aspose.OCR은 동일한 .NET 버전 범위와 유사한 플랫폼 대상을 지원하므로 호환성만으로는 차별화 요소가 되지 않습니다. 두 라이브러리 모두 최신 .NET 개발 패턴을 지원합니다. 중요한 것은 IronOCR의 단일 패키지 배포 모델 덕분에 .NET 버전이 발전하더라도 컨테이너화된 빌드와 클라우드 호스팅 빌드가 단순하게 유지된다는 점입니다. 즉, 팀이 .NET 8에서 .NET 10으로 전환할 때 업데이트해야 할 여러 패키지 종속성 그래프가 없습니다.
결론
Aspose.OCR과IronOCR의 비교는 두 가지 구체적인 차이점으로 요약됩니다. 첫 번째는 비용 구조입니다: Aspose.OCR의 연간 개발자당 구독 모델은 확장하는 엔지니어링 팀의 경우 수년간 상당히 누적되지만, IronOCR의 $2,999 Professional 라이선스는 동일한 팀을 한 번 보호하며 갱신 의무가 없습니다. 이는 이론적인 이점이 아니라 실제 예산에 영향을 미치는 실질적인 수치입니다. 두 번째 차이점은 작동 방식에서 나타납니다. Aspose.OCR은 모든 인식 호출 전에 각 문서 유형을 진단하고 적절한 전처리 필터를 선언해야 하는 반면,IronOCR자동으로 수정 사항을 적용하고 자동 동작을 보완해야 할 때 명시적인 필터를 추가할 수 있도록 합니다.
어느 도서관도 사실상 독점권을 갖고 있지 않습니다. Aspose.OCR은 기본 패키지에서 130개 이상의 언어를 지원하는 반면,IronOCR언어별로 별도의 NuGet 팩을 사용합니다. 이는 고정된 언어 집합을 지원하는 다국어 배포 환경에서 설정이 약간 더 간단합니다. Aspose.OCR의 SaveMultipageDocument은 IronOCR이 비PDF 출력 형식에 대해 hOCR을 통해 라우팅하는 반면, Word 출력을 기본적으로 지원합니다. 이러한 차이점은 특정 워크플로에 있어 실제로 중요한 영향을 미칩니다.
Aspose.OCR이 따라잡을 수 없는 것은 암호화된 PDF 처리 경험입니다. 암호로 보호된 문서를 열기 위해 별도의 Aspose.PDF 구독이 필요한 것은 암호화된 문서 교환이 표준인 Enterprise 환경에서 진정한 워크플로 중단을 초래합니다. IronOCR의 input.LoadPdf("file.pdf", Password: "secret")는 기본 패키지 외에는 아무것도 필요하지 않습니다. PDF 암호화가 최우선 요구 사항인 팀(대부분 Enterprise 문서 처리 과정에서 결국 PDF 암호화를 접하게 됨)의 경우, 이러한 격차는 매우 중요합니다.
2026년에 새로운 OCR 통합 솔루션을 평가하는 팀에게 있어, 영구 라이선스 가격, 자동 전처리, 그리고 기본 제공되는 암호화 PDF 지원 기능을 모두 갖춘IronOCR일반적인 .NET 문서 처리에 있어 가장 간편한 선택이 될 것입니다. Aspose.OCR은 균일하고 스캔 상태가 양호한 문서를 예측 가능한 전처리 요구 사항에 따라 처리하는, 이미 Aspose 생태계에 투자한 팀에게 여전히 매력적인 선택지입니다. 하지만 기존에 그러한 투자가 없는 팀이 라이브러리를 선택하는 경우, 수학적 원리와 API 모두 같은 방향을 가리킵니다.
자주 묻는 질문
.NET용 Aspose.OCR이란 무엇인가요?
.NET용 Aspose.OCR은 개발자와 기업에서 이미지와 문서에서 텍스트를 추출하는 데 사용하는 OCR 솔루션입니다. 이 솔루션은 .NET 애플리케이션 개발용 IronOCR과 함께 평가된 여러 OCR 옵션 중 하나입니다.
IronOCR은 .NET 개발자를 위한 Aspose.OCR for .NET과 어떻게 다른가요?
IronOCR은 IronTesseract를 핵심 엔진으로 사용하는 NuGet 네이티브 .NET OCR 라이브러리입니다. .NET용 Aspose.OCR에 비해 배포가 간편하고(SDK 설치 프로그램 없음), 정액제 요금이 적용되며, COM 상호 운용 또는 클라우드 종속성이 없는 깔끔한 C# API를 제공합니다.
IronOCR이 Aspose.OCR for .NET보다 설정이 더 쉬운가요?
IronOCR은 단일 NuGet 패키지를 통해 설치됩니다. SDK 설치 프로그램, 복사할 라이선스 파일, 등록할 COM 구성 요소 또는 관리해야 할 별도의 런타임 바이너리가 없습니다. 전체 OCR 엔진이 패키지에 번들로 제공됩니다.
.NET용 Aspose.OCR과 IronOCR 사이에는 어떤 정확도 차이가 있나요?
IronOCR은 표준 비즈니스 문서, 송장, 영수증, 스캔 양식에 대해 높은 인식 정확도를 달성합니다. 품질이 많이 저하된 문서나 일반적이지 않은 스크립트의 경우 정확도는 소스 품질에 따라 달라집니다. IronOCR에는 이미지 전처리 필터가 포함되어 있어 저품질 입력에 대한 인식률을 향상시킵니다.
IronOCR은 PDF 텍스트 추출을 지원하나요?
예. IronOCR은 한 번의 호출로 원본 PDF와 스캔한 PDF 이미지 모두에서 텍스트를 추출합니다. 또한 여러 페이지의 TIFF 파일, 이미지, 스트림도 지원합니다. 스캔한 PDF의 경우 OCR은 페이지별 결과 개체를 사용하여 페이지별로 적용됩니다.
.NET용 Aspose.OCR 라이선싱은 IronOCR과 어떻게 다른가요?
IronOCR은 페이지당 또는 스캔당 요금이 없는 정액제 영구 라이선스를 사용합니다. 대량의 문서를 처리하는 조직은 문서 양에 관계없이 동일한 라이선스 비용을 지불합니다. 자세한 내용과 볼륨 가격은 IronOCR 라이선스 페이지에서 확인할 수 있습니다.
IronOCR 어떤 언어를 지원하나요?
IronOCR은 별도의 NuGet 언어 팩을 통해 127개 언어를 지원합니다. 언어를 추가하려면 '닷넷 추가 패키지 IronOcr.Languages.{Language}' 명령 하나만 있으면 됩니다. 수동으로 파일을 배치하거나 경로를 구성할 필요가 없습니다.
.NET 프로젝트에 IronOCR 설치하는 방법은 무엇인가요?
NuGet을 통해 설치합니다: 패키지 관리자 콘솔에서 '설치-패키지 IronOcr' 또는 CLI에서 '닷넷 추가 패키지 IronOcr'을 실행합니다. 추가 언어 팩도 같은 방법으로 설치됩니다. 기본 SDK 인스톨러가 필요하지 않습니다.
IronOCR은 Aspose.OCR과 달리 Docker 및 컨테이너화된 배포에 적합한가요?
예. IronOCR은 NuGet 패키지를 통해 Docker 컨테이너에서 작동합니다. 라이선스 키는 환경 변수를 통해 설정됩니다. OCR 엔진 자체에는 라이선스 파일, SDK 경로 또는 볼륨 마운트가 필요하지 않습니다.
Aspose.OCR과 비교하여 구매하기 전에 IronOCR을 사용해 볼 수 있나요?
예. IronOCR 평가판 모드는 문서를 처리하고 출력물에 워터마크 오버레이가 포함된 OCR 결과를 반환합니다. 라이선스를 구매하기 전에 자신의 문서에서 정확성을 확인할 수 있습니다.
IronOCR은 텍스트 추출과 함께 바코드 판독을 지원하나요?
IronOCR은 텍스트 추출과 OCR에 중점을 둡니다. 바코드 판독을 위해 Iron Software는 동반 라이브러리로 IronBarcode를 제공합니다. 두 가지 모두 개별적으로 또는 Iron Suite 번들의 일부로 사용할 수 있습니다.
.NET용 Aspose.OCR에서 IronOCR로 쉽게 마이그레이션할 수 있나요?
.NET용 Aspose.OCR에서 IronOCR로의 마이그레이션에는 일반적으로 초기화 시퀀스를 IronTesseract 인스턴스화로 대체하고, COM 수명 주기 관리를 제거하며, API 호출을 업데이트하는 작업이 포함됩니다. 대부분의 마이그레이션은 코드 복잡성을 크게 줄여줍니다.

