메인 콘텐츠로 건너뛰기
대량의 문서를 처리할 경우 OCR은 상당한 처리 성능을 요구할 수 있습니다. 처리 속도를 높이기 위해 다중 CPU 시스템을 사용하는 것이 효과적인 경우가 많으며, ABBYY FineReader Engine은 하드웨어 구성의 다중 처리 기능을 활용할 수 있는 여러 가지 방법을 제공합니다. 이 섹션에서는 가능한 사용 시나리오를 개괄하고, 테스트 통계와 함께 작업에 적합한 다중 처리 모드를 선택하기 위한 권장 사항을 제공합니다. 또한 다중 처리 구현 예제를 제공하는 코드 샘플 링크도 포함되어 있습니다. 다중 처리를 사용하려면 엔진 객체의 MultiProcessingParams 속성을 적절한 값으로 설정해야 합니다. ABBYY FineReader Engine은 단일 Engine 인스턴스에서 다중 처리를 제공하는 두 가지 객체를 지원합니다. 즉, FRDocument 객체(FRDocument 객체를 사용한 처리 참조)와 BatchProcessor 객체(배치 프로세서를 사용한 처리 참조)입니다.
병렬 처리에는 순차 처리보다 더 많은 RAM이 필요하다는 점에 유의하세요. 워크스테이션의 일반적인 권장 사양은 350 MB * (코어 수) + 450MB RAM이며, 아랍어 또는 CJK 언어 문서를 처리하는 경우에는 850 MB * (코어 수) + 750MB RAM입니다.

사용 시나리오

많은 문서를 처리하는 상황을 전제로 하겠습니다. 하지만 어떤 결과를 얻어야 하는지도 함께 고려하여 작업을 구현하는 최적의 방법을 선택해야 합니다. 고려해야 할 대표적인 시나리오는 다음과 같습니다.
  • 페이지 수가 많은 다중 페이지 문서를 변환하는 경우입니다. 일반적으로 책, 긴 보고서 등을 처리하는 상황을 의미합니다. 이 경우 문서의 페이지를 병렬로 인식한 다음, 메인 프로세스에서 합성을 수행하고 다시 병렬로 내보낼 수 있습니다. 또한 엔진 풀을 사용하는 경우 여러 다중 페이지 문서를 동시에 처리할 수도 있지만, 메모리 사용량이 매우 커질 수 있으며 심하면 “out of memory” 오류가 발생할 수도 있습니다.
  • 많은 수의 단일 페이지 문서를 변환하는 경우입니다. 송장, 계약서, 서신 등을 처리할 때가 이에 해당합니다. 단일 페이지 문서는 서로 의존하지 않고 한 번에 많은 메모리를 필요로 하지 않으므로, 이 상황에서는 병렬 처리가 가장 쉽습니다.
  • 많은 수의 이미지를 처리하면서 그 안에서 필요한 정보를 검색하거나 다른 방식으로 인식 결과를 활용하는 경우입니다. 대부분의 이미지를 편집 가능한 형식으로 변환할 필요가 없을 수 있으므로, 합성과 내보내기 속도는 문제가 되지 않습니다. 여러 프로세스에서 수행되는 작업은 레이아웃 블록을 순회하고 텍스트 블록의 인식 결과에 접근하는 것입니다.
내보내기에 병렬 처리를 사용하려는 경우, 이 기능은 PDF로 내보내기(TextOnly 모드 제외) 및 PPTX 형식에 대해서만 지원된다는 점에 유의하세요.

권장 사항 및 제한 사항

  • 여러 페이지 문서를 병렬로 처리하려면 FRDocument를 사용하는 것이 좋습니다. 추가 인터페이스를 구현할 필요가 없으므로, 코딩이 가장 쉬운 다중 처리 방식입니다.
    열기, 전처리, 분석, 인식은 병렬로 수행됩니다. 문서 합성은 메인 프로세스에서 순차적으로 수행된 후, PDF로 내보내기(단, TextOnly 모드 제외)와 PPTX 형식으로의 내보내기는 병렬로 수행됩니다.
  • 일부 소스(예: 스캐너)에서 수신되는 많은 단일 페이지 문서를 처리하려면 배치 프로세서를 사용하는 것이 좋습니다.
    이 방법의 장점은 문서 수를 미리 알 수 없고, 문서 유형이 서로 다를 수 있으며, 문서가 도착하는 즉시 바로 처리해야 하는 경우에도 사용할 수 있다는 점입니다. 단점은 구현에 더 많은 노력이 필요하다는 점입니다. 파일 어댑터와 사용자 지정 이미지 소스를 위한 인터페이스를 구현해야 합니다.
    단일 페이지 문서의 경우 페이지 합성과 문서 합성이 각 페이지별로 별도로 수행되므로, 모든 처리 단계가 병렬로 수행됩니다.
