- Wymagane składniki
- Instalowanie OpenCV w Raspberry Pi
- Instalowanie innych wymaganych pakietów
- Konfiguracja ThingSpeak dla liczenia osób
- Konfiguracja sprzętu
- Objaśnienie programu Python dla licznika osób
- Testowanie
W dzisiejszym świecie najnowocześniejszych technologii cyfrowe przetwarzanie obrazu rozwija się bardzo szybko i staje się ważną częścią wielu urządzeń cyfrowych, takich jak telefony komórkowe, kamery bezpieczeństwa, laptopy itp.
Najpopularniejsze zastosowania cyfrowego przetwarzania obrazu to wykrywanie obiektów, rozpoznawanie twarzy i licznik osób. W tym samouczku zamierzamy zbudować liczenie tłumów OpenCV przy użyciu Raspberry Pi i ThingSpeak. Tutaj moduł kamery pi zostanie użyty do ciągłego przechwytywania klatek, a następnie te klatki będą przetwarzane za pomocą HOG (deskryptor obiektu zorientowanego na histogram) w celu wykrycia obiektów na obrazie. Następnie te ramki zostaną porównane z wcześniej wytrenowanym modelem OpenCV do wykrywania ludzi. Liczenie osób będzie wyświetlane na kanale ThingSpeak, który można monitorować z dowolnego miejsca na świecie.
Wymagane składniki
Sprzęt komputerowy
- Raspberry Pi 3 (dowolna wersja)
- Kamera Pi
Oprogramowanie i usługi online
- ThingSpeak
- Python3.0
- OpenCV3.0
Instalowanie OpenCV w Raspberry Pi
Tutaj biblioteka OpenCV zostanie użyta do wykrycia tłumu. Aby zainstalować OpenCV, najpierw zaktualizuj Raspberry Pi.
sudo apt-get update
Następnie zainstaluj wymagane zależności do zainstalowania OpenCV na swoim 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
Następnie zainstaluj OpenCV w Raspberry Pi za pomocą poniższego polecenia.
pip3 zainstaluj opencv-contrib-python == 4.1.0.25
Wcześniej używaliśmy OpenCV z Raspberry pi i stworzyliśmy wiele tutoriali na jego temat.
- Instalowanie OpenCV na Raspberry Pi przy użyciu CMake
- Rozpoznawanie twarzy w czasie rzeczywistym za pomocą Raspberry Pi i OpenCV
- Rozpoznawanie tablic rejestracyjnych przy użyciu Raspberry Pi i OpenCV
Stworzyliśmy również serię samouczków OpenCV, zaczynając od poziomu początkującego.
Instalowanie innych wymaganych pakietów
Przed zaprogramowaniem Raspberry Pi do liczenia tłumu zainstalujmy pozostałe wymagane pakiety.
Instalowanie imutils : imutils jest używany do wykonywania kilku niezbędnych funkcji przetwarzania obrazu, takich jak tłumaczenie, obrót, zmiana rozmiaru, tworzenie szkieletu i wyświetlanie obrazów Matplotlib w OpenCV. Więc zainstaluj imutils za pomocą poniższego polecenia:
pip3 zainstaluj imutils
matplotlib : Następnie zainstalujbibliotekę matplotlib. Matplotlib to obszerna biblioteka do tworzenia statycznych, animowanych i interaktywnych wizualizacji w Pythonie.
pip3 zainstaluj matplotlib
Konfiguracja ThingSpeak dla liczenia osób
ThingSpeak to bardzo popularna platforma IoT, a korzystając z platformy ThingSpeak, możemy monitorować nasze dane przez Internet z dowolnego miejsca. Służy również do sterowania systemem przez Internet, korzystając z kanałów i stron internetowych udostępnianych przez ThingSpeak. Wcześniej używaliśmy ThingSpeak do tworzenia wielu projektów opartych na IoT.
Aby najpierw stworzyć kanał na ThingSpeak, najpierw zarejestruj się na ThingSpeak. Jeśli masz już konto na ThingSpeak, zaloguj się za pomocą swojego identyfikatora i hasła.
Kliknij Zarejestruj się i wprowadź swoje dane.
Następnie zweryfikuj swój identyfikator e-mail i kliknij Kontynuuj.
Teraz, po zalogowaniu, utwórz nowy kanał, klikając przycisk „ Nowy kanał ”.
Po kliknięciu „ Nowy kanał” wprowadź nazwę i opis danych, które chcesz przesłać na ten kanał. Tutaj utworzyliśmy jedno pole o nazwie People . W zależności od wymagań można utworzyć wiele pól.
Następnie kliknij przycisk Zapisz kanał, aby zapisać szczegóły.
Aby wysłać dane do ThingSpeak, wprowadź klucz API i identyfikator kanału w skrypcie Python, więc skopiuj klucz API i identyfikator kanału.
Konfiguracja sprzętu
Tutaj potrzebujemy tylko kamery Raspberry Pi i Pi do tego projektu liczenia ludzi OpenCV i wystarczy podłączyć złącze taśmy kamery do gniazda kamery podanego w Raspberry pi
Kamera Pi może być używana do tworzenia różnych interesujących projektów, takich jak kamera monitorująca Raspberry Pi, system monitorowania gości, system bezpieczeństwa w domu itp.
Objaśnienie programu Python dla licznika osób
Kompletny kod Pythona dla tego projektu liczącego tłumy OpenCV jest podany na końcu strony. Tutaj wyjaśniamy ważne sekcje kodu, aby uzyskać lepsze wyjaśnienie.
Dlatego na początku kodu zaimportuj wszystkie wymagane biblioteki, które będą używane w tym projekcie.
import cv2 import imutils z imutils.object_detection import non_max_suppression import numpy as np żądania importu import time import base64 z matplotlib import pyplot as plt z urllib.request import urlopen
Po zaimportowaniu bibliotek wprowadź identyfikator kanału ThingSpeak i napisz skopiowany wcześniej klucz API.
channel_id = 812060 # WSTAW TUTAJ ID KANAŁU WRITE_API = 'X5AQ3EGIKMBYW31H' # WPISZ SWÓJ KLUCZ DO PISANIA BASE_URL = "https://api.thingspeak.com/update?api_key= {}". format (WRITE_API)
Teraz zainicjuj HOG (deskryptor obiektu zorientowanego na histogram). HOG jest jedną z najpopularniejszych technik wykrywania obiektów i był używany w kilku zastosowaniach. cv2.HOGDescriptor_getDefaultPeopleDetector () używane do wywoływania wstępnie wytrenowanego modelu OpenCV do wykrywania ludzi. Wcześniej szczegółowo wyjaśniliśmy HOG w poprzednim samouczku dotyczącym OpenCV.
hog = cv2.HOGDescriptor () hog.setSVMDetector (cv2.HOGDescriptor_getDefaultPeopleDetector ())
Wewnątrz detektora () Pi odbiera obraz RGB podzielony na trzy kanały kolorów. Następnie zmienia rozmiar obrazu za pomocą imutils . Następnie wywołuje metodę detectionMultiScale () w celu przeanalizowania obrazu w celu ustalenia, czy osoba istnieje, korzystając z wyniku klasyfikacji z modelu SVM.
detektor def (obraz): image = imutils.resize (image, width = min (400, image.shape)) clone = image.copy () rects, weights = hog.detectMultiScale (image, winStride = (4, 4), padding = (8, 8), scale = 1,05)
Czasami pola przechwytywania nakładają się i generują fałszywe alarmy lub błędy wykrywania, więc poniższy kod stosuje supresję non-max z imutilów do początkowych nakładających się pól.
for (x, y, w, h) w prostokątach: cv2.rectangle (image, (x, y), (x + w, y + h), (0, 0, 255), 2) rects = np. tablica (for (x, y, w, h) in rects]) result = non_max_suppression (rects, probs = None, overlapThresh = 0,7) return result
Wewnątrz funkcji record () pobiera obraz bezpośrednio z kamery Pi za pomocą metody VideoCapture () z OpenCV, zmienia jego rozmiar za pomocą imultis i wysyła wyniki do 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 (wynik1)
Testowanie
Przed uruchomieniem skryptu w języku Python, najpierw sprawdź, czy kamera PI działa, czy nie. Po sprawdzeniu kamery uruchom skrypt w języku Python, wydając następujące polecenie:
Następnie pojawi się okno z Twoim kanałem wideo. Pi weźmie pierwszą klatkę i przetworzy ją za pomocą OpenCV, aby wykryć liczbę osób. Jeśli wykryje ludzi, znajdziesz wokół niego następujące pudełko:
Teraz sprawdź swój kanał ThingSpeak, gdzie możesz monitorować liczebność tłumu z dowolnego miejsca na świecie.
W ten sposób możesz zliczać tłumy OpenCV za pomocą Raspberry Pi. Działający film i kod znajduje się na końcu strony.