- Potrebne komponente
- Namestitev OpenCV v Raspberry Pi
- Namestitev drugih zahtevanih paketov
- ThingSpeak Setup za štetje ljudi
- Nastavitev strojne opreme
- Pojasnilo programa Python za števec ljudi
- Testiranje
V današnjem svetu najsodobnejših tehnologij digitalna obdelava slik zelo hitro raste in je postala pomemben del številnih digitalnih naprav, kot so mobilne naprave, varnostne kamere, prenosniki itd.
Najpogostejši programi digitalne obdelave slik so zaznavanje predmetov, prepoznavanje obrazov in števec ljudi. V tej vadnici bomo torej ustvarili štetje množic OpenCV z uporabo Raspberry Pi in ThingSpeak. Tu bo modul kamere pi uporabljen za neprekinjeno zajemanje okvirjev, nato pa bodo ti okvirji obdelani s HOG (Histogram Oriented Object Descriptor) za zaznavanje predmetov na sliki. Po tem se bodo ti okvirji primerjali s predhodno usposobljenim modelom OpenCV za zaznavanje ljudi. Štetje ljudi bo prikazano na kanalu ThingSpeak, ki ga lahko spremljate kjer koli na svetu.
Potrebne komponente
Strojna oprema
- Raspberry Pi 3 (katera koli različica)
- Pi kamera
Programska oprema in spletne storitve
- ThingSpeak
- Python3.0
- OpenCV3.0
Namestitev OpenCV v Raspberry Pi
Tu bo knjižnica OpenCV uporabljena za zaznavanje množice. Če želite namestiti OpenCV, najprej posodobite Raspberry Pi.
posodobitev sudo apt-get
Nato namestite potrebne odvisnosti za namestitev OpenCV na vaš 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
Po tem namestite OpenCV v Raspberry Pi z uporabo spodnjega ukaza.
pip3 namestite opencv-contrib-python == 4.1.0.25
Pred tem smo uporabljali OpenCV z Raspberry pi in na njem ustvarili veliko vadnic.
- Namestitev OpenCV na Raspberry Pi s pomočjo CMake
- Spoznavanje obrazov v realnem času z Raspberry Pi in OpenCV
- Prepoznavanje registrske tablice z uporabo Raspberry Pi in OpenCV
Ustvarili smo tudi vrsto vadnic OpenCV, ki se začnejo od začetnika.
Namestitev drugih zahtevanih paketov
Pred programiranjem Raspberry Pi za štetje množice namestimo še druge potrebne pakete.
Namestitev imutils : imutils se uporablja za izvajanje nekaj potrebnih funkcij obdelave slik, kot so prevajanje, vrtenje, spreminjanje velikosti, skelet in lažje prikazovanje slik Matplotlib z OpenCV. Torej namestite imutils z uporabo spodnjega ukaza:
pip3 namestite imutils
matplotlib : Po tem namestiteknjižnico matplotlib. Matplotlib je obsežna knjižnica za ustvarjanje statičnih, animiranih in interaktivnih vizualizacij v Pythonu.
pip3 namestite matplotlib
ThingSpeak Setup za štetje ljudi
ThingSpeak je zelo priljubljena platforma IoT in z uporabo platforme ThingSpeak lahko svoje podatke po internetu spremljamo od koder koli. Uporablja se tudi za nadzor sistema prek interneta z uporabo kanalov in spletnih strani, ki jih ponuja ThingSpeak. Pred tem smo ThingSpeak uporabljali za gradnjo številnih projektov, ki temeljijo na IoT.
Če želite najprej ustvariti kanal na ThingSpeak, se najprej prijavite na ThingSpeak. Če že imate račun za ThingSpeak, se prijavite s svojim ID-jem in geslom.
Kliknite Sing up in vnesite svoje podatke.
Po tem preverite svoj e-poštni ID in kliknite na nadaljevanje.
Po prijavi ustvarite nov kanal s klikom na gumb » Nov kanal «.
Po kliku na » Nov kanal« vnesite ime in opis podatkov, ki jih želite naložiti na ta kanal. Tu smo ustvarili eno polje z imenom Ljudje . Glede na zahteve je mogoče ustvariti več polj.
Po tem kliknite gumb shrani kanal, da shranite podrobnosti.
Če želite podatke poslati v ThingSpeak, v skriptu Python vnesite ključ API in ID kanala, zato kopirajte ključ API in ID kanala.
Nastavitev strojne opreme
Tu potrebujemo samo kamero Raspberry Pi in Pi za ta projekt štetja ljudi OpenCV, v režo za fotoaparat, ki je navedena v Raspberry pi, pa morate le pritrditi tračni priključek kamere.
Kamero Pi lahko uporabimo za gradnjo različnih zanimivih projektov, kot so nadzorna kamera Raspberry Pi, sistem za spremljanje obiskovalcev, sistem za domačo varnost itd.
Pojasnilo programa Python za števec ljudi
Popolna koda pythona za ta projekt OpenCV, ki šteje množico, je podana na koncu strani. Tu razlagamo pomembne razdelke kode za boljšo razlago.
Torej na začetku kode uvozite vse zahtevane knjižnice, ki bodo uporabljene v tem projektu.
uvoz cv2 uvoz imutils iz imutils.object_detection uvoz non_max_suppression uvoz numpy kot np zahteve za uvoz čas uvoza import base64 iz matplotlib import pyplot kot plt iz urllib.request uvoz urlopen
Po uvozu knjižnic vnesite ID kanala ThingSpeak in napišite ključ API, ki ste ga prej kopirali.
channel_id = 812060 # TUKAJ ID STRANI KANALA WRITE_API = 'X5AQ3EGIKMBYW31H' # TUKAJ NASTAVITE KLJUČ TAKOJ BASE_URL = "https://api.thingspeak.com/update?api_key= {}". format (WRITE_API)
Zdaj inicializirajte HOG (Histogram Oriented Object Descriptor). HOG je ena najbolj priljubljenih tehnik zaznavanja predmetov in je bila uporabljena v več aplikacijah. cv2.HOGDescriptor_getDefaultPeopleDetector (), s katerim smo poklicali predhodno izurjeni model OpenCV za zaznavanje ljudi. Pred tem smo HOG podrobno razložili v prejšnji vadnici OpenCV.
hog = cv2.HOGDescriptor () hog.setSVMDetector (cv2.HOGDescriptor_getDefaultPeopleDetector ())
Znotraj detektorja () Pi prejme sliko RGB, razdeljeno na tri barvne kanale. Po njem s pomočjo imutilov spremeni velikost slike. Nato pokliče metodo deteMultiScale (), da analizira sliko in ugotovi, ali obstaja oseba, ki uporablja rezultat razvrstitve iz modela SVM.
def detektor (slika): image = imutils.resize (image, width = min (400, image.shape)) clone = image.copy () rects, weights = hog.detectMultiScale (image, winStride = (4, 4), oblazinjenje = (8, 8), lestvica = 1,05)
Včasih se polja za zajemanje prekrivajo in ustvarjajo lažne pozitivne učinke ali napake pri zaznavanju, zato spodnja koda za preprečevanje prekrivajočih se oken uporabi preprečevanje maksimuma imutilov .
za (x, y, w, h) v rects: cv2.rectangle (slika, (x, y), (x + w, y + h), (0, 0, 255), 2) rects = np.array (za (x, y, w, h) v rects]) rezultat = non_max_suppression (rects, probs = None, overlapThresh = 0.7)
Znotraj funkcije record () s pomočjo metode VideoCapture () iz OpenCV sliko pridobi neposredno s kamere Pi, z imultisom jo spremeni v velikost in rezultate pošlje v ThingSpeak.
def zapis (sample_time = 5): camera = cv2.VideoCapture (0) frame = imutils.resize (frame, width = min (400, frame.shape)) rezultat = detektor (frame.copy ()) thingspeakHttp = BASE_URL + " & field1 = {} ". format (rezultat1)
Testiranje
Pred zagonom skripta python najprej preverite, ali kamera PI deluje ali ne. Po pregledu kamere zaženite skript python z izdajo naslednjega ukaza:
Potem boste našli okno, ki se odpre z video virom v njem. Pi bo vzel prvi okvir in ga obdelal s pomočjo OpenCV za zaznavanje števila ljudi. Če zazna ljudi, boste okrog njega našli tako okence:
Zdaj preverite svoj kanal ThingSpeak, kjer lahko spremljate velikost množice kjer koli na svetu.
Tako lahko s pomočjo Raspberry Pi naredite štetje množice OpenCV. Delovni video in koda sta podana na koncu strani.