Passer au contenu principal
Les blocs FlexiLayout correspondent aux champs des documents dont les données doivent être capturées. Un bloc indique le type de données que le champ peut contenir, ainsi que les coordonnées de la zone de l’image où ce champ est susceptible de se trouver. La branche des blocs est signalée par dans l’arborescence FlexiLayout. ABBYY FlexiLayout™ Studio prend en charge les types de blocs suivants :
  • Text (signalé par l’icône ) sert à extraire des données textuelles L’agrandissement des régions des blocs de texte peut améliorer la qualité de la reconnaissance. Pour agrandir une région, double-cliquez sur l’élément Blocks pour ouvrir sa boîte de dialogue Propriétés, puis spécifiez les valeurs verticale et horizontale de la propriété Blocks result region inflate.
  • Barcode (signalé par l’icône ) sert à lire les code-barres
  • Checkmark (signalé par l’icône ) sert à reconnaître les coches
  • Picture (signalé par l’icône ) sert à traiter les objets qui n’ont pas été identifiés comme du texte lors de la pré-reconnaissance
  • Table (signalé par l’icône ) sert à extraire des données de tableaux
  • Group (signalé par l’icône ) sert à regrouper logiquement des blocs
  • Groupe de coches (signalé par l’icône ) sert à créer des groupes de coches. Seuls des blocs de coche peuvent être ajoutés à ce type de groupe ; vous ne pouvez pas y créer ni y déplacer des blocs d’autres types.
  • Repeating Group (signalé par l’icône ) sert à créer un groupe répétitif de blocs
  • Non-Recognized (signalé par l’icône ) sert à exclure une zone de la reconnaissance
Les blocs pour lesquels aucune zone d’image n’est spécifiée dans au moins une variante de mise en page comportent un carré vide dans le coin supérieur droit de l’icône : . Si un seul FlexiLayout est sélectionné (via l’élément Select Layout du menu contextuel de l’élément, ou via le même élément dans la section FlexiLayout, ou via l’élément Select Alternative Layout du menu contextuel du FlexiLayout), le programme vérifie la zone d’image uniquement dans ce FlexiLayout.
Les données des blocs sont extraites dans une application de capture de données telle qu’ABBYY FlexiCapture.

Propriétés du bloc

  • Name - le nom du bloc. Le nom d’un bloc peut contenir des lettres (caractères romains, caractères romains avec signes diacritiques, caractères cyrilliques), des chiffres et des caractères de soulignement. Le nom d’un bloc doit commencer par une lettre ou un caractère de soulignement. Les noms de bloc ne doivent pas contenir d’espaces ni de caractères spéciaux.
  • Type - le type du bloc (sélectionné lors de sa création). Le type du bloc doit correspondre au type d’objet(s) situé(s) dans la zone délimitée par le bloc.
  • Commentaire - un commentaire fourni par l’utilisateur (facultatif).
  • A des instances répétées - indique que le bloc sera constitué de plusieurs instances. Sélectionnez cette propriété si, par exemple, toutes les instances d’un groupe répétitifélément sont utilisées comme région du bloc.
  • Ordre de tri des instances - définit l’ordre dans lequel les instances du groupe doivent être réunies dans un bloc. Cette propriété n’est disponible que si A des instances répétées est sélectionné. Valeurs possibles :
    • De haut en bas - les instances sont réunies dans un bloc selon leur emplacement sur l’image, de haut en bas
    • De gauche à droite - les instances sont réunies dans un bloc selon leur emplacement sur l’image, de gauche à droite
    • De droite à gauche - les instances sont réunies dans un bloc selon leur emplacement sur l’image, de droite à gauche
    • Dans l’ordre de détection - les instances sont réunies dans un bloc dans l’ordre dans lequel les hypothèses sont générées. Les hypothèses sont générées par ordre décroissant de qualité. Si l’utilisateur a spécifié des conditions supplémentaires pour les instances, les hypothèses sont générées dans l’ordre défini par l’utilisateur. Ainsi, si vous avez besoin d’un ordre différent de l’ordre standard utilisé par le programme, vous pouvez spécifier l’ordre souhaité au moyen de conditions supplémentaires.
