Sur le terrainCode barres couleur haute capacité

Gavin Jancke

Nous connaissons tous si bien les codes barres qu'ils passent souvent inaperçus. Ils sont quasiment omniprésents dans la vie quotidienne, depuis les emballages alimentaires aux étiquettes d'expédition. Les codes barres 1D qui sont apparus sur le marché de détail en 1974 étaient constitués de barres verticales de largeurs variables et comportaient 12 chiffres. Les codes barres ont évolué à mesure que la puissance informatique a augmenté et les codes barres en deux dimensions noirs et blancs (codes matrice) ont été développés à la fin des années 80, marquant une densité des données passant de quelques chiffres à quelques centaines d'octets.

En 2003, j'ai commencé à travailler sur un projet de carte d'identification biométrique à l'épreuve des contrefaçons pour Microsoft Research. Je devais stocker non seulement le texte cryptographique, notamment nom et âge, mais aussi des modèles d'empreintes digitales ou d'analyses d'iris. Pour stocker toutes les données nécessaires, le code barres noir et blanc existant aurait été plus grand que la carte d'identification; il fallait donc trouver une nouvelle approche.

J'ai dû déterminer comment stocker plus d'une partie des informations par symbole, ce qui était la norme pour les codes barres noirs et blancs en 2 dimensions. En utilisant des couleurs plutôt que le noir et blanc, je pouvais passer à deux ou trois éléments de données à l'aide de quatre et huit couleurs, respectivement.

J'ai expérimenté également avec les formes de symboles pour voir s'ils pouvaient être plus serrés sans compromettre leur enregistrement au moment de la numérisation. Au début les hexagones semblaient prometteurs, mais les formes s'amalgamaient et l'ordinateur ne pouvait pas les discerner assez clairement.

J'ai fini par me décider pour les triangles parce qu'ils s'entrecoupent proprement dans un espace compressé, tout en retenant leur identité de formes distinctes. En utilisant des rangées de triangles de plusieurs couleurs, je pouvais faire passer la capacité de densité en 3D.

janke.fieldnotes.gif

Il fallait tenir compte d'un grand nombre de variables. Un des plus grands défis dans le travail avec la couleur est la diversité des spécifications d'impression et des conditions d'éclairage. Bien que la couleur puisse être facilement perceptible à l'œil nu (au moins pour ceux qui ne sont pas daltoniens), elle n'est pas aussi clairement perceptible pour un ordinateur.

J'ai utilisé plusieurs approches différentes pour faire en sorte que le logiciel puisse lire la couleur avec précision. J'ai créé une palette toute petite, presque invisible à l'intérieur du code barres qui contenait les couleurs de référence existant dans le code barres. Ceci fournissait un mécanisme d'étalonnage qui spécifiait exactement ce que constitue un rouge particulier, par exemple. J'ai essayé également des techniques plus avancées comme des algorithmes regroupant les couleurs personnalisés et légers qui tirent parti de la théorie de l'espace colorimétrique pour classer les couleurs dans des ensembles. Les deux approches fonctionnent tout aussi bien et se complètent.

L'un de mes objectifs pour ce projet était d'écrire un programme qui permettrait aux téléphones portables de lire les codes barres. Avec les téléphones portables, on doit tenir compte de la pauvreté de l'éclairage et des lentilles à distance focale floues et fixes. Il importait également de réaliser tout cela sur des processeurs de téléphones portables basés sur des entiers et relativement lents, de sorte que l'équipe devait trouver une théorie solide sur la façon de détecter le code barres dans l'image tout en touchant le moins de pixels possible. La numérisation devait fonctionner dans une plage de qualités de lecture, telles que des panneaux LCD net bien éclairés ou des caractères flous en éclairage réduit.

L'algorithme final décode les images de codes barres sur des trames d'appareil en temps réel plus rapidement que la fréquence d'images : à peu près 10 ms sur un processeur de 200 MHz. Dans une image, le plus petit nombre de pixels qu'un code barres peut avoir pour la charge de données la plus petite tout en étant détectable est d'à peu près 45 pixels carré.

Il a fallu plus de deux ans de travail pour que tout ceci fonctionne sous des conditions variables. Cette technologie a été récemment cédée sous licence à des tiers et vous découvrirez des applications passionnantes vers la fin de l'année.

Gavin Jancke, responsable de l'ingénierie pour Microsoft Research, dirige les équipes Advanced Development Group et Web Experience. Il travaillait auparavant comme ingénieur support produit, ingénieur logiciel pour SQL Server et a fait partie du personnel de conseil technique principal de Bill Gates.