Skip to main content
Une hypothèse pour un élément peut être trouvée ou non. Une hypothèse trouvée est généralement formulée à partir d’un ou plusieurs objets d’image ou de leurs fragments (à l’exception de l’élément White Gap, qui peut ne contenir aucun objet d’image).

Regions et limites des hypothèses

Une hypothèse trouvée pour un élément simple est toujours une Region continue. Les hypothèses des éléments White Gap, Separator et Barcode sont toujours des rectangles uniques. Si une hypothèse est formulée à partir d’un jeu d’objets d’image détectés, par exemple une hypothèse pour un élément Paragraph, la Region de l’hypothèse est construite à partir du tableau de rectangles des objets détectés. La Region créée de cette manière peut être obtenue à l’aide de la méthode Region de l’hypothèse. Lors de l’affichage de la Region de l’hypothèse sur l’image, ou lors de la création d’un bloc à partir de l’hypothèse, les limites de la Region ne suivent pas exactement celles de chaque rectangle. À la place, les limites de la zone de recherche sont lissées pour améliorer la visualisation. Une Region créée de cette manière peut être obtenue à l’aide de la méthode SimplifiedRegion de l’hypothèse. Les méthodes Region et SimplifiedRegion peuvent être utilisées soit dans le champ Advanced pre-search relations de l’onglet Advanced (lors de la définition de la zone de recherche de l’élément), soit dans le champ Region expression lors de la définition des propriétés du bloc et de l’utilisation des éléments déjà trouvés. Si une hypothèse n’a pas été trouvée, elle coïncide avec le rectangle flou de sa zone de recherche. Lors de l’affichage d’une hypothèse non trouvée sur l’image, FlexiLayout Studio dessine le rectangle externe du rectangle flou. Les limites Left, top, Right et Bottom de toute hypothèse sont des plages. Pour chaque hypothèse trouvée, la plage se réduit à un point, c’est-à-dire Left.Start = Left.End, top.Start = top.End, etc. Pour une hypothèse non trouvée, les plages des limites coïncident avec celles de sa zone de recherche.

Accès aux hypothèses dans le code FlexiLayout

L’accès aux hypothèses générées et à leurs propriétés dans le code des boîtes de dialogue correspondantes des blocs et des éléments fournit des outils supplémentaires pour configurer FlexiLayout. Les hypothèses d’élément sont accessibles par le nom des éléments. Pour accéder à une hypothèse de l’élément actuel dans le champ Advanced post-search relations, vous pouvez utiliser uniquement le nom de la propriété. Les hypothèses et leurs propriétés sont accessibles en mode lecture seule. Les hypothèses des éléments sont accessibles dans les champs Advanced pre-search relations et Advanced post-search relations de l’onglet Advanced de la boîte de dialogue Properties de l’élément, ainsi que dans le champ Region expression de la boîte de dialogue Properties du bloc. Dans Advanced pre-search relations, vous pouvez accéder aux hypothèses générées (et à leurs propriétés) pour tous les éléments situés au-dessus de l’élément actuel dans l’arborescence FlexiLayout. Dans Advanced post-search relations, vous pouvez accéder aux hypothèses générées pour les éléments situés au-dessus de l’élément actuel dans l’arborescence FlexiLayout, ainsi qu’à l’hypothèse de l’élément actuel lui-même. Dans Region expression, vous pouvez accéder aux hypothèses (et à leurs propriétés) pour tous les éléments.

Propriétés des hypothèses pour tous les types d’éléments

Le tableau suivant répertorie les propriétés des hypothèses pour tous les types d’éléments.

Exemple : vérifier l’absence d’hypothèse nulle avant d’accéder aux propriétés

Avant d’accéder aux propriétés d’une hypothèse pour un élément simple ou Group, assurez-vous que l’hypothèse concernée n’est pas une hypothèse nulle (appelez sa propriété IsNull). L’accès à une propriété d’une hypothèse nulle (qui correspond à un élément non détecté) provoque une erreur. Prenons un exemple qui utilise le projet de l’Exemple 1, disponible sur le CD-ROM du programme. Supposons qu’un identifiant figure sur votre document sous la forme d’un Barcode et que vous souhaitiez que votre FlexiLayout associe uniquement les documents dont la valeur du Barcode est 1556897142240. Dans la section Advanced post-search relations de l’élément qui décrit les propriétés et les contraintes de recherche du Barcode (l’élément IdentityNumber dans l’Exemple 1), écrivez le code suivant :
Cliquez sur Apply ou Check. Le compilateur ne détecte aucune erreur de syntaxe. Le code semble donc correct. Toutefois, si vous essayez d’appliquer le FlexiLayout à une page quelconque de Sample 1, le message d’erreur suivant s’affiche : Error in element “MainGroup.IdentityNumber”, Advanced relations section: Attempt to access undefined hypothesis MainGroup.IdentityNumber. La cause de cette erreur est la suivante. FlexiLayout Studio trouve une hypothèse pour l’élément Barcode. Il compare ensuite la valeur du Barcode à la valeur spécifiée dans le code. Si les valeurs sont différentes, le code Quality: 0; ramène la valeur de l’hypothèse à 0. Une hypothèse nulle est alors générée pour cet élément, et FlexiLayout Studio vérifie également pour celle-ci la condition value != "1556897142240". Or, comme il n’est pas permis d’accéder à la valeur d’une hypothèse nulle (puisqu’elle ne possède pas cette propriété), FlexiLayout Studio affiche le message d’erreur « …undefined hypothesis… ». Ajustez donc le code comme suit :
Le code ci-dessus fonctionne uniquement pour un élément obligatoire. Pour un élément facultatif, adaptez le code comme suit :
Sinon, seule la qualité de l’hypothèse réelle est réinitialisée à 0. Cela entraîne FlexiLayout Studio à générer une hypothèse nulle, pour laquelle la condition if not IsNull n’est pas exécutée. Par conséquent, la qualité de l’hypothèse finale (nulle) reste identique à celle spécifiée dans les propriétés de l’élément (0.97 si la valeur par défaut a été conservée), et FlexiLayout Studio continue la mise en correspondance du FlexiLayout, même sans l’élément concerné. Si vous ajoutez else {Quality: 0;} au code, l’instruction est exécutée pour toutes les hypothèses (y compris l’hypothèse nulle) et la mise en correspondance du FlexiLayout s’arrête, car toute la chaîne d’hypothèses est également réinitialisée à 0 au niveau de cet élément.

Comparaison des méthodes Region() et SimplifiedRegion()

Les méthodes Region Region() et Region SimplifiedRegion() renvoient toutes deux la Region d’un élément, mais la méthode Region Region() renvoie la Region exacte :
Capture d’écran de la Region exacte de l’hypothèse renvoyée par la méthode Region() dans ABBYY FlexiLayout Studio, qui suit les limites des objets détectés.
La méthode Region SimplifiedRegion() renvoie le rectangle créé à partir des coordonnées des limites :
Capture d’écran de la Region rectangulaire simplifiée de l’hypothèse renvoyée par la méthode SimplifiedRegion() dans ABBYY FlexiLayout Studio, créée à partir des coordonnées des limites.