FR 3109831 A1 20211105 FR 2004317 A 20200430 Procédé pour la vérification d’un code-barre . L’invention concerne un procédé de traitement d’une image de référence d’un code-barre de référence présentant des défauts aléatoires d’impression, le procédé comprenant des étapes consistant à : - enregistrer dans une mémoire une image de référence en niveaux de gris du code-barre de référence, - enregistrer un identifiant (UID) du code-barre de référence sous forme d’index dans une base de données. Il est essentiellement caractérisé en ce qu’il comprend en outre des étapes consistant à : - calculer une empreinte de référence dudit code-barre de référence, l’empreinte étant fonction des défauts aléatoires d’impression, et - enregistrer l’empreinte de référence dans la base de données. Figure pour l’abrégé : FIG. 5 Procédé pour la vérification d’un code-barre. DOMAINE DE L’INVENTION La présente invention concerne le domaine de la vérification des codes-barres, incluant les codes-barres bidimensionnels, qu’ils soient Datamatrix, QR code, PDF417, code-barres 1D ou code-barres 2D, voire même d’une chaine de caractère, et ci-après « code-barres » par concision. Les code-barres sont utilisés sur de multiples produits, notamment à des fins de traçabilité, par exemple pour suivre et retracer les mouvements des produits tout au long d’une chaîne d'approvisionnement, ce qui permet de détecter des activités frauduleuses, un marché illicite, etc. Selon les cas, ils peuvent être inscrits sur un packaging primaire ou sur un packaging secondaire. Par concision toujours, seul le cas de code-barres pour l'industrie du tabac sera décrit ici. Dans cet exemple, les code-barres sont des datamatrix de 6 x 6 mm. Dans le contexte de la traçabilité réglementaire du tabac, les paquets de cigarettes sont aujourd'hui tracés en Europe au moyen d'un identifiant unique (UID) qui est gravé directement sur les paquets de cigarettes sur les chaines de production, au niveau d'une zone de peinture noire, généralement située sur le fond du paquet. Dans le but de renforcer la sécurité du consommateur et la lutte contre la fraude par contrefaçon, il est souhaitable d’avoir un moyen de vérifier l'authenticité et l'unicité du UID (Unique Identifier), c’est-à-dire de l’unicité du paquet portant ce numéro. Au sens de la présente invention, on entend indistinctement paquet et UID. Au sens de la présente invention, un UID est notamment défini par la norme ISO 22300:2018, c’est-à-dire un code qui représente un ensemble unique et spécifique d’attributs liés à un objet ou à une classe d’objets pendant toute sa vie dans un domaine et un périmètre particuliers d’un système d’identification d’objets. Selon l’invention, le code-barres permet d’une part la traçabilité et d’autre part, permet de calculer une empreinte caractéristique à chaque paquet. Plus précisément, l’invention concerne un procédé de traitement d’une image de référence d’un code-barre de référence présentant des défauts aléatoires d’impression, le procédé comprenant des étapes consistant à : - enregistrer dans une mémoire une image de référence en niveaux de gris du code-barre de référence, - enregistrer un identifiant (UID) du code-barre de référence sous forme d’index dans une base de données. Il est essentiellement caractérisé en ce qu’il comprend en outre des étapes consistant à : - calculer une empreinte de référence dudit code-barre de référence, l’empreinte étant fonction des défauts aléatoires d’impression, et - enregistrer l’empreinte de référence dans la base de données sous forme de vecteur ou sous forme de résumé binarisé de l’image de référence. Dans un mode de réalisation, l’image de référence comprend un ensemble de blobs, le vecteur de l’empreinte de référence comprend plusieurs composantes dont au moins une est non nulle, chaque composante est calculée par une des étapes respectives parmi : - déterminer l’aire de chaque point du code-barre de référence et enregistrer un vecteur qui renferme l’ensemble des rapports de surface de 2 points successifs du code-barre de référence ; - déterminer la position angulaire de points spécifiques situés sur le contour de chaque blob du code-barre de référence ; - déterminer une cartographie des irrégularités des blobs ; - déterminer une courbe caractérisant le profil de chaque blob du code-barre de référence ; - déterminer un ensemble d’histogrammes, calculés à partir de l’intensité et de l’orientation des gradients, pour chaque point du code-barre de référence ; - enregistrer l’image de référence sous forme d’image binaire comprenant les coordonnées des centres de chaque point du code-barre ; produire une courbe joignant les points continus tout au long de la frontière des pixels ayant la même intensité, calculer l’enveloppe convexe du point correspondant à un module du code-barre, et calculer les défauts de convexité pour chaque enveloppe convexe ; et - produire une image binaire du code-barre de référence, avec les coordonnées des centres de chaque point dudit code-barre, calculer les contours externes des points dudit code-barre, et pour chaque contour, calculer un ensemble de moments. Selon un autre de ses objets, l’invention concerne un procédé de vérification d’un code-barre candidat comprenant un identifiant (UID), le procédé comprenant des étapes consistant à : - enregistrer dans une mémoire une image candidate en niveaux de gris du code-barre candidat, - décoder l'identifiant (UID) du code-barre candidat, - identifier le code-barre de référence selon l’invention qui correspond au code-barre candidat et dont l’index dans la base de données est égal audit identifiant, - calculer une empreinte dudit code-barre candidat, - comparer ladite empreinte du code-barre candidat avec l’empreinte de référence correspondante du code-barre de référence. On peut prévoir que l’étape de comparaison comprend au moins l’une des étapes parmi : - une étape de filtrage par carte de dissimilarité locale, éventuellement précédée d’une étape de débruitage ; et - une analyse topologique de points irréguliers. On peut prévoir des étapes consistant à : - déterminer la localisation du code-barre candidat et son orientation dans un espace à 3 dimensions, - calculer un vecteur de pose, - redresser l'image du code-barre candidat, et - optionnellement nettoyer ladite image du code-barre candidat. On peut prévoir une étape de représentation de l’empreinte du code-barre candidat et de l’empreinte du code-barre de référence par une ou plusieurs séquences de bits, - l’étape de comparaison étant mise en œuvre par comparaison des séquences de bits qui les représentent. On peut prévoir que le code-barre de référence et le code-barre candidat sont des codes-barres bidimensionnels, le procédé comprenant en outre au moins l’une des étapes parmi : - appliquer un filtre fréquentiel à l’image candidate, - détecter la qualité de l’image candidate, grâce à des détecteurs de qualité d’image On peut prévoir que le code-barre de référence et le code-barre candidat sont marqués sur un paquet de tabac, optionnellement recouvert de cellophane. Selon un autre de ses objets, l’invention concerne un programme d’ordinateur comprenant des instructions de code de programme pour l’exécution des étapes du procédé selon l’invention, lorsque ledit programme est exécuté sur un ordinateur. Selon un autre de ses objets, l’invention concerne un smartphone comprenant une mémoire dans laquelle est stockée le programme d’ordinateur selon l’invention. D’autres caractéristiques et avantages de la présente invention apparaîtront plus clairement à la lecture de la description suivante donnée à titre d’exemple illustratif et non limitatif et faite en référence aux figures annexées. DESCRIPTIF DES DESSINS illustre un mode de réalisation d’un code-barres selon l’invention, et illustre un mode de réalisation d’une impression du code-barres de la figure 1, présentant des défauts d’impression, illustre un agrandissement de l’encadrement de la figure 1, illustre un agrandissement de l’encadrement de la figure 2, illustre une image candidate comprenant des parasites, illustre une image candidate selon l’invention, illustre l’image de la figure 6 prétraitée et filtrée selon l’invention, illustre l’image de la figure 7 binarisée selon l’invention, illustre l’image de la figure 8 pour laquelle la forme du code-barre est mise en évidence, illustre la figure 9 sur laquelle est appliquée une détection de contour, illustre l’application selon l’invention d’un modèle 2D constitué de trois points sur l’image de la figure 9, illustre des clusters selon l’invention, illustre une grille générée selon l’invention sur les clusters de la figure 12, avec les coordonnées de chaque blob, illustre une grille selon l’invention appliquée à un datamatrix, illustre un tableau de points d’un datamatrix selon l’invention, illustre le voisinage de points sur le tableau de la figure 15, illustre deux blobs identiques selon l’invention, illustre deux blobs différents selon l’invention, illustre deux profils de blobs similaires selon l’invention, illustre deux profils de blobs différents selon l’invention, illustre une analyse topologique des points irréguliers selon 3 variantes selon l’invention, illustre la construction de filtrations et leur représentation sous forme de code barre persistant selon l’invention, illustre un diagramme de persistance du nuage de points de la Figure 22. DESCRIPTION DETAILLEE Selon l’invention, les code-barres sont marqués par gravure laser. Ce type de gravure consiste à retirer plus ou moins de matière à la surface du papier du paquet de tabac, ce qui permet d’avoir plus de nuances et d’engendrer des défauts aléatoires d’impression. Par concision, on ne décrira ici qu’un code-barre à deux dimensions (2D), en l’espèce sous forme de datamatrix. Selon l’invention, le code-barre est plan. Dans le domaine des codes-barres des paquets de tabac, les UID répondent à une construction, une structure, imposée, connue. L’invention vise à caractériser ces défauts d’impression, en partant de l’hypothèse que ces défauts ne sont jamais reproduits à l’identique lors de la réimpression du même code-barres. La figure 1 et la figure 2 illustrent le même code-barres présentant des défauts d'impression, encadrés et agrandis dans les figures 3 et 4 respectivement. La présente invention prévoit deux phases distinctes : une première phase d’enrôlement qui précède une deuxième phase de contrôle ou vérification. Les conditions d’acquisition des images sont généralement différentes selon la phase. Selon l’invention, on calcule une empreinte du code-barres lors de la phase d’enrôlement, avant sa mise sur le marché, dite « empreinte de référence » ; et on calcule une empreinte du code-barres lors de la phase de contrôle, après sa mise sur le marché, dite « empreinte de contrôle ». On peut alors comparer l’empreinte de contrôle et l’empreinte de référence pour déterminer si le code-barres est original. Dans la phase d’enrôlement, on prévoit une caméra sur la ligne de production des paquets pour acquérir un ensemble d’images de référence. La ligne de production implique des contraintes de vitesse de défilement des paquets. Les paquets sont généralement exempts de cellophane lors de l’acquisition d’images. Dans la phase de contrôle, on prévoit un objet communicant, notamment un smartphone, pour acquérir des images candidates. Par concision, l’objet communicant, c’est-à-dire tout dispositif opto-électronique manipulable comprenant un objectif optique, des moyens programmables de calculs et des moyens de communication sans fil, est désigné par smartphone. De préférence, le smartphone est équipé d’un dispositif de grossissement, par exemple une bonnette grossissante, et/ou d’un flash. On peut aussi mettre en œuvre une technique dite de super-résolution obtenue par assemblage sub-pixelique d'images capturées lors d'un flux d'images candidates grâce à des mouvements, éventuellement involontaires, de l'utilisateur du smartphone. Lors d’un contrôle, le paquet présente généralement un emballage cellophane, ce qui peut générer des reflets du flash du smartphone. Le code-barre peut être disposé proche des plis du film de cellophane et des résidus de poussière peuvent s’incruster sous le film de cellophane. Par exemple, un paquet de tabac illustré sur la figure 5 présente les parasites suivants, chacun d’eux pouvant venir perturber le contrôle optique : en référence 1, un repli de l’emballage cellophane ; en référence 2, des reflets du flash ; en référence 3, une déformation des points du code-barre après emballage ; et en référence 4, une incrustation de résidus de poussière. * Calcul d’empreinte Le calcul d’empreinte pendant la phase de contrôle comprend des étapes décrites ci-après. Un ensemble d’images candidates comprenant chacune le code-barre est obtenu, par exemple sous forme de flux, c’est-à-dire de séquence de trames vidéo obtenues en filmant le code-barre à contrôler par le smartphone. Chaque trame peut être une image candidate. 1. Localisation du code-barre et rectification de l’image candidate Dans cette première étape, on détermine la localisation du code-barre et son orientation dans un espace à 3 dimensions, par exemple grâce à des détecteurs de bords et un test de fréquence. La localisation des QR Codes est connue, par exemple de « Fast QR Code Detection in Arbitrarily Acquired Images », Luiz Belussi & al, August 2011, DOI: 10.1109/SIBGRAPI.2011.16. On peut ainsi déterminer les 4 points extrêmes d’un code-barre rectangulaire, donc son orientation dans l’espace. Ceci permet de calculer un vecteur de pose, exploité pour effectuer un redressement de l'image de contrôle. Les dimensions de l’image candidate peuvent être avantageusement réduites selon un facteur prédéterminé, ce qui permet d’accélérer le traitement. Un prétraitement est appliqué sur l’image candidate pour éliminer le bruit pouvant perturber le traitement, en appliquant par exemple un flou gaussien, comme illustré sur la figure 7. Pour localiser le code-barre, dans un premier temps on prévoit d’appliquer une méthode de binarisation, en l’occurrence la binarisation d’Otsu, comme illustré sur la figure 8. Sur l’image binaire obtenue, on applique différentes opérations morphologiques pour mettre en évidence la forme du code-barre (forme carrée, rectangulaire ou autres formes), par un opérateur de morphologie mathématique, en l’espèce pour regrouper les blobs, par exemple au moins une opération parmi une dilatation, une érosion et l’application d’un laplacien morphologique. Par blob, on entend l’objet sur l’image candidate qui est interprété comme correspondant à un module du code-barre. Dans l’exemple du code-barre illustré sur la figure 9, on applique une série d’érosion suivie d’une fermeture, permettant ainsi de lier les points et de faire apparaitre la forme carrée. Ensuite, une simple détection de contour permet de localiser le code-barre et de déduire ainsi son orientation, comme l’illustre la figure 10. Le vecteur de pose donne l’orientation du code-barre mais pas son échelle. On peut donc prévoir une étape de rectification (d’angle et d’échelle) appliquée sur l’image candidate, en utilisant un modèle 2D qui est spécifique à la forme du code-barre. Dans l’exemple de la figure 8, le code-barre penche vers la gauche. Le modèle 2D appliqué est constitué de trois points, correspondant respectivement, aux points haut-gauche, bas-gauche et bas-droit du code-barre, et permet de redresser l’image candidate du code-barre, comme l’illustre la figure 11. 2. Quadrillage du code-barre et la localisation exacte des points le constituant On applique une grille 2D calculée à partir de localisation des bords du code-barre et de la connaissance a priori du nombre et des dimensions des points du code-barre. Sur cette grille on prévoit de localiser les emplacements des points constituant le code-barre, selon un modèle prédéterminé qui dépend de la forme et du type du code-barre. Chaque cellule de la grille correspond à un point du code-barre. Chaque point comprend un blob si le module correspondant du code-carre est allumé (blanc) ou ne comprend rien si le module correspondant du code-carre est éteint (noir). Un exemple est illustré sur la figure 12 avec une grille carrée régulière pour un code-barre de type datamatrix. Avant d’appliquer un quelconque algorithme, il est nécessaire de pouvoir se repérer dans l’amas de points, ou blobs, de l’image candidate. Pour cela, il faut pouvoir organiser cet ensemble sous la forme d’une grille. Des opérations de filtrage, par exemple avec un filtre fréquentiel, sont appliquées pour réduire le bruit et des opérations de séparations, typiquement des opérateurs de morphologie mathématique pour séparer les blobs, sont éventuellement effectuées pour diviser les blobs qui sont collés entre eux. Une étape d’érosion peut être mise en œuvre pour supprimer les blobs de taille inférieure à une valeur seuil. Ensuite, le centroïde de chaque blob est déterminé, par un algorithme connu, en l’espèce par un calcul de moments. On prévoit alors une opération de clusterisation sur chaque coordonnée verticale et horizontale de l’ensemble de blobs, pour les séparer selon l’un des deux critères : ligne, horizontale, ou colonne, verticale. Cela est possible car le nombre de colonnes et de lignes de blobs sur l’image candidate est connu. Chaque cluster correspond donc à une ligne ou à une colonne selon la dimension sur laquelle on l’applique, voir par exemple la figure 12. On peut ainsi récupérer de façon robuste la position verticale et horizontale d’un blob et déterminer ses coordonnées sur la grille nouvellement constituée. La figure 13 illustre la nouvelle grille générée avec les coordonnées de chaque blob. On notera que les espaces sans blob laissent un vide effectif sur la grille. On obtient ainsi une image rectifiée et nettoyée. 3. Détermination de l'Identifiant Unique inscrit dans le code-barre A partir de cette image rectifiée et nettoyée, on peut appliquer une méthode de décodage du code-barre en fonction du type (1D, 2D, QR code, PDF417, etc.) de celui-ci. Par exemple pour un datamatrix, on peut employer la librairie DMTX. Une fois l'identifiant (UID) décodé, on pourra utiliser ce code pour identifier l'empreinte lors des traitements suivants et de sa transmission, par exemple vers une base de données. L’UID ainsi connu permet de connaitre également le code-barre de référence, c’est-à-dire que la position des modules blanc ou noirs est connue. Ainsi, les positions auxquelles des blobs dans l’image candidate devraient apparaitre sont connues. Calcul d’un ensemble de descripteurs caractérisant chacun desdits points. Pour limiter l’influence de ces éventuels parasites, on prévoit de mettre en œuvre au moins l’une, et de préférence au moins deux, des méthodes suivantes. L’avantage de plusieurs méthodes est de bénéficier de leur complémentarité. La solution proposée gagne en robustesse. Par exemple la méthode 5.2 ci-après est plus sensible aux problèmes liés à la détérioration des points après cellophanage, alors que la méthode 5.1 reste relativement robuste à ce type de détérioration. 4. Sélection des points du code-barre Une fois la grille 2D mise en place, on peut effectuer une étape de nettoyage, dans laquelle on commence par éliminer les positions de la grille qui ne correspondent pas à une gravure laser du code-barre, par exemple les espaces vides entre les gravures, celles où il n’y a pas de blob, les tâches non centrées, les lignes ou traces de cellophane d'emballage du paquet de tabac. Par exemple, si un point blanc sur l’image candidate correspond à une position dans l’image de référence pour laquelle le module est noir (éteint), alors ce point est éliminé, c’est-à-dire non traité, car il ne doit pas correspondre à un blob de gravure laser. Ensuite, on peut prévoir au moins l’une des étapes parmi : - éliminer, c’est-à-dire ne pas traiter, les points correspondant aux éléments de repérage propres à chaque code-barre et qui sont invariants, - sélectionner une zone prédéterminée de l’image de référence, telle que la sélection correspond à une sous-partie du code-barre, par exemple en sélectionnant une zone de 10x10 modules au lieu de 24x24 usuels pour un datamatrix, ce qui permet d’accélérer le traitement et de réduire la taille de l’empreinte. Dans ce cas, pour l’image candidate, on prévoit de sélectionner une zone de mêmes coordonnées pour le calcul d’empreinte. Par « éléments de repérage » on entend des éléments prédéterminés, inhérents au type de code-barre. Par exemple (figure 8) un datamatrix comprend 4 éléments de repérage sous forme de lignes sur ses bords : une ligne continue en bas et une autre à gauche, une ligne de pointillés noir/blanc à droite et une autre en haut. Dans ce cas, on élimine les lignes de repérage continues (invariantes en noir). Un QRcode comprend 3 éléments de repérage sous forme d’amers. Etc. Ces éléments de repérage permettent de déterminer l’échelle du code-barre, donc les dimensions de ses modules. Dans certains cas le choix des points à conserver est directement lié à la méthode de calcul de l’empreinte retenue. Elle se déroule alors dans l’étape 5 ci-dessous. 5. Calcul des Propriétés On prévoit de mettre en œuvre au moins l’une, et de préférence au moins 2, des méthodes suivantes. Chacune de ces méthodes permet de calculer une empreinte respective. Les empreintes correspondant à chaque méthode sont indépendantes, mais dans les formats de stockage de l’empreinte, le format « lourd » décrit ultérieurement contient un résumé binarisé de l’image à partir duquel on peut regénérer l’ensemble des empreintes. On peut aussi stocker les empreintes sous forme vectorielle. En particulier, on peut prévoir un vecteur à N composantes, avec N le nombre total de méthodes de calcul d’empreintes, la position de chaque composante dans le vecteur correspondant à une méthode prédéfinie. 5.1. Analyse des rapports de surface de couples de blobs L’allure de l’image de contrôle prise avec une bonnette lors de la phase de contrôle est différente de l’image de référence du code-barre prise lors de la phase d’enrôlement. Ainsi, mettre en œuvre un calcul de métrique brute telle que la surface ou le périmètre de chaque blob, et comparer les résultats entre les images de référence et les images candidates, peut aboutir à des résultats qui ne sont pas satisfaisants. Néanmoins, les variations qui ont affecté un point donné d’un code-barre 2D, par exemple un datamatrix, dont l’image candidate a été prise avec smartphone, ont affecté de la même façon un autre point voisin. Il ainsi intéressant de calculer des rapports entre ces points. A cet effet, on prévoit un traitement d’image pour chaque image de référence. Une image originale est acquise en couleur RGB par une caméra placée directement sur la ligne de production avant emballage du paquet. L’image originale est ensuite transformée niveaux de gris. Elle peut ensuite être redressée, par exemple en se basant sur les 3 points extrêmes formant le carré d’un datamatrix, ce qui revient à appliquer une grille dont chaque cellule est soit vide, soit comprend un point du datamatrix, comme illustré figure 14. * Calcul de la surface de chaque point du datamatrix. Depuis l’image binaire calculée dans l’étape précédente, chaque point du datamatrix forme un objet dont on extrait les caractéristiques correspondantes. Par exemple pour les 2 premières lignes uniquement du datamatrix de de la figure 14, on obtient le tableau de la figure 15 dans lequel les indices indiquent la position d’un point dans le datamatrix (allumé, blanc), et un tiret indique qu’il n’y a pas de point à cette position (point éteint, noir). Pour tous les points allumés, on en extrait la surface, c’est-à-dire l’aire. Par exemple, après avoir binarisé l’image et déposé la grille, on peut considérer chaque blob comme un objet connexe indépendant. Comme il s’agit d’un objet connexe binaire, blanc sur un fond noir, il est possible d’extraire sa surface en comptant le nombre de pixels blancs. Par exemple pour les 2 lignes susmentionnées, on obtient : Surface (0,0) =748, Surface (0,2) =814, Surface (0,4) =861, Surface (0,6) =979, Surface (0,8) =899, Surface (0,10) =936, Surface (0,12) =868, Surface (0,14) =972, Surface (0,16) =875, Surface (0,18) =886, Surface (0,20) =896, Surface (0,22) =903, Surface (1,0) =1024, Surface (1,2) =955, Surface (1,3) =952, Surface (1,5) =899, Surface (1,9) =1107, Surface (0,10) =1041, Surface (0,13) =1213, Surface (0,14) =1048, Surface (0,16) =1002, Surface (0,19) =1094, Surface (0,22) =1039, Surface (0,23) =981 En extrayant la surface de l’ensemble des points du code-barre de référence, on peut ainsi construire un vecteur V_Ref dont les éléments sont la surface des points allumés du datamatrix selon un ordre prédéterminé, en l’espèce de gauche à droite et de haut en bas. Soit V_Ref 1,m = Surface (i,j) avec i=0:23; j=0:23; m=0:nombre de points allumés On obtient par exemple pour les 2 lignes susmentionnées : V_Ref 1,0 = Surface (0,0) ; V_Ref 1,1 = Surface (0,2) ; V_Ref 1,2 = Surface (0,4) ; V_Ref 1,3 = Surface (0,6); V_Ref 1,4 = Surface (0,8) ; etc. ; V_Ref 1,23 = Surface (0,23). On peut alors calculer des rapports de surface de chaque point avec son voisin, sur l’ensemble du datamatrix. Il existe plusieurs implémentations possibles, par exemple selon un parcours de gauche à droite et de haut en bas, un point à l’extrémité droite d’une ligne pouvant être voisin avec un point à l’extrémité gauche de la ligne suivante, comme illustré par les flèches de la figure 16. On obtient ainsi l’ensemble du datamatrix de référence sous forme de vecteur qui renferme l’ensemble des rapports de surface de 2 points successifs et qui forme ainsi l’empreinte dudit datamatrix. V_Ref_Div 1,m =V_Ref 1,m / V_Ref 1,m+1 avec m=0:nombre de points allumés−1 Où V_Ref 1,m+1 est la surface de l’élément suivant dans le vecteur selon le parcours choisi, en l’espèce de gauche à droite et de haut en bas. Pour la phase de contrôle, on met en œuvre le même algorithme sur l’image candidate. On obtient ainsi : V_Can 1,m =Surface (i,j) avec i=0:23; j=0:23; m=0:nombre de points allumés dans le présent exemple ; et on peut calculer le vecteur qui contient les rapports de surface entre les points du datamatrix en allant de gauche à droite et de haut en bas, soit : V_Can_Div 1,m =V Sus 1,m / V Sus 1,m+1 avec m=0:nombre de points allumés Avec comme V faisant référence à un vecteur, l’indice Ref pour l’image de référence, l’indice Can pour l’image candidate Pour la phase de contrôle, on extrait de la base de données le ou les datamatrix de référence qui contiennent le même nombre de points, à la même position. La taille des 2 vecteurs de rapport de surface, de référence et candidat, qui sont des empreintes des datamatrix, doit être la même. Pour chaque image de référence, on calcule la valeur absolue de la différence entre le vecteur des rapports candidats et le vecteur des rapports références, à chaque fois. Si la différence d’un couple est plus petite qu’un seuil de valeur prédéterminé, alors on augmente un score d’authenticité du datamatrix, en l’espèce un score qui est initialisé à 0 et incrémenté de +1 à chaque fois que la condition est validée, de l’image candidate. Ensuite, on calcule le pourcentage de rapports qui sont plus petits que le seuil par rapport au nombre total de rapports établis, qui est la taille totale du vecteur, soit : V_Diff n 1,m =|V_Sus_Div 1,m −V_Ref_Div 1,m n | avec n=1:nombre d′ images de référence En l’espèce, la valeur du seuil est comprise entre 0.04 et 0.12, et par exemple égale à 0.08. Si la différence est strictement inférieure à ce seuil, on augmente le score d’authenticité de 1. Ensuite, on divise le score obtenu par la taille du vecteur et on multiplie par 100, si ce pourcentage est strictement supérieur à une valeur seuil, par exemple comprise entre 60% et 99% ; et en l’espèce égale à 78%, l’image candidate est authentique. Les valeurs peuvent être choisies d’une façon empirique par rapport à la base de données à disposition. A noter que le parcours décrit ici de gauche à droite et de bas en haut peut aussi être de droite à gauche, de bas en haut, en colonne ou en diagonale, ou non linéaire. Il importe juste qu’il soit prédéfini. 5.2 Position Angulaire des Irrégularités des Blobs Dans cette approche on détermine la position angulaire de points spécifiques situés sur le contour de chaque blob. On choisit deux points, un premier dont la distance avec le centroïde du blob est la plus faible et un deuxième point dont la distance avec ce même centroïde est la plus élevée. Pour chaque point, la position angulaire dans un repère prédéterminé est calculée. On peut alors, par superposition des centroïdes, comparer les positions angulaires des points spécifiques pour un blob de l’image candidate aux positions angulaires des points spécifiques pour le blob correspondant de l’image de référence, et considérer que les 2 blobs sont identiques si les valeurs des positions angulaires sont inférieures à une valeur seuil prédéterminée, et que les 2 blobs sont différents sinon. Par exemple sur la figure 17 et la figure 18, on a un blob de l’image candidate CAND de centroïde O’, un premier point 10’ dont la distance avec le centroïde O’ du blob est la plus grande et un deuxième point 20’ dont la distance avec ce même centroïde est la plus petite. On a un également un blob de l’image de référence REF de centroïde O, un premier point 10 dont la distance avec le centroïde O du blob est la plus grande et un deuxième point 20 dont la distance avec ce même centroïde est la plus petite. Les 2 blobs sont superposés par leur centroïde respectif. Sur la figure 17, les positions angulaires des points spécifiques entre le blog CAND et le blob REF sont les mêmes, par exemple en calculant l’angle entre la droite O’-10’ et la droite O’-20’ et en calculant l’angle entre la droite O-10 et la droite O-20. Ces deux blobs sont alors considérés comme les mêmes. Sur la figure 18, les positions angulaires des points spécifiques entre le blog CAND et le blob REF sont différentes, par exemple en calculant l’angle entre la droite O’-10’ et la droite O’-20’ et en calculant l’angle entre la droite O-10 et la droite O-20. Ces deux blobs sont considérés comme différents. On peut calculer un score de similarité entre deux ensembles de blobs. On peut aussi ignorer les blobs qui présentent une irrégularité de contour qui n’est pas assez marquée, par exemple en faisant la différence de distance entre le point de distance minimale 20, 20’ et le point de distance maximale 10, 10’ et d’ignorer ce blob si cette différence est trop faible, c’est-à-dire inférieure à une valeur seuil prédéterminée. 5.3 Cartographie des Irrégularités des Blobs Cette approche consiste à repérer les principales irrégularités d’un blob et à les inscrire sur une carte pour pouvoir les comparer. Sur chaque blob, on récupère son contour et on détermine, avec les gradients, l’orientation de ce même contour. On peut représenter les différentes valeurs d’orientations avec des couleurs. Une fois cette carte d’orientation obtenue pour un blob, on cherche à la comparer à une carte d’orientation parfaite, qui correspond à la carte d’orientation d’un cercle. Ainsi, en chaque point du contour, on vient comparer son orientation à celui d’un cercle parfait. Si l’écart des orientations dépasse une valeur seuil prédéfinie, alors ce point du contour est marqué sur une nouvelle carte, qui est la carte des irrégularités du blob traité. Ainsi, comparé à la carte des orientations d’un cercle, on parvient à distinguer des points où les creux ou les bosses sont trop importants par rapport au seuil. On procède ainsi sur chaque blob pour obtenir une multitude de cartes d’irrégularités, propres à chacun. Dans le cadre d’une comparaison de deux blobs, on peut déterminer si les irrégularités communes et localisées aux mêmes endroits sont suffisamment importantes pour décider si les blobs sont similaires et obtenir un score de similarité entre chaque blob. 5.4 Construction d’un profil de blob Cette approche consiste à construire une courbe caractérisant le profil d'un blob. Il permet ensuite de réaliser une comparaison de profils entre le profil d’un blob de l’image candidate et le profil du blob correspondant de l’image de référence. Le profil du blob est déterminé en extrayant la distance au centroïde de chaque point du contour du blob, le long d’un parcours prédéterminé, de préférence sur l’ensemble du contour du blob. On obtient ainsi un profil pour un blob de l’image candidate et un profil pour le blob correspondant de l’image de référence. A partir de ces profils, on peut extraire une ou plusieurs métriques afin de déterminer si ces deux profils sont similaires ou non. Par exemple, on peut mesurer la corrélation entre les deux profils pour déterminer s’ils sont semblables ou non. Par exemple sur la figure 19, les deux profils illustrés présentent une corrélation de 0.77 et les blobs sont considérés comme identiques. Sur la figure 20, les deux profils illustrés présentent une corrélation de -0.07 et les blobs sont considérés comme différents. 5.5 Caractérisations basées sur l’histogramme des gradients orientés (HOG)  Chaque point extrait de l’image binaire est caractérisé par un ensemble d’histogrammes, calculés à partir de l’intensité et de l’orientation des gradients. En partant du centre de chaque point (ou blob), la boite englobante de ce dernier est centrée dans une fenêtre de 64x64 pixels qui est segmentée en blocs de 8x8. En partant de ces blocs de 8x8, les histogrammes sont calculés à partir de l’intensité et de l’orientation des gradients de chaque pixel constituant chacune des imagettes (8x8 pixels). Les histogrammes sont calculés sur des blocs de 8x8 pixels, puis normalisés par blocs de 16x16 pixels, en concaténant les 4 histogrammes. Les blocs de 16x16 se chevauchent de 8 pixels. En partant du centroïde de chaque point, l’image binaire de ce dernier est centrée dans une fenêtre de 64x64 pixels. Cette taille doit en fait être un multiple de 8 et peut varier selon le modèle de rectification et la taille des points. Pour l’exemple décrit ici, la taille de la boite englobante des points est limitée à 64x64 pixels. Ensuite on calcule les histogrammes normalisés sur cette image. Ainsi chaque point est représenté par 6x6 histogrammes permettant la caractérisation locale de sa forme. Dans le cas général, le descripteur d’une image I d’un code 2D représenté par une grille de NxM est constitué de l’ensemble des descripteurs de tous les points détectés. Ainsi, on a : Descripteur(I)={descripteur(p ij ), i [1..N], j [1..M]} Avec p i,j un point détecté Le descripteur d’un point p à la position i,j est constitué à son tour de l’ensemble des histogrammes des gradients orientés (Hog) de tous les blocs de taille B x B pixels qui se chevauchent de B/2 pixels. Le nombre total des blocs extraits de l’image du point p est de K x L. On a ainsi : descripteur(p ij )={Hog(block k,l ), k∈[1..K], l∈[1..L]} ; avec K=(w /0.5*B)−1 et L = (h/0.5*B) −1 ; où h et w représentent les dimensions de l’ image du point p ij La mesure de similarité entre l’image de référence et l’image candidate consiste dans un premier temps à calculer un score de similarité pour chaque couple de points "référence-candidat". Ensuite, l’ensemble de ces scores sert à calculer un score global mesurant la similarité entre les deux images. On peut effectuer une mesure de la similarité locale, par couples de points. En se basant sur la grille 2D de chacune des deux images candidate et de référence, la mise en correspondance des points selon leur position dans la grille permet de constituer des couples de points. Une homogénéisation de la taille des points (de référence, candidats) est nécessaire pour chaque couple afin de palier au problème de variation des conditions d’acquisition entre le système d’enrôlement et le système de contrôle. Ainsi, la boite englobante du point candidat est redimensionnée à la taille de la boite englobante du point de référence correspondant. La similarité entre un point de référence p_Ref et point candidat p_Cand est mesurée par la moyenne des distances des histogrammes calculés à partir des images des boites englobantes des chacun des deux points. A cet effet, on peut utiliser la distance euclidienne, ou d’autres distances. On a ainsi : Similarité(p_Ref,p_Cand )=∑ KxL i =1 distance(Hog Ref [block i],Hog Cand [block i]) / KxL Avec l′image de chacune des boites englobantes composée de KxL blocs. En alternative ou en complément, on peut effectuer une mesure de la similarité globale. Dans ce cas, la mesure de similarité globale entre l’image de référence et l’image candidate consiste à calculer le taux de points de référence dont la distance est inférieure à un seuil prédéterminé. On peut aussi réaliser une autre mesure, en attribuant un poids plus important aux points de référence les plus pertinents, c’est-à-dire qui présentent une déformation liée à l’aléa de la gravure laser et qui s’avèrent plus riches d’un point de vue de leur caractérisation, c’est-à-dire dont le contour n’est pas parfaitement circulaire.  5.6 Carte de dissimilarité locale (CDL) On peut prévoir une étape de filtrage par carte de dissimilarité locale (CDL), éventuellement précédée d’une étape de débruitage. Une carte de dissimilarité locale (CDL) permet de mesurer les écarts locaux entre deux images binaires, c’est à dire deux images en noir et blanc (pas en niveaux de gris). Le calcul d’une carte de dissimilarité locale est une version modifiée de la distance de Hausdorff, il est notamment décrit par Morain-Nicolier, Frédéric & LANDRE, Jérome & Ruan, Su. (2009). « Détection d'objet par mesure de dissimilarités locales. ». On définit par CDLbin la CDL de deux images binaires A et B comme étant : CDLbin(A,B)(p) = |A(p)-B(p)| max[dA(p), dB(p)] avec p = (x; y) et dX(p) la transformée en distance de l’image X au point p, où en l’espèce X = A ou B. L’application d’une carte de dissimilarité locale est connue notamment dans le domaine médical pour la recherche de tumeurs, comme décrit par exemple dans l’article « Localisation de tumeurs dans des séquences TEP, par détection de changements au moyen de dissimilarités locales » Ketata et al. (CORESA 2013 - 16ème édition du colloque COmpression et REprésentation des Signaux Audiovisuels Le Creusot, FRANCE, 28 et 29 novembre 2013). On prévoit ici de comparer les écarts entre une première image binaire A, par exemple une image de référence, et une deuxième image binaire B, par exemple une image candidate. On peut aussi prévoir de comparer les écarts entre une première sous-image de l’image binaire A, et une deuxième sous-image de l’image binaire B, dont la position et les dimensions sont les mêmes (à un rapport d’agrandissement près). On obtient d’abord une première sous-image par application d’un masque numérique comprenant une première fenêtre F1 correspondant à tout ou partie de l’image candidate, ce qui permet d’extraire la partie de l’image candidate inscrite dans la première fenêtre F1. De manière similaire, on obtient ensuite une deuxième sous-image par application d’un masque numérique comprenant une deuxième fenêtre F2 correspondant à tout ou partie de l’image de référence, ce qui permet d’extraire la partie de l’image de référence inscrite dans la deuxième fenêtre F2. La forme de la fenêtre F1 est identique à celle de la fenêtre F2. La taille de la fenêtre F2 est égale à celle de la fenêtre F1, au facteur d’échelle près. Si l’image candidate est une image déjà binaire , alors la première image binaire utilisée pour le calcul de la carte de dissimilarité locale est la première sous-image obtenue par la première fenêtre F1, et la deuxième image binaire utilisée pour le calcul de la carte de dissimilarité local est la deuxième sous-image obtenue par la deuxième fenêtre F2. On calcule alors CDL(F1, F2) la CDL entre la première sous-image obtenue par la première fenêtre F1, et la deuxième sous-image obtenue par la deuxième fenêtre F2. Puis on compare CDL(F1, F2) à un seuil D_CDL prédéterminé et : - si CDL(F1, F2) > D_CDL alors l’image candidate est considérée comme différente de l’image de référence, - si CDL(F1, F2) La mise en valeur graphique peut être réalisée par au moins parmi : une modification de la valeur des pixels (couleur, luminance), l’affichage d’un cadre autour des points ou l’affichage d’un cadre à la périphérie des fenêtres F1 et F2, par exemple en pointillés ou en couleur, etc. Si l’image candidate est en niveaux de gris , elle est découpée en plusieurs images binaires. Par exemple, la valeur maximale et la valeur minimale des pixels de l’image candidate sont enregistrées dans une mémoire. L’écart entre la valeur maximale et la valeur minimale est divisé en plusieurs valeurs seuil intermédiaires, de préférence à intervalles réguliers. Pour une première valeur de seuil intermédiaire, tous les pixels dont la valeur est inférieure à la valeur dudit seuil intermédiaire sont remplacés par du noir et tous les pixels dont la valeur est supérieure à la valeur dudit seuil intermédiaire sont remplacés par du blanc. On obtient ainsi une première image binaire. Ensuite, on fait varier la valeur du seuil et une deuxième image binaire est obtenue avec une deuxième valeur de seuil intermédiaire. Et ainsi de suite pour l’ensemble des valeurs de seuil intermédiaire. On obtient ainsi N images binaires, avec N un entier naturel égal au nombre de valeurs de seuil choisies, c’est à dire le nombre de coupes. Pour chaque image binaire i (i compris entre 1 et N), on calcule CDL_i(F1, F2) la CDL entre la première sous-image obtenue par la première fenêtre F1, et la deuxième sous-image obtenue par la deuxième fenêtre F2. On peut ensuite calculer la CDL pondérée de l’ensemble des N images binaires, c’est à dire que l’on calcule CDL(F1, F2) = 1/N ∑ CDL_N(F1, F2). Plus généralement, on peut calculer la CDL globale de l’ensemble des N images binaires comme étant : CDL(A,B)(p) = Avec Ai (respectivement Bi) une coupe binaire i de A (respectivement B), i compris entre 1 et N. Puis on compare CDL(F1, F2) à un seuil D_CDL prédéterminé, comme décrit ci avant. Si l’image candidate est en couleurs , elle peut être enregistrée en niveaux de gris et traitée comme décrit ci-dessus. Alternativement, on peut prévoir de convertir l’image candidate dans un espace colorimétrique à 3 dimensions, ou 3 canaux, en l’espèce dans l’espace RGB ou dans l’espace CIE XYZ. L’image candidate est découpée en C images binaires, avec C un entier naturel correspondant au nombre de canaux, en l’espèce égale à 3. On peut alors traiter chacune des C images binaires de manière similaire aux N images binaires obtenues lorsque l’image candidate est en niveaux de gris. Ainsi pour chaque image binaire C, on calcule CDL_C(F1, F2) la CDL entre la première sous-image obtenue par la première fenêtre F1, et la deuxième sous-image obtenue par la deuxième fenêtre F2. On peut ensuite calculer la CDL pondérée de l’ensemble des C images binaires, c’est à dire que l’on calcule CDL(F1, F2) = 1/C ∑ CDL_C(F1, F2). Plus généralement, on peut calculer la CDL globale de l’ensemble des C images binaires comme étant : CDL_XYZ(A,B)(p)= Avec dans ce cas C=3 Pour deux images binaires on a : CDLbin(A,B)(p) = |A(p)-B(p)| max[dA(p), dB(p)] Pour deux images en niveau de gris on a : CDL(A,B)(p) = Avec N entier naturel au plus égal au nombre de niveaux de gris, et en l’espèce égal au nombre d’images binaires issues du traitement de l’image originale en niveaux de gris. Pour deux images avec C canaux on a : CDL_C(A,B)(p)= Avec C le nombre de canaux, et Ak le canal k (X;Y; Z) de l’image A. Puis on compare CDL(F1, F2) à un seuil D_CDL prédéterminé, comme décrit ci avant. 5.7 Détection de défauts de convexité Cette méthode vise la détection de points où la convexité n’est pas parfaite sur les contours de chaque point du datamatrix. Pour une image de référence, acquise par une caméra placée directement sur la ligne de production avant emballage, on prévoit d’enregistrer l’image de référence sous forme d’image binaire comprenant les coordonnées des centres de chaque point du datamatrix. Puis on prévoit de calculer les contours des points du datamatrix à partir de l’image binaire, c’est-à-dire de produire une courbe joignant les points continus tout au long de la frontière des pixels ayant la même intensité, afin de permettre une analyse de forme. On peut alors calculer l’enveloppe convexe de point correspondant à un module du datamarix, c’est-à-dire son contour. Ensuite, on calcule les défauts de convexité pour chaque enveloppe convexe. Pour déterminer les points de défauts de convexité, il suffit de comparer l’enveloppe convexe d’un blob par rapport à son vrai contour. Du moment où il y un point du vrai contour qui sort d’un côté ou de l’autre de l’enveloppe convexe, on peut dire qu’ici il y a un défaut. Tout écart de l’enveloppe par rapport à une enveloppe parfaitement convexe est considéré comme un défaut de convexité. Pour une image candidate, on applique le même algorithme et on calcule les défauts de convexité de chaque blob. On peut alors calculer la distance entre un défaut de convexité d’un blob de l’image candidate et un défaut de convexité d’un blob correspondant de l’image de référence. Si la distance est inférieure à une valeur seuil prédéfinie, alors on incrément la valeur d’un compteur, et ce pour tous les blobs du datamatrix. Une fois que tous les blobs ont été traités, on peut comparer la valeur du compteur à une valeur seuil prédéfinie et si le compteur est supérieur à la valeur seuil, alors l’image candidate est considérée comme similaire à l’image de référence, donc le code-barre candidat est considéré comme identique au code-barre de référence. On peut aussi calculer le pourcentage du nombre de points trouvés sur l’image candidate come présentant un défaut de convexité par rapport au nombre total de points de défauts de convexité sur l’image de référence. A partir d’un certain pourcentage seuil, le datamatrix candidate est considéré comme authentique. 5.8 Calcul de moments Une image de référence est généralement une image en couleurs RGB, acquise par une caméra placée directement sur la ligne de production avant emballage. On prévoit de préférence de recaler l’image de référence, par exemple à l’aide de 3 points extrêmes formant le carré du datamatrix comme exposé précédemment. On prévoit de transformer l’image de référence en niveaux de gris. Ensuite, on prévoit de calculer la grille, comme exposé précédemment, qui produit une image binaire avec les coordonnées des centres de chaque point du datamatrix. On peut alors calculer les contours externes des points du datamatrix à partir de l’image binaire, comme exposé ci-avant. Pour chaque contour, on peut alors calculer les différents moments suivants. Des moments spatiaux : m00, m01, m10 pour 3 cas 00, 01, 10. Soit plus généralement : m ji Avec array la fonction tableau. Des moments centrés : m20, m11, m02, m30, m21, m12, m03 pour les cas 20, 11, 02, 30, 21, 03, 12 Soit plus généralement : Avec x _ et y _ les centres de masse tels que x_ =m10/m00 et y _ =m01/m00 Des moments centrés normalisés : nu20, nu11, nu02, nu30, nu21, nu12, nu03 Soit Pour chaque blob, on peut avoir un vecteur V_Ref m avec m l’indice du blob. Soit V_Ref m = [m 00 m , m 01 m , m 10 m , m 20 m , m 11 m , m 02 m , m 30 m , m 21 m , m 12 m , m 03 m , nu 20 m , nu 11 m , nu 02 m , nu 30 m , nu 21 m , nu 12 m ,nu 03 m ] Avec m = 0 : nombre de points allumés On peut ainsi calculer l’ensemble des vecteurs V_Ref m pour l’ensemble des m blobs. L’ensemble de ces vecteurs constitue l’empreinte du datamatrix de l’image de référence. Pour une image candidate prise avec un smartphone, on applique le même algorithme pour calculer la valeur du vecteur V_Cand m . Comme les coordonnées de tous les points qui forment la grille sont connus, on peut mettre en correspondance les points de l’image de référence et ceux de l’image candidate. En fait, pour chaque point du datamatrix de l’image candidate, on cherche le point correspondant dans l’image de référence ayant les coordonnées les plus proches. Ainsi, on a des couples de points. La comparaison se fait par métrique entre les moments, puis par une règle sur les ensembles de points. Pour chaque couple de points, on peut alors calculer les différences entre les moments. V_Diff n =|V_Cand n -V_Ref n | avec n=1 :nombre d’images de référence. De préférence, on choisit les moments centrés normalisés, et plus précisément les moments nu20 et nu11. Quand la différence entre les moments pour une paire de points donnée est inférieure à une valeur seuil prédéterminée, on incrémente un score du datamatrix candidat. On peut calculer ensuite le pourcentage de paires de points ayant de petites différences de moments par rapport au nombre total de paires de points mis en correspondance. Si le pourcentage est supérieur à un seuil prédéfini, ou lorsque le score est supérieur à une valeur seuil prédéfinie, alors le datamatrix candidat est considéré comme authentique. L’invention n’est pas limitée aux moments décrits précédemment. On peut prévoir d’autres moments comme Zernike, Hu, Legendre, etc. puis de construire une empreinte à partir de ces moments. 5.9 Analyse topologique des points irréguliers (TDA) L’analyse des données topologiques (TDA) est une méthode mathématique qui permet d’extraire des informations à partir d’une structure de données. Avec le développement récent de l’homologie persistante, il est possible de déduire avec efficacité la structure géométrique d'un objet si les structures géométriques d’une paire de points sont similaires, par exemple comme décrit à l’adresse http://outlace.com/TDApart1.html. 5.9.a. Mesure de similarité entre deux points Dans une première variante on prévoit de comparer la structure topologique d’un blob de référence et d’un blob candidat. Après filtrage des blobs du datamatrix qui ne présentent pas d’autre intérêt que la lecture de l’UID encodé (par exemple un blob sans défaut), on prévoit de sélectionner un blob à analyser. Après binarisation, on transforme les contours du blob candidat en un nuage de points. Selon une première variante pour construire ce nuage de points, on calcule le centroïde du blob sélectionné, et on projette sur ses contours un nombre fini de points suivant l’axe du centroïde. L'illustration de cette méthode correspond à la FIG.21 en bas à droite. Premièrement, on calcule le centroïde du blob, ensuite on projette sur le contour du blob un nombre fini de points. On peut imaginer un cercle trigonométrique dont l'origine du cercle est le centroïde du blob. On tourne autour du cercle avec un angle constant et on place un point à chaque incrémentation de déplacement. Une deuxième variante de construction du nuage de points consiste à parcourir le contour du blob sélectionné de façon géodésique et à dessiner un point toutes les n longueurs jusqu‘à avoir parcouru l’intégralité du contour du blob. Cette méthode est illustrée en haut à droite de la FIG.21. On commence par calculer la distance totale du contour du blob. Ensuite, on choisit un nombre de points à dessiner sur le contour. Si on veut placer n points, on doit diviser le périmètre du blob par n. Une troisième variante pour convertir les contours en nuage de points consiste à utiliser une approche similaire à celle qui est décrite pour la localisation Angulaire des Irrégularités du Blob. Ces 3 variantes sont illustrées sur la figure 21. Sur cette figure, à gauche est illustré un blob binarisé. Au centre est illustré le contour dudit blob. Le résultat de la première variante est illustré en haut à droite ; celui de la deuxième variante est illustré au centre à droite, et celui de la troisième variante est illustré en bas à droite. À partir du nuage de points, on prévoit de réaliser des constructions géométriques, appelées filtrations. Une filtration, en analyse topologique, permet de faire ressortir une structure topologique d’un ensemble de données. L’objectif est de construire des familles d’objets à différentes échelles et d’étudier leurs évolutions. Le résultat obtenu après filtration est ensuite représenté sous forme d’un diagramme de persistance en utilisant les outils de l’information de l’homologie persistante, les outils de l'information étant les diagrammes du domaine de l'homologie persistante représentés FIG.22 et FIG.23, soit la représentation du changement d'échelle des points, le code-barre de persistance et le diagramme de persistance. Selon l’invention, on prévoit de construire un diagramme de persistance à partir du nuage de points. Durant l’étape de filtration, le diamètre des points est progressivement augmenté et le rayon de chaque point est reporté sous forme d’un code-barre de persistance. À chaque fois qu’une intersection apparaît entre deux points, on considère que l’un des points meurt et on arrête de suivre son évolution sur le code-barre de persistance. Le code-barre obtenu est converti sous forme d’un diagramme de persistance. On obtient alors un descripteur topologique que l’on peut utiliser dans un modèle d’apprentissage. On arrête de faire grossir les boules une fois qu’une seule composante évolue sur le diagramme de persistance. Selon la disposition des points initiaux, des cycles peuvent apparaître durant l’étape de filtration. Lorsqu’un cycle apparaît on suit son évolution sur le code-barre de persistance. La filtration est terminée lorsque qu’il ne reste plus qu’un seul point qui évolue (cf. Figure 22). En fait, on fait grossir les points de façon incrémentale (à gauche sur la FIG.22) et parallèlement on suit l'évolution du rayon de chaque point en construisant un code-barre de persistance (à droite sur la FIG.22). Une barre (haut droit FIG. 22) correspond à l'évolution du rayon d'un point. Les deux barres isolées sous le code-barre (centre droit et bas droit FIG. 22) correspondent à l’apparition d'un cycle. Un cycle apparait quand les "boules" se touchent. Un cycle meurt quand le centre du cycle est "bouché". Un cycle est illustré sur la deuxième image de la FIG.22. En abscisse du code-barre de persistance, on a la durée de vie des "boules"/cycles et en ordonnée "l'identifiant" du point/cycle. Pour pouvoir obtenir un descripteur topologique à partir du code-barre de persistance obtenu, on prévoit de mettre en œuvre une méthode d’homologie persistante. Enfin, on utilise le descripteur topologique du diagramme de persistance, qui est passé dans un modèle de classification (Machine Learning classique ou réseau de neurones), pour déterminer la similarité entre deux blobs. 5.9.b. Analyse topologique de l’ensemble des points irréguliers Dans une deuxième variante, le même principe est appliqué sur l’ensemble des blobs qui ont des défauts plutôt que sur le nuage de points des contours d’un seul blob. 5.9.c. Graphe topologique Dans une troisième variante, on prévoit de construire un graphe à partir des blobs qui ont des défauts. On peut ajouter une arête entre deux points voisins dont les contours comportent des irrégularités. 6. Stockage de l'empreinte On peut prévoir au moins l’un des deux modes de stockages suivants. 6.1. Un mode «lourd», dont la taille est en l’espèce d’environ 20 ko. Dans ce mode, après prétraitement et redressement selon le modèle 2D de la grille, on stocke l’image du code 2D selon un format binaire compressé (par exemple .png). 6.2. Un mode «léger», dont la taille est en l’espèce d’environ 5ko. Dans ce mode, on stocke les coordonnées du centre des points dans le modèle 2D, ainsi que toutes les métriques qui leur sont associées. L’empreinte est plus petite mais elle n’est pas évolutive, contrairement au mode « lourd ». 7 – Préparation pour une Comparaison Optimale On peut prévoir une étape de préparation pour une comparaison optimale. Cette étape peut être mise en œuvre en amont du calcul de l’empreinte. Dans ce cas l’empreinte peut être stockée sous une forme particulièrement compacte. Elle peut aussi être mise en œuvre en aval du calcul de l’empreinte, pour une plus grande richesse de la représentation au moment de la comparaison. A cet effet, on considère les données véhiculées par chacune des empreintes (correspondant à chacune des méthodes de calcul) comme un ensemble de signaux. Ces signaux caractérisent à leur tour le lien qui existe entre les blobs. Cette information peut être quantifiée avant le stockage de l’empreinte, ce qui permet de réduire la taille de l’empreinte globale et optimiser ainsi la comparaison. On peut aussi stocker les empreintes calculées à partir de chacune des méthodes (stockage plus important) et au moment de la comparaison, on applique la quantification. Dans le premier cas on bénéficie d’un stockage compact mais avec une méthode de quantification non évolutive. Dans le deuxième cas, on stocke l’information brute des empreintes mais on gagne en souplesse car on peut améliorer en continu la quantification et le processus de comparaison, c’est à dire combiner différentes méthodes de quantification, différentes heuristiques de comparaison. Dans cette étape, les informations correspondant à chacune des méthodes de calcul des empreintes, c’est-à-dire les signaux véhiculés par les empreintes, sont réduites à un espace de représentation quantifié, comme par exemple une binarisation, en suivant un processus qui conserve les caractéristiques les plus importantes de ces signaux, c’est-à-dire la variation des empreintes d’un blob à l’autre et le lien qui existe entre les blobs voisins, tout en permettant une comparaison binaire point-à-point des valeurs induites, qui dépendent de la méthode de quantification. Dans le cas de la quantification binaire, ce sont les séquences binaires. Ainsi, la quantification des signaux véhiculés par les empreintes permet d’avoir un espace de représentation réduit et homogène et par conséquent un processus de comparaison optimal. On évite ainsi d’adapter le processus à chacune des méthodes (avec son propre espace de représentation, et ses propres mesures de similarité). Par exemple, avec une quantification binaire, le processus de comparaison consiste à comparer les séquences binaires et bénéficier ainsi des méthodes de comparaison qui sont connues par leur rapidité. Une méthode pour réaliser cela peut être la représentation des empreintes par une ou plusieurs séquences de bits. Ainsi la comparaison entre empreintes de références et empreintes candidates revient à comparer les séquences de bits qui les représentent. Cette comparaison peut être effectuée, par exemple, par un simple comptage de bits de différences. D’autres mesures adaptées aux séquences binaires peuvent être envisagées, par exemple la distance de Hamming, le taux de bits d’erreur par blocks de bits, etc. Une séquence de bits est calculée à partir de la variation des empreintes entre deux blobs voisins en mesurant le signe des différences des empreintes correspondantes. La séquence de bits entre deux blobs i, j est constituée de la concaténation des représentations binaires extraites à partir des empreintes de chacune des méthodes. Par, exemple pour méthode d’analyse des rapports de surface de couples de blobs (voir paragraphe 5.1 de la présente description), la séquence binaire est extraite à partir du signe de la différence entre les surfaces des deux blobs voisins i et j. Si on désigne par k le nombre de méthodes choisies, la séquence de bits caractérisant le lien entre deux blobs voisins est définie comme suit : C’est-à-dire que le calcul de la séquence de bits est adapté à chacune des méthodes de calcul d’empreinte choisies. Par exemple, si on prend les trois premières méthodes décrites ici. Pour la méthode décrite au 5.1, la séquence de bits pour les deux blobs voisins i,j peut être calculée comme suit : Pour la méthode décrite au 5.2, la séquence de bits pour les deux blobs voisins i,j peut être calculée comme suit : Pour la méthode décrite au 5.3, la séquence de bits pour les deux blobs voisins i,j peut être calculée comme suit : Ainsi un code-barre 2D est représenté par l’ensemble des séquences de bits de tous les couples de blobs voisins qui le constituent. Le type de voisinage est défini préalablement. Décodage du code-barre Pour le décodage du datamatrix afin d’obtenir son UID, qui sert d’index dans la base de données, on peut prévoir une étape de nettoyage de l'image candidate, en l’espèce en supprimant les parasites et tâches dont la surface est supérieure à celle d’un module du datamatrix, par exemple en appliquant un filtre fréquentiel. On peut aussi prévoir une étape de détection de la qualité de l’image candidate, en l’espèce grâce à des détecteurs (ou analyseurs) de qualité d’image. En fonction de la réponse des détecteurs de qualité, c’est-à-dire si la qualité recherchée n'est pas atteinte, l’image candidate actuelle est abandonnée et on sélectionne une image candidate suivante du flux. On tente alors de décoder le code-barre présent sur la nouvelle image candidate. Si le code n'est pas lisible ou ne correspond pas à une règle (connue) de construction du numéro unique UID, on passe alors à l'image candidate suivante du flux. Le nettoyage éventuel n’est utilisé que pour le décodage du code-barre, qui permet via la lecture de l’UID, de rechercher l’empreinte correspondante dans une base de données. Les étapes de traitement décrite ci-avant sont faites sur l’image candidate redressée (non nettoyée). Grâce à l’invention, il est possible de répondre simultanément aux quatre contraintes fortes suivantes : - Obtenir un très faible taux de faux négatifs, correspondant à des paquets authentiques considérés comme suspects, - Obtenir un extrêmement faible taux de faux positifs, correspondant à des faux paquets considérés comme vrais, - Avoir une empreinte de la taille la plus petite possible, pour le stockage et le transport du paquet, - Calculer le plus rapidement possible (inférieur au temps de production du paquet) cette empreinte. Enfin, le temps de comparaison entre deux empreintes n'a pas forcément de contraintes fortes en termes de temps de calcul. Procédé de traitement d’une image de référence d’un code-barre de référence bidimensionnel, comprenant un ensemble de points et présentant des défauts aléatoires d’impression, le procédé comprenant des étapes consistant à : - enregistrer dans une mémoire une image de référence en niveaux de gris du code-barre de référence, - enregistrer un identifiant (UID) du code-barre de référence sous forme d’index dans une base de données, caractérisé en ce qu’il comprend en outre des étapes consistant à : - calculer une empreinte de référence dudit code-barre de référence, l’empreinte étant fonction des défauts aléatoires d’impression, et - enregistrer l’empreinte de référence dans la base de données sous forme de vecteur ou sous forme de résumé binarisé de l’image de référence. Procédé de traitement selon la revendication 1, dans lequel l’image de référence comprend un ensemble de blobs, le vecteur de l’empreinte de référence comprend plusieurs composantes dont au moins une est non nulle, et chaque composante est calculée par une des étapes respectives parmi : - déterminer l’aire de chaque point du code-barre de référence et enregistrer un vecteur qui renferme l’ensemble des rapports de surface de 2 points successifs du code-barre de référence ; - déterminer la position angulaire de points spécifiques situés sur le contour de chaque blob du code-barre de référence ; - déterminer une cartographie des irrégularités des blobs ; - déterminer une courbe caractérisant le profil de chaque blob du code-barre de référence ; - déterminer un ensemble d’histogrammes, calculés à partir de l’intensité et de l’orientation des gradients, pour chaque point du code-barre de référence ; - enregistrer l’image de référence sous forme d’image binaire comprenant les coordonnées des centres de chaque point du code-barre ; produire une courbe joignant les points continus tout au long de la frontière des pixels ayant la même intensité, calculer l’enveloppe convexe du point correspondant à un module du code-barre, et calculer les défauts de convexité pour chaque enveloppe convexe ; et - produire une image binaire du code-barre de référence, avec les coordonnées des centres de chaque point dudit code-barre, calculer les contours externes des points dudit code-barre, et pour chaque contour, calculer un ensemble de moments. Procédé de vérification d’un code-barre candidat comprenant un identifiant (UID), le procédé comprenant des étapes consistant à : - enregistrer dans une mémoire une image candidate en niveaux de gris du code-barre candidat, - décoder l'identifiant (UID) du code-barre candidat, - identifier le code-barre de référence selon l’une quelconque des revendications 1 ou 2 qui correspond au code-barre candidat et dont l’index dans la base de données est égal audit identifiant, - calculer une empreinte dudit code-barre candidat, - comparer ladite empreinte du code-barre candidat avec l’empreinte de référence correspondante du code-barre de référence. Procédé selon la revendication 3, dans lequel l’étape de comparaison comprend au moins l’une des étapes parmi : - une étape de filtrage par carte de dissimilarité locale, éventuellement précédée d’une étape de débruitage ; et - une analyse topologique de points irréguliers. Procédé selon l'une quelconque des revendications 3 ou 4, comprenant des étapes consistant à : - déterminer la localisation du code-barre candidat et son orientation dans un espace à 3 dimensions, - calculer un vecteur de pose, - redresser l'image du code-barre candidat, et - optionnellement nettoyer ladite image du code-barre candidat. Procédé selon l'une quelconque des revendications 3 à 5, comprenant une étape de représentation de l’empreinte du code-barre candidat et de l’empreinte du code-barre de référence par une ou plusieurs séquences de bits, - l’étape de comparaison étant mise en œuvre par comparaison des séquences de bits qui les représentent. Procédé selon l'une quelconque des revendications 3 à 6, dans lequel le code-barre de référence et le code-barre candidat sont des codes-barres bidimensionnels, le procédé comprenant en outre au moins l’une des étapes parmi : - appliquer un filtre fréquentiel à l’image candidate, - détecter la qualité de l’image candidate, grâce à des détecteurs de qualité d’image Procédé selon l'une quelconque des revendications 3 à 7, dans lequel le code-barre de référence et le code-barre candidat sont marqués sur un paquet de tabac, optionnellement recouvert de cellophane. Programme d’ordinateur comprenant des instructions de code de programme pour l’exécution des étapes du procédé selon l'une quelconque des revendications 3 à 8, lorsque ledit programme est exécuté sur un ordinateur. Smartphone comprenant une mémoire dans laquelle est stockée le programme d’ordinateur selon la revendication 9.