기본적으로 ABBYY FineReader Engine에서 다중 처리를 사용하는 방법은 세 가지입니다. 첫 번째 방법은 엔진 객체 하나를 사용하면서, 엔진 객체의 MultiProcessingParams 속성을 적절한 값으로 설정하는 것입니다. ABBYY FineReader Engine은 단일 엔진 인스턴스에서 다중 처리를 제공하는 두 가지 객체를 지원합니다. FRDocument 객체(FRDocument 객체를 사용한 처리 참조)와 BatchProcessor 객체(배치 프로세서를 사용한 처리 참조)입니다. 또 다른 방법은 COM을 통해(OutprocLoader 객체 사용) 여러 엔진 인스턴스를 별도 프로세스 서버로 로드한 다음, 각 인스턴스를 해당 프로세스에서 사용하는 것입니다. 자세한 내용은 엔진 풀을 사용한 처리를 참조하세요.Documentation Index
Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
Use this file to discover all available pages before exploring further.
사용 시나리오
- 페이지 수가 많은 다중 페이지 문서를 변환하는 경우입니다. 일반적으로 책, 긴 보고서 등을 처리하는 상황에 해당합니다. 이 경우 문서의 페이지를 병렬로 인식한 다음, 주 프로세스에서 합성을 수행하고 다시 병렬로 내보낼 수 있습니다. 또한 엔진 풀을 사용하는 경우 여러 다중 페이지 문서를 동시에 처리할 수도 있지만, 메모리 사용량이 매우 커질 수 있으며 심하면 “out of memory” 오류가 발생할 수도 있습니다.
- 많은 수의 단일 페이지 문서를 변환하는 경우입니다. 송장, 계약서, 편지 등을 처리할 때가 이에 해당합니다. 단일 페이지 문서는 서로 의존하지 않고 한 번에 많은 메모리를 필요로 하지 않으므로, 이 경우 병렬 처리를 가장 쉽게 적용할 수 있습니다.
- 많은 수의 이미지를 처리하면서 그 안에서 필요한 정보를 검색하거나, 다른 방식으로 인식 결과를 활용하는 경우입니다. 이들 대부분을 편집 가능한 형식으로 변환할 필요는 없을 수 있으므로, 합성과 내보내기 속도는 문제가 되지 않습니다. 여러 프로세스에서 수행할 작업은 레이아웃 블록을 순회하고 텍스트 블록의 인식 결과에 액세스하는 것입니다.
내보내기에 병렬 처리를 사용하려면, 이 기능은 PDF로 내보내기(TextOnly 모드 제외)와 PPTX 형식에서만 지원된다는 점에 유의하세요.
권장 사항 및 제한 사항
-
여러 페이지로 이루어진 문서를 병렬 처리할 때는 FRDocument 사용을 권장합니다. 추가 인터페이스를 구현할 필요가 없으므로, 다중 처리를 구현하는 가장 간단한 방법입니다.
문서 열기, 전처리, 분석 및 인식은 병렬로 수행됩니다. 문서 합성은 기본 프로세스에서 순차적으로 수행된 후 PDF로 내보내기가 수행되며(TextOnly모드 제외), PPTX 형식으로의 내보내기는 병렬로 수행됩니다. -
일부 source(예: 스캐너)에서 수신되는 다수의 단일 페이지 문서를 처리하려면 BatchProcessor를 권장합니다.
이 방법의 장점은 문서 수를 사전에 알 수 없고, 문서 유형이 서로 다를 수 있으며, 문서가 도착하는 즉시 처리해야 하는 경우에도 사용할 수 있다는 점입니다. 단점은 구현에 더 많은 노력이 필요하다는 점입니다. 파일 어댑터용 인터페이스와 사용자 지정 이미지 source를 구현해야 합니다.
단일 페이지 문서의 경우 각 페이지마다 페이지 합성과 문서 합성이 개별적으로 수행되므로, 모든 처리 단계가 병렬로 수행됩니다.
배치 프로세서를 사용하는 시나리오에서는 병렬 내보내기가 지원되지 않습니다.
- 다수의 단일 페이지 문서를 병렬로 완전히 처리하려면 COM을 통해 별도 프로세스 방식으로 로드된 엔진 pool을 사용할 수 있습니다. 이 방법은 속도 면에서 가장 효율적이며, 다중 스레딩과 관련된 모든 어려움을 자동으로 해소합니다. ABBYY FineReader Engine 객체에 대한 모든 작업이 COM을 통해 직렬화되기 때문입니다. 하지만 몇 가지 제한 사항이 있습니다.
- COM을 사용하므로 FREngine.dll을 등록해야 합니다;
- 코드가 C++로 작성된 경우, COM을 사용하려면 예를 들어 C#보다 더 많은 정형화된 코드를 작성해야 합니다;
- 이 경우 처리는 다른 process에서 진행되므로 memory에서 이미지를 열 수 없으며, 각 요청을 다른 process로 전달한 뒤 다시 받아와야 하므로 인식 결과를 반복 조회하는 데 더 많은 시간이 걸립니다;
- 마지막으로, 여러 엔진 인스턴스를 로드하면 memory 사용량이 더 늘어납니다. 특히 이 경우에는 모든 처리 단계가 병렬로 수행되고 여러 합성 작업이 동시에 진행될 수 있으므로 memory를 더욱 많이 사용합니다.
- 병렬 처리 중 발생한 이벤트를 포착하고 처리하려면 IParallelProcessingCallback 인터페이스를 사용할 수 있습니다. 이 인터페이스는 문제가 발생한 상황을 관리하는 데 매우 유용할 수 있습니다. 예를 들어 시간 초과 오류가 발생하면 IParallelProcessingCallback 인터페이스는 사용자 기본 설정에 따라 문제를 해결할 수 있는 여러 방법을 제공합니다. 자세한 내용은 IParallelProcessingCallback::OnWaitIntervalExceeded를 참조하세요.
페이지의 병렬 처리 중 발생한 이벤트는 전체 문서의 이벤트로 변환됩니다.
속도 테스트 결과
| 단일 페이지 문서 | 하나의 다중 페이지 문서 | 내보내기 없이 결과 검색 | |
|---|---|---|---|
| 순차 처리 | 60 | 51 | 87 |
| FRDocument를 사용한 처리 | 41 | 117 | 57 |
| FRDocument를 사용한 처리(PageFlushingPolicy = PFP_KeepInMemory 사용) | 55 | 141 | 82 |
| 배치 프로세서를 사용한 처리 | 99 | 115 | 294 |
| 엔진 풀을 사용한 처리 | 165 | 10 | 102 |
FRDocument 객체를 사용한 처리
- 엔진 객체의 MultiProcessingParams 하위 객체에서 MultiProcessingMode 속성 값을 설정합니다. 이 속성이 MPM_Parallel 또는 MPM_Auto로 설정되어 있고, 문서의 페이지 수와 사용 가능한 CPU 코어 수가 모두 1보다 크면 병렬 처리가 사용됩니다.
- RecognitionProcessesCount 속성을 사용하여 실행할 프로세스 수를 조정하고, 필요한 경우 다른 속성 값도 지정합니다.
- AddImageFile, AddImageFileFromMemory, AddImageFileFromStream, AddImageFileWithPassword, AddImageFileWithPasswordCallback
- Preprocess, PreprocessPages
- Analyze, AnalyzePages
- Recognize, RecognizePages
- Process, ProcessPages
- Export, ExportPages, ExportToMemory — PDF 내보내기(TextOnly 모드 제외) 및 PPTX 형식에만 해당
C# 코드
C# 코드
배치 프로세서를 사용한 처리
- 이미지 소스와 그 안의 파일에 대한 액세스를 제공하는 IImageSource 및 IFileAdapter 인터페이스를 구현합니다.
- [선택 사항] 처리를 관리하려면 IAsyncProcessingCallback 인터페이스를 구현합니다. 이 인터페이스의 메서드를 사용하면 오류를 처리하거나 처리를 취소할 수 있습니다.
- [선택 사항] 엔진 객체의 하위 객체인 MultiProcessingParams를 사용하여 다중 처리를 설정합니다. 배치 프로세서로 작업하는 경우 기본적으로 병렬 처리가 사용되므로 MultiProcessingMode 속성은 설정할 필요가 없습니다. RecognitionProcessesCount 속성을 사용해 실행할 프로세스 수를 조정하고, 필요한 경우 다른 속성 값도 지정합니다.
- 엔진 객체의 CreateBatchProcessor 메서드를 호출하여 BatchProcessor 객체를 가져옵니다.
- 이 객체의 Start 메서드를 호출하여 프로세서를 초기화하고 비동기 인식 프로세스를 시작합니다. 이 메서드를 호출할 때 이미지 소스를 지정하고, IAsyncProcessingCallback 인터페이스 참조와 매개변수 객체를 전달할 수 있습니다.
- 메서드가 0을 반환할 때까지 루프에서 GetNextProcessedPage 메서드를 호출합니다. 이는 소스에 더 이상 이미지가 없고 처리된 모든 이미지가 사용자에게 반환되었음을 의미합니다.
C# 코드
C# 코드
엔진 풀을 사용한 처리
C# 코드
C# 코드
- 계정 권한은 DCOM Config 유틸리티를 사용해 설정할 수 있습니다(명령줄에 DCOMCNFG를 입력하거나 Control Panel > Administrative Tools > Component Services를 선택). 콘솔 트리에서 Component Services > Computers > My Computer > DCOM Config 폴더를 찾은 다음, ABBYY FineReader Engine 12.5 Loader (Local Server)를 마우스 오른쪽 버튼으로 클릭하고 Properties를 클릭합니다. dialog box가 열리면 Security 탭을 클릭합니다. Launch Permissions 아래에서 Customize를 클릭한 다음 Edit를 클릭하여 애플리케이션을 시작할 수 있는 계정을 지정합니다.
64비트 운영 체제에서는 등록된 DCOM 애플리케이션이 32비트 MMC 콘솔에서 제공되며, 이 콘솔은 다음 명령줄을 사용해 실행할 수 있습니다.
- 최종 사용자 컴퓨터에 애플리케이션을 설치할 때 FREngine.dll을 등록하려면 regsvr32 유틸리티를 사용합니다. 64비트 운영 체제에서는 기본적으로 64비트 버전의 regsvr32가 실행됩니다. 다음 명령줄을 사용하세요:
- 엔진을 별도 프로세스 서버로 구현하는 경우, MultiProcessingParams 객체의 MultiProcessingMode 속성을 MPM_Sequential로 설정해 문서 처리를 순차 모드로 지정합니다.
