FR 2910158 A1 20080620 FR 0611033 A 20061219 1 PROCEDE DE LECTURE DE CODES VISUELS Domaine technique La présente invention concerne un procédé de lecture de codes visuels. On entend par code visuel une représentation graphique et codée de données, susceptible d'être imprimée, affichée ou projetée sur un support ou un écran. La majeure partie des informations contenues dans un code visuel ne sont pas directement visibles ou interprétables. La restitution des informations requiert la lecture des codes, et leur décodage. L'invention trouve des applications dans des domaines très variés, tels que la communication, la publicité, la distribution, la logistique et l'industrie. Elle vise en particulier l'usage d'équipements mobiles largement diffusées tels que les téléphones portables, ou les appareils de prise de vue numériques, pour la lecture des codes visuels. Etat de la technique antérieure Une forme bien connue de codes visuels est celle des codes-barres imprimés sur les marchandises et biens de consommation offerts au public dans les centres de distribution. Le code-barre ne peut être directement interprété par l'utilisateur mais peut être lu par une caisse enregistreuse et décodé de manière à faire apparaître le prix et la désignation de l'objet portant le code-barre. D'autres applications des codes visuels existent dans des chaînes logistiques ou, plus simplement, pour identifier un article sur un catalogue. L'utilisation de codes visuels, tels que les codes-barres, connaît une expansion très importante en raison de deux évolutions importantes tenant à la fois au codage et à la lecture. En ce qui concerne le codage, une plus grande sophistication du graphisme des codes visuels, ainsi que l'usage de codes visuels en couleur, permet d'augmenter le volume des données qu'ils véhiculent. A titre d'illustration, les codes barres à une dimension sont de plus en plus souvent remplacés par des graphismes à deux dimensions dans lesquels les barres cèdent leur place à des petits carrés ou à d'autres formes. En effet, et bien que par analogie avec les codes barres traditionnels les codes visuels soient parfois désignés par code barre à 2910158 2 deux dimensions , l'unité graphique servant au codage, encore appelée module, n'est généralement plus sous la forme d'une barre ou d'un bâtonnet. Les codes visuels peuvent ainsi être les vecteurs de données plus sophistiquées que le simple prix ou la référence d'un article. Les codes visuels 5 peuvent, par exemple, indiquer une adresse numérique de type URL (Uniform Ressource Locator ùadresse Internet). La seconde cause du développement des codes visuels est liée à la mise à disposition d'un public très large d'outils susceptibles de convenir à leur lecture. Des équipements tels que les téléphones portables ou les appareils 10 photographiques pourvus d'un capteur de prise de vue numérique peuvent en effet être aisément transformés en un outil de lecture des codes numériques. Un logiciel approprié, destiné à une unité de traitement interne de ces équipements, permet de reconnaître dans une image numérique un code visuel et de le décoder le cas échéant. L'usage d'équipements de lecture dédiés n'est plus requis. La simple mise 15 à disposition d'un logiciel de décodage suffit pour un grand nombre d'applications. Le téléphone portable à capteur de prise de vue intégré, encore désigné par phone-cam , peut ainsi servir à saisir des données par l'intermédiaire de codes visuels figurant sur des articles, sur des affiches, dans des journaux et dans des revues. Les codes visuels peuvent aussi être affichés temporairement sur un écran 20 d'un autre équipement multimédia, portable ou non. Les codes visuels apparaissent ainsi comme un moyen de communication et d'appariement d'équipements multimédia pourvus de moyens d'affichage et de prise de vue. La lecture de codes visuels, avec des équipements qui ne sont initialement pas dédiés à cet usage, pose cependant un certain nombre de difficultés. En effet, 25 avant de décoder un code visuel il faut saisir une ou plusieurs images du support portant le code visuel, il faut que l'appareil identifie l'existence d'un code visuel et qu'il corrige éventuellement des défauts de parallaxe ou d'autres défauts d'image susceptibles de nuire au décodage. Les codes visuels peuvent à cet effet être pourvus de signes ou de marques additionnels favorisant leur reconnaissance et 30 leur orientation dans une image saisie. 2910158 3 Une illustration de l'état de la technique peut être trouvée, par exemple, dans les documents (1) et (2) dont les références sont précisées à la fin de la description. Exposé de l'invention 5 Compte tenu des capacités de lecture, d'analyse et de calcul relativement limités des équipements non dédiés, utilisés pour la lecture de code visuels, l'opération de décodage est loin d'être instantanée. Ceci est le cas notamment pour les phone-cam . Les difficultés de lecture des codes visuels évoqués précédemment se 10 traduisent fréquemment par un échec du décodage des codes. L'usager d'un équipement portable capable de lire des codes visuels, a alors tendance a saisir une nouvelle image du code visuel lorsque la lecture précédente s'est soldée par un échec du décodage. La succession de plusieurs saisies d'images d'un code visuel et de plusieurs échecs de décodage, génère alors 15 une impression négative pour l'utilisateur. Cette impression est renforcée par la relative lenteur du calcul de décodage effectué à chaque nouvelle saisie d'image. L'utilisateur risque d'abandonner ses tentatives de lecture de codes visuels et risque également de douter du bon fonctionnement de son équipement. L'invention a pour but de proposer un procédé de lecture de codes visuels 20 ne présentant pas les difficultés mentionnées ci dessus. Un but est également de proposer un tel procédé permettant de guider l'utilisateur dans la lecture des codes visuels. Un but est de réduire le risque d'échec du décodage et de réduire la durée globale nécessaire à la lecture d'un code visuel. 25 Un but est encore de proposer un tel procédé permettant d'éviter une action répétée de l'utilisateur pour la lecture d'un code visuel. Pour atteindre ces buts l'invention a plus précisément pour objet un procédé de lecture de codes visuels comprenant : a) la saisie d'au moins une première image numérique 30 b) la recherche dans l'image numérique d'au moins un code visuel, et c) la préparation au décodage d'au moins un code visuel identifié lors de l'étape b). 2910158 4 Conformément à l'invention, ce procédé comprend une étape de calcul d'au moins un descripteur du code visuel identifié dans la première image numérique et par le conditionnement de l'étape de décodage à une évaluation du descripteur. On entend par descripteur une information qualitative obtenue à partir 5 du code visuel sans procéder à son décodage ou tout au moins sans effectuer de décodage complet du code. Le descripteur est une information distincte de l'information codée dont est porteur le code visuel. Le descripteur peut être différent pour différents équipements de lecture. Le descripteur est ainsi une information susceptible d'être obtenue sans avoir recours au logiciel de décodage. 10 Le descripteur peut être établi à partir de certains repères ou à partir de certaines marques accompagnant le code visuel. Il s'agit, par exemple, de marques destinées au repérage du code visuel ou à établir son orientation. Le descripteur est obtenu par l'analyse d'une image saisie pour la lecture du code visuel. Les descripteurs peuvent prendre en compte des défauts de géométrie, de 15 qualité d'image ou de structure de données. Le calcul du descripteur comprend, par exemple, un calcul des défauts de géométrie des contours et des modules de base constituant le code visuel. Ces défauts peuvent être dus à des erreurs de parallaxe, à des effets de perspective ou bien encore à des déformations ou aberrations géométriques dues au système imageur. Le descripteur ou les composants d'un 20 descripteur vectoriel peuvent également être calculés à partir d'une connaissance préalable de l'organisation structurelle des données du code visuel. Ainsi, dans le cas d'un code de type Datamatrix, il est connu que les bords haut et droit du code visuel sont alternativement représentés par des modules noir puis blanc. La prise en compte de cette connaissance permet de déduire la densité et la taille 25 élémentaire d'un module. Il est également possible de calculer une fonction déterminant le niveau de netteté ou de contraste de l'image source à l'aide par exemple du calcul d'une fonction de modulation de transfert. Le niveau de bruit électronique provenant du capteur CCD ou CMOS peut également être estimé. Dans le cas ou l'image source a été préalablement encodée, il est également 30 intéressant d'évaluer les dégâts causés par la compression, comme par exemple les effets de blocs ou d'anneaux autour des contours les plus contrastés. Un calcul 2910158 5 d'histogramme des intensités des contours du code visuel peut permettre de déterminer quelle canal chromatique (rouge, vert ou bleu par exemple) doit être utiliser préférentiellement pour le décodage. Cela peut également servir à déduire si la phase de quantification de l'image, i.e. le processus de réduction des données 5 de l'image source en un nombre limité de niveaux d'intensité, celui-ci correspondant au nombre de couleurs servant à coder le contenu du code visuel, permettra d'accéder à un niveau de détail suffisant pour le décodage. La prise en compte des ombres portées ou d'autres éléments susceptible d'altérer le décodage peut également faire l'objet d'un descripteur. Par exemple, il est possible de 10 distinguer l'intensité des pixels sombres correspondant aux structures du code-barre de l'intensité des pixels correspondant aux zones d'ombres, ces dernières étant des régions plus uniformes. Le descripteur peut également être calculé à partir des informations issues de plusieurs images capturés consécutivement. La prise en compte d'informations redondantes et complémentaires permet d'estimer 15 plus finement la probabilité d'obtenir un décodage correct. Le calcul d'un ou de plusieurs descripteurs d'un code visuel identifié conditionne l'étape de décodage. Si plusieurs descripteurs sont calculés, ils forment un vecteur de description donc chaque composant peut être testé individuellement ou en combinaison. Le décodage peut être conditionné à la 20 possibilité d'établir un certain type de descripteur, à une certaine valeur du descripteur ou au fait que le descripteur calculé est considéré comme acceptable. Le descripteur peut aussi être comparé à un descripteur de référence. La façon la plus simple de valider cette phase de test ou de pré-décodage est de comparer chacune des composantes du vecteur de description à un jeu de seuils spécifiques. 25 Si l'ensemble des valeurs des descripteurs est en accord avec l'ensemble des seuils préalablement définis, l'image initiale est considérée comme acceptable et le processus de décodage peut s'initier. Un raffinement de la méthode consiste à utiliser des seuils adaptatif, c'est-à-dire dont la valeur dépend elle-même du contenu de l'image. Les défauts de géométrie peuvent par exemple être calculé à 30 l'aide de modèles polynomiaux ou encore en estimant un. certain nombre de points de fuite dans un espace 2D ou 3D. Les valeurs de paramètres des modèles de 2910158 6 déformation polynomiaux peuvent être comparées à des valeurs de seuil ou de référence. La position des points de fuite peut également être comparée à une distance minimale en deça de laquelle les déformations seront jugées trop importantes. Si la régularité des modules représentants la structure fixe du code 5 visuel n'est pas respectée, c'est-à-dire si par exemple l'alternance régulière de modules blanc et noir n'est pas constatée, il est souhaitable de ne pas valider la phase de test. De même, si la taille des modules résultant d'une phase de quantification préalable est inférieure à un nombre de pixels donné, par exemple quatre pixels par module, il sera supposé que la probabilité de bonne détection est 10 trop faible. De manière générale, on considère que le descripteur d'un code visuel est acceptable si la possibilité de l'établir ou si la valeur du descripteur est telle qu'un décodage ultérieur du code visuel peut être réalisé avec des chances déterminées de succès. Le descripteur donne ainsi une indication qualitative relative au code visuel 15 identifié et permet de préjuger des chances de succès de son décodage ultérieur. Le calcul ou l'évaluation d'un descripteur est une opération qui nécessite peu de puissance de calcul par rapport au décodage et qui peut ainsi être effectuée à une vitesse très supérieure au décodage. Le calcul du descripteur permet ainsi d'éviter le décodage lorsque les 20 chances de succès du décodage sont trop faibles, et de multiplier la saisie d'images de lecture. Ceci peut avoir lieu dans un intervalle de temps très court en raison du calcul rapide du descripteur. La recherche d'une image de lecture conduisant à un décodage réussi passe ainsi quasi inaperçue pour l'utilisateur et ne génère pas une impression de dysfonctionnement. 25 Nombre d'appareils de prise de vue présentent à la fois la possibilité de saisie d'images instantanées fixes, et de séquences d'images. La lecture des codes visuels peut ainsi être envisagée selon ces deux modes de prise de vue. Dans un mode de saisie d'images fixes, la saisie d'une image peut être suivie du calcul d'un descripteur, et de l'évaluation, à partir du descripteur de la 30 possibilité d'extraire des données d'un code visuel présent dans l'image. Le calcul du descripteur et son évaluation permettent de procéder, de manière automatique 2910158 7 ou non, à la saisie d'une nouvelle image de lecture si le descripteur révèle une probable difficulté de décodage du code visuel. De préférence, on établit des descripteurs dont la durée de calcul est du même ordre que la durée séparant deux images successives d'une séquence 5 d'images saisies. Comme indiqué précédemment, la saisie et l'analyse d'une pluralité d'images de lecture peut avoir lieu sans générer un temps d'attente long pour l'utilisateur. Ceci augmente la probabilité de disposer d'une image exploitable pour le décodage du code visuel. 10 Dans un mode de saisie d'images sous la forme d'une séquence, le procédé peut comporter les étapes suivantes : a) la saisie d'une séquence formée d'une pluralité d'images successives susceptibles de contenir une image d'un code visuel, b) la recherche, dans une première image de la séquence, d'au moins un code 15 visuel, c) le calcul d'un descripteur du code visuel si un code visuel a été identifié, d) l'évaluation du descripteur e) le décodage du code visuel lorsque le descripteur de la première image est reconnu acceptable lors de l'évaluation, et 20 f) itération du procédé de l'étape b) lorsque la recherche d'un code visuel, le calcul du descripteur et ou l'évaluation du descripteur comme acceptable font défaut, l'itération étant effectuée respectivement à partir d'une image subséquente de la séquence d'images. L'itération consiste à répéter l'étape b) et, le cas échéant, les étapes 25 suivantes. L'itération peut comporter la capture automatique d'une nouvelle image dans un balayage de l'environnement proche du code barre. La succession de captures nécessaire avant le bon décodage des données contenu dans le code visuel forme par définition une séquence d'images acquise a une fréquence variable dans 30 le temps, celle-ci étant dépendante du temps mis pour calculer et analyser la valeur des descripteurs ainsi que pour initier une nouvelle capture. Il est possible que le 2910158 8 calcul et l'évaluation du vecteur de description puissent être effectué à une résolution ou à un niveau de détail inférieur à celui utilisé pour le décodage lui-même. De même, il est possible d'utiliser des techniques dites de fusion d'images permettant de combiner les informations de structure et d'intensité présentes dans 5 plusieurs images successives de la séquence préalablement ou continûment acquise. La redondance et la complémentarité des données présente dans une suite d'image permettent d'étendre et d'améliorer le processus de construction du vecteur de description, de validation ainsi que le processus de décodage des données proprement dite. L'utilisation de plusieurs images consécutive temporellement et 10 de faible résolution peut permettre d'obtenir une image de plus haute résolution, donc plus facile à décoder. Ces techniques sont regroupées sous le terme d'approches de "super-résolution". Il est également possible d'évaluer les descripteur à partir d'une information chromatique particulière, par exemple un sous-ensemble des données potentiellement accessible, comme l'utilisation du seul 15 canal vert du triplet rouge, vert, bleu. La saisie d'une séquence d'images peut être éventuellement poursuivie pendant les exécutions des étapes suivantes du procédé. Grâce au mode de saisie sous la ferme d'une séquence, et grâce au calcul relativement rapide des descripteurs, il est possible à l'utilisateur de balayer avec 20 son équipement mobile un support contenant un code visuel, jusqu'à ce qu'un descripteur acceptable soit établi et que le décodage ait lieu. Selon un perfectionnement possible du procédé, celui-ci peut comporter, en outre, postérieurement à l'étape de calcul du descripteur, l'émission visuelle ou sonore d'une information dépendant du descripteur. 25 L'information peut être, par exemple, un message ou un pictogramme affiché sur un écran d'affichage de l'équipement utilisé pour la lecture du code visuel. L'information émise peut être établie à partir du descripteur ou être sélectionnée en fonction d'une caractéristique du descripteur. A titre d'illustration, si le descripteur comprend le calcul de la taille relative 30 du code visuel dans l'image saisie et si cette taille relative est inférieure à une valeur prédéterminée, l'information affichée peut être une invitation pour 2910158 9 l'utilisateur à approcher son équipement de prise de vue du support présentant le code visuel. Cette information peut être préalablement enregistrée et simplement appelée en réponse au calcul du descripteur, ou en réponse à une évaluation du descripteur jugé non acceptable. De manière très simple, l'information affichée 5 peut renseigner l'utilisateur si un code visuel a été identifié et/ou s'il est possible de le décoder. Une tonalité sonore peut aussi être émise selon que le descripteur calculé est évalué comme étant acceptable ou non. Lorsque le descripteur permet, sans décoder le code visuel, de donner une information déduite du code visuel, cette donnée peut également être affichée. Une 10 telle donnée peut être, par exemple, une marque commerciale, un logo, ou une information non codée, ou une information avec un code sommaire associée au code visuel. De manière additionnelle, l'émission d'une information visuelle ou sonore peut être accompagnée d'une invitation de saisie d'une commande d'utilisateur. 15 La commande d'utilisateur, qui consiste, par exemple, à actionner un bouton, peut être utilisée comme une condition supplémentaire pour procéder au décodage. Cette possibilité est intéressante lorsque plusieurs codes visuels sont détectés, pour effectuer un choix entre les codes visuels (levant être décodés. Lorsque plusieurs codes visuels sont détectés, et dans le mode de saisie 20 d'une séquence d'images, les étapes de recherche d'un code visuel, de calcul d'un descripteur et/ou d'évaluation du descripteur peuvent aussi être itérées à partir d'une image subséquente de la séquence, en l'absence d'une commande de l'utilisateur. L'étape b) d'identification d'un code visuel peut comporter un certain 25 nombre de sous-étapes qui visent non seulement à la simple identification d'un code visuel mais également à la mise en forme des signaux relatifs au code en vue de son décodage. Plus précisément, le procédé peut comporter une pluralité de sous-étapes de mise en forme du code visuel dans lequel au moins une sous-étape de mise en forme est associée au calcul d'un descripteur et dans lequel l'exécution 30 d'une sous-étape subséquente est conditionnée par l'évaluation du descripteur associé à une sous-étape précédente. 2910158 10 Ainsi, et à titre d'exemple, l'étape b) peut comporter les sous-étapes d'identification d'une zone susceptible de contenir un code visuel, une étape de seuillage, une étape de détection de bords du code, une étape dite de maillage et enfin une étape de détection des modules du code visuel. 5 Chaque sous-étape peut faire l'objet du calcul d'un descripteur, et l'exécution de l'étape suivante peut être conditionnée par la validation du descripteur, c'est-à-dire son évaluation et la reconnaissance du descripteur comme étant acceptable. D'autres caractéristiques et avantages de l'invention ressortiront de la 10 description qui va suivre, en référence aux figures des dessins annexés. Cette description est donnée à titre purement illustratif et non limitatif. Brève description des figures La figure 1 est un diagramme illustrant un procédé de lecture de codes visuels conforme à l'invention utilisant un appareil de prise de vue fonctionnant 15 selon un mode de prise de vue fixe (still). La figure 2 est un diagramme illustrant un procédé de lecture de code visuels conforme à l'invention utilisant un appareil de prise de vue fonctionnant selon un mode de prise de vue en séquence. La figure 3 est un diagramme illustrant un procédé de lecture de codes 20 visuels conforme à l'invention et impliquant le calcul d'une pluralité de descripteurs. Description détaillée de modes de mise en oeuvre de l'invention Dans la description qui suit, des références identiques sont utilisées pour des parties identiques ou similaires des deux figures. 25 Une première étape 100 de la figure 1 comprend la saisie d'une image par un appareil de prise de vue numérique tel qu'une phone-cam ou d'un appareil photographique. La prise de vue est suivie d'une étape 102 d'identification dans l'image d'au moins un code visuel. L'étape 102 d'identification peut être assortie d'une ou 30 de plusieurs sous-étapes de mise en forme de l'image et, les cas échéant, du code visuel identifié. Ces sous-étapes visent à reconnaître dans l'image un code visuel et 2910158 11 de la mettre dans une forme adaptée au décodage ultérieur. La raison principale de l'étape 102 tient au fait que l'équipement de prise de vue utilisé pour la lecture des codes visuels n'est pas nécessairement un équipement dédié uniquement à cette tache, et que l'image saisie n'est pas nécessairement une image saisie avec 5 l'intention de décoder un code visuel. La recherche d'un code visuel est basée sur la reconnaissance graphique d'un certain nombre de structures considérées comme faisant partie des codes visuels. La reconnaissance des codes visuels peut être facilitée lorsque les codes visuels sont associés à des marques de reconnaissance telles que des contours ou 10 des repères de forme ou de couleur susceptibles d'être identifiées au terme d'une analyse sommaire de l'image saisie. Comme indiqué ci-dessus, l'étape d'identification dans l'image de codes visuels peut être complétée par un certain nombre de corrections d'image, ou de mise en forme, effectuées lorsqu'un code visuel est détecté. Les corrections 15 peuvent être des corrections géométriques, de contraste ou de grandissement et visent à améliorer la lecture du code visuel. A titre d'exemple, une déformation homothétique de l'image ou d'une partie de l'image contentant un code visuel peut être effectuée de manière à corriger des déformations de parallaxe lorsque l'axe de prise de vue n'est pas normal au plan du code visuel saisi. De telles corrections 20 peuvent aussi être facilitées en utilisant des cadres, des maillages graphiques ou des contours accompagnant les codes visuels. Une étape suivante 104 consiste à calculer un ou plusieurs descripteurs du code visuel. Un descripteur unique peut être associé au résultat global de l'étape d'identification. Une pluralité de descripteurs peuvent aussi être associés à une 25 pluralité de sous-étapes d'identification et de correction du code visuel. Comme évoqué précédemment, le descripteur vise à donner une information qualitative du code visuel susceptible d'être utilisée pour évaluer les chances de succès d'une étape de décodage ultérieure. Le descripteur peut rendre compte, par exemple, de la qualité du contraste, de la qualité graphique, et ou de la 30 qualité colorimétrique du code visuel. 2910158 12 Le calcul de descripteur peut être effectué après les corrections de l'image mentionnées en relation avec l'étape précédente 102, ou prendre en compte les défauts constatés, susceptibles d'être corrigés ou non. Le calcul du descripteur peut être un calcul portant sur tout ou partie du 5 code visuel. Il peut déterminer des contours, des contrastes, ou d'autres caractéristiques du code visuel telles que des fréquences spatiales de répétition d'un motif. Le calcul du descripteur peut aussi tirer avantage de la présence accessoire de marques au cotés du code visuel facilitant le calcul. Il s'agit de repères de position, de cadres et autres éléments graphiques ou de couleur tels que 1 o mentionnés précédemment. Le descripteur peut aussi fournir un renseignement ou être utilisé comme un pointeur vers un renseignement préenregistré qualifiant le code visuel ou permettant de classer le code visuel dans une catégorie préétablie. A titre d'illustration, le descripteur peut être mis à profit pour établir si un code visuel est 15 un code portant une information d'identification, une information d'authentification, une information de lien de communication, une information publicitaire, ou un lien commercial, sans que l'information elle même ne soit décodée. Si tel est le cas, une étape additionnelle 105 indiquée en trait discontinu 20 peut être prévue pour diffuser un message portant le renseignement ou l'information établie. Si l'équipement de lecture est pourvu d'un écran d'affichage, le message peut être diffusé par l'affichage d'une image, d'une icône ou d'un message écrit. Une diffusion sonore du message n'est bien sûr pas exclue. La diffusion du message peut aussi être postérieure à l'évaluation du descripteur et 25 conditionnée par cette évaluation. La référence 106 indique l'étape d'évaluation du descripteur. L'évaluation du descripteur peut prendre différentes formes. Elle peut être automatique ou faire appel à une commande de l'utilisateur. Une évaluation automatique peut comporter la comparaison du descripteur 30 à une valeur de consigne ou un descripteur de consigne. Il s'agit par exemple d'une valeur du descripteur, telle qu'une valeur de contraste, à partir de laquelle le 2910158 13 décodage peut être effectué avec des chances de succès raisonnables. De la même façon le descripteur de consigne peut être un descripteur préétabli correspondant à un code visuel pouvant être décodé. Les descripteurs peuvent prendre en compte des défauts de géométrie, de qualité d'image ou de structure de données. Le calcul 5 du descripteur comprend, par exemple, un calcul des défauts de géométrie des contours et des modules de base constituant le code visuel. Ces défauts peuvent être dus à des erreurs de parallaxe, à des effets de perspective ou bien encore à des déformations ou aberrations géométriques dues au système imageur. Le descripteur (ou une partie du vecteur de description) peut également être calculé à 10 partir d'une connaissance préalable de l'organisation structurelle des données du code visuel. Ainsi, dans le cas d'un code detype Datamatrix, il est connu que les bords haut et droit du code visuel sont alternativement représentés par des modules noir puis blanc. La prise en compte de cette connaissance permet de déduire la densité et la taille élémentaire d'un module. Il est également possible de calculer 15 une fonction déterminant le niveau de netteté ou de contraste de l'image source à l'aide par exemple du calcul d'une fonction de modulation de transfert. Le niveau de bruit électronique provenant du capteur CCD ou CMOS peut également être estimé. Dans le cas ou l'image source a été préalablement encodée, il est également intéressant d'évaluer les dégâts causés par la compression, comme par exemple les 20 effets de blocks ou de "ringing" autour des contours les plus contrastés. Un calcul d'histogramme des intensités des contours du code visuel peut permettre de déterminer quelle canal chromatique (rouge, vert ou bleu par exemple) doit être utiliser préférentiellement pour le décodage. Cela peut également servir à déduire si la phase de quantification de l'image, i.e. le processus de réduction des données 25 de l'image source en un nombre limité de niveaux d'intensité, celui-ci correspondant au nombre de couleurs servant à coder le contenu du code visuel, permettra d'accéder à un niveau de détail suffisant pour le décodage. La prise en compte des ombres portées ou d'autres éléments susceptibles d'altérer le décodage peut également faire l'objet d'un descripteur. Par exemple, il est possible de 30 distinguer l'intensité des pixels sombres correspondant aux structures du code-barre de l'intensité des pixels correspondant aux zones d'ombres, ces dernières 2910158 14 étant plus uniformes. Le descripteur peut également être calculé à partir des informations issues de plusieurs images capturés consécutivement. La prise en compte d'informations redondantes et complémentaires permet d'estimer plus finement la probabilité d'obtenir un décodage correct. 5 On considère que le descripteur est acceptable lorsqu'il correspond à la consigne ou est supérieur à la consigne selon un critère préétabli. Une évaluation peut aussi être effectuée en intégrant une commande de l'utilisateur. Elle comprend, par exemple, l'affichage d'une information telle qu'indiquée avec la référence 105 et l'attente d'une commande 108 de l'utilisateur, 10 telle que, par exemple, la dépression d'un bouton. Ceci permet notamment de présenter à un utilisateur différentes catégories de codes visuels identifiés par le calcul d'un ou de plusieurs descripteurs et de laisser l'utilisateur décider si un décodage doit avoir lieu.. L'évaluation automatique et l'évaluation faisant intervenir une commande 15 de l'utilisateur peuvent être cumulées ou non. Elles sont indiquées avec les références 106a et 106u. Une autre étape possible, indiquée en trait discontinu avec a référence 109 consiste à émettre un signal, par exemple un signal sonore indiquant qu'un code visuel a été identifié et qu'il peut être décodé. Ceci signifie que son descripteur est 20 reconnu acceptable lors de l'évaluation. Lorsque le descripteur a été évalué et reconnu acceptable au terme de l'évaluation 106a, 106u, l'étape de décodage du ou des codes visuels concernés est effectuée. Cette étape est indiquée avec la référence 110. L'étape de décodage des 25 codes visuels n'appelle pas de commentaires particuliers. Elle est réalisée selon des instructions logicielles propres aux codes. Eventuellement certains paramètres du décodage ou un choix du logiciel de décodage peut être effectué en fonction du ou des descripteurs précédemment établis. Par exemple, un ou des descripteurs mesurant des distorsions géométriques ou colorimétriques pourraient être 30 efficacement réutilisés lors de la phase de décodage. En effet il peut exister entre la phase de décodage elle même et la phase de test une phase de préparation de 2910158 15 l'image source à son décodage. C'est en particulier cette phase qui pourrait bénéficier des calculs de descripteurs. Enfin, une dernière étape 112 représente une action résultant du décodage. Il s'agit, par exemple, d'un affichage, d'une connexion, d'un appariement 5 d'équipements, d'un envoi et/ou d'une réception de données. L'action est dictée par l'information décodée. Cette dernière étape ne fait plus partie du procédé de lecture mais constitue sa suite logique. Lorsque le descripteur n' est pas reconnu acceptable, c'est-à-dire que les chances de succès d'un décodage ultérieur sont considérées comme trop faibles, le 10 procédé peut être poursuivi par la saisie d'une nouvelle image. Cette voie, indiquée par une flèche 107, répond aussi aux situations où l'image précédemment saisie ne contenait pas de code visuel, et où un code visuel existant n'a pas été reconnu. En effet, dans ces cas, également, aucun descripteur acceptable n'est établi et la saisie d'une nouvelle image peut suivre immédiatement l'étape 102 comme le montre 15 une flèche 113 en trait discontinu. La saisie d'une nouvelle image peut être précédée par l'affichage 114 d'un message déduit du descripteur précédemment établi. Il s'agit, par exemple, une invitation à destination de l'utilisateur de saisir une nouvelle image et /ou de modifier les conditions de prise de vue. 20 A titre d'exemple, un descripteur sous la forme d'une mesure de fréquence spatiale peut être utilisé pour inviter l'utilisateur à saisir une image plus rapprochée ou plus éloignée ou pour une commande de zoom. Un descripteur relatif au contraste peut être utilisé pour inviter l'utilisateur à modifier les conditions d'éclairage, par exemple, en déclenchant un flash. 25 La référence 116 indique une modification automatique des conditions de prise de vue, telles que le zoom ou l'éclairage, par exemple, lorsque un descripteur est établi. Le déclenchement de la saisie d'un nouvelle image pour l'identification de codes visuels et les éventuelles corrections apportées à cette nouvelle prise de vue peuvent en effet être automatiques ou non. 30 La figure 2 illustre une autre mise en oeuvre de l'invention dans laquelle la lecture de codes visuels est effectuée selon un mode de prise de vue en séquence. 2910158 16 La première étape 100 de prise de vue ne comprend pas la saisie d'une image unique mais d'une pluralité d'images. La saisie de la pluralité d'images est effectuée, par exemple, lorsque l'utilisateur tenant l'appareil de prise de vue en main, balaye un champ de prise de vue susceptible de contenir des codes visuels. 5 Le balayage fait que les images successives de la séquence saisie sont légèrement différentes de proche en proche. Les conditions de prise de vue et les conditions de saisie d'un éventuel code visuel sont ainsi variables dans la séquence. La saisie de la séquence est poursuivie par des étapes 102 d'identification/correction d'un code visuel et de calcul d'un descripteur 104. Ces Io étapes sont effectuées de la manière décrite précédemment en utilisant une image de la séquence. Elles sont effectuées, par exemple, en utilisant la première ou l'une des premières images de la séquence. Lors des calculs correspondant à la recherche d'éventuels codes visuels et lors des calculs d'éventuels descripteurs, la prise de vue 100 peut être interrompue ou poursuivie. 15 Si un descripteur est établi et si ce descripteur permet de fournir un renseignement sur un code visuel identifié, une information correspondante peut être affichée à l'étape 105. Cette information permet par exemple à l'utilisateur de choisir de poursuivre ou d'interrompre la séquence de prise de vue et/ou de confirmer un souhait de décodage d'un code visuel. 20 Comme précédemment, l'évaluation 106 du descripteur permet de déterminer si le décodage d'un code visuel identifié peut être réalisé ou non avec des chances raisonnables de succès. Dans l'affirmative, le procédé peut être poursuivi par le décodage 110 et d'éventuelles étapes subséquentes 112 utilisant les informations décodées. 25 L'évaluation 106 peut faire intervenir l'utilisateur en l'invitant à saisir une commande. Dans la négative, en revanche, ou en l'absence d'une commande de l'utilisateur, le cas échéant, une nouvelle recherche de code visuel et un nouveau calcul de descripteur est opéré. Ceci est illustré par une flèche 107. L'itération 30 consistant à rechercher un code visuel et calculer un descripteur ne comprend pas une nouvelle prise de vue mais est effectuée avec une image différente de la 2910158 17 séquence saisie à l'étape initiale 100. De préférence ces opérations sont effectuées avec une image subséquente de la séquence d'images. Il peut s'agir de l'image saisie immédiatement après celle qui a servi aux calculs précédents ou une image saisie postérieurement. 5 Il convient de souligner que lorsque la cadence de saisie des images de la séquence d'images est élevée, deux images qui se succèdent immédiatement présentent généralement un contenu d'image proche et conduisent, le cas échéant, au calcul de descripteurs également proches. Ainsi si le descripteur d'une image n'est pas considéré comme acceptable pour procéder à un décodage, il peut 10 s'avérer inutile d'itérer le procédé avec la ou les images plus proches voisines de l'image précédemment considérée. Au même titre si un descripteur est considéré comme acceptable il est possible dans ce cas de procéder au décodage du code visuel soit avec l'image qui a servi au calcul du descripteur soit à une image proche voisine de celle-ci, dans la 15 séquence. Comme indiqué précédemment, l'étape d'identification et de mise en forme d'un code visuel en vue de son décodage, peut comporter un certain nombre de sous-étapes, assorties ou non du calcul de descripteurs correspondants. Ces sous-étapes sont décrites plus en détail dans ce qui suit. 20 La première sous-étape suivant la saisie de l'image consiste à extraire au moins une zone candidate susceptible de contenir le ou les codes visuels. Le résultat de cette phase d'analyse peut être formulé sous forme d'un descripteur qui conditionne le déclenchement des phases suivantes. Si tel est le cas, une sous-étape ultérieure peut consister à seuiller, ou binariser, les zones candidates 25 précédemment identifiées. Le résultat de cette quantification permet d'identifier, le cas échéant, la structure du code visuel. Le résultat de cette étape peut encore être formulée sous forme d'un ou de plusieurs descripteurs. En cas de validation du ou des descripteurs, une phase d'analyse de la structure du code visuel permet de retenir ou non la zone précédemment isolée. Aussi, la sous-étape suivante peut 30 consister à calculer un maillage s'ajustant au mieux à la structure du code visuel. Dans le cas où un descripteur caractérisant le maillage ainsi estimé est validé, le 2910158 18 calcul de la valeur attribuée à chaque module, (par exemple blanc ou noir dans le cas d'un code visuel binaire), est effectué. Le résultat obtenu peut servir de signal d'entrée à un module de décodage du code visuel. Nous allons maintenant décrire plus précisément chacune de ces étapes et déterminer les descripteurs associés à 5 chacune de ces étapes. La première sous-étape suivant la capture d'une image consiste comme indiqué cidessus à trouver les zones candidates susceptibles de contenir un code visuel. Il est possible qu'on ne puisse pas identifier de zones candidates lorsque il n'y a pas assez de gradients spatiaux d'intensité dans un canal ou un espace de 10 couleur utilisé. Cela peu signifier que l'image ne contient que des zones uniformes (fond blanc par exemple) ou qu'elle est trop peu contrastée du fait d'une sur- ou d'une sous-exposition. Il est également possible que la réponse colorimétrique ne corresponde pas à l'espace de couleur utilisé. Nous décrivons maintenant deux méthodes permettant d'identifier la ou les zones candidates. La première méthode 15 suppose que l'environnement immédiat du code visuel est uniforme, ce qui veut dire que l'utilisateur s'est suffisamment rapproché ou a suffisamment zoomé pour ne capturer qu'une zone proche des bords du code visuel. Il est supposé ici que le code visuel est entouré d'une zone claire uniforme dont la valeur des pixels est identique à celle des modules clairs de la matrice à décoder. Cette zone entourant 20 le code est supposée représenter par exemple 50% de la largeur et/ou de la hauteur du motif Une deuxième possibilité de mise en oeuvre comprend l'extraction des zones candidates d'une image de contenu quelconque et dont la surface du ou des codes présents peut être très inférieure à la surface totale de l'image. Dans ce cas, il est nécessaire de caractériser plus précisément la signature caractéristique du code 25 visuel à localiser. Dans le premier cas, un calcul des gradients spatiaux d'intensité grad(Ip) pour chaque pixel p de l'image est d'abord effectué. Le gradient spatial d'intensité horizontal peut être calculé par la différence entre la valeur d'intensité du pixel courant diminuée de la valeur d'intensité du pixel situé immédiatement à gauche par exemple. Le gradient d'intensité vertical peut être calculé par la 30 différence entre la valeur d'intensité du pixel courant diminuée de la valeur d'intensité du pixel situé immédiatement au dessus. Une approximation du gradient 2910158 19 spatial d'intensité grad(I_p) pour le pixel p peut être représentée par la somme des gradients spatiaux horizontaux et verticaux tels que définis ci-dessus. Un premier seuillage empirique avec une valeur de seuil th] fixée est appliqué aux valeurs des gradients spatiaux d'intensité, et cela pour chaque pixel p de l'image, afin de 5 déterminer les régions de plus fort contraste. Une érosion mathématique, appliquée sur la carte issue de la binarisation des valeurs obtenues après seuillage, et utilisant par exemple un élément structurant de forme carré et de taille égale à 3 par 3 pixels peut permettre de réduire le nombre de pixels isolés et ainsi de ne garder que les zones connexes de plus fortes textures. Les histogrammes représentant le nombre 10 cumulé des pixels p ayant une valeur grad(Ij,) supérieure au seuil th1 sont calculés horizontalement et verticalement, c'est-à-dire pour chaque ligne et pour chaque colonne de la carte supposée rectangulaire. Par exemple, si la dixième valeur de l'histogramme dit vertical est égale à vingt, cela veut dire que la dixième ligne de la carte de données binarisées présente vingt pixels ayant une valeur de 15 gradient spatial d'intensité supérieure au seuil th]. De même, si la trentième valeur de l'histogramme dit horizontal est égale à cinq, cela veut dire que la trentième colonne de la carte de données binarisées présente seulement cinq pixels ayant une valeur de gradient spatial d'intensité supérieure au seuil th'. La zone susceptible de contenir le code visuel doit être représentée par des valeurs d'occurrences des 20 histogrammes plus élevées. Il est cependant possible que d'autres structures géométriques proches du code visuel aient été capturées dans le champ de la caméra. Les données de chacun des deux histogrammes peuvent ensuite être filtrées à l'aide d'un filtre Gaussien ou Médian par exemple. Cela permet de lisser les variabilités locales susceptibles d'altérer l'étape suivante. Un seuillage mono- 25 dimensionnel th2 est appliqué à chacun des deux histogrammes, ce qui permet d'identifier dans chacune des deux directions le segment de plus grande taille représentatif des dimensions du code visuel. Un segment est un intervalle correspondant à la différence entre les coordonnées maximale et minimale pour lesquelles toutes les valeurs de l'histogramme associé sont au dessus du seuil th2. A 30 titre d'illustration, on suppose que l'histogramme vertical présente des valeurs d'occurrences supérieures à th2 entre les coordonnées (en abscisses) vingt et 2910158 20 cinquante. Dans ce cas, un segment aura pour dimension cinquante moins vingt, c'est-à-dire trente. Il est possible que pour une direction donnée, par exemple la direction verticale, plusieurs segments soient extraits de la phase de seuillage. Dans ce cas, seul le segment présentant la plus grande valeur est conservé et jugé 5 représentatif de la dimension de la zone candidate dans la direction considérée. Une zone candidate est donc entièrement définie par le rectangle correspondant aux deux segments segmh et segmv obtenues dans les directions horizontale et verticale. Le premier jeu de descripteurs descl est représenté par les longueurs des deux segments ainsi que par la valeur absolue de leur différence de taille relative. 10 ( segmi, desc, = segmä (1) Jsegm,, û segmv l ) Si les dimensions de la zone candidate sont trop petites, ou si un des segments présente une différence de taille trop importante avec l'autre, le jeu de descripteurs 15 est invalidé et la phase de lecture des données s'arrête. Ceci initie alors, soit une nouvelle capture d'image, soit la prise en compte d'une nouvelle image d'une séquence jusque là temporairement stockée. Notons que le troisième argument du vecteur descl n'est utilisable que par la connaissance exacte de la forme ou du facteur d'aspect du code visuel à décoder. 20 Un autre mode de mise en oeuvre consiste à considérer que le code visuel peut avoir une taille quelconque dans l'image et peut être environné par un fond structuré ou texturé. Une recherche des zones à fort gradients spatiaux d'intensité n'est donc pas suffisante pour déterminer les zones candidates et il devient nécessaire de calculer une signature, c'est-à-dire une caractéristique propre de la 25 surface du code visuel. Dans ce cas, une première étape se base sur le calcul et le seuillage des gradients spatiaux d'intensité pour chaque pixel de l'image. Cette étape a déjà été introduite précédemment. Cela permet d'identifier les zones non uniformes susceptibles de contenir un code visuel. Ces zones sont ensuite partitionnées en un ensemble de sous-régions carrées ou non. Dans chacune de ces 2910158 21 sous-régions, par exemple un bloc de pixels, les histogrammes des valeurs des pixels dans chacun des canaux utilisés (par exemple le rouge, le vert et le bleu) sont calculés. Ces signatures d'un code matriciel binaire de type Datamatrix, QR code ou Aztec sont caractéristiques dans le sens ou la réponse des histogrammes 5 doivent être similaires dans les trois canaux spectraux. De plus, ces trois histogrammes doivent présenter 2 modes distincts, correspondant aux modules clairs et aux modules sombres caractérisant la structure du code visuel. L'extraction des modes principaux d'un histogramme peut, par exemple, être effectuée par une estimation des modes d'un mélange de lois gaussiennes. Cela 10 peut être implémenté en utilisant un algorithme EM (Expectation-Minimisation) où le nombre de lois est connu (2) et où l'initialisation se fait au premier tiers et au deux-tiers de l'histogramme. Pour limiter le risque d'avoir un code visuel "à cheval" sur plusieurs blocs, il est possible d'utiliser des blocs se chevauchant. Il est également possible de centrer les zones où seront calculés les histogrammes autour 15 des zones de plus fort contraste, et de déterminer leur taille respective. Un descripteur desc2 est dans ce cas constitué par les composantes suivantes: 255 E I histR (i) ù histG (i)I i-o 255 I I histR (i) ù histB (i)I r=o 255 E IhistB (i) ù histG (i)I I/1R2 - / G21 6R2 + 0 G2 IPR1 - PR1 I 0-R1 + CRI I/1R2 f1B2I 6R2 + 6B2 IPRI PB1 I 6R1 + B1 l,GI PB1 I 6G1 + 0-B1 I PG2 PB2I (2) 6G2 + 6B2 desc2 = 2910158 22 pour lequel les 3 premières composantes sont les sommes des valeurs absolues des différences point à point entre 2 des 3 histogrammes représentatifs des canaux rouge, vert et bleu. Il est également possible d'utiliser le carré des différences. Ici, chaque canal est supposé être codé sur 1 octet ou 8 bits. Dans tous les cas, chacune 5 des sommes est comparée à un seuil th3. Lorsque les valeurs de ces 3 composantes sont inférieures à th3, alors les histogrammes sont jugés similaires, et cela quels que soient les canaux de couleur. De même, les autres composantes du vecteur de description desc2 représentent la distance dite de Ficher, définie comme étant le quotient entre la différence de la valeur absolue des positions (ou abscisses) de 2 10 modes et la somme de leurs écarts types. En supposant que (URI, pR2) et (6RJ, 6R2) sont respectivement les moyennes et les écart-types des modes d'abscisse minimum (R1) et d'abscisse maximum (R2) de l'histogramme des valeurs du bloc dans le canal rouge (R), et en supposant de même pour les canaux vert (uyläuV2 et 6V1, (Ty2) et bleu (UBI, ,PB2 et 6BJ, oB2), la distance de Ficher est calculée entre, par exemple, 2 15 modes minimum ou 2 modes maximum appartenant à 2 histogrammes distincts. Cette distance est comparée à un seuil th4. Lorsque ces composantes sont inférieures à ce seuil, alors les 2 modes sont jugés proches. Finalement, une signature est jugée caractéristique d'une structure de code visuel 2D binaire lorsque l'ensemble des composantes du vecteur de description vérifie les inégalités définies 20 ci-dessus. Nous allons maintenant décrire la phase de binarisation et de recherche du contour, ou du bord du code visuel. Cette étape peut être conditionnée à la validation des descripteurs précédents, quel que soit le mode de mise en oeuvre choisi pour isoler les zones candidates. Nous proposons une méthode de seuillage 25 adaptatif, dont la valeur de seuillage varie spatialement en fonction du contenu présent dans la zone candidate. L'idée principale est de prendre en compte les variations locales d'intensité dans l'image. Elles peuvent être dues à des variations des conditions d'éclairement, par exemple à des ombres portées sur une partie de l'image, ou encore à des variations dues aux limitations du dispositif de prise de 30 vue. Par exemple, les coins de l'image peuvent être plus sombres en raison d'un vignetage. Le degré de piqué de l'image peut également dépendre de la position 2910158 23 dans le champ, ce qui aura pour effet de rendre certains modules plus clairs ou plus sombres que d'autres. Nous supposons par la suite qu'il existe autour du code visuel une zone uniforme et d'intensité lumineuse similaire à celle des motifs (ou modules) clairs qui le constituent. La largeur de cette zone uniforme peut par 5 exemple représenter 50% des dimensions caractéristiques (longueur/largeur) du code visuel. De préférence, un seul un canal de couleur est conservé pour analyser la zone candidate, ceci afin de diminuer le nombre de données à traiter. Le meilleur choix est dans ce cas le canal qui maximise le signal (la structure du code visuel) 10 tout en minimisant le niveau de bruit dans l'image. Maximiser le signal revient à dire que le canal de couleur utilisé, ou la combinaison de canaux, doit pouvoir produire le plus haut contraste possible entre les modules et le fond. De même, les canaux spectraux choisis maximisent de préférence la résolution des données sources. Par exemple, lorsqu'on utilise un dispositif de prise de vue de type CCD 15 associé à un filtre de Bayer, le canal vert peut être avantageusement choisi car il bénéficie d'une meilleure résolution spatiale que le bleu et le rouge. De même, dans le cas d'un codage en luminance-chrominance (YCbCr par exemple), le canal de la luminance peut être privilégié si l'on choisi de favoriser ce même critère de résolution. Dans le cas ou le code visuel est lu et décodé à partir d'un téléphone 20 portable équipé d'un capteur CMOS, le canal bleu est évité car il est plus sensible au bruit. La zone candidate est partitionnée en blocs disjoints B; de taille égale à 8x8 pixels, par exemple. Le gradient spatial d'intensité grad(I p) est calculé pour chacun des pixels p appartenant à un bloc. L'histogramme histi associé au bloc Bi 25 représente le nombre d'occurrences des pixels ayant une valeur de gradient grad(Ip) donnée. On peut noter que cette valeur est quantifiée de préférence par pas de un, ceci afin d'avoir un nombre d'occurrences suffisant. Le seuil Ms correspond à la valeur la plus grande des gradients spatiaux d'intensité vérifiant l'équation: 30 2910158 24 N E th5 x hist(th5) grad _total x perc (3) fils =1 où grad total représente la somme des gradients spatiaux d'intensité dans le bloc Bi. N est la valeur de gradient spatial d'intensité la plus grande pour laquelle l'histogramme histi à une valeur non nulle. Cependant ths est la plupart du temps 5 plus petit que N. Le pourcentage perc peut être fixé à 50%, (ou 0,5), dans l'équation précédente. Les gradients les plus faibles ne sont pas considérés. En effet, ils peuvent par exemple être dus à du bruit dans l'image ou à des structures étrangères à celle du code matriciel situées dans son environnement proche. Il est à noter que dans des zones moins contrastées de l'image, les valeurs de seuil sont de 10 préférence calculées à partir de contours moins contrastés et sont donc plus faibles, cela pour mieux prendre en compte les variabilités spatiales locales de l'image saisie. Le seuil th5 est comparé à une valeur de gradient spatial d'intensité minimale, fixé empiriquement à 5 par exemple. Si th5 est inférieur à cette valeur, alors le bloc est jugé uniforme et un traitement particulier est effectué. Sinon, le 15 bloc est jugé avoir suffisamment de contour pour représenter les structures d'un code visuel. Dans ce dernier cas, l'histogramme histl i est calculé. Celui-ci est formé par le nombre d'occurrences des intensités I des pixels appartenant à des zones dont la valeur des gradients spatiaux d'intensité est supérieure au seuil ths. Pour chaque pixel p dont la valeur grad(I_p) est supérieure à ths, la valeur 20 d'intensité minimale entre les pixels voisins (4-connexité) en haut et à droite est utilisée pour calculer l'histogramme hist.l i. L'histogramme histl i est utilisé pour déterminer la valeur moyenne des pixels ayant été considérés lors de sa construction. Cette moyenne représente une première approximation de la valeur de seuil thi utilisée pour la binarisation de la zone candidate dans la région 25 délimitée par le bloc Bi. La valeur finale est calculée en prenant en compte les valeurs des seuils th] des blocs j voisins. Dans le cas où le bloc Bi a été jugé uniforme, un procédé différent est utilisé. Une première étape non encore décrite de cette phase de binarisation consiste à diviser la zone candidate en 4 "grandes" régions de taille équivalente. Pour chacune de ces quatre zones R, la valeur 30 moyenne des intensités des pixels est calculée et mémorisée. Dans le cas où la 2910158 25 méthode est appliquée à traiter un bloc uniforme, la position de celui-ci est d'abord déterminée en comparant la position de son centre de gravité avec les frontières des 4 zones précédemment décrites. Une fois que le bloc en question a été associé à l'une des 4 zones, c'est-à-dire une fois que le bloc a été jugé appartenir à une des 5 4 régions, la valeur moyenne des intensités du bloc Bi est comparée à la valeur moyenne des intensités des pixels de la région Rk la contenant. Si le bloc est plus clair, le bloc est supposé uniforme et représentatif d'une zone claire. Aussi, le seuil thi est égal à la valeur d'intensité minimale précédemment calculée et stockée. Si le bloc est plus sombre, le bloc est supposé uniforme et représentatif d'une zone 10 sombre. Aussi, le seuil thi est égal à la valeur d'intensité maximale précédemment calculée et stockée. A ce stade du procédé, chacune des zones candidates est caractérisée par un ensemble de valeurs de seuil thi associé à une partition spatiale constituée des bloc Bi. Afin de limiter les effets inhérents à ce type de méthode de calcul par bloc, 15 autrement appelés "effet de blocs", il est possible d'appliquer un filtrage spatial directement aux valeurs de seuil. Aussi, la valeur de seuil finale THiassociée au bloc Bi sera obtenue par convolution des valeurs de seuil dans son voisinage (supposé en 8-connexité) par un noyau discret de type Laplacien. A titre d'exemple, les valeurs fû) du noyau de convolution f (carré de taille 3x3 éléments, 20 l'indice j ci-dessous est donc compris entre 0 et 8) sont par ligne: (1, 2, 1), (2, 4, 2) et (1, 2, 1). Aussi, la valeur de seuil finale THi associée au bloc Bi sera telle que: THi = 1 E [thi . f (j) . u(j)] (4) (f (J) • u(j)) JE[O,8] 25 où le coefficient fû) est une valeur binaire (0 ou 1) traduisant le fait que le bloc Bi considéré est uniforme ou non au sens de la description précédente. Aussi, si un des blocs voisins est jugé uniforme, alors la valeur associée fû) est égale à 0, ce qui veut dire que la contribution de ce bloc est nulle dans le calcul du seuil THi. De même, si un des blocs voisins est jugé non uniforme, la valeur associée fû) est 2910158 26 alors égale à 1, ce qui veut dire que la contribution de ce bloc est non nulle dans le calcul du seuil THE. Cette phase de binarisation adaptative des zones candidates produit un ensemble de valeurs de seuil THi associée à une partition spatiale constituée des 5 bloc Bi. Le nombre et l'organisation de ces valeurs permets de dériver un nouveau vecteur de description desc3 susceptible d'être validé ou non afin de poursuivre la phase de lecture des données image. Plus précisément, le descripteur peut être validé si le nombre nbB de blocs uniformes n'est pas trop grand par rapport au nombre total de blocs NB constituant la partition de la zone candidate, et s'il 10 n'apparaît pas trop de blocs uniformes au milieu de la structure supposée du code visuel. Par exemple, au moins 50% des blocs doivent être jugés comme étant non-uniformes et il ne faut pas plus de 2 blocs uniformes "au milieu" de la structure supposée du code visuel. La seconde composante comp2 du vecteur de description desc3 (la première composante étant le nombre nbB) est la somme d'une fonction de 15 coût'', définie comme étant une fonction linéaire de la distance entre le centre de la zone candidate et le centre de gravité du bloc considéré, soit: NB-1 comp2 = E f,(B) (5) i=o Plus cette fonction somme a une valeur importante et plus le nombre de 20 blocs uniformes proches du centre est important. L'exploitation de cette composante n'a toutefois de sens que dans le cas où l'on suppose que le code visuel est relativement centré dans la zone candidate. Lorsque le descripteur précédemment décrit est validé et la binarisation effectuée, une étape suivante peut consister à déterminer de façon plus précise les 25 contours du code visuel. Le seuillage produit une image imB de la zone candidate pour laquelle les pixels contenus dans un bloc Bi ayant une valeur inférieure au seuil THi sont affectés de la valeur 0 tandis que ceux dont la valeur sera supérieure à ce seuil sont mis à 1 ou 255 par exemple. Les histogrammes représentant le nombre cumulé des pixels p ayant une valeur nulle (au sens de la binarisation 30 précédemment décrite) sont calculés horizontalement et verticalement, c'est-à-dire 2910158 27 pour chaque ligne et pour chaque colonne dans le cas d'un code visuel rectangulaire. Par exemple, si la dixième valeur de l'histogramme dit vertical est égale à vingt, cela veut dire que la dixième ligne de la carte de données binarisées présente vingt pixels ayant une valeur nulle. De même, si la trentième valeur de 5 l'histogramme dit horizontal est égale à cinq, cela veut dire que la trentième colonne de la carte de données binarisées présente seulement cinq pixels ayant une valeur nulle. La zone susceptible de contenir le code visuel doit être représentée par des valeurs d'occurrences des histogrammes plus élevées. Il est cependant possible que d'autres structures géométriques proches du code visuel aient été 10 capturées dans le champ de prise de vue lors de la saisie de l'image. Les données de chacun des deux histogrammes peuvent ensuite être filtrées à l'aide d'un filtre Gaussien ou Médian par exemple. Cela permet de lisser les variabilités locales susceptibles d'altérer l'étape suivante. Un seuillage mono-dimensionnel th6 est appliqué à chacun des deux histogrammes, ce qui permet d'identifier dans chacune 15 des deux directions le segment de plus grande taille représentatif des dimensions du code visuel. Un segment est un intervalle correspondant à la différence entre les coordonnées maximale et minimale pour lesquelles toutes les valeurs de l'histogramme associé sont au dessus du seuil th6. Par exemple, en supposant que l'histogramme vertical présente des valeurs d'occurrences supérieures à th6 entre les 20 coordonnées (abscisses) dix et cinquante, un segment aura pour dimension cinquante moins vingt, c'est-à-dire trente. Il est possible que pour une direction donnée, par exemple la verticale, plusieurs segments soient extraits de la phase de seuillage. Dans ce cas, seul le segment présentant la plus grande valeur est conservé et jugé représentatif de la dimension de la zone candidate dans la 25 direction considérée. Une zone candidate est donc entièrement définie par le rectangle dont les dimensions caractéristiques sont égales à la taille des deux segments obtenus dans les directions horizontale et verticale. Particulièrement, il est possible de définir les coins (ou angles) du rectangle (dit rectangle englobant) formé par les 2 segments précédemment calculés. Si l'étape précédente n'a pas 30 permis d'obtenir de segment, ou si un seul a été détecté, alors le calcul des coordonnées des coins n'est toutefois pas possible. Le descripteur desc4 contient 2910158 28 les coordonnées des 4 coins. Leurs valeurs sont comparées aux dimensions de la zone candidate. Le processus de lecture des données est stoppé si au moins une des coordonnées d'un des coins n'est pas renseignée. L'étape suivante consiste à estimer très précisément les contours du code 5 visuel. Dans un premier temps, une table dite de décalage est calculée en haut, en bas, à droite et à gauche du code visuel identifié. Dans un deuxième temps, ces informations sont utilisées pour décrire analytiquement chacun des 4 côtés du code visuel (et non pas du rectangle englobant). Une table de décalage correspond au nombre de pixels par ligne ou par colonne nécessaire pour trouver le premier pixel 10 noir (valeur à 0) à partir d'un des bords du rectangle englobant. Aussi, lorsque l'on souhaite, par exemple, établir la table de décalage correspondant au côté gauche du rectangle englobant, il convient de calculer et de stocker pour chaque ligne le nombre de pixels nécessaire pour trouver le premier pixel noir (valeur à 0) à partir du bord gauche du rectangle englobant. La taille de la table de décalage est dans ce 15 cas égale à la taille du segment vertical précédemment calculé. On obtient ainsi 4 tables qui peuvent servir à dériver une forme analytique des "vrais" contours du code visuel. Pour ce faire, il suffit de choisir 2 points situés sur le segment de droite et d'en déduire une équation de droite. Le rectangle englobant englobe par définition la structure du code visuel, ce qui implique qu'une zone "blanche" (à 255 20 ou à 1 après binarisation) existe potentiellement autour du code visuel. Cela se traduit par le fait que les tables de décalage peuvent présenter des valeurs plus importantes à leurs extrémités. Ils n'est donc pas souhaitable de choisir n'importe quel point de la table de décalage. Il est cependant utile de maximiser la distance entre les 2 points pour permettre une estimation analytique plus précise du contour. 25 Il a été choisi de considérer une portion du segment à chacune de ses extrémités. Par exemple, il est possible de ne travailler qu'à partir des 25 premiers et derniers pourcents de la table. Dans les 2 cas, on recherche la valeur minimale de décalage, laquelle est alors considérée comme représentative d'un des points du segment de contour. Il est possible d'envisager un raffinement dans lequel cette opération est 30 itérative, c'est-à-dire que dans le cas où le rectangle englobant est bien plus large que le code visuel lui-même, alors il est possible qu'aucune valeur de décalage ne 2910158 29 soit utilisable (par exemple valeur trop grande comparativement à un seuil). Dans ce cas il est possible de reconsidérer la taille de la zone de recherche, par exemple en cherchant un minimum acceptable dans des zones représentants 30% ou 40% de la taille de la table (contre 25%). La recherche d'un minimum de décalage est 5 compatible avec des structures particulières de matrice, présentant par exemple alternativement des modules blanc puis noir. Il est possible de vérifier les coefficients de droite de chacun des 4 bords avant de continuer. Notamment, un test de validation consiste alors à vérifier que les coordonnés d'intersection des droites deux à deux sont comprises dans le rectangle englobant initial ou proches 10 de ce dernier. Cela constitue une nouvelle étape de validation dans le procédé. La sous-étape suivante consiste à déterminer un maillage s'ajustant à la structure externe du code visuel et représentatif des déformations et de la taille des modules le constituant. Une opération initiale consiste à calculer en première approximation un maillage dit régulier. Ensuite, lorsque cela est possible, ce 15 maillage est raffiné pour s'ajuster au mieux aux modules tels qu'obtenus après la phase de seuillage adaptatif. La détermination du maillage régulier nécessite la connaissance ou le calcul du nombre de modules constituant le code visuel. Dans le cas où l'information est connue (par exemple code visuel de 20 par 20 modules) il est simplement possible de mesurer la taille de chacun des 4 contours du code et 20 de le diviser par le nombre nécessaire (21 dans l'exemple ci dessus). Chacune des lignes/colonnes ainsi identifiée est stockée de façon analytique dans un tableau. Nous obtenons par exemple 2 fois 21 couples de coefficients représentants les 42 lignes et colonnes séparatrices composant le maillage régulier. Dans le cas où le nombre de module n'est pas connu, il est possible de le déduire par une analyse de 25 la structure des contours. Par exemple, dans le cas d'un code de type Datamatrix, il est possible de compter le nombre de modules alternativement blanc et noir proches des contours en haut et à droite. Cette étape de comptage est avantageusement effectuée après avoir précisément déterminé les contours du code visuel. Après le calcul de la grille régulière, on compte le nombre de modules 30 alternativement blanc et noir proches des contours en haut et à droite. Si l'on trouve le bon nombre de modules, par exemple, 10 blancs et 10 noirs, alors il est supposé 2910158 30 que le seuillage adaptatif et le maillage régulier permettent d'affiner le résultat. Dans ce cas, chacune des lignes/colonnes séparatrices vont converger vers les bords des modules voisins. En effet, il est possible qu'une valeur de seuillage n'aie pas permis localement de récupérer toute la surface d'un module, dans ce cas le 5 maillage régulier n'est pas bien ajusté et ne touche pas le module. Il est donc ici souhaitable de faire converger ce séparateur vers le bord du module voisin. Les calculs étant faits de façon indépendante horizontalement et verticalement, il est possible d'obtenir un maillage régulier horizontalement et un maillage raffiné verticalement. 10 La dernière sous-étape avant le décodage effectif des données consiste à intégrer l'ensemble des valeurs des pixels d'un bloc Bi issus de l'image binarisée imB, et ceci afin de produire une seconde image sous-échantillonnée imsE, pour laquelle l'ensemble des pixels d'un bloc B= appartenant à imB est remplacé par un unique pixel blanc ou noir dans l'image imsE. Aussi, chaque module du code visuel 15 est représenté par un pixel unique blanc ou noir. Notamment, les défauts de géométrie, de qualité d'image ou de structure de données sont corrigés dans cette image. Cette phase de conversion du code visuel vers une structure directement exploitable pour le décodeur peut être effectuée de la façon suivante: chacun des blocs est caractérisé par la surface comprise respectivement entre 2 lignes et 2 20 colonnes séparatrices successives. Par exemple, le bloc Bn dont l'indice n est égal au numéro de colonne j du maillage associé à ce bloc additionné du numéro de ligne i du maillage associé à ce bloc, lui-même multiplié par le nombre total de colonnes NB du maillage, soit n=NB *i+j. Dans ce cas, la surface associée au bloc Bä est définie comme étant la surface comprise entre les lignes séparatrices ll et 11+1 25 ainsi qu'entre les colonnes séparatrices ci et cj+r. La moyenne Imoy des valeurs de l'ensemble des pixels appartenant au bloc Bn est calculée. De même, la valeur des pixels situés au centre du bloc est elle-même calculée, cette valeur centrale Icenter étant définie comme la moyenne de la valeur du pixel central et des 4 pixels voisins en haut, en bas, à droite et à gauche. Un module est finalement considéré 30 comme étant noir lorsque les valeurs de Imoy et de Icenter sont inférieures à un seuil. Il convient de noter à cet égard que deux seuils différents peuvent être utilisés. Le 2910158 31 maillage estimé pouvant être imparfait, il est possible de donner plus d'importance au centre d'un bloc et moins d'importance aux bords de celui-ci, les pixels situé en périphérie pouvant être "à cheval" sur un ou plusieurs autres modules. Par exemple, le seuil thmoy associé à Imoy peut être plus élevé que celui (thcenter) associé 5 à Icenter• Plus précisément, la valeur de thmoy peut être fixée à 192 tandis que celle de thcenter peut être de 128. La figure 3 indique de manière schématique les différentes sous-étapes susceptibles d'être effectuées lors du procédé de lecture tel que décrit en référence aux figures précédentes 1 et 2. 10 Les références numériques de la figure 3 indiquent les mêmes étapes que celles des figures précédentes. Toutefois, pour des raisons de simplification, les sous-étapes d'identification du code visuel et de calcul du descripteur sont respectivement regroupées en un seul bloc. De manière plus précise, la figure 3 illustre une identification et une 15 correction des codes visuels effectués sous la forme de plusieurs sous-étapes comprenant chacune du calcul d'un descripteur. Afin de distinguer les sous-étapes, les références sont assorties des lettres a à d. L'étape d'identification et de correction du code visuel comprend, dans l'exemple illustré une première sous-étape 102a d'identification de zones 20 candidates et le calcul d'un premier descripteur 104a. Il s'agit, par exemple, du descripteur de longueur de segments déjà décrit. Une deuxième sous-étape 102b comprend le seuillage de l'image avec une recherche de contour. Elles est suivie par le calcul d'un deuxième descripteur. Il s'agit, par exemple, d'un descripteur vectoriel lié à une partition spatiale de 25 l'image en blocs. Les troisième et quatrième sous-étapes 102c et 102d comprennent, par exemple, les opérations de maillage et de détection de rnodules. Elles comprennent le calcul 104c et 104d de descripteurs. Il s'agit, par exemple, du calcul des coordonnées d'intersection des bords et: de l'identification de seuils pour 30 déterminer la valeur des modules. 2910158 32 Comme le montre la figure 3 et comme décrit précédemment, chaque sous- étape et chaque calcul de descripteur est suivi d'une évaluation 106a, 106b, 106c et 106d. La validation des descripteurs permet de poursuivre la procédé par la sous- étape suivante ou par le décodage 110. Le défaut de validation entraîne, comme le 5 montre la flèche 107 une itération sous la forme de la saisie d'une nouvelle image ou de recherche d'une nouvelle zone candidate. Documents cités 1) US 2005/0203854 Al 2) US 2006/0006238 Al 10 REVENDICATIONS 1 - Procédé de lecture de codes visuels comprenant : a) la saisie (100) d'au moins une première image numérique b) l'identification (102) dans l'image numérique d'au moins un code visuel, c) le décodage (110) d'au moins un code visuel identifié lors de l'étape b), caractérisé par une étape (104) de calcul d'au moins un descripteur du code visuel identifié dans la première image numérique et par le conditionnement de l'étape de décodage à une évaluation du descripteur. 2 - Procédé selon la revendication 1 comprenant une pluralité de sous-étapes de mise en forme du code visuel dans lequel au moins une sous-étape de mise en forme est associée au calcul d'un descripteur et dans lequel l'exécution d'une sous-étape subséquente est conditionnée par l'évaluation du descripteur associé à une sous-étape précédente. 3 - Procédé selon la revendication 1, dans lequel le décodage (110) est effectué en utilisant la première image numérique. 4 - Procédé selon la revendication 1, dans lequel le décodage (110) est effectué en utilisant au moins une deuxième image saisie postérieurement à la première image numérique. 5 Procédé selon la revendication 4, dans lequel la première image utilisée pour le calcul du descripteur et la deuxième image utilisée pour le décodage peuvent être de résolutions différentes, et choisie par le système pour optimiser la vitesse d'extraction du descripteur. 6 - Procédé selon la revendication 1, comprenant en outre, postérieurement à l'étape (104) de calcul du descripteur, l'émission (105), visuelle ou sonore, d'une information dépendant du descripteur. 2910158 34 7 - Procédé selon la revendication 6, comprenant une évaluation automatique (106a) et/ou une évaluation par un utilisateur (106u) du descripteur. 8 - Procédé selon la revendication 1, dans lequel l'évaluation du descripteur 5 comprend une comparaison du descripteur à un descripteur de référence et/ou à une valeur de consigne. 9 - Procédé selon la revendication 1, dans lequel on itère le procédé avec la saisie d'une nouvelle image lorsque au moins l'un parmi la recherche d'un code 10 visuel, le calcul du descripteur et une évaluation du descripteur comme acceptable font défaut. 10 - Procédé selon la revendication 1, dans lequel on établit le descripteur en effectuant au moins l'un parmi un calcul de contours, un calcul d'histogramme 15 de contours, un calcul de densité de pixels, une mesure de contraste et/ou un calcul d'une fonction de modulation de transfert (MTF). 11 - Procédé selon la revendication 1 comprenant : a) la saisie (100) d'une séquence d'une pluralité d'images successives 20 susceptibles de contenir une image d'un code visuel, b) la recherche (102) dans une première image d'au moins un code visuel, c) le calcul (104) d'au moins un descripteur du code visuel, d) l'évaluation (106) du descripteur, e) le décodage (110) du code visuel lorsque le descripteur est reconnu 25 acceptable lors de l'évaluation, et f) itération (107) des étapes b), c) et/ou d) lorsque la recherche d'un code visuel, le calcul du descripteur et ou l'évaluation du descripteur comme acceptable font défaut, l'itération des étapes b) c) et /ou d) étant effectuée respectivement à partir d'une image subséquente de la séquence d'images 30 2910158 12 - Procédé selon la revendication 11, comprenant en outre entre, postérieurement à l'étape (104) de calcul du descripteur, l'émission (105) visuelle ou sonore d'une information dépendant du descripteur, et la saisie d'une éventuelle commande d'utilisateur, et comprenant également une itération des étapes b), 5 c) et/ou d) en l'absence de commande d'utilisateur, l'itération des étapes b) c) et /ou d) étant effectuée respectivement à partir d'une image subséquente de la séquence d'images.