Azure의 OCR과 IronOCR: .NET 프로젝트에 가장 적합한 광학 문자 인식 솔루션은 무엇인가요?
Windows.Media.Ocr은 모든 Windows 10 및 Windows 11 설치에 무료로 제공되므로 매력적인 라이브러리입니다. 하지만 동일한 애플리케이션을 Linux서버, Docker컨테이너 또는 AWS 람다 함수에 배포하려고 하면 API가 존재하지 않아 문제가 발생합니다. 이 라이브러리의 경우 플랫폼 종속성은 예외적인 경우가 아닙니다. 그것이 결정적인 제약 조건입니다. Windows.Media.Ocr을 선택하는 것 이후의 모든 아키텍처 결정은 호스트 운영 체제가 Windows 10 또는 Windows 11 데스크톱 또는 소비자용 서버여야 한다는 요구 사항에 따라 결정됩니다. Linux, macOS, Docker, Linux용 Azure Functions, AWS 람다 모두 사용할 수 없습니다. Windows 내부용 도구를 개발하고 해당 경계를 넘어 확장할 계획이 전혀 없는 개발자에게는 0달러라는 가격이 매우 매력적으로 느껴질 것입니다. 다른 모든 사람들에게 숨겨진 비용은 배포 요구 사항이 변경될 때 OCR을 완전히 다른 시스템으로 다시 작성하는 것입니다.
Windows.Media.OCR 이해하기
Windows.Media.Ocr은 Windows 8.1에서 도입되고 Windows 10과 11에 맞게 개선된 Windows 런타임 (WinRT) API의 일부입니다. 이는 OcrEngine 클래스를 Windows.Media.Ocr 네임스페이스에 노출하며, SoftwareBitmap를 받아들입니다 — 이는 Windows.Graphics.Imaging의 WinRT 타입 자체이며, 인식된 텍스트와 선형 기하도를 포함하는 OcrResult를 반환합니다.
이 API는 WinRT의 async/await 계약을 기반으로 구축되었습니다. 모든 작업은 WinRT IAsyncOperation 기계에 의해 지원되는 async Task 호출을 통해 이루어집니다: StorageFile을 불러오고, 스트림을 열고, BitmapDecoder을 생성하고, SoftwareBitmap을 가져온 후에만 RecognizeAsync를 호출합니다. .NET 6부터 WinRT API를 사용하기 위해서는 net8.0-windows10.0.19041.0와 같은 Windows 전용 타겟 프레임워크 모니커 (TFM)가 필요합니다. 그 TFM이 없는 프로젝트 파일은 Windows.Media.Ocr을 참조하는 코드를 전혀 컴파일할 수 없습니다 — 어셈블리 그래프에 해당 타입들이 존재하지 않습니다.
주요 건축적 특징:
- Windows 10/11에만 해당 — WinRT API는 데스크톱 환경이 없는 Windows Server에서는 모든 구성에서 사용할 수 없으며, Linux및 macOS에서는 완전히 사용할 수 없습니다.
- WinRT 비동기 모델 — 모든 인식은
IAsyncOperation지원 비동기 호출을 통해 이루어집니다; 동기 경로가 존재하지 않음 - OS의 언어 팩 —
OcrEngine.TryCreateFromLanguage과TryCreateFromUserProfileLanguages는 사용자가 설치한 Windows 언어 팩에서 이용 가능한 언어를 해결합니다; 묶음화된 언어 모델 또는 포터블 언어 모델은 없습니다. - 이미지 전용 입력 — API는
SoftwareBitmap을 직접 받아들입니다; API의 어떤 계층에도 PDF 입력 경로가 존재하지 않습니다. - 전처리 파이프라인 없음 — 원시 비트맵이 인식기에 전달됩니다. 회전 보정, 노이즈 제거, 대비 향상 및 해상도 확대/축소는 개발자가 별도의 Windows 이미징 API를 사용하여 처리해야 하는 기능입니다.
- 검색 가능한 PDF 출력이 제공되지 않습니다 . 인식된 텍스트는 선 형상 정보가 포함된 일반 문자열 데이터로 반환됩니다. PDF로 내보내기 기능은 제공되지 않습니다.
- Windows 전용 TFM 필요 — 프로젝트 파일은
net*-windows*TFM을 타겟팅해야 하며, 이는 동일한 프로젝트를 크로스 플랫폼으로 컴파일하는 것을 방지합니다.
WinRT 비동기 스택
Windows.Media.Ocr을 사용한 모든 기본 OCR 작업은 인식 시작 전에 WinRT API 표면의 여러 계층을 탐색해야 합니다.
// Windows.Media.Ocr: 6+ async steps before receiving any text
// Requires net8.0-windows10.0.19041.0 TFM — will not compile cross-platform
public async Task<string> ExtractTextAsync(string imagePath)
{
// Step 1: WinRT file system access
var file = await StorageFile.GetFileFromPathAsync(imagePath);
// Step 2: Open WinRT stream
using var stream = await file.OpenAsync(FileAccessMode.Read);
// Step 3: Create bitmap decoder
var decoder = await BitmapDecoder.CreateAsync(stream);
// Step 4: Decode to SoftwareBitmap
var bitmap = await decoder.GetSoftwareBitmapAsync();
// Step 5: Check language availability — null if not installed on this machine
var engine = OcrEngine.TryCreateFromLanguage(
new Windows.Globalization.Language("en-US"));
if (engine == null)
throw new Exception("OCR engine not available for this language");
// Step 6: Recognize
var result = await engine.RecognizeAsync(bitmap);
return result.Text;
}
// Windows.Media.Ocr: 6+ async steps before receiving any text
// Requires net8.0-windows10.0.19041.0 TFM — will not compile cross-platform
public async Task<string> ExtractTextAsync(string imagePath)
{
// Step 1: WinRT file system access
var file = await StorageFile.GetFileFromPathAsync(imagePath);
// Step 2: Open WinRT stream
using var stream = await file.OpenAsync(FileAccessMode.Read);
// Step 3: Create bitmap decoder
var decoder = await BitmapDecoder.CreateAsync(stream);
// Step 4: Decode to SoftwareBitmap
var bitmap = await decoder.GetSoftwareBitmapAsync();
// Step 5: Check language availability — null if not installed on this machine
var engine = OcrEngine.TryCreateFromLanguage(
new Windows.Globalization.Language("en-US"));
if (engine == null)
throw new Exception("OCR engine not available for this language");
// Step 6: Recognize
var result = await engine.RecognizeAsync(bitmap);
return result.Text;
}
Imports System.Threading.Tasks
Imports Windows.Media.Ocr
Imports Windows.Storage
Imports Windows.Graphics.Imaging
Imports Windows.Storage.Streams
Imports Windows.Globalization
Public Async Function ExtractTextAsync(imagePath As String) As Task(Of String)
' Step 1: WinRT file system access
Dim file As StorageFile = Await StorageFile.GetFileFromPathAsync(imagePath)
' Step 2: Open WinRT stream
Using stream As IRandomAccessStream = Await file.OpenAsync(FileAccessMode.Read)
' Step 3: Create bitmap decoder
Dim decoder As BitmapDecoder = Await BitmapDecoder.CreateAsync(stream)
' Step 4: Decode to SoftwareBitmap
Dim bitmap As SoftwareBitmap = Await decoder.GetSoftwareBitmapAsync()
' Step 5: Check language availability — Nothing if not installed on this machine
Dim engine As OcrEngine = OcrEngine.TryCreateFromLanguage(New Language("en-US"))
If engine Is Nothing Then
Throw New Exception("OCR engine not available for this language")
End If
' Step 6: Recognize
Dim result As OcrResult = Await engine.RecognizeAsync(bitmap)
Return result.Text
End Using
End Function
engine에 대한 널 체크는 선택 사항이 아닙니다. 코드를 실행하는 컴퓨터에 대상 언어 팩이 설치되어 있지 않으면 TryCreateFromLanguage은 널을 반환하며 인식이 불가능합니다. 대안이 없습니다. 애플리케이션은 사용자에게 오류를 표시하거나 아무런 경고 없이 실패해야 합니다.
IronOCR 이해하기
IronOCR 은 최적화된 Tesseract 5 엔진을 기반으로 구축된 상 for .NET OCR 라이브러리로, 전처리, PDF 읽기, 다국어 인식 및 구조화된 데이터 출력을 처리하는 관리형 API 계층을 제공합니다. 이 소프트웨어는 외부 네이티브 바이너리를 별도로 배포할 필요도 없고, tessdata 폴더를 관리할 필요도 없으며, 플랫폼별 TFM이 필요하지 않은 단일 NuGet 패키지로 설치됩니다.
주요 특징:
- 크로스 플랫폼 설계 — 코드 변경 없이 Windows, Linux, macOS, Docker, Azure App Service(Windows 또는 Linux), AWS 람다 및 GCP Cloud Run에서 실행됩니다.
- 자동 전처리 — 왜곡 제거, 잡음 제거, 대비 향상, 이진화, 해상도 조정이 자동으로 저품질 입력에 적용되며,
OcrInput필터 메서드를 통해 명시적인 제어가 가능합니다. - 네이티브 PDF 입력 —
IronTesseract.Read은 PDF 경로를 직접 받습니다; 변환 단계 없음, 외부 라이브러리 필요 없음 - 125개 이상의 언어가 기본 제공됩니다 . 언어 팩은 애플리케이션과 함께 배포되는 NuGet 패키지입니다. 운영체제에 설치된 언어 데이터에 의존하지 않음
- 검색 가능한 PDF 출력 —
OcrResult.SaveAsSearchablePdf은 스캔된 모든 입력에서 텍스트 레이어 PDF를 생성합니다. - 구조화된 결과 모델 —
OcrResult는Pages,Paragraphs,Lines,Words을 노출하고, 단어별 신뢰도 점수 및 경계 상자를 제공합니다. - 스레드 안전 —
IronTesseract인스턴스는 추가적인 동기화 없이 병렬 작업을 지원합니다. - 영구 라이선스 — $999 Lite부터 $5,999 Unlimited까지, 1회 구매로 무제한 문서 처리 가능
기능 비교
| 기능 | Windows.Media.Ocr | IronOCR |
|---|---|---|
| 플랫폼 | Windows 10/11에서만 사용 가능 | 윈도우, 리눅스, macOS, Docker, 클라우드 |
| 가격 | 무료 | $999–$5,999 영구 |
| PDF 입력 | 아니요 | 내부 지원 |
| 언어 모델 | OS에 설치된 팩 | NuGet 통해 125개 이상의 패키지가 제공됩니다. |
| 전처리 | None | 자동 필터 + 명시적 필터 |
| 검색 가능한 PDF 출력 | 아니요 | 예 |
| API 모델 | WinRT 비동기 | 표준 .NET |
상세 기능 비교
| 기능 | Windows.Media.Ocr | IronOCR |
|---|---|---|
| 플랫폼 지원 | ||
| 윈도우 10/11 | 예 | 예 |
| Windows Server | 제한적 | 예 |
| Linux | 아니요 | 예 |
| macOS | 아니요 | 예 |
| Docker | 아니요 | 예 |
| Azure Functions(리눅스) | 아니요 | 예 |
| AWS 람다 | 아니요 | 예 |
| 입력 형식 | ||
| JPEG / PNG / BMP | 예 (WinRT 파이프라인을 통해) | 예 |
| PDF (스캔본) | 아니요 | 예 |
| PDF 파일 (비밀번호로 보호됨) | 아니요 | 예 |
| TIFF / 다중 페이지 | 아니요 | 예 |
| 스트림/바이트 배열 | 아니요 (WinRT StorageFile만 해당) | 예 |
| URL | 아니요 | 예 |
| 언어 지원 | ||
| 언어 소스 | 운영체제에 설치된 언어 팩 | 125개 이상의 NuGet 패키지 |
| OS 관리자 권한 없이 설치 | 아니요 | 예 (NuGet) |
| 다국어 동시 | 아니요 | 예 |
| 기기 간 언어 호환성 | 아니요 | 예 |
| 전처리 | ||
| 디스큐 | 아니요 | 예 (input.Deskew()) |
| 노이즈 제거 | 아니요 | 예 (input.DeNoise()) |
| 명암 대비 강화 | 아니요 | 예 (input.Contrast()) |
| 이진화 | 아니요 | 예 (input.Binarize()) |
| 해상도 스케일링 | 아니요 | 예 (input.EnhanceResolution(300)) |
| 산출 | ||
| 일반 텍스트 | 예 | 예 |
| 검색 가능한 PDF | 아니요 | 예 |
| hOCR / HTML | 아니요 | 예 |
| 단어 수준 경계 상자 | 부분적 (선 기하학) | 예 |
| 단어별 신뢰도 점수 | 아니요 | 예 |
| API 설계 | ||
| TFM 제한 | net*-windows* 필요 |
None |
| 동기 경로 | 아니요 | 예 |
| OCR 중 바코드 판독 | 아니요 | 예 |
| 영역 기반 OCR | 아니요 | 예 |
플랫폼 종속성 vs 크로스 플랫폼 배포
이 두 라이브러리 간의 가장 중요한 차이점은 정확도, 전처리 또는 PDF 지원 여부가 아니라 배포 토폴로지입니다. Windows.Media.Ocr은 윈도우 10/11 이외의 운영체제에는 존재하지 않습니다. 이는 구성 문제나 NuGet 패키지 누락 때문이 아닙니다. API를 지원하는 WinRT 런타임은 다른 모든 운영 체제에는 존재하지 않습니다.
Windows.Media.OCR 접근 방식
WinRT 종속성은 단 한 줄의 코드도 실행되기 전에 프로젝트 파일에 나타납니다. TargetFramework는 Windows 플랫폼 버전을 지정해야 합니다:
<PropertyGroup>
<TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
</PropertyGroup>
해당 TFM 때문에 프로젝트를 Linux컨테이너에서 사용할 수 없습니다. ASP.NET 배포를 위한 표준 Linux기본 이미지 mcr.microsoft.com/dotnet/aspnet:8.0 기반의 Docker이미지는 WinRT 런타임을 포함하지 않습니다. net8.0 (Windows 접미사 없음)를 대상으로 하는 프로젝트에서 Windows.Media.Ocr 타입을 참조하려고 하면 컴파일 오류가 발생하며, 런타임 오류가 아닙니다. 빌드 시점에 종속성이 강제됩니다.
OCR 워커가 Linux에서 실행되는 마이크로서비스 아키텍처나 크로스 플랫폼 Docker이미지를 생성하는 CI/CD 파이프라인에서 OCR 요구 사항이 발생하는 경우, Windows.Media.Ocr은 평가 대상조차 되지 않습니다. 첫 번째 스파이크 테스트 전에 제외됩니다.
IronOCR 접근법
IronOCR는 플랫폼 전용 TFM 없이 net6.0, net7.0, net8.0, net9.0를 타겟팅합니다. 동일한 NuGet 패키지와 동일한 애플리케이션 바이너리가 Windows, Linux및 macOS에서 실행됩니다. IronOCR를 Docker에 배포하려면 Linux기본 이미지에서 libgdiplus에 대한 apt-get 줄이 필요하며, 다른 것은 필요하지 않습니다:
FROM mcr.microsoft.com/dotnet/aspnet:8.0
# Linuxdependency for System.Drawing
RUN apt-get update && apt-get install -y libgdiplus
COPY --from=build /app/publish /app
WORKDIR /app
ENTRYPOINT ["dotnet", "YourApp.dll"]
Windows 버전과 Linux버전 간의 애플리케이션 코드 자체는 변경되지 않았습니다.
// Same code — Windows, Linux, macOS, Docker, AWS Lambda
// 아니요 platform TFM, no WinRT, no conditional compilation
using IronOcr;
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var text = new IronTesseract().Read("document.jpg").Text;
// Same code — Windows, Linux, macOS, Docker, AWS Lambda
// 아니요 platform TFM, no WinRT, no conditional compilation
using IronOcr;
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var text = new IronTesseract().Read("document.jpg").Text;
Imports IronOcr
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim text As String = New IronTesseract().Read("document.jpg").Text
IronOCR AWS Lambda , Linux 기반 Azure Functions 및 Linux 서버에서 코드 수정 없이 직접 실행됩니다. 배포 대상은 아키텍처 제약 조건이 아니라 구성 관련 문제입니다.
언어 지원: 운영체제 종속성 vs. 번들 패키지
Windows.Media.OCR은 언어 지원 여부를 전적으로 호스트 시스템에 맡깁니다. 애플리케이션이 인식할 수 있는 언어는 사용자가 또는 IT 관리자가 해당 Windows 설치에 설치한 언어 팩에 따라 결정됩니다. 이는 여러분의 코드와는 전혀 무관한 유형의 프로덕션 오류를 발생시킵니다.
Windows.Media.OCR 접근 방식
요청한 언어가 설치되어 있지 않으면 OcrEngine.TryCreateFromLanguage 널을 반환합니다. OCR 기능이 있는 언어 팩이 전혀 존재하지 않을 때 TryCreateFromUserProfileLanguages 널을 반환합니다. 두 방법 모두 널(null) 처리가 필요하며, 어느 방법도 원활한 복구 경로를 제공하지 않습니다. 코드에서 언어를 설치하거나 애플리케이션에 언어를 포함시키는 방법은 없습니다.
// Windows.Media.Ocr: language availability is a runtime unknown
// Returns null if the language pack is not installed on this machine
var engine = OcrEngine.TryCreateFromLanguage(
new Windows.Globalization.Language("fr-FR"));
if (engine == null)
{
// French OCR is simply unavailable — no recovery path
// User must go to Windows Settings > Language to install French
throw new InvalidOperationException(
"French OCR unavailable. Install the French language pack in Windows Settings.");
}
var result = await engine.RecognizeAsync(bitmap);
// Windows.Media.Ocr: language availability is a runtime unknown
// Returns null if the language pack is not installed on this machine
var engine = OcrEngine.TryCreateFromLanguage(
new Windows.Globalization.Language("fr-FR"));
if (engine == null)
{
// French OCR is simply unavailable — no recovery path
// User must go to Windows Settings > Language to install French
throw new InvalidOperationException(
"French OCR unavailable. Install the French language pack in Windows Settings.");
}
var result = await engine.RecognizeAsync(bitmap);
Imports Windows.Globalization
Imports Windows.Media.Ocr
' Windows.Media.Ocr: language availability is a runtime unknown
' Returns Nothing if the language pack is not installed on this machine
Dim engine = OcrEngine.TryCreateFromLanguage(New Language("fr-FR"))
If engine Is Nothing Then
' French OCR is simply unavailable — no recovery path
' User must go to Windows Settings > Language to install French
Throw New InvalidOperationException("French OCR unavailable. Install the French language pack in Windows Settings.")
End If
Dim result = Await engine.RecognizeAsync(bitmap)
Windows.Media.OCR을 사용하는 다국어 문서 처리 애플리케이션을 배포하려면 배포 대상의 모든 컴퓨터에 Windows 언어 팩을 설치해야 합니다. 공유 서버나 그룹 정책으로 관리되는 사용자 컴퓨터에서는 개발자가 이를 제어할 수 없습니다.
IronOCR 접근법
IronOCR 언어 모델을 애플리케이션 바이너리와 함께 배포되는 전용 NuGet 패키지로 제공합니다. 언어 데이터는 운영체제 구성 파일이 아닌 빌드 아티팩트와 함께 전송됩니다. 125개 이상의 언어를 지원하는 것은 dotnet add package 작업입니다:
dotnet add package IronOcr.Languages.French, IronOcr.Languages.German, IronOcr.Languages.Arabic, IronOcr.Languages.ChineseSimplified
// IronOCR: language availability is a deploy-time guarantee, not a runtime unknown
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.French;
ocr.AddSecondaryLanguage(OcrLanguage.German);
// Works on any machine, any OS, zero OS configuration required
var result = ocr.Read("multilingual-document.jpg");
Console.WriteLine(result.Text);
// IronOCR: language availability is a deploy-time guarantee, not a runtime unknown
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.French;
ocr.AddSecondaryLanguage(OcrLanguage.German);
// Works on any machine, any OS, zero OS configuration required
var result = ocr.Read("multilingual-document.jpg");
Console.WriteLine(result.Text);
Imports IronOcr
' IronOCR: language availability is a deploy-time guarantee, not a runtime unknown
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.French
ocr.AddSecondaryLanguage(OcrLanguage.German)
' Works on any machine, any OS, zero OS configuration required
Dim result = ocr.Read("multilingual-document.jpg")
Console.WriteLine(result.Text)
전체 언어 목록 에는 라틴어, CJK, 아랍어, 히브리어, 데바나가리, 키릴 문자 및 수학 표기법을 포함한 특수 문자 세트가 모두 포함됩니다. 모든 언어 팩 버전은IronOCR패키지 버전과 연동되므로 프로덕션 환경의 언어 모델은 로컬에서 테스트한 모델과 일치합니다.
전처리 부재
페이지가 약간 회전되었거나, 얼룩덜룩한 복사본 텍스트, 미색 용지에 흐릿한 잉크 등 품질이 낮은 스캔 파일은 어떤 OCR 엔진에서도 그대로 입력받으면 정확도가 떨어집니다. 전처리 과정은 인식 실행 전에 이러한 결함을 수정합니다. Windows.Media.OCR은 어떠한 전처리 계층도 제공하지 않습니다.
Windows.Media.OCR 접근 방식
API는 SoftwareBitmap을 받아들이고 텍스트를 반환합니다. 두 지점 사이의 이미지 품질 변화는 설정할 수 없습니다. 부적절한 입력의 정확성을 개선해야 하는 개발자는 SoftwareBitmap을 생성하기 전에 Windows Imaging Component API를 사용하여 수동으로 전처리를 구현해야 합니다. 이는 별도의 코드베이스로, 자체적인 유지 관리 부담이 있으며, OCR API 자체가 윈도우 전용인 것과 같은 이유로 윈도우 전용으로 유지됩니다.
// Windows.Media.Ocr: no preprocessing — what you pass is what gets recognized
// Skewed, noisy, or low-resolution images degrade accuracy with no remedy
// Manual preprocessing via separate Windows Imaging APIs is the only option
var bitmap = await decoder.GetSoftwareBitmapAsync();
// bitmap goes directly to recognition with no quality improvement
var result = await engine.RecognizeAsync(bitmap);
// Windows.Media.Ocr: no preprocessing — what you pass is what gets recognized
// Skewed, noisy, or low-resolution images degrade accuracy with no remedy
// Manual preprocessing via separate Windows Imaging APIs is the only option
var bitmap = await decoder.GetSoftwareBitmapAsync();
// bitmap goes directly to recognition with no quality improvement
var result = await engine.RecognizeAsync(bitmap);
Imports System.Threading.Tasks
' Windows.Media.Ocr: no preprocessing — what you pass is what gets recognized
' Skewed, noisy, or low-resolution images degrade accuracy with no remedy
' Manual preprocessing via separate Windows Imaging APIs is the only option
Dim bitmap = Await decoder.GetSoftwareBitmapAsync()
' bitmap goes directly to recognition with no quality improvement
Dim result = Await engine.RecognizeAsync(bitmap)
일반적인 수준의 깨끗한 문서 스캔(제어된 스캔 환경, 일정한 조명, 최소 300 DPI, 올바른 방향)의 경우 이러한 제한은 감당할 수 있습니다. 휴대폰 카메라, 자동 급지 정렬 불량이 있는 평판 스캐너, 팩스 문서 또는 복사된 자료에서 이미지를 수신하는 문서 처리 파이프라인의 경우, 전처리 단계를 처음부터 구축하거나 정확도 저하를 감수해야 합니다.
IronOCR 접근법
IronOCR의 OcrInput 클래스는 각 필터 메서드가 순차적으로 적용되는 전처리 파이프라인을 제공합니다. 이미지 품질 보정 필터는 실제 문서 처리 과정에서 정확도를 저해하는 가장 일반적인 요인들을 해결합니다.
// IronOCR: explicit preprocessing pipeline
// Each filter targets a specific quality defect
using var input = new OcrInput();
input.LoadImage("low-quality-scan.jpg");
input.Deskew(); // Correct page rotation up to ~40 degrees
input.DeNoise(); // Remove scanner speckle and compression artifacts
input.Contrast(); // Boost contrast on faded or washed-out text
input.Binarize(); // Convert to black/white with optimal threshold
input.EnhanceResolution(300); // Scale image to 300 DPI for recognition
var result = new IronTesseract().Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");
// IronOCR: explicit preprocessing pipeline
// Each filter targets a specific quality defect
using var input = new OcrInput();
input.LoadImage("low-quality-scan.jpg");
input.Deskew(); // Correct page rotation up to ~40 degrees
input.DeNoise(); // Remove scanner speckle and compression artifacts
input.Contrast(); // Boost contrast on faded or washed-out text
input.Binarize(); // Convert to black/white with optimal threshold
input.EnhanceResolution(300); // Scale image to 300 DPI for recognition
var result = new IronTesseract().Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");
Imports IronOcr
' IronOCR: explicit preprocessing pipeline
' Each filter targets a specific quality defect
Using input As New OcrInput()
input.LoadImage("low-quality-scan.jpg")
input.Deskew() ' Correct page rotation up to ~40 degrees
input.DeNoise() ' Remove scanner speckle and compression artifacts
input.Contrast() ' Boost contrast on faded or washed-out text
input.Binarize() ' Convert to black/white with optimal threshold
input.EnhanceResolution(300) ' Scale image to 300 DPI for recognition
Dim result = New IronTesseract().Read(input)
Console.WriteLine($"Confidence: {result.Confidence}%")
End Using
일반적인 경우, IronOCR는 파일 경로에서 직접 Read를 불러올 때 자동 전처리를 적용합니다 — 엔진은 품질 이슈를 감지하고 명시적인 필터 설정 없이 이를 수정합니다. 이미지 필터 튜토리얼은 특수 시나리오를 위한 전체 필터 세트 Sharpen, Dilate, Erode, Invert, ToGrayScale를 포함하여 다룹니다. 색상 보정 필터 와 방향 보정 기능은 비표준 색상 프로필이나 다각도 회전이 포함된 문서의 경우 파이프라인을 더욱 확장합니다.
PDF 지원 부재
PDF는 Enterprise 환경에서 가장 널리 사용되는 문서 형식입니다. 계약서, 송장, 스캔한 문서, 정부 양식 등이 PDF 파일 형식으로 도착합니다. Windows.Media.OCR은 PDF라는 개념을 지원하지 않으며 이미지 데이터만 처리합니다. PDF 문서의 OCR 처리를 위해서는 별도의 PDF 렌더링 라이브러리, 페이지별 래스터화, 그리고 결과물의 수동 조립이 필요합니다.
Windows.Media.OCR 접근 방식
API에 PDF 경로가 없습니다. Windows.Media.Ocr로 스캔된 PDF를 OCR하려면 개발자는 각각의 페이지를 별도의 PDF 렌더링 라이브러리(Windows에는 내장되어 있지 않음)를 사용하여 SoftwareBitmap로 렌더링하고, 페이지를 반복 처리하며, 페이지마다 RecognizeAsync을 호출하고, 결과를 수동으로 연결해야 합니다. 해당 렌더링 라이브러리 자체에는 추가적인 라이선스 및 배포 고려 사항이 있습니다. Windows.Media.Ocr 코드는 전체 구현에서 더 작은 부분을 차지합니다.
// Windows.Media.Ocr: no PDF support
// Requires external PDF renderer to rasterize pages before OCR
// Conceptual pattern — a PDF rendering library is not provided by Windows APIs
// Step 1: Use external PDF library to render page to bitmap (not shown)
// Step 2: Pass rendered bitmap to Windows OCR
// var bitmap = RenderPdfPageToBitmap(pdfPath, pageIndex); // external library required
var engine = OcrEngine.TryCreateFromUserProfileLanguages();
if (engine == null)
throw new Exception("No OCR language available");
// Step 3: Recognize the rasterized page
// var result = await engine.RecognizeAsync(bitmap);
// Step 4: Collect and concatenate results across all pages manually
// Windows.Media.Ocr: no PDF support
// Requires external PDF renderer to rasterize pages before OCR
// Conceptual pattern — a PDF rendering library is not provided by Windows APIs
// Step 1: Use external PDF library to render page to bitmap (not shown)
// Step 2: Pass rendered bitmap to Windows OCR
// var bitmap = RenderPdfPageToBitmap(pdfPath, pageIndex); // external library required
var engine = OcrEngine.TryCreateFromUserProfileLanguages();
if (engine == null)
throw new Exception("No OCR language available");
// Step 3: Recognize the rasterized page
// var result = await engine.RecognizeAsync(bitmap);
// Step 4: Collect and concatenate results across all pages manually
' Windows.Media.Ocr: no PDF support
' Requires external PDF renderer to rasterize pages before OCR
' Conceptual pattern — a PDF rendering library is not provided by Windows APIs
' Step 1: Use external PDF library to render page to bitmap (not shown)
' Step 2: Pass rendered bitmap to Windows OCR
' Dim bitmap = RenderPdfPageToBitmap(pdfPath, pageIndex) ' external library required
Dim engine = OcrEngine.TryCreateFromUserProfileLanguages()
If engine Is Nothing Then
Throw New Exception("No OCR language available")
End If
' Step 3: Recognize the rasterized page
' Dim result = Await engine.RecognizeAsync(bitmap)
' Step 4: Collect and concatenate results across all pages manually
외부 PDF 렌더링 단계 하나만으로도 "무료 내장" 솔루션으로 시작했던 것에 종속성, 별도의 학습 곡선, 그리고 추가적인 오류 발생 가능성이 더해집니다.
IronOCR 접근법
IronOCR PDF 파일을 기본적으로 읽습니다. 외부 렌더러도 없고, 래스터화 단계도 없고, 수동 페이지 조립도 필요 없습니다. 이미지 경로를 받는 동일한 IronTesseract.Read 메서드는 PDF 경로도 받습니다. .NET 에서 PDF OCR을 구현하는 방법 은 단 한 줄입니다.
// IronOCR: native PDF support — no external renderer needed
var text = new IronTesseract().Read("scanned-document.pdf").Text;
// Password-protected PDFs
using var input = new OcrInput();
input.LoadPdf("encrypted.pdf", Password: "secret");
var result = new IronTesseract().Read(input);
Console.WriteLine(result.Text);
// 검색 가능한 PDF output: make a scanned PDF text-searchable
var ocrResult = new IronTesseract().Read("scanned-archive.pdf");
ocrResult.SaveAsSearchablePdf("searchable-output.pdf");
// IronOCR: native PDF support — no external renderer needed
var text = new IronTesseract().Read("scanned-document.pdf").Text;
// Password-protected PDFs
using var input = new OcrInput();
input.LoadPdf("encrypted.pdf", Password: "secret");
var result = new IronTesseract().Read(input);
Console.WriteLine(result.Text);
// 검색 가능한 PDF output: make a scanned PDF text-searchable
var ocrResult = new IronTesseract().Read("scanned-archive.pdf");
ocrResult.SaveAsSearchablePdf("searchable-output.pdf");
Imports IronOcr
' IronOCR: native PDF support — no external renderer needed
Dim text As String = New IronTesseract().Read("scanned-document.pdf").Text
' Password-protected PDFs
Using input As New OcrInput()
input.LoadPdf("encrypted.pdf", Password:="secret")
Dim result = New IronTesseract().Read(input)
Console.WriteLine(result.Text)
End Using
' 검색 가능한 PDF output: make a scanned PDF text-searchable
Dim ocrResult = New IronTesseract().Read("scanned-archive.pdf")
ocrResult.SaveAsSearchablePdf("searchable-output.pdf")
검색 가능한 PDF 기능은 원본 스캔 이미지 위에 텍스트 레이어를 삽입하여 시각적 충실도를 유지하면서 전체 텍스트 검색 및 복사 붙여넣기가 가능한 PDF를 생성합니다. 이는 문서 관리 시스템 및 규정 준수 아카이브에 공통적으로 요구되는 사항입니다. Windows.Media.Ocr은 API의 어떤 계층에서도 이러한 출력을 생성할 수 없습니다.
API 매핑 참조
| Windows.Media.Ocr | IronOCR에 상응하는 |
|---|---|
OcrEngine.TryCreateFromLanguage(lang) |
new IronTesseract() with ocr.Language = OcrLanguage.X |
OcrEngine.TryCreateFromUserProfileLanguages() |
new IronTesseract() (기본 언어 자동 해결) |
engine.RecognizeAsync(softwareBitmap) |
ocr.Read("image.jpg") or ocr.Read(ocrInput) |
OcrResult.Text |
OcrResult.Text |
OcrResult.Lines |
OcrResult.Lines (확장 메타데이터 포함) |
OcrLine.Text |
OcrResult.Lines[i].Text |
OcrLine.Words |
OcrResult.Words (경계 상자 + 신뢰도 포함) |
OcrWord.BoundingRect |
OcrResult.Words[i].X, .Y, .Width, .Height |
BitmapDecoder.CreateAsync(stream) |
input.LoadImage(stream) via OcrInput |
StorageFile.GetFileFromPathAsync(path) |
ocr.Read("path") directly |
| 해당 내용이 없습니다 (PDF는 지원되지 않습니다). | ocr.Read("document.pdf") |
| 해당 내용이 없습니다 (PDF는 지원되지 않습니다). | input.LoadPdf("file.pdf", Password: "x") |
| 해당 PDF 파일 없음 (검색 가능한 PDF 파일 없음) | result.SaveAsSearchablePdf("output.pdf") |
| 동등한 기능 없음 (전처리 없음) | input.Deskew(), input.DeNoise(), input.Contrast() |
| 해당되는 언어가 없습니다 (다국어 지원 없음). | ocr.AddSecondaryLanguage(OcrLanguage.X) |
| 동등한 것이 없음 (신뢰할 수 없음) | result.Confidence, word.Confidence |
Teams가 Windows.Media.OCR에서IronOCR로 전환을 고려할 때
해당 애플리케이션은 Windows 데스크톱 환경의 요구 사항을 충족하지 못합니다.
가장 흔한 원인은 Windows 이외의 배포 대상을 도입하는 요구 사항 변경입니다. Windows 내부 도구로 시작한 데스크톱 유틸리티가 웹 서비스, Docker기반 마이크로서비스 또는 클라우드 함수로 승격됩니다. 그 순간 Windows.Media.Ocr이 차단 요소가 됩니다. 대상 플랫폼에 API가 존재하지 않기 때문에 OCR 구성 요소를 완전히 다시 작성해야 합니다. 포팅, 호환성 래퍼 또는 문제를 해결할 수 있는 조건부 컴파일 플래그가 없습니다.IronOCR미리 계획했던 팀은 이번 재작업의 영향을 받지 않습니다.
설치된 팩에 비해 언어 요구 사항이 초과되었습니다.
문서 처리 파이프라인은 종종 범위를 확장합니다. 영문 송장을 처리하도록 구축된 시스템이 프랑스어, 독일어, 아랍어 또는 일본어 문서를 처리해야 하는 요구 사항을 갖게 되었습니다. Windows.Media.OCR을 사용하여 해당 언어를 지원하려면 개발자 컴퓨터, 테스트 VM, 프로덕션 서버 및 모든 컨테이너를 포함한 모든 배포 대상에 걸쳐 운영 체제 언어 팩 설치를 조정해야 합니다. 그룹 정책으로 관리되는 환경이나 운영 체제 사용량이 최소화된 클라우드 VM에서는 이러한 조정이 비현실적입니다. IronOCR의 NuGet 기반 언어 팩은 애플리케이션과 함께 배포되며 운영 체제와의 별도 협의가 필요하지 않습니다.
PDF 처리 기능이 서비스 범위에 추가되었습니다.
원래 요구 사항이 "평판 스캐너에서 이미지를 OCR 처리"하는 것이었을 때는 Windows.Media.Ocr이 작동합니다. 요구 사항이 "보관소에 있는 스캔된 PDF 파일들의 누적분도 처리해야 한다"는 것으로 확대되면 두 번째 라이브러리가 목록에 추가됩니다. 해당 라이브러리는 추가적인 의존성, 추가적인 라이선스 고려 사항, 그리고 추가적인 오류 발생 가능성을 초래합니다. 이미지 OCR과 PDF OCR 기능을 통합 API에서 모두 필요로 하는 팀은IronOCR통해 처음부터 두 개의 라이브러리를 사용하는 아키텍처를 없앨 수 있다는 것을 알게 됩니다.
실제 입력값에 따라 정확도가 떨어집니다.
제어된 스캔 환경을 통해 깨끗한 이미지를 얻을 수 있습니다. 실제 환경의 입력(휴대폰으로 촬영한 사진, 약간 기울어진 평판 스캐너 스캔 이미지, 오래된 팩스 수신 문서, 복사 자료 등)은 Windows.Media.OCR 내에서 해결할 수 없는 정확도 저하를 초래합니다. 고객들이 문자 메시지를 받지 못했다는 불만을 제기하기 시작하면서, 관련 팀들은 이전에 생략했던 사전 처리 단계가 필수적인 단계가 되었다는 사실을 깨닫게 됩니다. Windows 이미징 API를 사용하여 전처리 기능을 개조하는 것은 상당한 개발 노력이 필요하며, 이로 인해 솔루션은 Windows 전용으로 유지됩니다. IronOCR의 전처리 파이프라인은 이미 갖춰져 있습니다.
서버 배포 문제가 제기됩니다
Windows.Media.Ocr 문서에서는 API를 클라이언트 애플리케이션용으로 명시적으로 안내하고 있습니다. 서버 환경에서 실행하려면(예: 사용자가 업로드한 문서를 처리하는 ASP.NET 애플리케이션 또는 문서 대기열을 사용하는 Windows 서비스) 데스크톱 환경이 설치된Windows Server환경이 필요하며, 이는 Linux컨테이너보다 더 무겁고 비용이 많이 드는 VM 프로필입니다. 인프라 팀에서 호스팅 비용을 줄이기 위해 OCR 워커를 Linux인스턴스에서 실행할 수 있는지 문의할 때, Windows.Media.Ocr을 사용하는 경우 답은 '아니요'입니다.
일반적인 마이그레이션 고려사항
프로젝트 파일 TFM 변경
Windows.Media.Ocr은 프로젝트 파일에 Windows 전용 TFM (net8.0-windows10.0.19041.0 또는 유사)을 필요로 합니다. 크로스 플랫폼 지원에 필요한 해당 종속성을 제거하려면 TFM 접미사를 제거해야 합니다. IronOCR는 Windows 전용 접미사가 없는 net6.0, net8.0, net9.0를 타겟팅합니다. 마이그레이션 시 프로젝트의 다른 WinRT API 종속성이 Windows TFM을 필요로 하지 않는지 확인하십시오. 다른 Windows 플랫폼 기능(셸 통합, Windows 알림 등)은 플랫폼 검사 뒤에 추상화해야 할 수 있습니다.
비동기에서 동기로의 마이그레이션
Windows.Media.Ocr은 완전히 비동기식입니다 — RecognizeAsync은 WinRT 상호 운용성을 통해 IAsyncOperation<OcrResult>을 반환하며 이는 Task<OcrResult>에 매핑됩니다. IronOCR는 동기 및 비동기 경로를 모두 제공합니다. 동기식 ocr.Read("file.jpg")은 다단계 await 체인을 직접 대체합니다. OCR 호출이 백그라운드 서비스 또는 작업 기반 파이프라인 내에 있는 서버 애플리케이션의 경우에도 비동기 경로를 사용할 수 있습니다. 어떤 방식이든 6단계 이상의 비동기 작업을 1회 호출로 전환하는 것은 간단합니다.
// Before: Windows.Media.Ocr — 6+ await operations
var file = await StorageFile.GetFileFromPathAsync(imagePath);
using var stream = await file.OpenAsync(FileAccessMode.Read);
var decoder = await BitmapDecoder.CreateAsync(stream);
var bitmap = await decoder.GetSoftwareBitmapAsync();
var engine = OcrEngine.TryCreateFromUserProfileLanguages();
var winResult = await engine.RecognizeAsync(bitmap);
string text = winResult.Text;
// After:IronOCR— 1 call, same result, any platform
string text = new IronTesseract().Read(imagePath).Text;
// Before: Windows.Media.Ocr — 6+ await operations
var file = await StorageFile.GetFileFromPathAsync(imagePath);
using var stream = await file.OpenAsync(FileAccessMode.Read);
var decoder = await BitmapDecoder.CreateAsync(stream);
var bitmap = await decoder.GetSoftwareBitmapAsync();
var engine = OcrEngine.TryCreateFromUserProfileLanguages();
var winResult = await engine.RecognizeAsync(bitmap);
string text = winResult.Text;
// After:IronOCR— 1 call, same result, any platform
string text = new IronTesseract().Read(imagePath).Text;
Imports Windows.Storage
Imports Windows.Graphics.Imaging
Imports Windows.Media.Ocr
' Before: Windows.Media.Ocr — 6+ await operations
Dim file As StorageFile = Await StorageFile.GetFileFromPathAsync(imagePath)
Using stream = Await file.OpenAsync(FileAccessMode.Read)
Dim decoder As BitmapDecoder = Await BitmapDecoder.CreateAsync(stream)
Dim bitmap = Await decoder.GetSoftwareBitmapAsync()
Dim engine = OcrEngine.TryCreateFromUserProfileLanguages()
Dim winResult = Await engine.RecognizeAsync(bitmap)
Dim text As String = winResult.Text
End Using
' After: IronOCR— 1 call, same result, any platform
Dim text As String = New IronTesseract().Read(imagePath).Text
언어 팩 대체
이전에 OcrEngine.TryCreateFromLanguage(new Windows.Globalization.Language("fr-FR"))를 통해 해결된 각 언어에 대해 해당IronOCR언어 팩을 설치하고 ocr.Language = OcrLanguage.French을 설정합니다. IronOCR 언어 카탈로그에는 사용 가능한 125개 이상의 팩이 모두 나열되어 있습니다. 언어 코드는 BCP-47 태그에서 OcrLanguage 열거형으로 직관적으로 매핑됩니다.
널 엔진 핸들링 제거
Windows.Media.Ocr은 모든 엔진 생성 호출에서 null 검사를 요구합니다.IronOCR구성 또는 초기화 실패 시 null을 반환하는 대신 구조화된 예외를 발생시킵니다. null 체크 가드 절을 제거하고 필요한 경우 표준 예외 처리로 대체하십시오. 그 결과 "언어를 사용할 수 없음" 오류 모드가 없는 더욱 깔끔한 통화 환경이 조성됩니다.
IronOCR의 추가 기능
IronOCR Windows.Media.OCR의 기능을 직접적으로 대체하는 기능 외에도 Windows.Media.OCR에는 없는 기능을 제공합니다.
.NET 호환성 및 미래 준비
IronOCR 플랫폼별 접미사가 없는 표준 TFM에서 .NET 6, .NET 7, .NET 8 및 .NET 9를 지원하며, 레거시 애플리케이션 지원을 위해 .NET Framework 4.6.2부터 4.8까지 지원합니다. 이 라이브러리는 .NET 릴리스 주기에 맞춰 정기적으로 업데이트되며, 2026년에는 .NET 10 지원이 로드맵에 포함되어 있습니다. Windows.Media.Ocr은 .NET 5 이후 WinRT 상호 운용성을 지원하는 모든 .NET 버전에서 사용할 수 있지만, Windows TFM 요구 사항으로 인해 Windows 대상 프로젝트에만 적용할 수 있습니다. .NET의 크로스 플랫폼 개발이 성숙해짐에 따라, 더 많은 팀이 Linux컨테이너와 클라우드 함수를 주요 배포 대상으로 삼으면서, Windows.Media.Ocr의 TFM 제약 조건은 사소한 문제가 아니라 더욱 두드러진 아키텍처적 약점으로 작용하게 되었습니다.
결론
Windows.Media.Ocr은 특정한 틈새시장을 공략하는 프로그램입니다. 윈도우 10/11 데스크톱 애플리케이션으로, 다른 플랫폼 지원은 고려하지 않고 기본적인 이미지 OCR 기능만 제공하며, 개발 예산은 0달러입니다. 이러한 틈새시장 내에서는 충분히 제 역할을 해냅니다. 해당 특정 분야를 벗어나 배포 대상이 Linux컨테이너, 클라우드 함수, 다국어 요구 사항이 있는 서버 또는 PDF를 처리하는 문서 파이프라인인 경우에는 대상 플랫폼에 API가 존재하지 않으므로 코드를 교체해야 합니다.
근본적인 문제는 Windows.Media.Ocr의 제한 사항이 우연한 것이 아니라 아키텍처적인 문제라는 점입니다. 플랫폼 종속성은 끌 수 있는 설정 플래그가 아닙니다. 해당 기능은 API가 의존하는 WinRT 런타임에 내장되어 있습니다. 언어 지원 여부는 빌드 시점에 포함해야 하는 항목이 아니며, 운영체제 관리자의 역할입니다. PDF 지원은 NuGet 패키지로 추가해야 할 누락된 기능이 아닙니다. API 표면에서 완전히 사라져 있습니다. 각각의 제약 조건에는 이를 보완하기 위한 별도의 시스템이 필요하며, 각 보완 시스템은 플랫폼 종속성을 다시 도입합니다.
IronOCR 플랫폼, 언어, 전처리 및 PDF라는 네 가지 제약 조건을 하나의 패키지로 모두 해결합니다. $999 진입가는 $0가 아니며, 제어된 입력 및 영어 전용 문서가 있는 Windows 전용 데스크톱 유틸리티에는 Windows.Media.Ocr이 유효한 선택으로 남아 있습니다. 더 넓은 요구 사항을 가진 프로젝트의 경우, Windows.Media.Ocr의 제약 조건을 중심으로 빌드하는 비용은 프로젝트가 첫 번째 프로덕션 배포에 도달하기 전에IronOCR라이선스 비용을 초과할 수 있습니다.
실질적인 테스트는 간단합니다. 배포 대상이 Linux, Docker또는 클라우드 함수일 수 있고, 입력 문서가 PDF이거나 기본 OS 패키지에 포함되지 않은 언어로 제공될 수 있다면 Windows.Media.Ocr은 적합하지 않은 기반입니다. 프로젝트 중간에 적절한 도구를 선택하는 것이 처음부터 제대로 된 도구를 선택하는 것보다 훨씬 더 비용이 많이 든다는 사실을 깨닫는 것.IronOCR기능 세트를 특정 요구 사항과 비교하여 평가한 후 구매 여부를 결정하는 것이 가장 효율적인 방법입니다.
자주 묻는 질문
Windows.Media.Ocr이란 무엇인가요?
Windows.Media.Ocr은 개발자와 기업에서 이미지와 문서에서 텍스트를 추출하는 데 사용하는 OCR 솔루션입니다. 이 솔루션은 .NET 애플리케이션 개발용 IronOCR과 함께 평가된 여러 OCR 옵션 중 하나입니다.
IronOCR은 .NET 개발자용 Windows.Media.Ocr과 어떻게 다른가요?
IronOCR은 IronTesseract를 핵심 엔진으로 사용하는 NuGet 네이티브 .NET OCR 라이브러리입니다. Windows.Media.Ocr에 비해 배포가 간단하고(SDK 설치 프로그램 없음), 정액제 요금이 적용되며, COM 인터롭이나 클라우드 종속성이 없는 깔끔한 C# API를 제공합니다.
IronOCR이 Windows.Media.Ocr보다 설치가 더 쉬운가요?
IronOCR은 단일 NuGet 패키지를 통해 설치됩니다. SDK 설치 프로그램, 복사할 라이선스 파일, 등록할 COM 구성 요소 또는 관리해야 할 별도의 런타임 바이너리가 없습니다. 전체 OCR 엔진이 패키지에 번들로 제공됩니다.
Windows.Media.Ocr과 IronOCR 사이에는 어떤 정확도 차이가 있나요?
IronOCR은 표준 비즈니스 문서, 송장, 영수증, 스캔 양식에 대해 높은 인식 정확도를 달성합니다. 품질이 많이 저하된 문서나 일반적이지 않은 스크립트의 경우 정확도는 소스 품질에 따라 달라집니다. IronOCR에는 이미지 전처리 필터가 포함되어 있어 저품질 입력에 대한 인식률을 향상시킵니다.
IronOCR은 PDF 텍스트 추출을 지원하나요?
예. IronOCR은 한 번의 호출로 원본 PDF와 스캔한 PDF 이미지 모두에서 텍스트를 추출합니다. 또한 여러 페이지의 TIFF 파일, 이미지, 스트림도 지원합니다. 스캔한 PDF의 경우 OCR은 페이지별 결과 개체를 사용하여 페이지별로 적용됩니다.
Windows.Media.Ocr 라이선싱은 IronOCR과 어떻게 다른가요?
IronOCR은 페이지당 또는 스캔당 요금이 없는 정액제 영구 라이선스를 사용합니다. 대량의 문서를 처리하는 조직은 문서 양에 관계없이 동일한 라이선스 비용을 지불합니다. 자세한 내용과 볼륨 가격은 IronOCR 라이선스 페이지에서 확인할 수 있습니다.
IronOCR 어떤 언어를 지원하나요?
IronOCR은 별도의 NuGet 언어 팩을 통해 127개 언어를 지원합니다. 언어를 추가하려면 '닷넷 추가 패키지 IronOcr.Languages.{Language}' 명령 하나만 있으면 됩니다. 수동으로 파일을 배치하거나 경로를 구성할 필요가 없습니다.
.NET 프로젝트에 IronOCR 설치하는 방법은 무엇인가요?
NuGet을 통해 설치합니다: 패키지 관리자 콘솔에서 '설치-패키지 IronOcr' 또는 CLI에서 '닷넷 추가 패키지 IronOcr'을 실행합니다. 추가 언어 팩도 같은 방법으로 설치됩니다. 기본 SDK 인스톨러가 필요하지 않습니다.
IronOCR은 Windows.Media.Ocr과 달리 Docker 및 컨테이너화된 배포에 적합한가요?
예. IronOCR은 NuGet 패키지를 통해 Docker 컨테이너에서 작동합니다. 라이선스 키는 환경 변수를 통해 설정됩니다. OCR 엔진 자체에는 라이선스 파일, SDK 경로 또는 볼륨 마운트가 필요하지 않습니다.
구매하기 전에 Windows.Media.Ocr과 비교하여 IronOCR을 사용해 볼 수 있나요?
예. IronOCR 평가판 모드는 문서를 처리하고 출력물에 워터마크 오버레이가 포함된 OCR 결과를 반환합니다. 라이선스를 구매하기 전에 자신의 문서에서 정확성을 확인할 수 있습니다.
IronOCR은 텍스트 추출과 함께 바코드 판독을 지원하나요?
IronOCR은 텍스트 추출과 OCR에 중점을 둡니다. 바코드 판독을 위해 Iron Software는 동반 라이브러리로 IronBarcode를 제공합니다. 두 가지 모두 개별적으로 또는 Iron Suite 번들의 일부로 사용할 수 있습니다.
Windows.Media.Ocr에서 IronOCR로 쉽게 마이그레이션할 수 있나요?
Windows.Media.Ocr에서 IronOCR로의 마이그레이션에는 일반적으로 초기화 시퀀스를 IronTesseract 인스턴스화로 대체하고, COM 수명 주기 관리를 제거하고, API 호출을 업데이트하는 작업이 포함됩니다. 대부분의 마이그레이션은 코드 복잡성을 크게 줄여줍니다.

