- Komponenter krävs
- Installerar OpenCV i Raspberry Pi
- Installera andra obligatoriska paket
- ThingSpeak-inställning för folkräkning
- Hårdvaruinställning
- Python-programförklaring för People Counter
- Testar
I dagens värld av avancerad teknik växer digital bildbehandling mycket snabbt och blir en viktig del av många digitala enheter som mobil, säkerhetskameror, bärbara datorer etc.
De vanligaste applikationerna för digital bildbehandling är objektdetektering, ansiktsigenkänning och personräknare. Så i den här handledningen ska vi bygga en OpenCV-publikräkning med Raspberry Pi och ThingSpeak. Här kommer pi-kameramodulen att användas för att kontinuerligt fånga ramarna och sedan kommer dessa ramar att bearbetas med HOG (Histogramorienterad objektbeskrivare) för att upptäcka objekten i bilden. Efter detta kommer dessa ramar att jämföras med OpenCVs förutbildade modell för detektering av människor. Personer som räknar visas på ThingSpeak-kanalen som kan övervakas var som helst i världen.
Komponenter krävs
Hårdvara
- Raspberry Pi 3 (vilken version som helst)
- Pi-kamera
Programvara och onlinetjänster
- ThingSpeak
- Python3.0
- OpenCV3.0
Installerar OpenCV i Raspberry Pi
Här kommer OpenCV-biblioteket att användas för att upptäcka publiken. 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
Vi har också skapat en serie OpenCV-självstudier med början från nybörjarnivån.
Installera andra obligatoriska paket
Innan vi programmerar Raspberry Pi för Crowd Counting, låt oss installera de andra nödvändiga paketen.
Installera imutils : imutils används för att utföra några nödvändiga bildbehandlingsfunktioner som översättning, rotation, storleksändring, skelettisering och att visa Matplotlib-bilder enklare med OpenCV. Så installera imutils med kommandot nedan:
pip3 installera imutils
matplotlib : Installera därefter matplotlib- biblioteket. Matplotlib är ett omfattande bibliotek för att skapa statiska, animerade och interaktiva visualiseringar i Python.
pip3 installera matplotlib
ThingSpeak-inställning för folkräkning
ThingSpeak är en mycket populär IoT-plattform och med hjälp av ThingSpeak-plattformen kan vi övervaka våra data över Internet var som helst. Det används också för att styra systemet via Internet med hjälp av kanaler och webbsidor som tillhandahålls av ThingSpeak. Vi använde tidigare ThingSpeak för att bygga många IoT-baserade projekt.
För att skapa en kanal på ThingSpeak först, först Registrera dig på ThingSpeak. Om du redan har ett konto på ThingSpeak, logga in med ditt ID och lösenord.
Klicka på Sing up och ange dina uppgifter.
Efter detta, verifiera ditt e-post-id och klicka på Fortsätt.
Skapa nu en ny kanal efter inloggning genom att klicka på knappen " Ny kanal ".
När du har klickat på " Ny kanal" anger du namnet och beskrivningen för de data du vill ladda upp på den här kanalen. Här har vi skapat ett fält som heter People . Flera fält kan skapas enligt kraven.
Klicka sedan på knappen Spara kanal för att spara informationen.
För att skicka data till ThingSpeak, ange API-nyckeln och kanal-ID i Python-skript, så kopiera API-nyckeln och kanal-ID.
Hårdvaruinställning
Här behöver vi bara Raspberry Pi och Pi-kamera för detta OpenCV-projekt för mänsklig räkning 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-programförklaring för People Counter
Komplett pythonkod för det här publiken som räknar OpenCV-projektet ges i slutet av sidan. Här förklarar vi de viktiga delarna av koden för en bättre förklaring.
Så i början av koden importerar du alla nödvändiga bibliotek som ska användas i det här projektet.
importera cv2 importera imutils från imutils.object_detection importera non_max_suppression importera numpy som np importförfrågningar importtid import base64 från matplotlib importera pyplot som plt från urllib.begär import urlopen
Efter att ha importerat biblioteken anger du ThingSpeak-kanal-ID och skriver en API-nyckel som du kopierade tidigare.
channel_id = 812060 # PUT CHANNEL ID HERE WRITE_API = 'X5AQ3EGIKMBYW31H' # PUT DIN WRITE KEY HERE BASE_URL = "https://api.thingspeak.com/update?api_key= {}". format (WRITE_API)
Initiera nu HOG (Histogram Oriented Object descriptor). HOG är en av de mest populära teknikerna för objektdetektering och har använts i flera applikationer. cv2.HOGDescriptor_getDefaultPeopleDetector () används för att anropa en förutbildad modell av OpenCV för detektering av personer. Vi har tidigare förklarat HOG i detalj i den tidigare OpenCV-självstudien.
hog = cv2.HOGDescriptor () hog.setSVMDetector (cv2.HOGDescriptor_getDefaultPeopleDetector ())
Inuti detektorn () får Pi en RGB-bild uppdelad i tre färgkanaler. Därefter ändras bilden med imutils . Sedan kallar det metoden detectMultiScale () för att analysera bilden för att veta om en person existerar med klassificeringsresultatet från SVM-modellen.
def-detektor (bild): image = imutils.resize (image, width = min (400, image.shape)) clone = image.copy () rects, weights = hog.detectMultiScale (image, winStride = (4, 4), stoppning = (8, 8), skala = 1.05)
Ibland överlappar övervakningsrutorna och genererar falska positiva eller detekteringsfel, så nedanstående kod tillämpar icke-max-undertryckning från imutils till kick-off överlappande rutor.
för (x, y, w, h) i rects: cv2. rektangel (bild, (x, y), (x + w, y + h), (0, 0, 255), 2) rects = np.array (för (x, y, w, h) i rects]) resultat = non_max_suppression (rects, probs = None, overlapThresh = 0.7) returresultat
Inuti funktionen record () hämtar den bilden direkt från Pi-kameran med VideoCapture () -metoden från OpenCV, ändrar storleken på den med imultis och skickar resultaten till ThingSpeak.
def record (sample_time = 5): camera = cv2.VideoCapture (0) frame = imutils.resize (frame, width = min (400, frame.shape)) result = detector (frame.copy ()) thingspeakHttp = BASE_URL + " & field1 = {} ". format (resultat1)
Testar
Innan du startar python-skriptet, kontrollera först om din PI-kamera fungerar eller inte. Efter att ha granskat kameran startar du python-skriptet genom att utfärda följande kommando:
Då hittar du ett fönster som dyker upp med ditt videoflöde i det. Pi tar den första ramen och bearbetar den med OpenCV för att upptäcka antalet människor. Om den upptäcker folket hittar du en låda runt den så här:
Kontrollera nu din ThingSpeak-kanal, där du kan övervaka publikens storlek var som helst i världen.
Så här kan du göra OpenCV-folkräkning med Raspberry Pi. Arbetsvideo och kod ges i slutet av sidan.