In questo articolo vedremo come realizzare un lettore di codici QR con Raspberry Pi.
Il QR Code è una versione bidimensionale del codice a barre, composto da pattern di pixel in bianco e nero. Denso Wave appartiene a Denso, una fornitrice di Toyota, e ha sviluppato i QR Code per l’identificazione dei componenti al fine di accelerare i processi logistici della sua produzione automobilistica. Ora, con l’uso diffuso degli smartphone, il QR Code ha trovato la sua strada nel mercato. “QR” sta per “Quick Response”, che si riferisce all’accesso istantaneo alle informazioni nascoste nel Code (codice).
Per chi vuole conoscere i fondamenti matematici dietro il QR Code può leggere questo articolo.
I materiali da utilizzare sono i seguenti:
- Raspberry Pi
- Pi camera (o webcam usb)
- Tastiera
- Mouse
- Monitor
INSTALLAZIONI PRELIMINARI
Dobbiamo sapere che esiste un pacchetto chiamato “qrcode” che permette agli utenti di codificare rapidamente i dati all’interno di un QR code ed estrapolare ciò che è contenuto all’interno.
Apri il terminale.
Per sicurezza effettuiamo un update:
1 |
sudo apt-get update |
Digitiamo il seguente comando:
1 |
pip3 install qrcode[pil] |
INSTALLAZIONE RASPBERRY PI CAMERA
Ho scritto una guida approfondita a riguardo, per leggerla potete utilizzare il seguente link: Come installare e configurare la Raspberry Pi Camera
Installiamo OpenCV
OpenCV è una libreria open-source, scritta in C, per lo streaming video real-time, ovvero la Computer Vision e gira sotto Windows, Linux e MacOS X.
La libreria permette una semplice gestione di immagini trattandole come “matrici di pixel“, alle quali è possibile accedervi in maniera molto semplice e rapida. Prima di cimentarci nella vera e propria Computer Vision, che è un ambito di una vastità non indifferente, diamo una sguardo a quella che si può definire l’Image Processing, cioè l’Elaborazione delle Immagini attraverso la libreria in questione.
1 |
sudo apt-get install python3-opencv |
Poi digita:
1 |
sudo apt-get install libqt4-test python3-sip python3-pyqt5 libqtgui4 libjasper-dev libatlas-base-dev -y |
Poi digita:
1 |
pip3 install opencv-contrib-python==4.1.0.25 |
Questo comando ti permette di utilizzare la picamera con OpenCV VideoCapture
1 |
sudo modprobe bcm2835-v4l2 |
Per verificare se l’installazione è andata a buon fine digita:
1 2 |
python3 import cv2 |
CODICE PYTHON
Il codice funziona nella seguente maniera:
- Configura la fotocamera
- rileva i codici qr
- legge i codici qr ed estrapola ciò che è contenuto all’interno-
- Se è presente qualcosa viene disegnato un riquadro attorno al codice QR e viene visualizzato ciò che è contenuto all’interno
- Finchè non viene premuto il tasto ‘q’ lo script viene eseguito.
Il programma mostra anche il frame per secondo della camera mentre registra.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
import cv2 # set up camera object cap = cv2.VideoCapture(0) # QR code detection object detector = cv2.QRCodeDetector() while True: # get the image _, img = cap.read() # get bounding box coords and data data, bbox, _ = detector.detectAndDecode(img) # if there is a bounding box, draw one, along with the data if(bbox is not None): for i in range(len(bbox)): cv2.line(img, tuple(bbox[i][0]), tuple(bbox[(i+1) % len(bbox)][0]), color=(255, 0, 255), thickness=2) cv2.putText(img, data, (int(bbox[0][0][0]), int(bbox[0][0][1]) - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2) if data: print("data found: ", data) # display the image preview cv2.imshow("code detector", img) if(cv2.waitKey(1) == ord("q")): break # free camera object and exit cap.release() cv2.destroyAllWindows() |
Eseguiamo il codice.
Ecco il risultato:
Voglio ringraziare AZ-Delivery per avermi dato la possibilità di avere la rpicam.
Preferireste aspettare 8 settimane per l’autoimportazione dalla Cina, incerti se le merci arriveranno mai, le terre alla dogana o semplicemente saranno rispedite indietro? O acquistare in Germania ad un prezzo totalmente gonfiato da un rivenditore specializzato? Preferisci acquistare il prodotto a buon mercato in Cina senza essere sicuro di quale versione del prodotto riceverai, o ordinarlo dal rivenditore tedesco incl. istruzioni e scheda dati?
Nel seguente link è presente il sito ufficiale AZdelivery
Per chi fosse interessato può acquistare la rpicam nel seguente link.
Potete aprire il link premendo sul risultato generato nella shell.
Iscriviti ai nostri gruppi Telegram
Link utili
- Arduino UNO R3
- Elegoo UNO R3
- Arduino Starter Kit per principianti
- Elegoo Advanced Starter Kit
- Arduino Nano