> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Recherche de date après une reconnaissance de qualité élevée ou faible

> Localisez les dates dans des images de mauvaise qualité en combinant les éléments Date, Character String et Object Collection dans l’exemple de FlexiLayout SearchOfDate.fsp.

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.

<div id="when-the-date-element-cannot-detect-a-date">
  ## Lorsque l’élément Date ne peut pas détecter une date
</div>

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.

<div id="the-searchofdatefsp-sample-project">
  ## Le projet d’exemple SearchOfDate.fsp
</div>

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 :

| Page   | Description                                                        |
| :----- | :----------------------------------------------------------------- |
| Page 1 | Le format de date peut être décrit à l’aide de l’élément **Date**. |
| Page 2 | Le mois de la date est écrit en français.                          |
| Page 3 | La date est soulignée.                                             |
| Page 4 | Le champ de date est parasité.                                     |
| Page 5 | La date est écrite à la main.                                      |

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**.

<div id="search-for-supported-date-formats-with-the-date-element">
  ## Recherche des formats de date pris en charge avec l’élément Date
</div>

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 :**.

<Note>
  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.
</Note>

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.

<div id="search-for-other-date-formats-with-a-character-string-element">
  ## Rechercher d'autres formats de date avec un élément Character String
</div>

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.

<Note>
  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**.
</Note>

<Frame>
  <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/edit_alph.gif?fit=max&auto=format&n=lqYknuOmCa79141v&q=85&s=6a285e2e59f7f19a0125c3e150e88979" alt="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." width="536" height="350" data-path="images/flexi-capture/fls/edit_alph.gif" />
</Frame>

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** :

```text theme={null}
if (DateField.IsNull == FALSE) then Dontfind();
```

ce qui équivaut à :

```text theme={null}
if not DateField.IsNull then Dontfind();
```

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.

<div id="capture-partially-recognized-dates-with-an-object-collection-element">
  ## Capturer les dates partiellement reconnues avec un élément Object Collection
</div>

À 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.

<Frame>
  <img src="https://mintcdn.com/abbyy/r-nfa7jujx5b9gKX/images/flexi-capture/fls/prop_search_elements.gif?fit=max&auto=format&n=r-nfa7jujx5b9gKX&q=85&s=824530b896543e43de095ddbc6a7fe18" alt="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." width="431" height="455" data-path="images/flexi-capture/fls/prop_search_elements.gif" />
</Frame>

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** :

```text theme={null}
if (DateField.IsNull == FALSE) then Dontfind();
```

<Note>
  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.
</Note>

<div id="define-the-date-block-region-from-alternativedategroup">
  ## Définir la Region du bloc Date à partir de AlternativeDateGroup
</div>

À 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**.

<Note>
  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.
</Note>

Vous pouvez également utiliser le code suivant dans la section **Expression**.

```text theme={null}
Rect OutputRect;
let dateGroup = SearchElements.DateGroup.AlternativeDateGroup;
if (dateGroup.DateField.IsNull == FALSE) then
outputRect = dateGroup.DateField.Rect;
else
outputRect = dateGroup.DateAsObjectCollection.Rect;
OutputRegion = outputRect;
```

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**.

<Frame>
  <img src="https://mintcdn.com/abbyy/r-nfa7jujx5b9gKX/images/flexi-capture/fls/search_date.png?fit=max&auto=format&n=r-nfa7jujx5b9gKX&q=85&s=49c5578cea473c4c03cec2281be1f73f" alt="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." width="532" height="498" data-path="images/flexi-capture/fls/search_date.png" />
</Frame>

<Note>
  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.
</Note>
