Dernière mise à jour le 15/01/2021

Présentation


Vous connaissez tous les codes à barres ! Cependant les QR-codes et codes Datamatrix restent inconnus du grand public. C’est bien dommage car ces codes offrent un monde de possibilités !.
Les codes à barres sont des codes unidimensionnels (1D) où l’information n’est lue et structurée que dans un sens. Les codes bidimensionnels (2D), tels que les QR-codes et les codes Datamatrix contiennent des données horizontales aussi bien que verticales. Ce sont de petits blocs, des pixels, qui sont structurés de façon à former un carré : un carré blanc correspondant au 0 du code binaire, un carré noir correspondant au 1.


Comparés aux codes 1D, les codes 2D présentent beaucoup d’avantages. Ils peuvent contenir dix fois plus d’informations en prenant dix fois moins de place ! De plus, ils contiennent un code correcteur intégré qui leur permet d’être lus même s’ils sont partiellement dégradés. Troisième avantage non négligeable : ces codes peuvent être lus dans n’importe quelle direction (360°). Ils sont donc très pratiques pour des scann automatisés, sans pour autant perdre leur utilité en lecture manuelle.


Il existe plein de générateurs de QR-Code ou de DataMatrix qui circule sur le web, mais, étant curieux, j’avais envie d’en réaliser mon propre générateur en langage Python.
Pour ce faire, il faudra vous munir de la librairie nommé ‘qrcode’ accessible qrcode sont nom indique déja ce que nous allons faire.
Ensuite il faudra vous munir de ‘pylibdmtx’ afin de créer les DataMatrix qui sont disponible directement via ce lien pylibdmtx.


Ce n’est pas terminé, il faudra aussi installer OpenCV afin d’utiliser la bibliothèque CV2, la aussi disponible via ce lien OpenCV.

Quelle est la différence entre un QR-code et un code Datamatrix ?



                   (QR-code)                                                (DataMatrix)

Les deux codes 2D les plus utilisés sont le QR-code et le code Datamatrix. la différence :
En les regardant côte-à-côte, vous observez immédiatement une différence de structure. Ces deux codes utilisent des points de reconnaissance différents. Un QR-code contient 4 carrés blanc/noir dans chaque coin dont 1 un peu plus en retrait. Le code Datamatrix contient toujours une rangée de pixels noirs en bas et sur le côté gauche, et une rangée de pixels blancs et noirs alternés en haut et sur le côté droit.


Tout ce qui ne correspond pas à ces points de reconnaissance, c’est le champs de données. Ce champs peut contenir jusqu’à 4296 caractères alphanumériques. Pour un code Datamatrix le nombre maximum est de 2335 caractères.


Le QR-code est surtout utilisé dans des contextes liés aux consommateurs. Il peut être scanné par un smartphone. C’est ainsi que facilement, vous pouvez passer une nouvelle commande.


Bien qu’un QR-code contienne plus d’informations, un code Datamatrix prendra moins de place pour stocker la même quantité d’informations (les points de reconnaissance sont plus petits). De plus ils sont plus sécuritaires puisqu’ils sont plus difficiles à pirater.


C’est la raison pour laquelle le code Datamatrix est spécialement adapté pour ces procédures où la sécurité et le gain d’espace jouent un rôle important, telles que le traçage ou l’identification de petites pièces.

Programmation Python – QR-Code


Nous allons regarder ce programme ci-dessous – pour ma part j’utilise Visual Studio Code comme IDE de Microsoft, mais vous pouvez utiliser un autre IDE avec celui ou vous vous sentez le mieux.

# QR-Code – Python – Electronique71.com

import qrcode # On ajoute qrcode

qr = qrcode.QRCode(
                    version=1,
                    error_correction=qrcode.constants.ERROR_CORRECT_L,
                    box_size=1,
                    border=1,
                  )

qr.add_data('Ceci est un QR-Code - Electronique71.com')
qr.make(fit=True)

img = qr.make_image(fill_color="black", back_color="white")
img.save("QR_Code.png")


Fonctionnement programmation Python
Ce code a pour but de créer un QR-Code avec comme donnée: ‘Ceci est un QR-Code – Electronique71.com’.
La fonction ‘qrcode.QRCode’ initialise le QR-Code en tant qu’objet, puis via cette object crée, nous appliquons un ajout de donnée par la fonction ‘add_data’. c’est dans cette fonction que nous allons saisir notre texte. Puis pour finir on fabirque ce QR-Code via la fonction ‘make’.
Il ne reste plus qu’à créer une image de la sauvegarder dans le dossier courant (c’est à dire le dossier dans lequel vous avez placé votre script (*.py)

Programmation OpenMV


Intéressons nous maintenant côté caméra sur la partie code toujours en Python.

# QR-Code – Python – Electronique71.com

import sensor, image, time

sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.VGA)
sensor.set_windowing((240, 240))
sensor.skip_frames(time = 2000)
sensor.set_auto_gain(False)

while(True):

    img = sensor.snapshot()
    codes = img.find_qrcodes()

    for code in codes:
        img.draw_rectangle(code.rect(), thickness=5, color = 255)
        print(str(code[4]))

    if not codes:
        print("Aucun aperçu !")

Programmation Python – DataMatrix


Regardons cette fois-ci le code pour un DataMatrix

# DataMAtrix – Python – Electronique71.com

import cv2
from PIL import Image
from pylibdmtx.pylibdmtx import encode # On importe pylibdmtx

size = 200,200 # Taille du datamatrix

text = 'Ceci est un Datamatrix - Electronique71.com'
encoded = encode(text.encode('utf8')) # Bien encoder en utf8

img = Image.frombytes('RGB', (encoded.width, encoded.height), encoded.pixels)
img.thumbnail(size)
img.save('DataMatrix.png')


Fonctionnement programmation Python
Ce code est différent du 1er mais assez simple à comprendre vous ne trouvez pas ?

Programmation OpenMV


Intéressons nous maintenant côté caméra sur la partie code toujours en Python.

# DataMatrix – Python – Electronique71.com

import sensor, image, time, math

sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)
sensor.set_auto_gain(False)

while(True):

    img = sensor.snapshot()
    matrices = img.find_datamatrices()

    for matrix in matrices:
        img.draw_rectangle(matrix.rect(), thickness=5, color = (255, 0,0))
        print(str(matrix[4]))

    if not matrices:
        print("Aucun aperçu !")

Test avec caméra OpenMV


J’ai effectués quelques tests avec la caméra afin d’afficher le text sur le terminal, j’ai uniquement filmé avec ma cam le QR Code et le DataMAtrix situé au dessus (gros carré) test concluant ! En revanche nous devons être proche, mais bon avec quelques réglages niveau objectif, et le tour est joué .(je me vois mal récupérer un QR-Code à plusieurs mètres !)

Avec QR Code

Trouver l’erreur!! …. Niveau terminal .. Mais j’ai modifié le code c’est mieux pour moi !

Avec DataMatrix

Historiques


15/01/2021
– Première mise à disposition