- Vereisten
- OpenCV installeren in Raspberry Pi
- Andere vereiste pakketten installeren
- Raspberry pi QR-codelezer Hardware-installatie
- Python-code voor Raspberry Pi QR-codelezer
- De Raspberry Pi QR-codescanner testen
QR-code (Quick Response-code) is een soort matrixstreepjescode die informatie bevat over het item waaraan het is gekoppeld, zoals locatiegegevens, identificatie of een tracker die een website of app identificeert, enz. Het is een machinaal leesbare optische label dat de vorm heeft van een 2D-afbeelding en een ander patroon heeft. Volg onze vorige tutorial voor meer informatie over QR-codes en het genereren van een QR-code.
In deze tutorial gaan we een Raspberry Pi-gebaseerde QR- codescanner bouwen met behulp van OpenCV en ZBar-bibliotheek. ZBar is de beste bibliotheek voor het detecteren en decoderen van de verschillende soorten streepjescodes en QR-codes. OpenCV wordt gebruikt om een nieuw frame uit een videostream te halen en te verwerken. Zodra OpenCV een frame heeft vastgelegd, kunnen we het doorgeven aan een speciale Python-bibliotheek voor het decoderen van streepjescodes, zoals een ZBar, die de streepjescode decodeert en omzet in de betreffende informatie.
Vereisten
- Raspberry Pi 3 (elke versie)
- Pi-cameramodule
Voordat we verder gaan met deze Raspberry Pi 3 QR- codescanner, moeten we eerst OpenCV, barcode-decoderingsbibliotheek ZBar, imutils en enkele andere afhankelijkheden in dit project installeren. OpenCV wordt hier gebruikt voor digitale beeldverwerking. De meest voorkomende toepassingen van digitale beeldverwerking zijn objectdetectie, gezichtsherkenning en mensenteller.
OpenCV installeren in Raspberry Pi
Hier wordt de OpenCV-bibliotheek gebruikt voor de Raspberry Pi QR-scanner. Update eerst de Raspberry Pi om de OpenCV te installeren.
sudo apt-get update
Installeer vervolgens de vereiste afhankelijkheden om OpenCV op uw Raspberry Pi te installeren.
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
Installeer daarna de OpenCV in Raspberry Pi met behulp van de onderstaande opdracht.
pip3 installeer opencv-contrib-python == 4.1.0.25
We gebruikten eerder OpenCV met Raspberry pi en hebben er veel tutorials over gemaakt.
- OpenCV installeren op Raspberry Pi met CMake
- Realtime gezichtsherkenning met Raspberry Pi en OpenCV
- Kentekenherkenning met Raspberry Pi en OpenCV
- Menigte schatten met OpenCV en Raspberry Pi
We hebben ook een reeks OpenCV-tutorials gemaakt, beginnend vanaf het beginnersniveau.
Andere vereiste pakketten installeren
ZBar installeren
Zbar is de beste bibliotheek voor het detecteren en decoderen van de verschillende soorten barcodes en QR-codes. Gebruik de onderstaande opdracht om de bibliotheek te installeren:
pip3 installeer pyzbar
Imutils installeren
imutils wordt gebruikt om essentiële beeldverwerkingsfuncties zoals vertaling, rotatie, formaat wijzigen, skeletvorming en het weergeven van Matplotlib-afbeeldingen gemakkelijker te maken met OpenCV. Gebruik de onderstaande opdracht om de imutils te installeren:
pip3 installeer imutils
Het installeren van argparse
Gebruik de onderstaande opdracht om de argparse-bibliotheek te installeren. argparse is verantwoordelijk voor het ontleden van opdrachtregelargumenten.
pip3 installeer argparse
Raspberry pi QR-codelezer Hardware-installatie
Hier hebben we alleen een Raspberry Pi- en Pi-camera nodig voor deze QR-codescanner met Raspberry Pi Camera en je hoeft alleen de cameralintconnector te bevestigen in de camerasleuf die is opgegeven in de Raspberry Pi.
Pi-camera kan worden gebruikt om verschillende interessante projecten te bouwen, zoals Raspberry Pi-bewakingscamera, bezoekersbewakingssysteem, huisbeveiligingssysteem, enz.
Python-code voor Raspberry Pi QR-codelezer
De volledige code voor de Raspberry Pi QR-lezer staat aan het einde van de pagina. Laten we de code begrijpen voordat we de Raspberry Pi programmeren.
Dus, zoals gewoonlijk, start de code door alle vereiste pakketten te importeren.
van imutils.video import VideoStream van pyzbar import pyzbar import argparse import datetime import imutils import tijd import cv2
Bouw vervolgens de argumentparser en ontleed de argumenten. Het opdrachtregelargument bevat informatie over het pad van het CSV-bestand. Het CSV-bestand (Comma Separated Values) bevat het tijdstempel en de payload van elke streepjescode uit onze videostream.
ap = argparse.ArgumentParser () ap.add_argument ("- o", "--output", type = str, default = "barcodes.csv", help = "pad naar uitvoer CSV-bestand met barcodes") args = vars (ap.parse_args ())
Initialiseer daarna de videostream en verwijder commentaar op de regel met commentaar als u een USB-webcam gebruikt.
#vs = VideoStream (src = 0).start () vs = VideoStream (usePiCamera = True).start () time.sleep (2.0)
Pak nu binnen de lus een frame uit de videostream en verklein het naar 400 pixels. Zodra het frame is gegrepen , roept u de functie pyzbar.decode op om de QR-code te detecteren en te decoderen.
frame = vs.read () frame = imutils.resize (frame, breedte = 400) barcodes = pyzbar.decode (frame)
Loop nu over de gedetecteerde streepjescodes om de locatie van de streepjescode te extraheren en teken het selectiekader rond de streepjescode op de afbeelding.
voor streepjescode in streepjescodes: (x, y, w, h) = streepjescode.rect cv2.rechthoek (frame, (x, y), (x + w, y + h), (0, 0, 255), 2)
Decodeer vervolgens de gedetecteerde streepjescode in een "utf-8" -reeks met behulp van de decodeerfunctie ("utf-8") en extraheer vervolgens het type streepjescode met de functie barcode.type.
barcodeData = barcode.data.decode ("utf-8") barcodeType = barcode.type
Sla daarna de geëxtraheerde streepjescodegegevens en het streepjescodetype op in een variabele met de naam tekst, teken de streepjescodegegevens en typ op de afbeelding.
text = "{} ({})". format (barcodeData, barcodeType) cv2.putText (frame, tekst, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0,5, (0, 0, 255), 2)
Geef nu de uitvoer weer met de streepjescodegegevens en het streepjescodetype.
cv2.imshow ("Barcodelezer", frame)
Controleer nu in de laatste stap of de toets 's' is ingedrukt, breek dan de hoofdlus en start het opruimproces.
key = cv2.waitKey (1) & 0xFF # als de `s` -toets wordt ingedrukt, breek de lus af als key == ord (" s "): break print (" cleaning up… ") csv.close () cv2.destroyAllWindows () versus stop ()
De Raspberry Pi QR-codescanner testen
Zodra uw installatie klaar is, start u het QR-codelezerprogramma. U ziet een venster met een livebeeld van uw camera, nu kunt u streepjescodes voor de PI-camera presenteren. Wanneer pi een streepjescode decodeert, wordt er een rood vak omheen getekend met streepjescodegegevens en streepjescodetype, zoals weergegeven in onderstaande afbeelding:
Dit is hoe je eenvoudig een Raspberry Pi Camera QR-codelezer kunt bouwen met alleen het Raspberry Pi-bord en de Pi-camera of USB-camera.
Een werkende video en volledige code voor dit project worden hieronder gegeven.