사용 시나리오
- 페이지 수가 많은 다중 페이지 문서를 변환하는 경우입니다. 일반적으로 책, 긴 보고서 등을 처리하는 상황을 의미합니다. 이 경우 문서의 페이지를 병렬로 인식한 다음, 메인 프로세스에서 합성을 수행하고 다시 병렬로 내보낼 수 있습니다. 또한 엔진 풀을 사용하는 경우 여러 다중 페이지 문서를 동시에 처리할 수도 있지만, 메모리 사용량이 매우 커질 수 있으며 심하면 “out of memory” 오류가 발생할 수도 있습니다.
- 많은 수의 단일 페이지 문서를 변환하는 경우입니다. 송장, 계약서, 서신 등을 처리할 때가 이에 해당합니다. 단일 페이지 문서는 서로 의존하지 않고 한 번에 많은 메모리를 필요로 하지 않으므로, 이 상황에서는 병렬 처리가 가장 쉽습니다.
- 많은 수의 이미지를 처리하면서 그 안에서 필요한 정보를 검색하거나 다른 방식으로 인식 결과를 활용하는 경우입니다. 대부분의 이미지를 편집 가능한 형식으로 변환할 필요가 없을 수 있으므로, 합성과 내보내기 속도는 문제가 되지 않습니다. 여러 프로세스에서 수행되는 작업은 레이아웃 블록을 순회하고 텍스트 블록의 인식 결과에 접근하는 것입니다.
내보내기에 병렬 처리를 사용하려는 경우, 이 기능은 PDF로 내보내기(TextOnly 모드 제외) 및 PPTX 형식에 대해서만 지원된다는 점에 유의하세요.
권장 사항 및 제한 사항
-
여러 페이지 문서를 병렬로 처리하려면 FRDocument를 사용하는 것이 좋습니다. 추가 인터페이스를 구현할 필요가 없으므로, 코딩이 가장 쉬운 다중 처리 방식입니다.
열기, 전처리, 분석, 인식은 병렬로 수행됩니다. 문서 합성은 메인 프로세스에서 순차적으로 수행된 후, PDF로 내보내기(단, TextOnly 모드 제외)와 PPTX 형식으로의 내보내기는 병렬로 수행됩니다. -
일부 소스(예: 스캐너)에서 수신되는 많은 단일 페이지 문서를 처리하려면 배치 프로세서를 사용하는 것이 좋습니다.
이 방법의 장점은 문서 수를 미리 알 수 없고, 문서 유형이 서로 다를 수 있으며, 문서가 도착하는 즉시 바로 처리해야 하는 경우에도 사용할 수 있다는 점입니다. 단점은 구현에 더 많은 노력이 필요하다는 점입니다. 파일 어댑터와 사용자 지정 이미지 소스를 위한 인터페이스를 구현해야 합니다.
단일 페이지 문서의 경우 페이지 합성과 문서 합성이 각 페이지별로 별도로 수행되므로, 모든 처리 단계가 병렬로 수행됩니다.
배치 프로세서를 사용하는 시나리오에서는 병렬 내보내기가 지원되지 않습니다.
페이지의 병렬 처리 중 발생한 이벤트는 전체 문서의 이벤트로 변환됩니다.
FRDocument 객체를 사용한 처리
- Engine 객체의 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 형식에만 해당
배치 프로세서를 사용한 처리
- 이미지 소스와 그 안의 파일에 대한 액세스를 제공하는 IImageSource 및 IFileAdapter 인터페이스를 구현합니다.
- [선택 사항] 처리를 관리하려면 IAsyncProcessingCallback 인터페이스를 구현합니다. 이 인터페이스의 메서드를 사용하면 오류를 처리하거나 처리를 취소할 수 있습니다.
- [선택 사항] Engine 객체의 MultiProcessingParams 하위 객체를 사용해 다중 처리를 설정합니다. Batch Processor를 사용하는 경우 기본적으로 병렬 처리가 사용되므로 MultiProcessingMode 속성은 설정할 필요가 없습니다. RecognitionProcessesCount 속성을 사용해 실행할 프로세스 수를 조정하고, 필요한 경우 다른 속성 값도 지정합니다.
- 엔진 객체의 CreateBatchProcessor 메서드를 호출하여 BatchProcessor 객체를 가져옵니다.
- 이 객체의 Start 메서드를 호출하여 프로세서를 초기화하고 비동기 인식 프로세스를 호출합니다. 이 메서드를 호출할 때 이미지 소스를 지정하고 IAsyncProcessingCallback 인터페이스 및 매개변수 객체에 대한 참조를 전달할 수 있습니다.
- 메서드가 0을 반환할 때까지 루프에서 GetNextProcessedPage 메서드를 호출합니다. 이는 소스에 더 이상 이미지가 없고 처리된 모든 이미지가 사용자에게 반환되었음을 의미합니다.
