iOS OCR 라이브러리 (무료 및 유료 도구 비교)
PaddleSharp(Sdcb.PaddleOCR)는 코드가 실제로 실행하는 OCR 엔진에서 세 단계의 추상화 계층 위에 위치합니다. Baidu는 신경망 모델을 학습시키고, RapidOCR은 이를 경량 추론을 위해 재구성하며, PaddleSharp는 이를 다시 .NET 에서 사용할 수 있도록 래핑합니다. 각 계층마다 유지 관리 종속성이 추가되며, CJK 이외의 언어가 필요하거나, PDF를 입력으로 사용해야 하거나, CUDA 없이 프로덕션 환경에 배포해야 하는 순간 이 체인의 한계가 드러납니다. 이 비교 분석에서는 해당 아키텍처가 어떤 부분에서 이점을 제공하고, 어떤 부분에서 .NET 팀이 사전에 예상하지 못하는 비용을 발생시키는지 살펴봅니다.
패들샤프 OCR 이해하기
PaddleSharp는 Baidu의 PaddleOCR 딥러닝 프레임워크를 감싸는 .NET 래퍼로, NuGet에 Sdcb.PaddleOCR로 게시되었습니다. PaddleOCR은 기존의 OCR 알고리즘 대신 3단계 신경망 파이프라인을 적용합니다. 첫 번째 단계는 감지 모델이 이미지에서 텍스트 영역을 찾고, 두 번째 단계는 분류 모델이 텍스트 방향을 판단하며, 세 번째 단계는 인식 모델이 각 영역을 텍스트로 변환합니다. 각 단계는 별도의 모델 파일이므로, 독립적으로 다운로드하고 구성해야 합니다.
이 래퍼는 Python 없이도 PaddlePaddle 추론 기능을 .NET 에서 사용할 수 있도록 개발되었습니다. 기술적으로는 그 목표가 달성되지만, 그 대가로 OpenCvSharp 이미지 처리 라이브러리(그 자체로 플랫폼별 런타임 패키지 필요), PaddleInference 네이티브 런타임, 그리고 모델 파일 자체를 포함하는 종속성 스택을 감수해야 합니다. 윈도우에서는 글자를 인식하기 전에 최소 4개의 NuGet 패키지를 설치해야 합니다.
PaddleSharp의 주요 아키텍처 특징:
- 래퍼 깊이: 3단계 — PaddlePaddle(바이두) → PaddleOCR 모델 → Sdcb.PaddleSharp .NET 바인딩
- 모델 관리: 탐지, 분류 및 인식 모델은 각각 별도의 다운로드 파일입니다(중국어 V3 세트의 경우 각각 약 3MB, 2MB, 10MB). 경로와 버전을 수동으로 관리합니다
- OpenCV 의존성: 이미지 로드를 위해
OpenCvSharp4가 필요합니다; 플랫폼 전환은OpenCvSharp4.runtime.*패키지를 교체해야 합니다 - 언어 능력: 중국어와 영어가 주력 언어입니다. 기타 언어 지원은 PaddleOCR에서 제공하고 유지 관리하는 모델 팩으로 제한됩니다.
- GPU 가속: 호스트에 호환 가능한 CUDA 툴킷과 cuDNN 설치가 필요한
Sdcb.PaddleInference.runtime.win64.cuda패키지를 통한 네이티브 CUDA 지원 - CPU 성능 저하: GPU가 없으면 추론 속도가 CPU에 최적화된 대안보다 느립니다. 이미지당 500~1500ms가 소요되는 반면, 딥러닝에 최적화되지 않은 엔진은 100~400ms가 소요됩니다.
- 커뮤니티 규모: 소규모 영어 사용 커뮤니티; 대부분의 문서, Stack Overflow 답변 및 GitHub 이슈는 중국어로 되어 있습니다.
3단계 추론 설정
간단한 텍스트 추출 작업을 위해 PaddleSharp를 설정하려면 모델의 세 단계를 모두 연결해야 합니다.
// Simplified — see Sdcb.PaddleOCR documentation for full API
using Sdcb.PaddleOCR;
using Sdcb.PaddleOCR.Models;
using OpenCvSharp;
public class PaddleOcrService
{
private readonly PaddleOcrAll _ocr;
public PaddleOcrService()
{
// Three separate models, each downloaded independently
var detModel = LocalFullModels.ChineseV3.DetectionModel;
var clsModel = LocalFullModels.ChineseV3.ClassifierModel;
var recModel = LocalFullModels.ChineseV3.RecognitionModel;
// GPU config: set GpuDeviceId = 0 and install CUDA runtime packages
_ocr = new PaddleOcrAll(detModel, clsModel, recModel);
}
public string ExtractText(string imagePath)
{
// OpenCV required for image loading — not System.Drawing
using var image = Cv2.ImRead(imagePath);
var result = _ocr.Run(image);
// Manual sort by position; no automatic reading-order guarantee
return string.Join("\n", result.Regions
.OrderBy(r => r.Rect.Center.Y)
.ThenBy(r => r.Rect.Center.X)
.Select(r => r.Text));
}
}
// Simplified — see Sdcb.PaddleOCR documentation for full API
using Sdcb.PaddleOCR;
using Sdcb.PaddleOCR.Models;
using OpenCvSharp;
public class PaddleOcrService
{
private readonly PaddleOcrAll _ocr;
public PaddleOcrService()
{
// Three separate models, each downloaded independently
var detModel = LocalFullModels.ChineseV3.DetectionModel;
var clsModel = LocalFullModels.ChineseV3.ClassifierModel;
var recModel = LocalFullModels.ChineseV3.RecognitionModel;
// GPU config: set GpuDeviceId = 0 and install CUDA runtime packages
_ocr = new PaddleOcrAll(detModel, clsModel, recModel);
}
public string ExtractText(string imagePath)
{
// OpenCV required for image loading — not System.Drawing
using var image = Cv2.ImRead(imagePath);
var result = _ocr.Run(image);
// Manual sort by position; no automatic reading-order guarantee
return string.Join("\n", result.Regions
.OrderBy(r => r.Rect.Center.Y)
.ThenBy(r => r.Rect.Center.X)
.Select(r => r.Text));
}
}
Imports Sdcb.PaddleOCR
Imports Sdcb.PaddleOCR.Models
Imports OpenCvSharp
Public Class PaddleOcrService
Private ReadOnly _ocr As PaddleOcrAll
Public Sub New()
' Three separate models, each downloaded independently
Dim detModel = LocalFullModels.ChineseV3.DetectionModel
Dim clsModel = LocalFullModels.ChineseV3.ClassifierModel
Dim recModel = LocalFullModels.ChineseV3.RecognitionModel
' GPU config: set GpuDeviceId = 0 and install CUDA runtime packages
_ocr = New PaddleOcrAll(detModel, clsModel, recModel)
End Sub
Public Function ExtractText(imagePath As String) As String
' OpenCV required for image loading — not System.Drawing
Using image = Cv2.ImRead(imagePath)
Dim result = _ocr.Run(image)
' Manual sort by position; no automatic reading-order guarantee
Return String.Join(vbLf, result.Regions _
.OrderBy(Function(r) r.Rect.Center.Y) _
.ThenBy(Function(r) r.Rect.Center.X) _
.Select(Function(r) r.Text))
End Using
End Function
End Class
생성자만으로도 실질적인 작업을 수행합니다: 디스크에서 모델 바이너리를 로드하고 추론 엔진을 초기화합니다. 초기화 비용은 PaddleOcrAll 인스턴스당 한 번만 지불되며, 객체를 생성하는 데 비용이 많이 들기 때문에 서비스 지향 .NET 응용 프로그램에서 주의 깊은 생명주기 관리가 필요합니다.
IronOCR 이해하기
IronOCR 최적화된 Tesseract 5 엔진과 그 위에 구축된 자동 전처리 파이프라인을 기반으로 하는 .NET 용 상용 OCR 라이브러리입니다. 외부 모델 파일, 네이티브 바이너리 구성, 추가 이미지 처리 라이브러리 종속성 없이 단일 NuGet 패키지로 설치됩니다. 설계 목표는 대부분의 다른 .NET OCR 옵션에서 나타나는 "설치"와 "정확한 텍스트 출력" 사이의 간극을 없애는 것입니다.
IronOCR의 주요 특징:
- 단일 패키지 배포:
dotnet add package IronOcr— 모델 다운로드 필요 없음, tessdata 폴더 필요 없음, OpenCV 필요 없음 - 자동 전처리: 기울기 보정, 노이즈 제거, 대비 향상, 이진화 및 해상도 정규화가 이미지 입력 시 자동으로 수행됩니다. 필요한 경우 명시적인 전처리 필터를 사용할 수 있습니다
- 네이티브 PDF 지원: 스캔한 PDF 파일과 텍스트 레이어 PDF 파일 모두 직접 허용됩니다. 암호로 보호된 PDF에는 매개변수 하나가 필요합니다.
- 125개 이상의 언어: NuGet 언어 팩(예:
IronOcr.Languages.ChineseSimplified)으로 제공되며, 다른 패키지 종속성과 동일한 방식으로 관리됩니다. - 구조화된 출력: 결과는 페이지, 단락, 줄, 단어 및 개별 문자 경계 상자와 신뢰도 점수를 표시합니다.
- 스레드 안전: 여러
IronTesseract인스턴스가 공유 상태 없이 동시에 실행됩니다; 배치 작업을 병렬화하는 것은Parallel.ForEach호출입니다 - 가격: $999 영구 (Lite, 1 개발자), $1,499 (Plus, 3 개발자), $2,999 (Professional, 10 개발자), $5,999 (Unlimited)
기능 비교
| 기능 | 패들샤프 OCR | IronOCR |
|---|---|---|
| NuGet 패키지가 필요합니다. | 최소 3~4개 | 1 |
| 모델 관리 | 설명서 (3개의 별도 파일) | None |
| PDF 입력 | 아니요 (변환 필요) | 내부 지원 |
| 단어 수 | ~10~20 | 125+ |
| GPU 가속 | 예 (CUDA) | CPU 최적화 |
| 전처리 | 수동 (OpenCV) | 자동 |
| 가격 | 무료 (Apache 2.0) | $5,999 영구 |
상세 기능 비교
| 기능 | 패들샤프 OCR | IronOCR |
|---|---|---|
| 설정 및 배포 | ||
| NuGet 패키지가 필요합니다. | 3~4세 | 1 |
| 모델 파일 다운로드 | 예 (3개 파일, 총 약 15MB) | 아니요 |
| OpenCV 종속성 | 필요함 | None |
| GPU용 CUDA/cuDNN | GPU 모드에 필요합니다. | 적용 안 됨 |
| Docker 배포 | 복잡한 (네이티브 런타임) | 단층 추가 |
| 에어갭 배포 | 예 (모델 다운로드 후) | 예 |
| 텍스트 인식 | ||
| 중국어/일본어/한국어 정확도 | 높음 (주요 초점) | 높음 |
| 라틴 문자 정확도 | 보통 | 높음 |
| 필적 | 제한적 | 지원됨 |
| 저품질 스캔 처리 | 수동 전처리 필요 | 자동 |
| 자동 기울기 보정 | 아니요 | 예 |
| 자동 노이즈 제거 | 아니요 | 예 |
| 입력 소스 | ||
| 이미지 파일 | 예 (OpenCV를 통해) | 예 |
| PDF 파일(기본 형식) | 아니요 | 예 |
| 비밀번호로 보호된 PDF | 아니요 | 예 |
| 스트림과 바이트 배열 | OpenCV를 통해 | 예 |
| 여러 페이지로 구성된 TIFF 파일 | OpenCV를 통해 | 예 |
| 산출 | ||
| 일반 텍스트 | 예 | 예 |
| 검색 가능한 PDF | 아니요 | 예 |
| hOCR | 아니요 | 예 |
| 단어 수준 경계 상자 | 예 | 예 |
| 신뢰도 점수 | 예 | 예 |
| 구조화된 페이지/줄/단어 계층 구조 | 부분적 (일부 지역만 해당) | 전체 |
| 언어 지원 | ||
| 언어 개수 | ~10~20 | 125+ |
| 언어 설치 방법 | 모델 팩 다운로드 | NuGet 패키지 |
| 혼합 언어 문서 | 제한적 | 예 |
| 맞춤형 언어 교육 | 예 (패들패들) | 예 |
| 플랫폼 지원 | ||
| Windows | 예 | 예 |
| Linux | 예 (복잡한 설정) | 예 |
| macOS | 제한적 | 예 |
| Docker | 예 (네이티브 런타임 사용 시) | 예 |
| AWS 람다 | 복잡함 | 예 |
| 성능 | ||
| CPU 단일 이미지 | 500~1500ms | 100~400ms |
| GPU 단일 이미지 | 100~300ms | 적용 안 됨 |
| 메모리(CPU 모드) | 더 높은 | 보통 |
| OCR 중 바코드 판독 | 아니요 | 예 |
| 상업적 준비성 | ||
| 상업용 라이선스 | Apache 2.0 | 개발자당 영구적 |
| 지원 채널 | GitHub 이슈 | 이메일 지원 |
| 영문 문서 | 부족한 | 방대한 문서, 튜토리얼 및 사용 설명서 |
| 생산 사례 연구 | 희귀함 (.NET 관련) | 문서화됨 |
추상화 깊이와 유지 관리 위험
PaddleSharp는 이 범주에서 유일하게 세 가지 별도의 상위 프로젝트를 필수 조건으로 실행하는 .NET OCR 옵션입니다. 그러한 깊이감이 제작팀에게 가장 큰 위험 요소입니다.
패들샤프 접근법
실제 의존성 체인은 다음과 같습니다.
- Baidu PaddlePaddle — 기반이 되는 딥러닝 프레임워크. 모델 형식 및 추론 API는 여기에 정의되어 있습니다.
- PaddleOCR — 바이두의 모델 학습 프로젝트로, 객체 탐지, 분류 및 인식 모델의 가중치를 생성합니다.
- Sdcb.PaddleSharp — PaddleInference 네이티브 라이브러리를 호출하고 모델 로딩 API를 래핑하는 .NET 바인딩 계층입니다.
각 계층은 고유한 릴리스 주기, 호환성을 깨뜨리는 변경 이력 및 커뮤니티를 가지고 있습니다. Baidu가 PaddlePaddle 추론 API를 업데이트하면 바인딩 레이어도 그에 맞춰 업데이트되어야 합니다. PaddleOCR 버전 간에 모델 형식이 변경되면 PaddleSharp의 모델 다운로드 경로와 로딩 코드도 업데이트해야 합니다. .NET 팀의 경우, 이러한 문제는 배포가 실패하기 전까지는 보이지 않습니다.
초기화 비용을 간략하게 나타낸 그림:
// Simplified — see Sdcb.PaddleOCR documentation for full API
// This is not one line of setup; it represents several coordinated decisions:
// - Which model version to use (ChineseV3, V4, etc.)
// - Whether models are local files or downloaded on first use
// - Which inference backend (CPU, MKL, GPU)
// - Which OpenCvSharp runtime package matches the deployment OS
var detModel = LocalFullModels.ChineseV3.DetectionModel; // Version-specific
var clsModel = LocalFullModels.ChineseV3.ClassifierModel; // Version-specific
var recModel = LocalFullModels.ChineseV3.RecognitionModel; // Version-specific
var ocr = new PaddleOcrAll(detModel, clsModel, recModel);
// If a newer model format is released, these names and classes may change
// Simplified — see Sdcb.PaddleOCR documentation for full API
// This is not one line of setup; it represents several coordinated decisions:
// - Which model version to use (ChineseV3, V4, etc.)
// - Whether models are local files or downloaded on first use
// - Which inference backend (CPU, MKL, GPU)
// - Which OpenCvSharp runtime package matches the deployment OS
var detModel = LocalFullModels.ChineseV3.DetectionModel; // Version-specific
var clsModel = LocalFullModels.ChineseV3.ClassifierModel; // Version-specific
var recModel = LocalFullModels.ChineseV3.RecognitionModel; // Version-specific
var ocr = new PaddleOcrAll(detModel, clsModel, recModel);
// If a newer model format is released, these names and classes may change
' Simplified — see Sdcb.PaddleOCR documentation for full API
' This is not one line of setup; it represents several coordinated decisions:
' - Which model version to use (ChineseV3, V4, etc.)
' - Whether models are local files or downloaded on first use
' - Which inference backend (CPU, MKL, GPU)
' - Which OpenCvSharp runtime package matches the deployment OS
Dim detModel = LocalFullModels.ChineseV3.DetectionModel ' Version-specific
Dim clsModel = LocalFullModels.ChineseV3.ClassifierModel ' Version-specific
Dim recModel = LocalFullModels.ChineseV3.RecognitionModel ' Version-specific
Dim ocr As New PaddleOcrAll(detModel, clsModel, recModel)
' If a newer model format is released, these names and classes may change
여기서 버전 민감도는 실제로 존재합니다. 2.x로 고정된 팀이 더 최신 모델에 접근하기 위해 업그레이드해야 한다면 바인딩 레이어에서 API 변경이 발생할 것입니다. 상위 모델 파일은 주요 PaddleOCR 릴리스 간에 하위 호환성을 지원하지 않습니다.
IronOCR 접근법
IronOCR 엔진과 모든 종속성을 NuGet 패키지에 포함하여 제공합니다. 선택해야 할 모델 버전도 없고, 구성해야 할 추론 백엔드도 없으며, 동기화해야 할 보조 라이브러리도 없습니다.
// One package: dotnet add package IronOcr
// 아니요 model downloads. 아니요 OpenCV. 아니요 runtime packages.
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var result = new IronTesseract().Read("document.jpg");
Console.WriteLine(result.Text);
Console.WriteLine($"Confidence: {result.Confidence}%");
// One package: dotnet add package IronOcr
// 아니요 model downloads. 아니요 OpenCV. 아니요 runtime packages.
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var result = new IronTesseract().Read("document.jpg");
Console.WriteLine(result.Text);
Console.WriteLine($"Confidence: {result.Confidence}%");
Imports IronOcr
' One package: dotnet add package IronOcr
' 아니요 model downloads. 아니요 OpenCV. 아니요 runtime packages.
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim result = New IronTesseract().Read("document.jpg")
Console.WriteLine(result.Text)
Console.WriteLine($"Confidence: {result.Confidence}%")
IronOCR 업그레이드는 NuGet 패키지의 버전 업데이트 한 번으로 완료됩니다. API 표면 변경 사항은 릴리스 노트에 자세히 설명되어 있으며, 주요 버전 간의 하위 호환성도 유지됩니다. CI/CD 파이프라인에서 작업하는 팀의 경우 배포 영역의 차이는 상당합니다. 단일 패키지와 4개의 패키지 Plus 플랫폼별 런타임 패키지, Plus 디스크의 올바른 경로에 존재해야 하는 모델 파일까지 고려해야 하기 때문입니다.
구성 옵션은 IronTesseract 설정 가이드를 참조하고, 지원되는 입력 소스 전체 목록은 이미지 입력 방법을 참조하십시오.
언어 지원 범위
PaddleOCR은 주로 중국어 학습을 위해 개발되었으며, 영어는 보조 언어로 사용됩니다. PaddleSharp를 둘러싼 .NET 커뮤니티는 그러한 기원을 반영합니다. 중국어(간체, 번체), 영어 및 몇몇 다른 언어에 대한 모델 팩은 존재하지만, 약 10~20개 언어를 넘어서는 지원 범위는 미흡하며, 비CJK 모델의 유지 관리는 상위 프로젝트의 지속적인 관심 여부에 달려 있습니다.
패들샤프 접근법
PaddleSharp에서 언어를 변경한다는 것은 모델 세트를 변경하는 것을 의미합니다. 인식 모델은 언어별로 다르며, 간단한 API 플래그가 없습니다. 대신 서로 다른 모델 객체 세트를 인스턴스화해야 합니다.
// Simplified — see Sdcb.PaddleOCR documentation for full API
// English model set (if available for your version)
// var recModel = LocalFullModels.EnglishV3.RecognitionModel;
// Chinese model set (primary supported use case)
var detModel = LocalFullModels.ChineseV3.DetectionModel;
var recModel = LocalFullModels.ChineseV3.RecognitionModel;
var clsModel = LocalFullModels.ChineseV3.ClassifierModel;
var ocr = new PaddleOcrAll(detModel, clsModel, recModel);
// Non-CJK languages require checking upstream PaddleOCR model availability
// Mixed CJK + Latin in the same document may require model selection decisions
// Simplified — see Sdcb.PaddleOCR documentation for full API
// English model set (if available for your version)
// var recModel = LocalFullModels.EnglishV3.RecognitionModel;
// Chinese model set (primary supported use case)
var detModel = LocalFullModels.ChineseV3.DetectionModel;
var recModel = LocalFullModels.ChineseV3.RecognitionModel;
var clsModel = LocalFullModels.ChineseV3.ClassifierModel;
var ocr = new PaddleOcrAll(detModel, clsModel, recModel);
// Non-CJK languages require checking upstream PaddleOCR model availability
// Mixed CJK + Latin in the same document may require model selection decisions
' Simplified — see Sdcb.PaddleOCR documentation for full API
' English model set (if available for your version)
' Dim recModel = LocalFullModels.EnglishV3.RecognitionModel
' Chinese model set (primary supported use case)
Dim detModel = LocalFullModels.ChineseV3.DetectionModel
Dim recModel = LocalFullModels.ChineseV3.RecognitionModel
Dim clsModel = LocalFullModels.ChineseV3.ClassifierModel
Dim ocr = New PaddleOcrAll(detModel, clsModel, recModel)
' Non-CJK languages require checking upstream PaddleOCR model availability
' Mixed CJK + Latin in the same document may require model selection decisions
프랑스어 송장, 독일어 계약서 또는 아랍어 양식을 처리하는 팀에게 중요한 질문은 단순히 모델 팩이 현재 존재하는지 여부가 아니라, 내년에도 유지 관리될 것인지, 그리고 이를 설정하는 데 필요한 영문 문서가 존재하는지 여부입니다.
IronOCR 접근법
IronOCR 125개 이상의 언어를 NuGet 패키지로 제공합니다. 각 언어 팩은 다른 종속성처럼 설치되며 수동 파일 배포 없이 표준 CI/CD 파이프라인과 통합됩니다.
// dotnet add package IronOcr.Languages.ChineseSimplified
// dotnet add package IronOcr.Languages.French
// dotnet add package IronOcr.Languages.Arabic
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
ocr.AddSecondaryLanguage(OcrLanguage.English); // Mixed-language document
var result = ocr.Read("mixed-document.jpg");
// dotnet add package IronOcr.Languages.ChineseSimplified
// dotnet add package IronOcr.Languages.French
// dotnet add package IronOcr.Languages.Arabic
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
ocr.AddSecondaryLanguage(OcrLanguage.English); // Mixed-language document
var result = ocr.Read("mixed-document.jpg");
' dotnet add package IronOcr.Languages.ChineseSimplified
' dotnet add package IronOcr.Languages.French
' dotnet add package IronOcr.Languages.Arabic
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.ChineseSimplified
ocr.AddSecondaryLanguage(OcrLanguage.English) ' Mixed-language document
Dim result = ocr.Read("mixed-document.jpg")
혼합 스크립트를 사용하는 문서에 대해 동시에 다중 언어 인식을 수행하는 다중 언어 가이드에서는 모델 수준의 결정 없이도 AddSecondaryLanguage 호출을 통해 가능합니다.
여러 언어로 된 문서를 다루는 팀이나 초기 범위를 넘어 언어 요구 사항이 증가할 것으로 예상되는 팀의 경우, 유지 관리가 용이한 NuGet 패키지로 지원되는 125개 언어 카탈로그가 유지 관리 약정이 가변적인 10~20개 언어 세트보다 더 안정적인 선택입니다.
전처리 및 PDF 지원
PaddleOCR의 신경망 파이프라인은 CJK 텍스트의 경우 기존 OCR보다 이미지 품질 변화를 더 잘 처리하지만, 기울기 보정, 노이즈 제거 또는 해상도 정규화와 같은 작업을 위한 내장 이미지 전처리 API는 제공하지 않습니다. 모든 전처리 작업은 OpenCV로 작성해야 합니다. PaddleSharp는 이미 OpenCV 라이브러리를 필요로 하지만, 이미지 처리 전문가가 아닌 팀에게는 상당한 코드 부담을 안겨줍니다.
PDF 지원은 해결하기 어려운 과제입니다. PaddleSharp에는 자체 PDF 리더가 없습니다. PDF 파일을 수신하는 문서 파이프라인은 OCR 엔진을 호출하기 전에 각 페이지를 이미지로 변환해야 하는데, 이를 위해서는 별도의 PDF 라이브러리가 필요하고, 종속성이 추가되며, 중간 파일 관리가 도입됩니다.
패들샤프 접근법
// Simplified — see Sdcb.PaddleOCR documentation for full API
// PaddleSharp has no PDF support — pages must be pre-converted to images
// Preprocessing (deskew, denoise) requires OpenCV operations:
using OpenCvSharp;
// Load image via OpenCV
using var image = Cv2.ImRead("scan.jpg");
// Manual grayscale conversion
using var gray = new Mat();
Cv2.CvtColor(image, gray, ColorConversionCodes.BGR2GRAY);
// Manual threshold (binarization)
using var binary = new Mat();
Cv2.Threshold(gray, binary, 128, 255, ThresholdTypes.Binary);
// Then pass to OCR engine
var result = _ocr.Run(binary);
// Each preprocessing step requires OpenCV knowledge
// PDF pages require a separate PDF-to-image conversion step first
// Simplified — see Sdcb.PaddleOCR documentation for full API
// PaddleSharp has no PDF support — pages must be pre-converted to images
// Preprocessing (deskew, denoise) requires OpenCV operations:
using OpenCvSharp;
// Load image via OpenCV
using var image = Cv2.ImRead("scan.jpg");
// Manual grayscale conversion
using var gray = new Mat();
Cv2.CvtColor(image, gray, ColorConversionCodes.BGR2GRAY);
// Manual threshold (binarization)
using var binary = new Mat();
Cv2.Threshold(gray, binary, 128, 255, ThresholdTypes.Binary);
// Then pass to OCR engine
var result = _ocr.Run(binary);
// Each preprocessing step requires OpenCV knowledge
// PDF pages require a separate PDF-to-image conversion step first
Imports OpenCvSharp
' Load image via OpenCV
Using image As Mat = Cv2.ImRead("scan.jpg")
' Manual grayscale conversion
Using gray As New Mat()
Cv2.CvtColor(image, gray, ColorConversionCodes.BGR2GRAY)
' Manual threshold (binarization)
Using binary As New Mat()
Cv2.Threshold(gray, binary, 128, 255, ThresholdTypes.Binary)
' Then pass to OCR engine
Dim result = _ocr.Run(binary)
' Each preprocessing step requires OpenCV knowledge
' PDF pages require a separate PDF-to-image conversion step first
End Using
End Using
End Using
이러한 전처리 과정을 작성하는 것은 OpenCV 경험이 있는 팀이라면 충분히 가능합니다. OpenCV를 사용하지 않는 팀의 경우 학습 곡선이 만만치 않습니다. OpenCV는 광범위한 API를 제공하며 문서도 대부분 C++ 기반으로 작성되어 있기 때문입니다.
IronOCR 접근법
IronOCR의 전처리 파이프라인은 외부 라이브러리를 필요로 하지 않습니다. 이미지를 수용하는 동일한 OcrInput 객체가 PDF도 수용하며, 전처리 필터는 단일 메서드 호출입니다:
using var input = new OcrInput();
input.LoadImage("low-quality-scan.jpg");
// Built-in preprocessing — no OpenCV, no manual image math
input.Deskew();
input.DeNoise();
input.Contrast();
input.Binarize();
input.EnhanceResolution(300);
var result = new IronTesseract().Read(input);
Console.WriteLine(result.Text);
using var input = new OcrInput();
input.LoadImage("low-quality-scan.jpg");
// Built-in preprocessing — no OpenCV, no manual image math
input.Deskew();
input.DeNoise();
input.Contrast();
input.Binarize();
input.EnhanceResolution(300);
var result = new IronTesseract().Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Using input As New OcrInput()
input.LoadImage("low-quality-scan.jpg")
' Built-in preprocessing — no OpenCV, no manual image math
input.Deskew()
input.DeNoise()
input.Contrast()
input.Binarize()
input.EnhanceResolution(300)
Dim result = New IronTesseract().Read(input)
Console.WriteLine(result.Text)
End Using
PDF 입력의 경우, 네이티브 지원이므로 변환 단계가 필요하지 않습니다.
// PDF input — no external library, no page conversion
var result = new IronTesseract().Read("scanned-document.pdf");
// Password-protected PDFs
using var input = new OcrInput();
input.LoadPdf("encrypted.pdf", Password: "secret");
var result = new IronTesseract().Read(input);
// Output as searchable PDF
result.SaveAsSearchablePdf("searchable-output.pdf");
// PDF input — no external library, no page conversion
var result = new IronTesseract().Read("scanned-document.pdf");
// Password-protected PDFs
using var input = new OcrInput();
input.LoadPdf("encrypted.pdf", Password: "secret");
var result = new IronTesseract().Read(input);
// Output as searchable PDF
result.SaveAsSearchablePdf("searchable-output.pdf");
Imports IronTesseract
' PDF input — no external library, no page conversion
Dim result = New IronTesseract().Read("scanned-document.pdf")
' Password-protected PDFs
Using input As New OcrInput()
input.LoadPdf("encrypted.pdf", Password:="secret")
result = New IronTesseract().Read(input)
End Using
' Output as searchable PDF
result.SaveAsSearchablePdf("searchable-output.pdf")
이미지 품질 보정 가이드에서는 사용 가능한 모든 필터와 그 예시를 다룹니다. PDF 입력 방법 안내에는 페이지 선택, 스트림 입력 및 비밀번호 처리 방법이 포함됩니다. 스캔한 문서에서 검색 가능한 PDF를 생성하는 팀의 경우, 검색 가능한 PDF 출력은 별도의 처리 단계가 아닌 내장된 출력 형식입니다.
API 매핑 참조
| 패들샤프 OCR 컨셉 | IronOCR에 상응하는 |
|---|---|
Sdcb.PaddleOCR (namespace) |
IronOcr (namespace) |
PaddleOcrAll |
IronTesseract |
LocalFullModels.ChineseV3.DetectionModel |
동등한 모델 없음 - 모델 선택 필요 없음 |
LocalFullModels.ChineseV3.RecognitionModel |
동등한 모델 없음 - 모델 선택 필요 없음 |
LocalFullModels.ChineseV3.ClassifierModel |
동등한 모델 없음 - 모델 선택 필요 없음 |
Cv2.ImRead(path) (OpenCV 이미지 로드) |
input.LoadImage(path) |
_ocr.Run(matImage) |
ocr.Read(input) 또는 ocr.Read("file.jpg") |
result.Regions |
result.Words, result.Lines, result.Pages |
region.Text |
word.Text, line.Text, page.Text |
region.Rect.Center |
word.X, word.Y |
| 언어 모델 교체(새 모델 세트) | ocr.Language = OcrLanguage.French |
PaddleConfig (추론 백엔드 설정) |
동등한 기능 없음 — 자동 구성됨 |
| OpenCvSharp 임계값/회색조 연산 | input.Binarize(), input.ToGrayScale() |
| PDF는 지원하지 않습니다. 이미지로 사전 변환합니다. | input.LoadPdf("file.pdf") |
| 검색 가능한 PDF 출력 없음 | result.SaveAsSearchablePdf("output.pdf") |
팀이 PaddleSharp OCR에서IronOCR로 전환을 고려할 때
파이프라인 프로세스는 CJK 문서 이외의 문서를 처리합니다.
PaddleSharp는 중국인을 위해 만들어졌습니다. 그러한 유산은 모델 명명 규칙(ChineseV3), 주요 문서 언어 및 언어 팩 제공 여부에서 확인할 수 있습니다. 중국어 문서 처리로 시작해서 프랑스어 송장이나 독일어 계약서로 확장하는 팀은 큰 어려움에 직면합니다. CJK 이외의 언어로 된 모델 팩은 거의 없고, 비CJK 모델에 대한 유지 관리 지원은 불확실하며, 설정에 필요한 영어 문서도 부족하기 때문입니다. IronOCR은 NuGet 통해 125개 이상의 언어를 지원하므로, 언어 확장은 연구 프로젝트가 아닌 Install-Package만으로 가능합니다.
배포 환경에는 GPU가 없습니다.
PaddleOCR의 딥러닝 파이프라인은 GPU 추론에 최적화되어 있습니다. CPU 성능 수치는 정확합니다. 일반적인 문서 해상도에서 이미지당 500~1500ms가 소요됩니다. 수천 개의 문서를 처리하는 배치 파이프라인이나 동시 OCR 요청을 처리하는 ASP.NET 애플리케이션의 경우, CPU 모드 PaddleSharp는 규모가 커질수록 지연 시간을 증가시킵니다. IronOCR의 최적화된 Tesseract 5 엔진은 GPU 없이 CPU에서 이미지당 100~400ms의 속도로 실행됩니다. 표준 VM 계층, GPU 패스스루가 없는 컨테이너 또는 CI 워커에 배포하는 경우, 이러한 차이는 워크로드가 적합한지 여부를 결정하는 차이입니다.
PDF 문서가 입력 파이프라인에 있습니다.
PDF는 비즈니스 문서의 공식 기록 형식입니다. PaddleSharp에는 PDF 리더가 없습니다. PaddleSharp를 기반으로 개발하다가 이러한 제한 사항을 발견한 팀은 다음과 같은 선택에 직면하게 됩니다. PDF 라이브러리를 추가하거나(이제 라이선스 및 버전 관리가 필요한 또 다른 종속성을 관리해야 함), 전처리 단계로 PDF를 이미지로 변환하거나(저장 공간 및 I/O 오버헤드 추가), PDF를 기본적으로 지원하는 라이브러리로 마이그레이션해야 합니다. IronOCR은 암호로 보호된 PDF 및 페이지 범위 선택을 포함한 네이티브 PDF 입력 기능을 제공하므로 PDF로 시작하는 문서 워크플로에 가장 적합한 선택입니다.
종속성 체인이 보안 또는 규정 준수 검토에서 불합격했습니다.
의료, 금융, 정부 등 Enterprise 에 소프트웨어를 배포할 때는 종종 소프트웨어 구성 요소 목록(BOM)과 종속성 감사가 필요합니다. PaddleSharp의 배포판에는 Baidu에서 제공하는 모델 파일과 딥러닝 추론 런타임이 포함되어 있습니다. 소프트웨어 구성 요소의 출처를 특정 지역으로 제한하는 정책을 가진 조직이나 공급업체의 보안 정보 공개에 대한 명확한 접근 경로가 필요한 팀의 경우, Baidu에서 제공하는 바이너리에 대한 의존성은 추가적인 검토 단계를 필요로 합니다.IronOCR은 서구 소프트웨어 공급업체의 단일 상용 제품으로, 문서화된 라이선스 조건과 표준적인 상업적 지원 계약이 적용됩니다.
팀은 운영 비용을 충당할 인력이 부족합니다.
18개월 이상 PaddleSharp 배포 환경을 유지 관리한다는 것은 모델 버전 호환성을 추적하고, 플랫폼별 배포에 맞춰 OpenCV 런타임 패키지 버전을 조정하고, GPU를 사용하는 경우 CUDA 툴킷 버전을 일치시키고, 상위 GitHub 이슈(주로 중국어로 작성됨)에서 호환성을 깨뜨리는 변경 사항을 모니터링하는 것을 의미합니다. 이는 결코 가볍지 않은 운영 투자입니다. 핵심 역량이 딥러닝 인프라가 아닌 애플리케이션 개발인 팀의 경우, PaddleSharp 관리 비용은 그 비용에 비례하는 가치를 제공하지 못합니다.
일반적인 마이그레이션 고려사항
OpenCV 종속성 제거
PaddleSharp는 OpenCvSharp4와 플랫폼별 OpenCvSharp4.runtime.* 패키지를 이미지 로드를 위해 필요로 합니다. IronOCR는 System.Drawing.Bitmap, 파일 경로, 스트림 및 바이트 배열을 OcrInput를 통해 직접 수용합니다. 마이그레이션이란 Cv2.ImRead() 호출을 input.LoadImage()로 대체하고 OpenCvSharp 패키지 참조를 완전히 제거하는 것을 의미합니다:
// PaddleSharp pattern — requires OpenCV
using var image = Cv2.ImRead(imagePath);
var result = _ocr.Run(image);
//IronOCR equivalent — no OpenCV
var result = new IronTesseract().Read(imagePath);
// PaddleSharp pattern — requires OpenCV
using var image = Cv2.ImRead(imagePath);
var result = _ocr.Run(image);
//IronOCR equivalent — no OpenCV
var result = new IronTesseract().Read(imagePath);
Imports OpenCvSharp
Imports IronOcr
' PaddleSharp pattern — requires OpenCV
Using image = Cv2.ImRead(imagePath)
Dim result = _ocr.Run(image)
End Using
' IronOCR equivalent — no OpenCV
Dim result = New IronTesseract().Read(imagePath)
이미지 입력 가이드는 스트림, URL 및 메모리 내 비트맵을 포함하여 허용되는 모든 입력 유형을 다룹니다.
지역별 결과 매핑
PaddleSharp는 result.Regions — 바운딩 박스와 텍스트 문자열이 포함된 감지된 텍스트 영역의 평면 목록을 반환합니다.IronOCR더 풍부한 계층 구조를 반환합니다. 페이지에는 단락이 포함되고, 단락에는 줄이 포함되고, 줄에는 단어가 포함되며, 각 요소에는 좌표와 신뢰도 점수가 함께 제공됩니다. 마이그레이션 코드가 result.Regions를 사용한다면, IronOCR의 평면 단어 열거와 위치 데이터에 대한 등가물은 다음과 같습니다:
var result = new IronTesseract().Read("document.jpg");
// Per-word with position — equivalent to PaddleSharp region enumeration
foreach (var word in result.Words)
{
Console.WriteLine($"'{word.Text}' at ({word.X},{word.Y}) confidence:{word.Confidence}%");
}
var result = new IronTesseract().Read("document.jpg");
// Per-word with position — equivalent to PaddleSharp region enumeration
foreach (var word in result.Words)
{
Console.WriteLine($"'{word.Text}' at ({word.X},{word.Y}) confidence:{word.Confidence}%");
}
Imports System
Imports IronOcr
Dim result = New IronTesseract().Read("document.jpg")
' Per-word with position — equivalent to PaddleSharp region enumeration
For Each word In result.Words
Console.WriteLine($"'{word.Text}' at ({word.X},{word.Y}) confidence:{word.Confidence}%")
Next
읽기 결과 안내 문서에는 전체 결과 구조가 설명되어 있습니다. 신뢰도 점수 가이드에서는 요소별 신뢰도 값과 이를 활용한 품질 필터링 방법을 설명합니다.
OCR 엔진의 라이프사이클 관리
PaddleSharp의 PaddleOcrAll는 생성하는 데 비용이 많이 듭니다 — 생성 시 디스크에서 모델 바이너리를 로드하기 때문에 ASP.NET Core에서는 싱글톤 또는 범위 서비스로 간주해야 합니다. IronOCR의 IronTesseract는 초기화 비용이 가볍지만 동일한 원칙이 적용됩니다: 웹 응용 프로그램에서 요청마다 생성하는 것보다 인스턴스를 재사용하는 것이 더 효율적입니다. 두 경우 모두 종속성 주입을 싱글톤 또는 요청당 범위 서비스로 사용하는 것이 올바른 패턴입니다.
언어 팩 설치
PaddleSharp의 언어 지원은 생성 시점에 다양한 모델 세트를 선택하는 것을 의미합니다.IronOCR에서는 프로젝트에 NuGet 패키지를 추가하고 한 줄의 설정 호출만으로 언어 지원을 제공합니다.
// dotnet add package IronOcr.Languages.ChineseSimplified
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
var result = ocr.Read("document.jpg");
// dotnet add package IronOcr.Languages.ChineseSimplified
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
var result = ocr.Read("document.jpg");
Imports IronOcr
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.ChineseSimplified
Dim result = ocr.Read("document.jpg")
PaddleSharp에서 IronOCR로 전환하는 CJK 팀의 경우, 중국어 간체, 중국어 번체, 일본어 및 한국어를 모두IronOCR언어 팩으로 이용할 수 있습니다. 사용자 지정 언어 가이드에서는 특수 사용 사례를 위해 사용자 지정으로 학습된 tessdata를 가져오는 방법을 다룹니다.
IronOCR의 추가 기능
위에서 비교한 기능 외에도IronOCR PaddleSharp의 범위를 완전히 벗어나는 기능을 제공합니다.
- 영역 기반 OCR: 특정 이미지의 특정 영역 — 헤더 행, 송장 총계, 특정 폼 필드 —을
CropRectangle를 사용하여 전체 페이지를 처리하지 않고 타겟팅할 수 있습니다. - 비동기 OCR : 스레드 차단 없이 ASP.NET Core 요청 파이프라인에 OCR을 통합할 수 있는 내장 비동기 지원 기능
- 여권 및 신분증 판독 : 여행 서류 및 신분증에서 기계 판독 가능 영역 데이터의 구조화된 추출
- 표 읽기 : 표 형식 문서 레이아웃에서 행-열 구조를 재구성하기 위해 단어 좌표를 공간적으로 그룹화합니다.
- 라이선스 : 런타임 로열티가 없는 영구 개발자 라이선스이며, 평가판 모드에서는 무료 개발 사용이 가능합니다.
.NET 호환성 및 미래 준비
IronOCR .NET 8 및 .NET 9를 대상으로 하며, x64 및 x86 아키텍처 전반에 걸쳐 Windows, Linux및 macOS를 완벽하게 지원하고 컨테이너화된 워크로드를 위한 Docker 배포 가이드를 제공합니다. PaddleSharp는 최신 .NET 런타임을 지원하지만, OpenCV 런타임 패키지로 인해 크로스 플랫폼 호환성 문제가 발생합니다. OpenCV 런타임 패키지는 플랫폼별로 별도의 NuGet 패키지로 배포되므로, 환경에 맞는 패키지를 선택하여 배포해야 합니다. IronOCR의 단일 패키지 배포 모델은 이러한 플랫폼 매트릭스를 완전히 없애주며, Linux , AWS 및 Azure 배포 가이드는 실제 운영 환경에서 테스트를 거친 구성을 반영합니다.
결론
PaddleSharp는 특정 시나리오, 즉 CUDA 지원 GPU가 탑재된 하드웨어에서 주로 중국어 문서를 처리하는 팀에서 딥러닝을 통해 중국어(CJK) 텍스트에 대한 정확도를 극대화하는 것이 배포의 간편성보다 더 중요한 경우에 강력한 주장을 펼칩니다. 이는 실제 사용 사례이며, 그 안에서 PaddleSharp는 제 역할을 다합니다. 3단계 신경망 파이프라인은 심층 학습에 대한 진정한 투자를 반영하는 정확도로 복잡한 중국어 텍스트를 인식합니다.
그러한 시나리오를 제외하면 추상화의 깊이는 오히려 단점이 됩니다. 상위 종속성 세 가지(바이두의 추론 프레임워크, PaddleOCR 모델 학습 프로젝트, PaddleSharp .NET 바인딩 레이어)는 각각 자체 릴리스 주기를 가지며, 유지 관리 측면에서의 일관성이 보장되지 않습니다. 영문 자료는 매우 부족합니다. CJK 외의 언어 목록은 빈약하고 관리가 일관성이 없습니다. PDF 입력을 위해서는 별도의 라이브러리가 필요합니다. GPU가 없을 경우 이미지당 CPU 지연 시간은 500~1500ms인 반면 IronOCR은 100~400ms입니다.
IronOCR의 트레이드 오프는 역방향입니다: 상업적인 단일 패키지로 $999 엔트리 가격, 모델 관리 필요 없음, 네이티브 PDF 및 다중 형식 입력, NuGet 패키지로 제공되는 125개 이상의 언어, OpenCV가 불필요한 내장 전처리를 제공합니다. 이는 설계된 추상화이며, 안정적인 추상화입니다 — API는 팀이 그들의 애플리케이션을 유지하는 데 있어 상위 Baidu 모델 형식 변경을 추적할 필요가 없었습니다.
일반적인 영어 또는 다국어 OCR 요구 사항, PDF 워크플로 또는 GPU 하드웨어 사용이 제한된 배포 환경이 필요한 팀의 경우IronOCR가장 적합한 선택입니다.IronOCR설명서는 모든 입력 유형, 전처리 옵션 및 출력 형식을 다루며, 튜토리얼 허브는 송장부터 여권, 스캔한 문서에 이르기까지 일반적인 문서 유형에 대한 작동 코드를 제공합니다.
자주 묻는 질문
패들샤프 OCR이란 무엇인가요?
패들샤프 OCR은 개발자와 기업이 이미지와 문서에서 텍스트를 추출하는 데 사용하는 OCR 솔루션입니다. .NET 애플리케이션 개발용 IronOCR과 함께 평가된 여러 OCR 옵션 중 하나입니다.
IronOCR은 .NET 개발자용 패들샤프 OCR과 어떻게 다른가요?
IronOCR은 IronTesseract를 핵심 엔진으로 사용하는 NuGet 네이티브 .NET OCR 라이브러리입니다. PaddleSharp OCR에 비해 배포가 간편하고(SDK 설치 프로그램 없음), 정액제 요금제를 제공하며, COM 상호 운용이나 클라우드 종속성이 없는 깔끔한 C# API를 제공합니다.
IronOCR이 패들샤프 OCR보다 설정하기가 더 쉬운가요?
IronOCR은 단일 NuGet 패키지를 통해 설치됩니다. SDK 설치 프로그램, 복사할 라이선스 파일, 등록할 COM 구성 요소 또는 관리해야 할 별도의 런타임 바이너리가 없습니다. 전체 OCR 엔진이 패키지에 번들로 제공됩니다.
패들샤프 OCR과 IronOCR 사이에는 어떤 정확도 차이가 있나요?
IronOCR은 표준 비즈니스 문서, 송장, 영수증, 스캔 양식에 대해 높은 인식 정확도를 달성합니다. 품질이 많이 저하된 문서나 일반적이지 않은 스크립트의 경우 정확도는 소스 품질에 따라 달라집니다. IronOCR에는 이미지 전처리 필터가 포함되어 있어 저품질 입력에 대한 인식률을 향상시킵니다.
IronOCR은 PDF 텍스트 추출을 지원하나요?
예. IronOCR은 한 번의 호출로 원본 PDF와 스캔한 PDF 이미지 모두에서 텍스트를 추출합니다. 또한 여러 페이지의 TIFF 파일, 이미지, 스트림도 지원합니다. 스캔한 PDF의 경우 OCR은 페이지별 결과 개체를 사용하여 페이지별로 적용됩니다.
패들샤프 OCR 라이선싱은 IronOCR과 어떻게 다른가요?
IronOCR은 페이지당 또는 스캔당 요금이 없는 정액제 영구 라이선스를 사용합니다. 대량의 문서를 처리하는 조직은 문서 양에 관계없이 동일한 라이선스 비용을 지불합니다. 자세한 내용과 볼륨 가격은 IronOCR 라이선스 페이지에서 확인할 수 있습니다.
IronOCR 어떤 언어를 지원하나요?
IronOCR은 별도의 NuGet 언어 팩을 통해 127개 언어를 지원합니다. 언어를 추가하려면 '닷넷 추가 패키지 IronOcr.Languages.{Language}' 명령 하나만 있으면 됩니다. 수동으로 파일을 배치하거나 경로를 구성할 필요가 없습니다.
.NET 프로젝트에 IronOCR 설치하는 방법은 무엇인가요?
NuGet을 통해 설치합니다: 패키지 관리자 콘솔에서 '설치-패키지 IronOcr' 또는 CLI에서 '닷넷 추가 패키지 IronOcr'을 실행합니다. 추가 언어 팩도 같은 방법으로 설치됩니다. 기본 SDK 인스톨러가 필요하지 않습니다.
IronOCR은 PaddleSharp와 달리 Docker 및 컨테이너화된 배포에 적합한가요?
예. IronOCR은 NuGet 패키지를 통해 Docker 컨테이너에서 작동합니다. 라이선스 키는 환경 변수를 통해 설정됩니다. OCR 엔진 자체에는 라이선스 파일, SDK 경로 또는 볼륨 마운트가 필요하지 않습니다.
구매하기 전에 PaddleSharp와 비교하여 IronOCR을 사용해 볼 수 있나요?
예. IronOCR 평가판 모드는 문서를 처리하고 출력물에 워터마크 오버레이가 포함된 OCR 결과를 반환합니다. 라이선스를 구매하기 전에 자신의 문서에서 정확성을 확인할 수 있습니다.
IronOCR은 텍스트 추출과 함께 바코드 판독을 지원하나요?
IronOCR은 텍스트 추출과 OCR에 중점을 둡니다. 바코드 판독을 위해 Iron Software는 동반 라이브러리로 IronBarcode를 제공합니다. 두 가지 모두 개별적으로 또는 Iron Suite 번들의 일부로 사용할 수 있습니다.
PaddleSharp OCR에서 IronOCR로 쉽게 마이그레이션할 수 있나요?
PaddleSharp OCR에서 IronOCR로 마이그레이션하려면 일반적으로 초기화 시퀀스를 IronTesseract 인스턴스화로 대체하고, COM 수명 주기 관리를 제거하며, API 호출을 업데이트해야 합니다. 대부분의 마이그레이션은 코드 복잡성을 크게 줄여줍니다.

