- Krav
- Installerar OpenCV i Raspberry Pi
- Installera andra obligatoriska paket
- Raspberry pi QR-kodläsarens hårdvaruinstallation
- Python-kod för Raspberry Pi QR-kodläsare
- Testa Raspberry Pi QR-kodskanner
QR-kod (Quick Response code) är en typ av matrisstreckkod som innehåller information om objektet som den är kopplad till, som platsdata, identifierare eller en spårare som identifierar en webbplats eller app etc. Det är en maskinläsbar optisk etikett som är i form av en 2D-bild och har ett annat mönster. För att lära dig mer om QR-koder och hur du genererar en QR-kod, följ vår tidigare handledning.
I den här handledningen ska vi bygga en Raspberry Pi-baserad QR-kodskanner med hjälp av OpenCV och ZBar-biblioteket. ZBar är det bästa biblioteket för att upptäcka och avkoda olika typer av streckkoder och QR-koder. OpenCV används för att ta en ny ram från en videoström och bearbeta den. När OpenCV har tagit en ram kan vi skicka den till ett dedikerat Python-streckkodavkodningsbibliotek, till exempel en ZBar som avkodar streckkoden och konverterar den till respektive information.
Krav
- Raspberry Pi 3 (vilken version som helst)
- Pi kameramodul
Innan vi fortsätter med denna Raspberry Pi 3 QR-kodskanner måste vi först installera OpenCV, streckkodavkodningsbibliotek ZBar, imutils och några andra beroenden i detta projekt. OpenCV används här för digital bildbehandling. De vanligaste applikationerna för digital bildbehandling är objektdetektering, ansiktsigenkänning och personräknare.
Installerar OpenCV i Raspberry Pi
Här kommer OpenCV-biblioteket att användas för Raspberry Pi QR-skannern. För att installera OpenCV, uppdatera först Raspberry Pi.
sudo apt-get uppdatering
Installera sedan de beroenden som krävs för att installera OpenCV på din 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
Därefter installerar du OpenCV i Raspberry Pi med kommandot nedan.
pip3 installera opencv-contrib-python == 4.1.0.25
Vi använde tidigare OpenCV med Raspberry pi och skapade många handledning om det.
- Installera OpenCV på Raspberry Pi med CMake
- Ansiktsigenkänning i realtid med Raspberry Pi och OpenCV
- Registrering av registreringsskylt med Raspberry Pi och OpenCV
- Uppskattning av publikstorlek med OpenCV och Raspberry Pi
Vi har också skapat en serie OpenCV-självstudier med början från nybörjarnivån.
Installera andra obligatoriska paket
Installerar ZBar
Zbar är det bästa biblioteket för att upptäcka och avkoda olika typer av streckkoder och QR-koder. Använd kommandot nedan för att installera biblioteket:
pip3 installera pyzbar
Installera imutils
imutils används för att göra viktiga bildbehandlingsfunktioner som översättning, rotation, storleksändring, skeletonisering och visning av Matplotlib-bilder enklare med OpenCV. Använd kommandot nedan för att installera imutils:
pip3 installera imutils
Installerar argparse
Använd kommandot nedan för att installera argparse-biblioteket. argparse ansvarar för att analysera kommandoradsargument.
pip3 installera argparse
Raspberry pi QR-kodläsarens hårdvaruinstallation
Här behöver vi bara Raspberry Pi och Pi-kamera för den här QR-kodskannern med Raspberry Pi Camera och du behöver bara ansluta kamerans bandkontakt i kameraplatsen som anges i Raspberry pi
Pi-kamera kan användas för att bygga olika intressanta projekt som Raspberry Pi Surveillance Camera, Visitor Monitoring System, Home Security System, etc.
Python-kod för Raspberry Pi QR-kodläsare
Den fullständiga koden för Raspberry Pi QR-läsare ges i slutet av sidan. Innan vi programmerar Raspberry Pi, låt oss förstå koden.
Så som vanligt, starta koden genom att importera alla nödvändiga paket.
från imutils.video import VideoStream från pyzbar import pyzbar import argparse import datetime import imutils import tid import cv2
Konstruera sedan argumentparsern och analysera argumenten. Kommandoradsargumentet innehåller information om sökvägen till CSV-filen. CSV-filen (Comma Separated Values) innehåller tidsstämpeln och nyttolasten för varje streckkod från vår videoström.
ap = argparse.ArgumentParser () ap.add_argument ("- o", "--output", type = str, default = "barcodes.csv", help = "sökväg till CSV-fil som innehåller streckkoder") args = vars (ap.parse_args ())
Initiera sedan videoströmmen och avmarkera den kommenterade raden om du använder USB-webbkamera.
#vs = VideoStream (src = 0).start () vs = VideoStream (usePiCamera = True).start () time.sleep (2.0)
Nu inne i slingan, ta en ram från videoströmmen och ändra storlek på den till 400 pixlar. När den tagit ramen, ring pyzbar.decode- funktionen för att upptäcka och avkoda QR-koden.
frame = vs.read () frame = imutils.resize (frame, width = 400) streckkoder = pyzbar.decode (ram)
Loop nu över de upptäckta streckkoderna för att extrahera platsen för streckkoden och rita avgränsningsrutan runt streckkoden på bilden.
för streckkod i streckkoder: (x, y, w, h) = streckkod. sträcka cv2. rektangel (ram, (x, y), (x + w, y + h), (0, 0, 255), 2)
Avkoda sedan den detekterade streckkoden till en "utf-8" -sträng med hjälp av avkodningsfunktionen ("utf-8") och extrahera sedan typen av streckkod med streckkodsfunktionen.
streckkodData = streckkod.data.decode ("utf-8") streckkodType = streckkod.typ
Därefter sparar du den extraherade streckkodsdata och streckkodstyp i en variabel med namnet text och ritar streckkodsdata och skriver på bilden.
text = "{} ({})". format (streckkodsdata, streckkodTyp) cv2.putText (ram, text, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0,5, (0, 0, 255), 2)
Visa nu utdata med streckkodsdata och streckkodstyp.
cv2.imshow ("Streckkodsläsare", ram)
Nu i det sista steget, kontrollera om tangenten s trycks in, bryt sedan ut huvudslingan och starta saneringen.
key = cv2.waitKey (1) & 0xFF # om `s`-tangenten trycks ned, bryt dig från slingan om tangent == ord (" s "): bryta utskrift (" städa upp ") cv2.destroyAllWindows () mot stopp ()
Testa Raspberry Pi QR-kodskanner
När installationen är klar startar du QR-kodläsarprogrammet. Du kommer att se ett fönster som visar en livevy från din kamera, nu kan du presentera streckkoder framför PI-kameran. När pi avkodar en streckkod drar den en röd ruta runt den med streckkodsdata och streckkodstyp som visas i bilden nedan:
Så här kan du enkelt bygga en Raspberry Pi Camera QR Code Reader med bara att använda Raspberry Pi-kortet och Pi-kameran eller USB-kameran.
En fungerande video och en komplett kod för detta projekt ges nedan.