Passer au contenu principal
Une fois les images examinées, vous remarquerez que :
  • Sur certains documents, le champ Date de la facture se trouve à droite du nom du champ et, sur d’autres, en dessous. Nous limiterons donc la zone de recherche à des rectangles situés à droite du nom et en dessous de celui-ci.
  • Nous utiliserons un élément Date pour rechercher la date. De plus, nous définirons la condition suivante : si le nom du champ n’est pas détecté, ne recherchez pas les données du champ.
  • Il arrive assez souvent que les dates soient reconnues de manière peu fiable. Cela peut être dû à des défauts de numérisation, à des formats de date invalides, etc. Nous ajouterons donc un élément supplémentaire Character String au cas où l’élément Date ne trouverait aucune date.
Pour définir les paramètres communs à tous les éléments, nous allons créer un élément de type Group. Pour créer un élément grDate de type Group :
  1. Dans l’élément InvoiceHeader, créez un élément de type Group et nommez-le grDate.
  2. Cliquez sur l’onglet Advanced et définissez des contraintes de recherche supplémentaires : limitez la zone de recherche à un tableau de rectangles composé d’un rectangle à droite du nom du champ et d’un rectangle sous le nom du champ, avec un certain décalage. En langage FlexiLayout, cette contrainte peut s’écrire comme suit : RectArray DataRegion; Let r1= Rect (kwInvoiceDate.Rect.Right, kwInvoiceDate.Rect.Top -20dt, kwInvoiceDate.Rect.Right + 650dt, kwInvoiceDate.Rect.Bottom + 50dt); Let r2 = Rect (kwInvoiceDate.Rect.Left - 150dt, kwInvoiceDate.Rect.Bottom, kwInvoiceDate.Rect.Right + 100dt, kwInvoiceDate.Rect.Bottom + 100dt);
DataRegion = RectArray (r1); DataRegion.Add (r2); RestrictSearchArea (DataRegion); Pour créer un élément InvoiceDate :
  1. Dans l’élément InvoiceHeader.grDate, créez un élément de type Date et nommez-le InvoiceDate.
  2. Cliquez sur l’onglet Date.
  3. Spécifiez tous les formats de date possibles pour l’élément InvoiceDate :
  1. Sur certaines images, la zone de recherche du champ Date de la facture inclura les éléments kwInvoiceNumber et InvoiceNumber déjà détectés. Pour éviter que le programme ne considère les valeurs de ces éléments comme des hypothèses pour le champ Date de la facture, excluez ces éléments de la zone de recherche :
    • Cliquez sur le bouton Add… à côté du champ Exclude regions of elements.
    • Sélectionnez kwInvoiceNumber dans la liste des éléments.
    • Cliquez sur OK. La chaîne SearchElements.InvoiceHeader.kwInvoiceNumber apparaîtra dans le champ Exclude regions of elements.
Répétez les étapes ci-dessus pour l’élément SearchElements.InvoiceHeader.InvoiceNumber.
  1. Cliquez sur l’onglet Advanced.
  2. Le champ Date de la facture n’est pas un élément obligatoire. Toutefois, si un document contient une date (dans le champ Date de la facture), le nom de champ correspondant est toujours présent dans le document (décrit plus haut par l’élément kwInvoiceDate). Vous pouvez donc définir une condition de recherche supplémentaire dans relations avancées de pré-recherche :Rechercher l’objet image uniquement si kwInvoiceDate a été détecté. En langage FlexiLayout, cette condition peut s’écrire comme suit : If InvoiceHeader.kwInvoiceDate.IsNull Then DontFind();
  3. Excluez temporairement l’élément InvoiceFooter et exécutez l’association du FlexiLayout.
Pour les images de mauvaise qualité, lorsque les résultats de reconnaissance ne correspondent à aucun des paramètres standard de l’élément Date, nous ajouterons un élément alternatif qui utilisera des conditions plus souples pour rechercher le champ Date de la facture. Pour créer un élément InvoiceDateAsString :
  1. Dans l’élément InvoiceHeader.grDate, créez un élément de type Character String et nommez-le InvoiceDateAsString.
  2. Cliquez sur l’onglet Character String.
  3. Spécifiez l’alphabet : ,-./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
  4. Définissez le pourcentage de caractères hors alphabet sur 30 %.
  5. Dans le champ Nombre de caractères, spécifiez l’intervalle flou {-1, 8, 14, INF} pour la longueur de la chaîne de caractères, en partant du principe que les valeurs possibles se situent entre 8 et 14 caractères. Toute hypothèse en dehors de cet intervalle sera pénalisée.
  6. Définissez la longueur maximale des espaces sur 20. Cela limite la longueur maximale des espaces dans la chaîne de texte à 20 dots.
  7. Pour les autres propriétés de l’élément, conservez les paramètres par défaut.
  8. Cliquez sur l’onglet Advanced.
  9. Puisque nous allons rechercher l’élément InvoiceDateAsString uniquement si InvoiceDate n’est pas détecté sur l’image, spécifiez la condition suivante dans le champ Relations avancées avant recherche :Rechercher l’objet image uniquement si l’élément InvoiceDate n’est pas détecté. Dans le langage FlexiLayout, cette condition peut s’écrire comme suit : If Not InvoiceDate.IsNull Then DontFind;
  10. Spécifiez une condition supplémentaire pour InvoiceDate, similaire à celle ci-dessus :Rechercher l’objet image uniquement si l’élément kwInvoiceDate a été détecté. Rechercher l’objet image le plus proche de l’élément kwInvoiceDate.* Dans le langage FlexiLayout, cette condition peut s’écrire comme suit : If InvoiceHeader.kwInvoiceDate.IsNull Then DontFind; Nearest: InvoiceHeader.kwInvoiceDate;
  11. Spécifiez l’emplacement du bloc InvoiceDate comme la région rectangulaire de l’élément InvoiceDate ou InvoiceDateAsString détecté, augmentée de 5 dots verticalement et horizontalement. Pour ce faire, sélectionnez l’option Expression et saisissez l’expression suivante : Rect outputRect; if not InvoiceHeader.grDate.InvoiceDate.IsNull then outputRect = InvoiceHeader.grDate.InvoiceDate.Rect; else { outputRect = InvoiceHeader.grDate.InvoiceDateAsString.Rect; IsNull = InvoiceHeader.grDate.InvoiceDateAsString.IsNull; } OutputRegion = outputRect; OutputRegion.Inflate (5dt, 5dt);