Salutations!

Je poste un dernier article avant la fameuse NuitDuHack 2012! Ça faisait longtemps que je n'en avait pas écrit, mais pas de soucis, je m'y remettrai sérieusement! J'en profite pour passer un coup de gueule contre le destin, qui a donné mes idées à d'autre personnes qui ont fait des articles sur des sujets avant même que je sois foutu de faire un prototype ;)

En préparant mon workshop NDH, je me suis dit qu'il serait sympa de laisser l'adresse de mon blog, ainsi que mon mail, pour ceux qui souhaiteraient prendre contact, après l'événement. Tout de suite, l'idée du QRCode (concept que j'apprécie tout particulièrement) m'a semblé une excellente solution. Mais voilà:

Les QR codes peuvent être lus par un smartphone équipé d'un appareil photo, et d'un soft adapté. Mais sur une carte de visite, par exemple, le manque de place peut poser problème lorsque l'on souhaite donner plus d'informations, tout en conservant la facilité et la rapidité d'utilisation de ce système. (Angle trop grand, plusieurs QRcodes contigus....)

Bref! J'ai repensé à mes cours de traitement du signal, et aux diverses méthodes de compression, et autre choses magiques découlant de la manipulation de données. Je me suis aussi dit qu'utiliser un QRcode tel-quel, en faisant abstraction des possibilités qu'offrent le passage du numérique à la vie réelle, était une grossière erreur.

Pour ceux qui ne seraient pas familier avec les "QRCodes", vous pouvez en voir un en haut à droite de cet article (et de tous les autres articles de mon blog). Ils sont de plus en plus utilisés (publicité, crédits, URLz, contacts, infos....

Comment ça fonctionne, vite fait:

Vous pouvez déjà aller voir sur Wikipedia. En fait, quand vous utilisez un soft de lecture de QRcode avec votre téléphone, l'image transmise par votre caméra est interprétée de manière à localiser certains points (les grosses cibles dans les coins du QRcode), et ainsi lire un certain nombre d'informations binaires (d'où le fort contraste nécessaire à cette lecture.

Pourquoi c'est con de faire ça?

Bien en fait, c'est probablement très pratique et suffisant à première vue, mais, qu'en est t-il de l'efficacité? NULLE! Hoooo que oui. En effet, on utilise ici un médium de communication "visuel", autrement dit, lumineux. En considérant ce médium, on peu s'apperçevoir qu'il est loin d'offrir l'étendue de sa "capacité".

Très pragmatiquement, on utilise une information binaire dans un médium disposant d'une bande passante suffisante pour multiplexer un nombre énorme d'informations. C'est donc tout à fait ridicule! Enfin, du moins, c'est loin d'être la meilleur solution.

Le PoC

Poc poc poc. Don't fuck with light bro. Ma démonstration n'est faite qu'à partir de bric et de broc. Autrement dit, bien entendu, ce n'est pas la meilleure solution. Mais je peux déjà doubler le nombre d'informations stockables sur un simple code QR... Tout est une histoire de spectre, aussi faut il bien comprendre qu'un peu plus de boulot et de réflection, et de matos pourrait donner de sérieux résultats, mais que ce n'est pas le cas ici! :)

Principe

Pour démontrer mon concept, je vais utiliser deux QRcodes:

QRcodes

L'un contient une adresse mail, l'autre une URL.

Le but est de générer un signal (une image ici), qui une fois filtrée correctement laissera passer soit l'un, soit l'autre. Pour illustrer tout ça, même si bon nombre d'entre vous connaissent déjà les forts avantages du domaine fréquentiel en traitement du signal, je vous ai fait un dessin, trois pour être exact:

QRcodes

La première est une mire de couleur générique. Elle passe par à peu près toutes les combinaisons de rouge, de vert, et de bleu (synthèse aditive)

QRcodes

La deuxième est exactement la même, à ceci près qu'un "filtre rouge" à été appliqué. On voit très clairement que certaines zones se sont assombries. (Seul la primitive rouge passe)

QRcodes

La troisième est exactement la même que la deuxième, sauf que dans ce cas ci, le filtre est de couleur cyan.

Pourquoi rouge et cyan? Parce que je n'avait pas d'autre filtres sur le moment (filtres physiques, hein, le reste Gimp aurait pu s'en charger). En gros, c'est le même phénomène qui permet de faire de la spectrographie. On peu aussi remarquer que le filtre cyan est bien plus large, laissant passer les dominantes vertes et bleues.

QRcodes

Sur ce schéma vous pourrez voir, peut être plus clairement, l'effet que peut avoir le filtrage sur la perception des tons utilisés.

Génération

Pour générer une image contenant deux QRcodes, je vais donc colorier l'un en rouge, l'autre en cyan, et effectuer une opération booléenne entre les deux pour en tirer l'intersection.

QRcodes

J'ai fait ça avec Inkscape pour ma part, mais je vais faire un générateur automatique d'ici peu. Le résultat peut être vu ici:

QRcodes

Magie! Les deux informations ont correctement pu être multiplexée, et le démultiplexage est aussi simple! Mettre un filtre devant l'appareil, ou même, filtrer numériquement suffit à retrouver les deux informations.

Épilogue

Voilà! Je pense pouvoir coder encore plus d'infos avec un peu plus de boulot. Je n'ai trouvé aucune autre démo de ce principe, ni même aucune mention ou que ce soit. Si vous en trouvez une, faites moi signe! En attendant, je me fais mes cartes de visite!

Le résultat en vidéo:

++!