- Requisiti
- Installazione di OpenCV in Raspberry Pi
- Installazione di altri pacchetti richiesti
- Configurazione hardware del lettore di codici QR Raspberry pi
- Codice Python per lettore di codici QR Raspberry Pi
- Testare lo scanner di codici QR Raspberry Pi
Il codice QR (codice di risposta rapida) è un tipo di codice a barre a matrice che contiene informazioni sull'elemento a cui è collegato, come dati sulla posizione, identificatore o un tracker che identifica un sito Web o un'app, ecc. È un dispositivo ottico leggibile dalla macchina etichetta che ha la forma di un'immagine 2D e ha un motivo diverso. Per saperne di più sui codici QR e su come generare un codice QR, segui il nostro tutorial precedente.
In questo tutorial, costruiremo uno scanner di codici QR basato su Raspberry Pi utilizzando OpenCV e la libreria ZBar. ZBar è la migliore libreria per rilevare e decodificare i diversi tipi di codici a barre e codici QR. OpenCV viene utilizzato per acquisire un nuovo fotogramma da un flusso video ed elaborarlo. Una volta che OpenCV acquisisce un frame, possiamo passarlo a una libreria di decodifica del codice a barre Python dedicata come una ZBar che decodifica il codice a barre e lo converte nelle rispettive informazioni.
Requisiti
- Raspberry Pi 3 (qualsiasi versione)
- Modulo fotocamera Pi
Prima di procedere con questo scanner di codici QR Raspberry Pi 3, dobbiamo installare OpenCV, la libreria di decodifica codici a barre ZBar, imutils e alcune altre dipendenze in questo progetto. OpenCV viene utilizzato qui per l'elaborazione delle immagini digitali. Le applicazioni più comuni dell'elaborazione digitale delle immagini sono il rilevamento di oggetti, il riconoscimento dei volti e il contatore di persone.
Installazione di OpenCV in Raspberry Pi
Qui la libreria OpenCV verrà utilizzata per lo scanner QR Raspberry Pi. Per installare OpenCV, prima aggiorna il Raspberry Pi.
sudo apt-get update
Quindi installa le dipendenze richieste per l'installazione di OpenCV sul tuo Raspberry Pi.
sudo apt-get install libhdf5-dev -y sudo apt-get install libhdf5-serial-dev –y sudo apt-get install libatlas-base-dev –y sudo apt-get install libjasper-dev -y sudo apt-get install libqtgui4 –Y sudo apt-get install libqt4-test –y
Successivamente, installa OpenCV in Raspberry Pi utilizzando il comando seguente.
pip3 installa opencv-contrib-python == 4.1.0.25
In precedenza abbiamo utilizzato OpenCV con Raspberry pi e abbiamo creato molti tutorial su di esso.
- Installazione di OpenCV su Raspberry Pi utilizzando CMake
- Riconoscimento facciale in tempo reale con Raspberry Pi e OpenCV
- Riconoscimento della targa utilizzando Raspberry Pi e OpenCV
- Stima delle dimensioni della folla utilizzando OpenCV e Raspberry Pi
Abbiamo anche creato una serie di tutorial OpenCV partendo dal livello principiante.
Installazione di altri pacchetti richiesti
Installazione di ZBar
Zbar è la migliore libreria per rilevare e decodificare i diversi tipi di codici a barre e codici QR. Usa il comando seguente per installare la libreria:
pip3 installa pyzbar
Installazione di imutils
imutils viene utilizzato per rendere più semplici le funzioni essenziali di elaborazione delle immagini come la traduzione, la rotazione, il ridimensionamento, la scheletrizzazione e la visualizzazione delle immagini Matplotlib con OpenCV. Usa il comando seguente per installare imutils:
pip3 installa imutils
Installazione di argparse
Usa il comando seguente per installare la libreria argparse. argparse è responsabile dell'analisi degli argomenti della riga di comando.
pip3 installa argparse
Configurazione hardware del lettore di codici QR Raspberry pi
Qui abbiamo solo bisogno della fotocamera Raspberry Pi e Pi per questo scanner di codici QR che utilizza la fotocamera Raspberry Pi e devi solo collegare il connettore del nastro della fotocamera nello slot della fotocamera indicato nel Raspberry pi
La telecamera Pi può essere utilizzata per costruire vari progetti interessanti come la telecamera di sorveglianza Raspberry Pi, il sistema di monitoraggio dei visitatori, il sistema di sicurezza domestica, ecc.
Codice Python per lettore di codici QR Raspberry Pi
Il codice completo per il lettore QR Raspberry Pi è fornito alla fine della pagina. Prima di programmare il Raspberry Pi, capiamo il codice.
Quindi, come al solito, avvia il codice importando tutti i pacchetti richiesti.
da imutils.video import VideoStream da pyzbar import pyzbar import argparse import datetime import imutils import time import cv2
Quindi costruisci il parser degli argomenti e analizza gli argomenti. L'argomento della riga di comando contiene informazioni sul percorso del file CSV. Il file CSV (Comma Separated Values) contiene il timestamp e il payload di ogni codice a barre dal nostro flusso video.
ap = argparse.ArgumentParser () ap.add_argument ("- o", "--output", type = str, default = "barcodes.csv", help = "percorso per l'output del file CSV contenente codici a barre") args = vars (ap.parse_args ())
Successivamente, inizializza il flusso video e rimuovi il commento dalla riga commentata se stai utilizzando una webcam USB.
#vs = VideoStream (src = 0).start () vs = VideoStream (usePiCamera = True).start () time.sleep (2.0)
Ora all'interno del ciclo, prendi un fotogramma dal flusso video e ridimensionalo a 400 pixel. Una volta che afferra il frame, chiama la funzione pyzbar.decode per rilevare e decodificare il codice QR.
frame = vs.read () frame = imutils.resize (frame, width = 400) barcodes = pyzbar.decode (frame)
Ora, fai un loop sui codici a barre rilevati per estrarre la posizione del codice a barre e traccia il riquadro di delimitazione attorno al codice a barre sull'immagine.
per codice a barre in codici a barre: (x, y, w, h) = barcode.rect cv2.rectangle (frame, (x, y), (x + w, y + h), (0, 0, 255), 2)
Quindi decodificare il codice a barre rilevato in una stringa "utf-8" utilizzando la funzione decode ("utf-8") e quindi estrarre il tipo di codice a barre utilizzando la funzione barcode.type.
barcodeData = barcode.data.decode ("utf-8") barcodeType = barcode.type
Successivamente, salva i dati del codice a barre estratti e il tipo di codice a barre all'interno di una variabile denominata text e disegna i dati del codice a barre e il tipo sull'immagine.
text = "{} ({})". format (barcodeData, barcodeType) cv2.putText (frame, text, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)
Ora visualizza l'output con i dati del codice a barre e il tipo di codice a barre.
cv2.imshow ("Lettore di codici a barre", frame)
Ora nell'ultimo passaggio, controlla se il tasto "s" è premuto, quindi interrompi il ciclo principale e avvia il processo di pulizia.
key = cv2.waitKey (1) & 0xFF # se viene premuto il tasto `s`, interrompe il ciclo se key == ord (" s "): break print (" cleaning up… ") csv.close () cv2.destroyAllWindows () vs.stop ()
Testare lo scanner di codici QR Raspberry Pi
Una volta che la configurazione è pronta, avvia il programma di lettura del codice QR. Vedrai una finestra che mostra una vista dal vivo dalla tua telecamera, ora puoi presentare i codici a barre davanti alla telecamera PI. Quando pi decodifica un codice a barre, disegna una casella rossa attorno ad esso con i dati del codice a barre e il tipo di codice a barre come mostrato nell'immagine sottostante:
In questo modo puoi costruire facilmente un lettore di codici QR per fotocamera Raspberry Pi usando semplicemente la scheda Raspberry Pi e la fotocamera Pi o la fotocamera USB.
Di seguito sono riportati un video funzionante e il codice completo per questo progetto.