Scénarios d’utilisation
- Conversion de documents multipages comportant un grand nombre de pages. Il s’agit généralement de livres, de rapports longs, 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. Vous pouvez également, lorsque vous utilisez un pool d’Engines, traiter simultanément plusieurs documents multipages, mais la consommation de mémoire peut être très importante et même entraîner des erreurs « out of memory ».
- Conversion d’un grand nombre de documents d’une seule page. C’est le cas lorsque vous traitez des factures, des contrats, des lettres, etc. Le traitement parallèle est le plus simple dans cette situation, car les documents d’une page sont indépendants les uns des autres et ne nécessitent pas de grandes quantités de mémoire en même temps.
- Traitement d’un grand nombre d’images et recherche des informations nécessaires, 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, de sorte que 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 à 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é est prise en charge uniquement pour l’export au format PDF (sauf en 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 méthode de multitraitement la plus simple à mettre en œuvre, car vous n’avez pas besoin d’implémenter d’interfaces supplémentaires.
L’ouverture, le prétraitement, l’analyse et la reconnaissance sont effectués en parallèle ; la synthèse de documents est effectuée séquentiellement dans le processus principal, puis l’export vers les formats PDF (sauf en mode TextOnly) et PPTX est effectué en parallèle. -
Pour traiter un grand nombre de documents d’une page provenant d’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 de traitement sont effectuées en parallèle, car dans le cas de documents d’une page, la synthèse de page et la synthèse de documents sont effectuées séparément pour chaque page.
L’export parallèle n’est pas pris en charge dans les scénarios utilisant Batch Processor.
- Pour effectuer en parallèle le traitement complet d’un grand nombre de documents d’une page, vous pouvez utiliser un pool d’Engines chargés hors processus au moyen de COM. Cette méthode est la plus efficace en termes de vitesse et élimine automatiquement toutes les difficultés liées au multithreading : toutes les opérations sur les objets ABBYY FineReader Engine sont sérialisées au moyen de COM. Mais elle présente certaines limites :
- en raison de l’utilisation de COM, vous devez enregistrer FREngine.dll ;
- si votre code est écrit en C++, travailler avec COM demande plus de code répétitif que, par exemple, en C# ;
- dans ce cas, le traitement s’effectue dans un autre processus, vous ne pouvez donc pas ouvrir d’images à partir de la mémoire, et l’itération des résultats de reconnaissance prend plus de temps, car chaque requête doit être transmise à un autre processus puis renvoyée ;
- et enfin, charger plusieurs instances d’Engines implique une consommation mémoire plus importante, d’autant plus que, dans ce cas, toutes les étapes de traitement sont effectuées en parallèle et que plusieurs opérations de synthèse peuvent s’exécuter simultanément, ce qui consomme encore plus de mémoire.
- 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’une erreur de dépassement du délai d’attente survient, 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 pendant le traitement parallèle d’une page sont convertis en événements concernant l’ensemble du document.
Résultats des tests de vitesse
| <br /> | Documents d’une page | Un document de plusieurs pages | Recherche dans les résultats sans exportation |
|---|---|---|---|
| Traitement séquentiel | 60 | 51 | 87 |
| Traitement avec FRDocument | 41 | 117 | 57 |
| Traitement avec FRDocument (avec PageFlushingPolicy = PFP_KeepInMemory) | 55 | 141 | 82 |
| Traitement avec Batch Processor | 99 | 115 | 294 |
| Traitement à l’aide d’un pool de Engines | 165 | 10 | 102 |
Traitement avec l’objet FRDocument
- 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 de processeur disponibles sont tous deux supérieurs à un.
- 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.
- AddImageFile, AddImageFileFromMemory, AddImageFileFromStream, AddImageFileWithPassword, AddImageFileWithPasswordCallback
- Preprocess, PreprocessPages
- Analyze, AnalyzePages
- Recognize, RecognizePages
- Process, ProcessPages
- Export, ExportPages, ExportToMemory — uniquement pour l’export au format PDF (sauf en mode TextOnly) et au format PPTX
Code C#
Code C#
Traitement avec Batch Processor
- Implémentez les interfaces IImageSource et IFileAdapter, qui fournissent l’accès à la source d’images et aux fichiers qu’elle contient.
- [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.
- [facultatif] Configurez le traitement multiprocessus à l’aide du sous-objet MultiProcessingParams de l’objet Engine. Veuillez noter qu’il n’est pas nécessaire de définir la propriété MultiProcessingMode, car le traitement parallèle est utilisé par défaut si vous travaillez avec 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.
- Appelez la méthode CreateBatchProcessor de l’objet Engine pour obtenir l’objet BatchProcessor.
- Appelez la méthode Start de cet objet pour initialiser le processeur et démarrer les processus de reconnaissance asynchrones. Vous pouvez spécifier la source d’images, transmettre les références à l’interface IAsyncProcessingCallback et aux objets de paramètres dans l’appel de cette méthode.
- 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.
Code C#
Code C#
Traitement à l’aide d’un pool d’instances Engines
Code C#
Code C#
- Les autorisations des comptes peuvent être configurées à l’aide de l’utilitaire DCOM Config (saisissez DCOMCNFG sur la ligne de commande ou sélectionnez Control Panel > Administrative Tools > Component Services). Dans l’arborescence de la console, localisez le dossier Component Services > Computers > My Computer > DCOM Config, cliquez avec le bouton droit sur ABBYY FineReader Engine 12.5 Loader (Local Server), puis cliquez sur Properties. Une boîte de dialogue s’ouvre. Cliquez sur l’onglet Security. Sous Launch Permissions, cliquez sur Customize, puis sur Edit pour spécifier les comptes autorisés à lancer l’application.
Notez que sur un système d’exploitation 64 bits, l’application DCOM enregistrée est disponible dans la console MMC 32 bits, qui peut être exécutée à l’aide de la ligne de commande suivante :
- Pour enregistrer FREngine.dll lors de l’installation de votre application sur l’ordinateur d’un utilisateur final, utilisez l’utilitaire regsvr32. Si vous utilisez un système d’exploitation 64 bits, la version 64 bits de regsvr32 s’exécute par défaut. Utilisez la commande suivante :
- Si vous implémentez Engine en tant que serveur hors processus, spécifiez le mode séquentiel de traitement des documents en définissant la propriété MultiProcessingMode de l’objet MultiProcessingParams sur MPM_Sequential.
