Passer au contenu principal
Si vous traitez un grand nombre de documents, la Reconnaissance optique de caractères (OCR) peut être très gourmande en puissance de calcul. Il est souvent judicieux d’utiliser des systèmes multi-CPU pour accélérer le traitement, et ABBYY FineReader Engine offre plusieurs moyens d’exploiter les capacités de multiprocessus de votre configuration matérielle. Cette section présente les différents scénarios d’utilisation possibles et fournit des recommandations pour choisir le mode multiprocessus le mieux adapté à votre tâche, ainsi que des statistiques de test. Elle contient également des liens vers les exemples de code qui proposent des implémentations multiprocessus. Pour utiliser le multiprocessus, vous devez définir la propriété MultiProcessingParams de l’objet Engine avec les valeurs appropriées. ABBYY FineReader Engine prend en charge deux objets différents permettant le multiprocessus à partir d’une seule instance d’Engine. Il s’agit de l’objet FRDocument (voir Traitement avec l’objet FRDocument) et de l’objet BatchProcessor (voir Traitement à l’aide de Batch Processor).
Veuillez noter que le traitement parallèle nécessite plus de RAM que le traitement séquentiel. La recommandation générale pour une station de travail est de 350 MB * (nombre de cœurs) + 450 MB de RAM, et si vous traitez des documents en arabe ou dans des langues CJK — 850 MB * (nombre de cœurs) + 750 MB de RAM.

Scénarios d’utilisation

Nous partons du principe que vous traitez un grand nombre de documents. Cependant, il faut également tenir compte des résultats que vous souhaitez obtenir et choisir la meilleure façon de mettre en œuvre votre tâche. Voici les principaux scénarios à considérer :
  • Conversion de documents multipages contenant un grand nombre de pages. Il s’agit généralement de livres, de longs rapports, etc. Dans ce cas, vous pouvez reconnaître les pages du document en parallèle, puis effectuer la synthèse dans le processus principal et relancer ensuite l’export en parallèle. Si vous utilisez un pool d’Engines, vous pouvez également traiter simultanément plusieurs documents multipages, mais la consommation de mémoire peut être très importante, au point d’entraîner des erreurs de type « out of memory ».
  • Conversion d’un grand nombre de documents d’une page. C’est le cas, par exemple, lorsque vous traitez des factures, des contrats, des lettres, etc. Le traitement parallèle est alors la solution la plus simple, car les documents d’une page sont indépendants les uns des autres et ne nécessitent pas une grande quantité de mémoire simultanément.
  • Traitement d’un grand nombre d’images pour y rechercher des informations spécifiques, ou exploitation des résultats de reconnaissance d’une autre manière. Il est possible que vous n’ayez pas besoin de convertir la plupart d’entre elles dans un format modifiable ; dans ce cas, la vitesse de la synthèse et de l’export n’est pas un enjeu. L’opération exécutée dans plusieurs processus consiste alors à parcourir les blocs de mise en page et à accéder aux résultats de reconnaissance des blocs de texte.
Si vous souhaitez utiliser le traitement parallèle pour l’export, gardez à l’esprit que cette fonctionnalité n’est prise en charge que pour l’export au format PDF (à l’exception du mode TextOnly) et au format PPTX.

Recommandations et restrictions

  • Pour le traitement parallèle de documents multipages, nous recommandons d’utiliser FRDocument. C’est la solution multiprocessus la plus simple à mettre en œuvre, car vous n’avez aucune interface supplémentaire à implémenter.
    L’ouverture, le prétraitement, l’analyse et la reconnaissance sont effectués en parallèle ; la synthèse de documents est effectuée de manière séquentielle dans le processus principal, puis l’export aux formats PDF (sauf en mode TextOnly) et PPTX est effectué en parallèle.
  • Pour traiter un grand nombre de documents d’une page reçus depuis une source (par exemple, un scanner), nous recommandons BatchProcessor.
    L’avantage de cette méthode est qu’elle peut être utilisée lorsque vous ne connaissez pas à l’avance le nombre de documents, que ceux-ci peuvent être de types différents et qu’ils doivent être traités dès leur arrivée. Son inconvénient est qu’elle demande davantage d’efforts d’implémentation : vous devez implémenter des interfaces pour un adaptateur de fichiers et une source d’images personnalisée.
    Toutes les étapes du traitement sont effectuées en parallèle car, dans le cas de documents d’une page, la synthèse de la page et du document est effectuée séparément pour chaque page.
