Passer au contenu principal
Cette section décrit plusieurs méthodes courantes pour créer des FlexiLayouts qui trouvent des champs de date dans des images de mauvaise qualité. De telles images sont assez fréquentes, avec divers défauts de numérisation dus principalement à des paramètres de numérisation incorrects. Par exemple, l’image peut être trop claire ou trop sombre si les paramètres de luminosité ne sont pas corrects. Il peut en résulter une perte d’informations dans l’image, ou bien certaines parties de l’image peuvent être bruitées.

Lorsque l’élément Date ne peut pas détecter une date

FlexiLayout Studio propose un élément Date spécial, utilisé pour détecter les dates. Cependant, lors de la création d’un FlexiLayout, vous pouvez constater que cet élément est insuffisant. Cela peut se produire lorsque la date figurant sur les documents ne correspond à aucun des formats disponibles dans l’élément Date. Par exemple, FlexiLayout Studio permet d’utiliser les langues suivantes pour spécifier le mois dans le champ de date : anglais, tchèque, danois, néerlandais, estonien, finnois, français, allemand, grec, hongrois, italien, letton, lituanien, norvégien, polonais, portugais, russe, espagnol, suédois, turc. Si le mois est écrit en toutes lettres dans une langue autre que celles de la liste, la date ne correspond à aucun des formats disponibles, vous ne pouvez donc pas la détecter à l’aide d’un élément Date. Des erreurs de recherche de date peuvent également se produire si l’image comporte des éléments qui ne peuvent pas être supprimés. Par exemple, la date peut être soulignée sans qu’aucun espace visible n’apparaisse entre elle et le soulignement, barrée, ou écrite dans des cases de caractère avec des séparateurs noirs (cadres, peignes). L’impossibilité d’utiliser l’élément Date pour rechercher une date peut aussi être due à la présence de taches dans la zone de recherche, ou au fait que la date n’est pas saisie au clavier mais remplie à la main.

Le projet d’exemple SearchOfDate.fsp

La meilleure façon d’organiser la recherche d’un champ de date est décrite dans le projet d’exemple SearchOfDate.fsp (dossier %public%\ABBYY\FlexiCapture\12.0\Samples\FLS\Tips and Tricks\Date). Le projet contient cinq pages : L’objectif est de trouver la date dans toutes les images, y compris celles dont le format de date n’est pas pris en charge par l’élément Date.

Recherche des formats de date pris en charge avec l’élément Date

Tous les éléments décrivant le champ de date sont regroupés dans un élément DateGroup. Tout d’abord, ce groupe contient un élément qui recherche le nom du champ de date. Dans l’exemple de projet, il s’agit d’un élément de type Static Text nommé DateHeader avec pour seule valeur Date :.
La configuration des contraintes de recherche pour tous les éléments dans la section Relations n’est pas difficile et n’est donc pas décrite ici. Vous pouvez la consulter directement dans le projet.
Le groupe contient également un élément de type Date nommé DateField. Cet élément recherche les champs de date dont le format est pris en charge par l’élément Date. Comme le montre le projet, l’élément Date ne peut détecter la date que sur la première page.

Rechercher d’autres formats de date avec un élément Character String

Pour rechercher des dates sur les autres pages, le projet utilise un élément Character String nommé DateAsString. Cet élément utilise un alphabet pour représenter tous les caractères susceptibles d’apparaître dans les images.
Si le contenu d’un champ de données peut être structuré et présente un format qui n’est pas pris en charge par l’élément Date, il est conseillé de décrire ce format à l’aide d’une expression régulière plutôt que de spécifier un alphabet.Toutefois, vous devez avoir la certitude que les images traitées sont de très bonne qualité, car une expression régulière suppose une correspondance à 100 % entre le champ et la structure décrite (les alphabets, en revanche, autorisent un certain pourcentage d’erreurs, spécifié dans les propriétés de l’élément). Les alphabets constituent donc un outil plus flexible lorsque la précision de la reconnaissance ne peut pas être garantie.Si vous savez que le mois dans la date sera écrit en toutes lettres dans la même langue que la langue de pré-reconnaissance, il peut être judicieux de diviser le champ de date en trois sections (jour, mois, année) et de rechercher séparément le champ du mois à l’aide d’un élément de type Static Text.Un tel élément Static Text doit décrire toutes les variantes possibles du mois (par exemple, les noms complets et abrégés du mois dans la langue considérée). Les champs du jour et de l’année peuvent ensuite être trouvés à droite et à gauche du mois au moyen d’éléments Character String.
Capture d’écran de l’éditeur d’alphabet dans ABBYY FlexiLayout Studio utilisé pour spécifier les caractères autorisés pour l’élément Character String DateAsString.
Pour optimiser la mise en correspondance de FlexiLayout, la condition suivante est définie dans le champ Relations avancées avant recherche pour l’élément DateAsString :
ce qui équivaut à :
Cette condition signifie qu’une recherche de la date sous forme de chaîne de caractères n’est lancée que si la date ne peut pas être détectée à l’aide d’un élément Date. Comme le montre le projet, l’élément DateAsString trouve la date sur les autres pages du projet, là où l’élément Date n’a pas pu la détecter.