Les propriétés suivantes spécifient la zone de l’image à partir de laquelle les données doivent être extraites.
  • For Layout sélectionne la variante de mise en page où la zone de recherche est spécifiée.
  • Élément source - spécifie une zone de l’image identique à la Region de l’élément utilisé pour trouver le bloc sur l’image. Lorsque le FlexiLayout est appliqué à l’image, le programme recherche l’objet (ou les objets) décrit(s) par l’élément. C’est à partir de ces objets que les données seront capturées. Pour un groupe répétitif, vous pouvez soit sélectionner l’une des instances, soit utiliser toutes les instances (AllInstances). Pour plus de détails, voir Utilisation des instances d’un groupe répétitif comme éléments de référence, exclus ou sources.
  • Expression - définit une zone de l’image qui ne coïncide avec aucune des régions des éléments. Par exemple, vous pouvez fusionner les régions de certains éléments ainsi que l’espace qui les sépare en un seul bloc, étendre la région d’un élément d’une certaine valeur ou spécifier les coordonnées du bloc sans vous appuyer sur des éléments. Dans ce cas, la région du bloc peut être décrite dans le langage FlexiLayout.
La région d’un bloc est continue. Cela signifie que si vous créez une région à partir de rectangles séparés, les espaces entre eux seront remplis par de fins rectangles supplémentaires afin de rendre la région continue.
Cependant, un bloc peut se composer de plusieurs régions si toutes les instances d’un groupe répétitif sont utilisées comme élément de référence. La région d’un bloc de groupe est calculée à partir des régions des blocs enfants, tout comme la région des hypothèses. La région résultante est légèrement agrandie pour une meilleure visualisation. Un groupe de coches et un groupe de blocs classique n’ont pas d’autres paramètres que le nom et les commentaires. Les paramètres d’un groupe répétitif de blocs sont les mêmes que ceux des blocs ne faisant pas partie d’un groupe. L’option A des instances répétées est toujours activée pour eux. Les blocs enfants peuvent avoir ou non l’option A des instances répétées, mais une variable “Output instances” est toujours créée pour eux. Si un bloc à l’intérieur d’un groupe répétitif de blocs possède l’option A des instances répétées, cela signifie qu’il peut se répéter à l’intérieur de chaque instance du bloc parent.

Spécifier une région de bloc à l’aide d’instances d’un groupe répétitif

Si un bloc est défini à l’aide de plusieurs instances, la région du bloc se composera de plusieurs régions distinctes. Si vous utilisez une instance particulière d’un groupe répétitif (par ex. LastFound), la région du bloc est définie comme pour n’importe quel autre élément. Cependant, vous pouvez utiliser toutes les instances détectées (AllInstances). Pour utiliser plusieurs instances, sélectionnez l’option avoir des instances répétées. Vous pouvez également écrire du code pour le bloc à l’aide de la variable prédéfinie OutputInstances. Par exemple :
OutputInstances = SearchElements.PageHeader.AllInstances.UnionRect;
ABBYY FlexiCapture traite comme suit les blocs pour lesquels l’option avoir des instances répétées est activée :
  • pour les blocs autres que les tableaux, les instances spécifiées seront celles du champ correspondant
  • pour un bloc de tableau, les instances spécifiées seront traitées comme une seule instance du champ, c’est-à-dire qu’ABBYY FlexiCapture traitera un tel bloc comme un champ de type Table avec une région discontinue.

Règles de création de références vers des éléments pour des groupes répétitifs de blocs

Un groupe répétitif de blocs fait référence à un élément répétitif. Pour créer des instances d’un groupe répétitif de blocs, vous devez disposer d’au moins plusieurs instances d’élément. Par conséquent, l’un des ID doit être AllInstances. Étant donné que les éléments situés sous l’élément avec AllInstances ne peuvent pas avoir d’autres ID, cette condition signifie également que l’élément répétitif le plus bas a AllInstances. Les blocs enfants d’un groupe répétitif de blocs font référence aux éléments enfants du groupe répétitif d’éléments auquel le bloc parent fait référence. La référence doit avoir le même ID pour les instances. Exemple : si un bloc de groupe répétitif a la référence suivante : SearchElements..RepGr1.Instance(1).RepGr2.AllInstances, ses blocs enfants peuvent faire référence à l’élément RepGr1..RepGr2.Element uniquement de la manière suivante : SearchElements.RepGr1.Instance(1).RepGr2.AllInstances.Element. S’il n’y a pas d’attribut HasRepeatingInstances, vous pouvez uniquement faire référence aux sous-éléments du groupe de base qui ne contiennent pas de répétitions. À l’inverse, s’il y a un attribut HasRepeatingInstances, vous pouvez faire référence aux éléments qui contiennent des répétitions dans le groupe de base (et uniquement à toutes les instances à la fois). Exemples : Il y a un attribut HasRepeatingInstances SearchElements.RepGr1.Instance(1).RepGr2.AllInstances.RepGr3.AllInstaces.Element SearchElements.RepGr1.Instance(1).RepGr2.AllInstances.RepGr3.AllInstaces.RepGr4.AllInstances.Element Il n’y a pas d’attribut HasRepeatingInstances SearchElements.RepGr1.Instance(1).RepGr2.AllInstancess.Gr3.SubElement(where Gr3 is a simple group) SearchElements.RepGr1.Instance(1).RepGr2.AllInstances.SubElement
Si les références sont créées via l’élément source, la vérification est effectuée lors de la création du FlexiLayout, et si les références sont créées à l’aide du code avancé, une erreur sera détectée lors de la mise en correspondance du FlexiLayout.