L’export parallèle n’est pas pris en charge dans les scénarios utilisant Batch Processor.
Pour intercepter et gérer les événements survenus pendant le traitement parallèle, vous pouvez utiliser l’interface IParallelProcessingCallback. Cette interface peut être très utile pour gérer les situations problématiques. Par exemple, lorsqu’un dépassement du délai d’attente se produit, l’interface IParallelProcessingCallback propose plusieurs solutions en fonction des préférences de l’utilisateur. Pour plus d’informations, consultez IParallelProcessingCallback::OnWaitIntervalExceeded.
Les événements survenus lors du traitement parallèle d’une page sont convertis en événements concernant l’ensemble du document.

Traitement à l’aide de l’objet FRDocument

Le nombre de processus à exécuter est détecté automatiquement en fonction du nombre de cœurs CPU physiques ou logiques disponibles, du nombre de cœurs CPU libres autorisés par la licence et du nombre de pages du document. Pour activer le mode multiprocessus, procédez comme suit :
  1. Définissez la valeur de la propriété MultiProcessingMode du sous-objet MultiProcessingParams de l’objet Engine. Le traitement parallèle est utilisé si cette propriété est définie sur MPM_Parallel ou MPM_Auto, et si le nombre de pages du document et le nombre de cœurs CPU disponibles sont tous deux supérieurs à un.
  2. Ajustez le nombre de processus à exécuter à l’aide de la propriété RecognitionProcessesCount et, si nécessaire, spécifiez les valeurs des autres propriétés.
Après avoir configuré les paramètres du multiprocessus, vous pouvez utiliser la procédure standard d’utilisation de FRDocument. ABBYY FineReader Engine démarrera automatiquement plusieurs processus de reconnaissance lorsque vous appellerez l’une des méthodes suivantes de l’objet FRDocument : Pour chaque page du document, une nouvelle tâche de traitement est créée et transmise à l’un des processus de reconnaissance. Lorsqu’un processus de reconnaissance termine la tâche, il reçoit la tâche de traitement suivante. Cela continue jusqu’à ce que toutes les tâches soient traitées.

Traitement avec Batch Processor

Lorsque Batch Processor est initialisé, des processus de reconnaissance asynchrones sont lancés et configurés. Le processeur récupère ensuite des fichiers image à partir d’une source d’images personnalisée. Pour chaque page du fichier image, une nouvelle tâche de traitement est créée, puis transmise à l’un des processus de reconnaissance. Si toutes les tâches d’un fichier ont été soumises au traitement, mais que tous les processus de reconnaissance ne sont pas occupés, le fichier image suivant de la file d’attente de la source est récupéré et envoyé au traitement. Cela continue jusqu’à ce que la première page d’image ait été convertie et renvoyée à l’utilisateur. Les pages sont renvoyées à l’utilisateur dans l’ordre dans lequel elles ont été extraites de la source d’images. Pour organiser le multiprocessus avec Batch Processor, procédez comme suit :
  1. Implémentez les interfaces IImageSource et IFileAdapter, qui permettent d’accéder à la source d’images et aux fichiers qu’elle contient.
  2. [facultatif] Implémentez l’interface IAsyncProcessingCallback pour gérer le traitement. Les méthodes de cette interface vous permettent de gérer les erreurs et/ou d’annuler le traitement.
  3. [facultatif] Configurez le multiprocessus à l’aide du sous-objet MultiProcessingParams de l’objet Engine. Notez qu’il n’est pas nécessaire de définir la propriété MultiProcessingMode, car le traitement parallèle est utilisé par défaut lorsque vous utilisez Batch Processor. Réglez le nombre de processus à exécuter à l’aide de la propriété RecognitionProcessesCount et spécifiez les valeurs des autres propriétés si nécessaire.
  4. Appelez la méthode CreateBatchProcessor de l’objet Engine pour obtenir l’objet BatchProcessor.
  5. Appelez la méthode Start de cet objet pour initialiser le processeur et lancer les processus de reconnaissance asynchrones. Vous pouvez spécifier la source d’images, transmettre les références à l’interface IAsyncProcessingCallback et les objets paramètres dans l’appel à cette méthode.
  6. Appelez la méthode GetNextProcessedPage dans une boucle jusqu’à ce qu’elle renvoie 0, ce qui signifie qu’il n’y a plus d’images dans la source et que toutes les images traitées ont été renvoyées à l’utilisateur.
La page renvoyée par la méthode GetNextProcessedPage n’existe que jusqu’au prochain appel de cette méthode. Par conséquent, si vous souhaitez enregistrer cette page, vous devez le faire à l’aide des méthodes de l’objet FRPage ou l’ajouter à un document existant à l’aide de la méthode IFRDocument::AddPage AVANT l’appel suivant de la méthode GetNextProcessedPage.
Le package de distribution d’ABBYY FineReader Engine inclut l’exemple BatchProcessing, qui montre comment utiliser Batch Processor.

Voir aussi

FRDocument BatchProcessor MultiProcessingParams Parcourir les pages d’un document