un qr code contient toujours les mêmes éléments:
- quelques cibles permettant de détecter un repère sur l'image, de façon à pouvoir corriger les déformations (et le zoom) lié à la prise de vue: ici, ce sont les quatre ronds aux points cardinaux.
- un moyen de repérer le haut et la droite. Je penche pour la bulle avec l'éclair
- les données.
Un peu de traitement d'image permet de détecter les cibles
De la géométrie spatiale (pas forcément très complexe) permet de calculer l'image non déformée. Ce point est inutile si on dispose déjà de cette image (par exemple celle donnée en exemple)
Un minimum de méthode permet de lire les pixels utiles: il y a nécessairement un protocole pour cela.
Quant à écrire, c'est encore plus simple, il suffit de prendre ce même protocole, et d'écrire aux emplacements des données.
Le protocole défini simplement la positions de ces pixels "utiles" en fonction de la taille totale du qr code.
Par exemple, meme si ce n'est pas exactement celui-là dont ils se servent, ca peut être:
le code contient un disque de rayon 12, dont les anneaux utiles sont d'épaisseur 1 et de bord extérieur situé en 12, 10 et 8.
Sur chaque anneau, il y a 36 positions, jointives, la première s'étendant entre 0° et 10° en coordonnées polaires (donc en partant de la droite dans le sens anti-horaire).
Il y a trois cibles, dans chaque angle du carré (de façon à ne pas interférer avec le disque de données), sauf celui en haut a droite.
Les cibles sont circulaires, et contiennent un point désignant leur centre.
Elles sont de la même couleur que les pistes de données.
Le disque central de rayon 6 est libre, il peut être utilisé pour personnaliser le code.
Je devrai aussi préciser la taille des cibles
Pour écrire un tag, il suffit d'avoir une fonction qui écrivent un bloc de 36*3 bits (dans mon cas) sur l'image.
Pour le lire, c'est presque aussi simple, il suffit de lire des pixels de l'image dont on sait qu'ils sont sur les positions.
PS: et voila, maintenant, j'ai envie d'écrire un programme qui fait cela.
Partager