Utilisation du langage FlexiLayout pour décrire l’emplacement d’un bloc

Pour spécifier la région d’un bloc, utilisez le champ Expression. Selon le type de bloc et selon que l’option avoir des instances répétées est sélectionnée, l’une des variables prédéfinies suivantes est utilisée : OutputRegion (de type Region), OutputTable (de type TableHypothesis) et OutputInstances (de type HypothesisInstances ou TableHypothesisInstances). Pour en savoir plus sur la variable prédéfinie pouvant être utilisée dans le champ Expression, consultez Variables prédéfinies.
Obtention de la région d’un élément, puis extension de 3 mm en largeur et de 5 mm en longueurOutputRegion = SomeElement.Rect; OutputRegion.Inflate( 3mm, 5mm );
Fusion des rectangles de région de deux éléments et obtention du rectangle qui circonscrit les rectangles fusionnésRect outputRect; outputRect = Element1.Rect Or Element2.Rect; OutputRegion = outputRect;
Fusion en une seule région des rectangles qui circonscrivent les régions de deux élémentsRectArray outputRects; outputRects = RectArray( Element1.Rect ); outputRects.Add: Element2.Rect; OutputRegion = Region( outputRects );
Fusion en une seule région des régions des objets correspondant à deux éléments différentsRectArray outputRects; outputRects = Element1.Rects; outputRects.Add( Element2.Rects ); OutputRegion = outputRects.Region;
Fusion des régions des objets appartenant à la région de Element1 et suppression des régions des objets appartenant à la région de Element2OutputRegion = FormRegion( Element1.Rects, Element2.Rects );
Utilisation d’un élément Table pour spécifier un bloc TableOutputTable = SearchElements.TableElement;
Utilisation d’instances d’hypothèses d’un élément donné pour spécifier un bloc TableOutputInstances = SearchElements.RepeatingGroup.AllInstances.TemplateElement;
Vous pouvez également utiliser la variable prédéfinie IsNull pour décrire la région d’un bloc. Cette variable indique si la région du bloc a été trouvée lors de la mise en correspondance du FlexiLayout. La valeur false signifie que la région a été trouvée, et la valeur true signifie qu’elle ne l’a pas été. La variable IsNull est initialisée avec la valeur false, c’est-à-dire que la région du bloc est considérée comme trouvée. Toutefois, il peut parfois être nécessaire de vérifier certaines conditions avant de conclure.
  1. Pour indiquer au programme de considérer la région du bloc comme trouvée si la largeur de la région de l’élément source dépasse 50 dots, saisissez le code suivant dans le champ Region Expression : if Element1.Width < 50dt then IsNull = true;
  2. Pour indiquer au programme de considérer que la région du bloc de Element1 a été trouvée, saisissez le code suivant dans le champ Region Expression : IsNull = Element1.IsNull
  3. Supposons que vous deviez utiliser Element1 et Element2 pour rechercher un bloc. Si au moins un des éléments n’a pas été trouvé, le bloc est considéré comme non trouvé. Rect outputRect; Let FieldLeft = Element1.Rect.Left; Let FieldRight = Element2.Rect.Right; Let FieldTop = Element1.Rect.Top; Let FieldBottom = Element2.Rect.Bottom; outputRect = Rect( FieldLeft, FieldTop, FieldRight, FieldBottom); if ((Element1.IsNull == True) or (Element2.IsNull == True) ) then {IsNull = true;} OutputRegion = outputRect;
Remarque. Ce code ne fonctionnera correctement que si la zone de recherche de Element1 se trouve au-dessus et à gauche de celle de Element2. Dans l’exemple ci-dessus, cette vérification n’est pas incluse par souci de simplicité. Dans le code réel, elle est nécessaire, et les valeurs des variables FieldLeft, FieldRight, FieldTop et FieldBottom doivent être ajustées. Sinon, l’appel de la fonction Rect renverra une erreur.