Un QR code devenu courant dans la vie de tous les jours, notamment pour les paiements électroniques. Je veux le faire moi-même et le faire reconnaître Je publierai le résultat d'essayer avec Raspberry Pi.
・ Génération de code QR arbitraire
・ Lire le code + afficher le contenu à l'aide d'une caméra USB
Cela ressemble à ceci quand il est exécuté. (https://www.youtube.com/watch?v=xLL4vZN3S7g)
Affichez le contenu du code (qui peut être généré par vous-même).
Afin de faciliter la compréhension de la manière dont vous reconnaissez, la valeur numérique augmente à chaque reconnaissance.
environnement ・ RasPi4 (Cela devrait fonctionner avec RasPi3) ・ Caméra USB (Logitech) → La caméra Raspi est également disponible.
-Non requis si la configuration RasPi ou OpenCV est terminée. Essayez ArUco avec Raspberry Pi
・ Installation des packages requis Procédez comme suit dans le terminal
pip install --upgrade pip
pip install pillow
pip install pyzbar
pip install qrcode
QRcreate.py
import qrcode
from PIL import Image
#Déterminez la taille
qr = qrcode.QRCode(box_size=5)
#Liste des types et des tailles.
#1 57x57
#2 114x114
#5 285x285
#10 570x570
#Spécifiez le contenu à intégrer
qr.add_data('Essayez le code QR près de chez vous')
qr.make()
img_qr = qr.make_image()
img_qr.save('/home/pi/qr_lena_1.png') #L'emplacement et le nom que vous souhaitez enregistrer.
QRdetect.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from pyzbar.pyzbar import decode
from PIL import Image
import cv2
import time #Pour le test, non requis
#Démarrer la capture vidéo
cap = cv2.VideoCapture(1)
i=0 #Pour le test
while True:
#Obtenir des images de la capture vidéo
ret, frame = cap.read()
#Obtenir la taille
Height, Width = frame.shape[:2]
img = cv2.resize(frame,(int(Width),int(Height)))
PIL_Image=Image.fromarray(img)
#Affichage de l'image
cv2.imshow('Qr Test', img)
data = decode(PIL_Image)
#Afficher si vous pouvez lire quelque chose
if(data != []):
print('Read' ,i)
i=i+1
#print(data[0][0])
print(data[0][0].decode('utf-8', 'ignore'))
#Réception de l'entrée au clavier
cv2.waitKey(1)
#Mémoire libre pour la capture vidéo
cap.release()
#Fermez toutes les fenêtres
cv2.destroyAllWindows()
C'est un peu difficile à voir, mais vous pouvez voir que le nombre augmente à chaque reconnaissance. Si vous n'imprimez pas, il fonctionnera plus rapidement. (https://www.youtube.com/watch?v=xLL4vZN3S7g)
Ceci est une page très utile. Explication détaillée (https://note.com/yurufuwa_dev/n/n3442772e67ad) Diverses méthodes de génération (https://qiita.com/MuAuan/items/7265da5281aa69623a03)
c'est tout.