Idées d'activités pédagogiques : comprendre le fonctionnement des qrcodes poppy

Bonjour à tous,

Suite à notre dernière réunion où plusieurs d’entre vous m’ont parlé des qrcodes et de leur fonctionnement. J’ai écrit un petit document - sous forme de notebook - où j’explique comment ces codes peuvent être utilisés pour coder de l’information.

L’idée de ce doc. est plutôt de présenter les notions nécessaires à la compréhension de leur fonctionnement et de voir si ça peut être intéressant d’en faire une activité.

Amis pédagogues, je m’en remets à vous !

Le notebook est dispo ici.

1 Like

super !
merci beaucoup, on a effectivement en tête des projets avec les qrcodes (de mémoire, il y a une vidéo de CapSciences avec des Ergo qui dansent en lisant des codes, non ?)
Pour info, les équations LaTeX en markdown ne s’affichent pas sur mon Firefox, mais tout est ok sur Chrome.
Merci et à mercredi.

1 Like

Oui çà peut intéresser des lycéens, ton petit tuto est très sympa j’avais d’ailleurs déjà écrit un TD de 2H pour les élèves sur le principe du codage de Hamming. Un mixte des deux serait un bon truc…
christophe

1 Like

Je viens de regarder plus en détail, c’est vraiment très chouette.
Une question :
pourquoi écris-tu
numpy.dot(G, D.T).T
plutôt que
numpy.dot(D, G.T)
?? (je sens que tu vas me sortir une mythologie obscure expliquant l’amour des informaticiens pour la transposition)
Au niveau pédagogique :
Malheureusement, les matrices ne sont abordées qu’en TS spécialité Maths (que ne font pas, par définition, les TS spé ISN). Cela me parait donc très compliqué à aborder avec nos élèves (ne parlons pas des Seconde). Pourtant, la notion de code correcteur est quand même super intéressante, donc on peut l’évoquer a minima, en prenant l’exemple de 4 bits à transmettre.
On peut faire le test en noircissant une case blanche et en leur demandant comment le décodage arrive encore à se faire, ça devrait les interloquer.

Pour jouer concrètement avec la PiCamera de l’Ergo, doit-on rentrer obligatoirement dans ce degré de complexité ou un module adéquat (qrtools ?) permet-il de s’en sortir avec des choses très simples ?

J’aimerais te dire que c’est le cas mais je crois que c’était juste pour “coller” d’un peu plus près à la définition donnée sur wikipedia. $x = Gp$

Le fait de pouvoir calculer le résultat d’un coup comme un produit de matrices, c’est cool mais c’est pas essentiel. On doit pouvoir expliquer ça sans vraiment parler de matrices juste de “grille” ou qqch comme ça.

Ouais j’aime beaucoup ! Ca peut faire une super activité débranchée où il codent ce qu’ils veulent sur un grille papier de 7x7 et d’autres doivent le décoder. Ensuite, on peut introduire des erreurs de transmission ! J’aime beaucoup ! @Marie, @tibo ça vous chauffe toujours les activités débranchées ? ^^

Il y a plusieurs niveaux. Tu peux simplement récupérer une image brute et faire ce que tu veux avec (on utilise OpenCV de base). Même si OpenCV fournit déjà plein d’outils c’est quand même loin d’être trivial - surtout si on connait pas du tout ce domaine.

Ensuite j’ai écrit une petite bibliothèque hampy qui implémente en OpenCV la détection de ces codes de Hamming 7x7. Regarder le code peut être un bon moyen de rentrer dedans mais encore une fois, c’est pas si simple. Le code de détection est visible là: https://github.com/pierre-rouanet/hampy/blob/master/hampy/detect.py

Du coup on peut accéder à ce niveau directement via python ou snap. Par ex. pour récupérer en Python les markers détectés:

print(poppy.marker_detector.markers)
>>> [Marker(id=123456789), Marker(id=456789)]

En Snap, il y aun bloc is card “name” detected qui renvoie vrai/faux si la carte spécifiée est détectée.

Tout cela n’est pas encore entièrement figée donc je suis preneur de retour. J’aimerais aussi ajouter d’autres features visuelles de base (il y a deja aussi des visages et des blobs de couleurs). Cela peut être intéressant de faire une des formations sur les senseurs et d’aborder ça en particulier.

Comme le dit pierre, on peut très bien coder, décoder et corriger un mot de Hamming(7-4) à partir d’un jeu de données sans utiliser la notion de matrice. La notion de tableau est amplement suffisante. La seule contrainte pour nos élèves c’est la double boucle. On peut par exemple mettre les positions à contrôler dans une liste

bits_controle_parite = [[1, 3, 5, 7], [2, 3, 6, 7], [4, 5, 6, 7]]

1ere sous liste C0, deuxième sous liste C1 puis C2. Il n’y a plus qu’à calculer les valeurs des bits de parité avec un mot qui peut lui aussi etre stocké dans une liste

mot = [1, 0, 1, 0, 1, 0, 0] le mot avec les bits de parité à zéro et bit de poids faible à droite, on peut aussi le faire construire aux élèves assez facilement à partir des données sur 4 bits

pour calculer les valeurs des bits de parité dans le mot de hamming on pourrait écrire :

bits_controle_parite = [[1, 3, 5, 7],[2, 3, 6, 7], [4, 5, 6, 7]]
mot = [1, 0, 1, 0, 1, 0, 0]
for i in range(len(bits_controle_parite)):   
        somme = 0
        for pos in bits_controle_parite[i]: #Pour les positions controlées par un bit de parité
            somme += int(mot[-pos])         #On fait la somme des valeurs controlées
        somme = somme % 2                   #0 si la somme est pair et 1 sinon
        mot[-bits_controle_parite[i][0]] = somme   #On affecte le résultat au bit de parité concerné 
print mot

Merci Christophe pour ton code
(qui m’aura appris qu’on peut parcourir un tableau à l’envers avec des indices négatifs :open_mouth:)
Je continue quand même à trouver cela très difficile d’accès.
Si je fais une séance là-dessus (quand ???), ça sera plutôt papier/crayon avec des trucs tout basiques, juste pour faire comprendre comment une information perdue peut être retrouvée.

+1 pour une séance de formation sur l’interaction de la PoppyFamily avec le monde extérieur.