배치 프로세서를 사용하는 시나리오에서는 병렬 내보내기가 지원되지 않습니다.
병렬 처리 중 발생하는 이벤트를 포착하고 처리하려면 IParallelProcessingCallback 인터페이스를 사용할 수 있습니다. 이 인터페이스는 문제가 발생한 상황을 관리하는 데 매우 유용할 수 있습니다. 예를 들어 시간 초과 오류가 발생하면 IParallelProcessingCallback 인터페이스는 사용자 기본 설정에 따라 이 문제를 해결할 수 있는 여러 방법을 제공합니다. 자세한 내용은 IParallelProcessingCallback::OnWaitIntervalExceeded를 참조하세요.
페이지의 병렬 처리 중 발생한 이벤트는 전체 문서의 이벤트로 변환됩니다.

FRDocument 객체를 사용한 처리

실행할 프로세스 수는 사용 가능한 물리적 또는 논리적 CPU 코어 수, 라이선스에서 사용할 수 있는 남은 CPU 코어 수, 그리고 문서의 페이지 수에 따라 자동으로 결정됩니다. 다중 처리 모드를 사용하려면 다음과 같이 하세요.
  1. Engine 객체의 MultiProcessingParams 하위 객체에서 MultiProcessingMode 속성 값을 설정합니다. 이 속성이 MPM_Parallel 또는 MPM_Auto로 설정되어 있고 문서의 페이지 수와 사용 가능한 CPU 코어 수가 모두 1보다 크면 병렬 처리가 사용됩니다.
  2. RecognitionProcessesCount 속성을 사용해 실행할 프로세스 수를 조정하고, 필요한 경우 다른 속성 값도 지정합니다.
다중 처리 설정을 마치면 FRDocument 작업에 대한 표준 절차를 사용할 수 있습니다. ABBYY FineReader Engine은 FRDocument 객체의 다음 메서드 중 하나를 호출하면 여러 인식 프로세스를 자동으로 시작합니다. 문서의 각 페이지마다 새 처리 작업이 생성되며, 이 작업은 인식 프로세스 중 하나로 전달됩니다. 인식 프로세스가 해당 작업을 완료하면 다음 처리 작업을 받습니다. 이 과정은 모든 작업이 처리될 때까지 계속됩니다.

배치 프로세서를 사용한 처리

배치 프로세서가 초기화되면 비동기 인식 프로세스가 호출되고 구성됩니다. 그런 다음 프로세서는 사용자 지정 이미지 소스에서 이미지 파일을 가져옵니다. 이미지 파일의 각 페이지마다 새 처리 작업이 생성되며, 이 작업은 인식 프로세스 중 하나로 전달됩니다. 한 파일의 모든 작업이 처리 대상으로 전달되었지만 아직 사용 중이 아닌 인식 프로세스가 있다면, 소스의 이미지 대기열에서 다음 이미지 파일을 가져와 처리에 넘깁니다. 이 작업은 첫 번째 이미지 페이지가 변환되어 사용자에게 전달될 때까지 계속됩니다. 페이지는 이미지 소스에서 가져온 순서대로 사용자에게 반환됩니다. 배치 프로세서로 다중 처리를 구성하려면 다음을 수행합니다.
  1. 이미지 소스와 그 안의 파일에 대한 액세스를 제공하는 IImageSourceIFileAdapter 인터페이스를 구현합니다.
  2. [선택 사항] 처리를 관리하려면 IAsyncProcessingCallback 인터페이스를 구현합니다. 이 인터페이스의 메서드를 사용하면 오류를 처리하거나 처리를 취소할 수 있습니다.
  3. [선택 사항] Engine 객체의 MultiProcessingParams 하위 객체를 사용해 다중 처리를 설정합니다. Batch Processor를 사용하는 경우 기본적으로 병렬 처리가 사용되므로 MultiProcessingMode 속성은 설정할 필요가 없습니다. RecognitionProcessesCount 속성을 사용해 실행할 프로세스 수를 조정하고, 필요한 경우 다른 속성 값도 지정합니다.
  4. 엔진 객체의 CreateBatchProcessor 메서드를 호출하여 BatchProcessor 객체를 가져옵니다.
  5. 이 객체의 Start 메서드를 호출하여 프로세서를 초기화하고 비동기 인식 프로세스를 호출합니다. 이 메서드를 호출할 때 이미지 소스를 지정하고 IAsyncProcessingCallback 인터페이스 및 매개변수 객체에 대한 참조를 전달할 수 있습니다.
  6. 메서드가 0을 반환할 때까지 루프에서 GetNextProcessedPage 메서드를 호출합니다. 이는 소스에 더 이상 이미지가 없고 처리된 모든 이미지가 사용자에게 반환되었음을 의미합니다.
GetNextProcessedPage 메서드가 반환한 페이지는 이 메서드를 다음에 호출할 때까지만 유지됩니다. 따라서 이 페이지를 저장하려면 GetNextProcessedPage 메서드를 다음에 호출하기 전에 FRPage 객체의 메서드를 사용해 저장하거나 IFRDocument::AddPage 메서드를 사용해 기존 문서에 추가해야 합니다.
ABBYY FineReader Engine 배포 패키지에는 배치 프로세서 사용 방법을 보여 주는 BatchProcessing 샘플이 포함되어 있습니다.

함께 보기

FRDocument BatchProcessor MultiProcessingParams 문서 페이지 순회