Zum Hauptinhalt springen
Wenn Sie große Mengen an Dokumenten verarbeiten, kann Optical Character Recognition (OCR) die Rechenleistung stark beanspruchen. Oft ist es sinnvoll, Systeme mit mehreren CPUs einzusetzen, um die Verarbeitungsgeschwindigkeit zu erhöhen. ABBYY FineReader Engine bietet mehrere Möglichkeiten, die Multiprocessing-Funktionen Ihrer Hardwarekonfigurationen zu nutzen. In diesem Abschnitt werden die möglichen Einsatzszenarien beschrieben und Empfehlungen für die Auswahl des geeigneten Multiprocessing-Modus für Ihre Aufgabe gegeben, ergänzt durch Teststatistiken. Außerdem finden Sie Links zu den Codebeispielen, die Implementierungen für Multiprocessing bereitstellen. Um Multiprocessing zu verwenden, müssen Sie die Eigenschaft MultiProcessingParams des Engine-Objekts auf die entsprechenden Werte setzen. ABBYY FineReader Engine unterstützt zwei verschiedene Objekte, die Multiprocessing aus einer einzelnen Engine-Instanz bereitstellen: das FRDocument-Objekt (siehe Verarbeitung mit dem FRDocument-Objekt) und das BatchProcessor-Objekt (siehe Verarbeitung mit Batch Processor).
Bitte beachten Sie, dass die Parallelverarbeitung mehr RAM als die sequenzielle Verarbeitung erfordert. Die allgemeine Empfehlung für eine Workstation lautet 350 MB * (Anzahl der Kerne) + 450 MB RAM und, wenn Sie Dokumente in Arabisch oder CJK-Sprachen verarbeiten, 850 MB * (Anzahl der Kerne) + 750 MB RAM.

Anwendungsszenarien

Wir gehen davon aus, dass Sie eine große Anzahl von Dokumenten verarbeiten. Dabei müssen jedoch auch die Ergebnisse berücksichtigt werden, die Sie erhalten möchten, damit Sie die beste Vorgehensweise für Ihre Aufgabe wählen können. Folgende Szenarien sind zu beachten:
  • Konvertierung mehrseitiger Dokumente mit einer hohen Seitenzahl. Dazu gehört in der Regel die Verarbeitung von Büchern, langen Berichten usw. In diesem Fall können Sie die Seiten des Dokuments parallel erkennen, anschließend die Synthese im Hauptprozess durchführen und danach erneut parallel exportieren. Wenn Sie einen Pool von Engines verwenden, können Sie auch mehrere mehrseitige Dokumente gleichzeitig verarbeiten, allerdings kann der Speicherverbrauch sehr hoch sein und sogar zu „Nicht genügend Arbeitsspeicher“-Fehlern führen.
  • Konvertierung einer großen Anzahl einseitiger Dokumente. Dies ist der Fall, wenn Sie Rechnungen, Verträge, Briefe usw. verarbeiten. Die Parallelverarbeitung ist in diesem Szenario am einfachsten, da einseitige Dokumente nicht voneinander abhängen und nicht gleichzeitig große Mengen an Speicher benötigen.
  • Verarbeitung einer großen Anzahl von Bildern und deren Durchsuchung nach benötigten Informationen oder anderweitige Arbeit mit Erkennungsergebnissen. Möglicherweise müssen Sie die meisten davon nicht in ein bearbeitbares Format konvertieren, sodass die Geschwindigkeit von Synthese und Export keine Rolle spielt. Der Vorgang, der in mehreren Prozessen ausgeführt wird, besteht darin, Layout-Blöcke zu durchlaufen und auf die Erkennungsergebnisse für Textblöcke zuzugreifen.
Wenn Sie die Parallelverarbeitung für den Export verwenden möchten, beachten Sie, dass diese Funktion nur für den Export in PDF- (außer im Modus TextOnly) und PPTX-Formate unterstützt wird.

Empfehlungen und Einschränkungen

  • Für die Parallelverarbeitung mehrseitiger Dokumente empfehlen wir die Verwendung von FRDocument. Dies ist die am einfachsten zu implementierende Methode für das Multiprocessing, da Sie keine zusätzlichen Schnittstellen implementieren müssen.
    Das Öffnen, die Vorverarbeitung, die Analyse und die Erkennung werden parallel ausgeführt; die Dokumentensynthese erfolgt sequenziell im Hauptprozess. Anschließend wird der Export in die Formate PDF (außer im Modus TextOnly) und PPTX parallel ausgeführt.
  • Um viele einseitige Dokumente zu verarbeiten, die von einer Quelle (z. B. einem Scanner) empfangen werden, empfehlen wir BatchProcessor.
    Der Vorteil dieser Methode besteht darin, dass sie sich eignet, wenn Sie die Anzahl der Dokumente im Voraus nicht kennen, die Dokumente unterschiedliche Typen haben können und direkt beim Eintreffen verarbeitet werden müssen. Der Nachteil ist, dass sie einen höheren Implementierungsaufwand erfordert: Sie müssen Schnittstellen für einen Dateiadapter und eine benutzerdefinierte Bildquelle implementieren.
    Alle Verarbeitungsstufen werden parallel ausgeführt, da bei einseitigen Dokumenten die Seiten- und die Dokumentensynthese für jede Seite separat erfolgen.