Capturer les dates partiellement reconnues avec un élément Object Collection

À la page 4, toutefois, la string détectée ne contient qu’une partie du champ de date. Si vous examinez les résultats de pré-reconnaissance pour le champ de date (en cliquant sur Show Raw Objects dans la barre d’outils), la raison de cette détection partielle devient claire. La zone de recherche contient non seulement des objet texte mais aussi d’autres types d’objets : Picture et Punctuation mark. Cette situation est typique des images de faible qualité : lors de la pré-reconnaissance, les objet texte ne sont pas toujours reconnus.
Capture d’écran des objets bruts de pré-reconnaissance dans ABBYY FlexiLayout Studio montrant que la zone de recherche du champ de date contient des objets de type texte, image et signe de ponctuation.
Pour trouver tous les objets associés au champ de date, le projet utilise un élément Object Collection nommé DateAsObjectCollection. Tous les types d’objets détectés dans le champ de date lors de la pré-reconnaissance sont spécifiés dans les propriétés de l’élément. Pour optimiser la mise en correspondance de FlexiLayout, la condition suivante est définie dans le champ Relations avancées avant recherche pour les éléments DateAsObjectCollection et DateAsString :
La condition if (DateAsString.IsNull == FALSE) then Dontfind() ne peut pas être ajoutée aux propriétés avancées de l’élément DateAsObjectCollection, car, comme le montre l’exemple, la string détectée peut ne contenir qu’une partie de la date.

Définir la Region du bloc Date à partir de AlternativeDateGroup

À ce stade, le jeu d’éléments décrivant les conditions de recherche des champs de date est complet. L’élément Group SearchElements.DateGroup.AlternativeDateGroup, qui se compose des éléments DateField, DateAsString et DateAsObjectCollection, est spécifié dans l’arborescence du projet comme élément source du bloc Date. Comme la méthode Dontfind() a été utilisée pour décrire les propriétés des éléments DateAsString et DateAsObjectCollection, la Region réelle du bloc détecté correspondra soit à la Region trouvée par l’hypothèse pour l’élément Date, soit à la combinaison des Regions des éléments DateAsObjectCollection et DateAsString. Dans ce dernier cas, la Region de l’élément DateAsString est censée faire partie de la Region de l’élément DateAsObjectCollection ; la Region résultante sera donc celle de l’élément DateAsObjectCollection.
Dans ce cas, vous pouvez spécifier l’élément Group SearchElements.DateGroup.AlternativeDateGroup comme élément source, car la situation est relativement simple. La Region du groupe est une combinaison des Regions de ses sous-éléments détectés.La méthode Dontfind() permet d’ignorer la recherche de certains sous-éléments. Ainsi, la Region de l’élément Group SearchElements.DateGroup.AlternativeDateGroup correspondra à celle du sous-élément. Dans l’exemple donné, la méthode Dontfind() aide non seulement à optimiser la mise en correspondance de FlexiLayout, mais simplifie aussi la description des blocs.
Vous pouvez également utiliser le code suivant dans la section Expression.
L’utilisation d’une Expression offre des possibilités supplémentaires. Par exemple, vous pouvez vérifier si la Region de l’élément DateAsString fait bien partie de la Region de DateAsObjectCollection.
Capture d’écran de la section Expression dans ABBYY FlexiLayout Studio, montrant le code en langage FlexiLayout qui définit la Region de sortie du bloc Date à partir des éléments AlternativeDateGroup dans le projet SearchOfDate.fsp.
L’utilisation d’un élément Character String pour rechercher un champ de date, sans définir le format de la string ni utiliser d’élément Object Collection, comme dans l’exemple donné, peut donner de bons résultats si la zone de recherche du champ de date peut être clairement délimitée.Toutefois, s’il y a plusieurs chaînes de caractères dans la zone de recherche, le format de la string doit être décrit à l’aide d’une expression régulière ou d’un alphabet plus restreint. Sinon, l’hypothèse finale risque de ne pas être satisfaisante.Avec un élément Character String, vous pouvez limiter le nombre de caractères dans une string, le nombre de fins de mots et la longueur des espaces afin d’écarter les hypothèses erronées. Si un élément Object Collection est utilisé, l’hypothèse inclura tous les objets de l’image situés dans la zone de recherche et répondant aux contraintes de taille des objets.