Der parallele Export wird in Szenarien mit Batch Processor nicht unterstützt.
Um Ereignisse abzufangen und zu verarbeiten, die während der Parallelverarbeitung auftreten, können Sie die Schnittstelle IParallelProcessingCallback verwenden. Diese Schnittstelle kann bei der Behandlung problematischer Situationen sehr nützlich sein. Tritt beispielsweise ein Timeout-Fehler auf, bietet die Schnittstelle IParallelProcessingCallback je nach Benutzereinstellungen mehrere Möglichkeiten, das Problem zu lösen. Weitere Informationen finden Sie unter IParallelProcessingCallback::OnWaitIntervalExceeded.
Ereignisse, die während der Parallelverarbeitung einer Seite auftreten, werden in Ereignisse für das gesamte Dokument umgewandelt.

Verarbeitung mit dem FRDocument-Objekt

Die Anzahl der auszuführenden Prozesse wird automatisch anhand der Anzahl der verfügbaren physischen oder logischen CPU-Kerne, der Anzahl der in der Lizenz verfügbaren freien CPU-Kerne und der Anzahl der Seiten im Dokument ermittelt. Gehen Sie wie folgt vor, um den Multiprocessing-Modus zu aktivieren:
  1. Legen Sie den Wert der Eigenschaft MultiProcessingMode des Unterobjekts MultiProcessingParams des Objekts Engine fest. Die Parallelverarbeitung wird verwendet, wenn diese Eigenschaft auf MPM_Parallel oder MPM_Auto gesetzt ist und sowohl die Anzahl der Seiten im Dokument als auch die Anzahl der verfügbaren CPU-Kerne größer als eins ist.
  2. Passen Sie die Anzahl der auszuführenden Prozesse mit der Eigenschaft RecognitionProcessesCount an und geben Sie bei Bedarf die Werte anderer Eigenschaften an.
Nach dem Konfigurieren der Multiprocessing-Einstellungen können Sie mit FRDocument wie gewohnt arbeiten. ABBYY FineReader Engine startet automatisch mehrere Erkennungsprozesse, wenn Sie eine der folgenden Methoden des FRDocument-Objekts aufrufen: Für jede Seite des Dokuments wird eine neue Verarbeitungsaufgabe erstellt und an einen der Erkennungsprozesse übergeben. Sobald ein Erkennungsprozess die Aufgabe abgeschlossen hat, erhält er die nächste Verarbeitungsaufgabe. Dies wird fortgesetzt, bis alle Aufgaben verarbeitet sind.

Verarbeitung mit Batch Processor

Wenn Batch Processor initialisiert wird, werden asynchrone Erkennungsprozesse gestartet und konfiguriert. Anschließend bezieht der Prozessor Bilddateien aus einer benutzerdefinierten Bildquelle. Für jede Seite einer Bilddatei wird eine neue Verarbeitungsaufgabe erstellt und an einen der Erkennungsprozesse übergeben. Wenn alle Aufgaben für eine Datei zur Verarbeitung übergeben wurden, aber noch nicht alle Erkennungsprozesse ausgelastet sind, wird die nächste Bilddatei aus der Bild-Warteschlange der Quelle entnommen und zur Verarbeitung übergeben. Dies wird so lange fortgesetzt, bis die erste Bildseite konvertiert und an den Benutzer übergeben wurde. Die Seiten werden dem Benutzer in der Reihenfolge zurückgegeben, in der sie aus der Bildquelle entnommen wurden. Gehen Sie wie folgt vor, um Multiprocessing mit Batch Processor einzurichten:
  1. Implementieren Sie die Schnittstellen IImageSource und IFileAdapter, die den Zugriff auf die Bildquelle und die darin enthaltenen Dateien bereitstellen.
  2. [optional] Implementieren Sie die Schnittstelle IAsyncProcessingCallback, um die Verarbeitung zu steuern. Mit den Methoden dieser Schnittstelle können Sie Fehler behandeln und/oder die Verarbeitung abbrechen.
  3. [optional] Konfigurieren Sie Multiprocessing mithilfe des Unterobjekts MultiProcessingParams des Objekts Engine. Beachten Sie, dass Sie die Eigenschaft MultiProcessingMode nicht festlegen müssen, da bei der Arbeit mit Batch Processor standardmäßig Parallelverarbeitung verwendet wird. Legen Sie die Anzahl der auszuführenden Prozesse mit der Eigenschaft RecognitionProcessesCount fest und geben Sie bei Bedarf die Werte anderer Eigenschaften an.
  4. Rufen Sie die Methode CreateBatchProcessor des Engine-Objekts auf, um das BatchProcessor-Objekt abzurufen.
  5. Rufen Sie die Methode Start dieses Objekts auf, um den Prozessor zu initialisieren und asynchrone Erkennungsprozesse zu starten. In diesem Methodenaufruf können Sie die Bildquelle angeben und Verweise auf die Schnittstelle IAsyncProcessingCallback sowie auf Parameterobjekte übergeben.
  6. Rufen Sie die Methode GetNextProcessedPage in einer Schleife auf, bis die Methode 0 zurückgibt. Das bedeutet, dass sich keine weiteren Bilder mehr in der Quelle befinden und alle verarbeiteten Bilder an den Benutzer zurückgegeben wurden.
Die von der Methode GetNextProcessedPage zurückgegebene Seite existiert nur bis zum nächsten Aufruf dieser Methode. Wenn Sie diese Seite daher speichern möchten, müssen Sie sie mithilfe der Methoden des Objekts FRPage speichern oder sie mithilfe der Methode IFRDocument::AddPage zu einem vorhandenen Dokument hinzufügen, BEVOR die Methode GetNextProcessedPage das nächste Mal aufgerufen wird.
Das ABBYY FineReader Engine Distribution Package enthält das Beispiel BatchProcessing, das zeigt, wie Batch Processor verwendet wird.

Siehe auch

FRDocument BatchProcessor MultiProcessingParams Dokumentseiten durchlaufen