Jest to niedrogi dron typu quadcopter wykorzystujący ramę F450 i silniki bezszczotkowe 1000 kV. Jest on wyposażony w płytkę Raspberry Pi 4 (Rpi 4) do niezależnego przetwarzania obrazów bez wpływu na kontroler lotu.
Autorski prototyp został przedstawiony na fotografii powyżej. Obraz na żywo rejestrowany przez kamerę zamontowaną na dronie podczas testów pokazano na fotografii 1.
Do wykonania drona potrzebne będą elementy wymienione w tabeli poniżej.
Szczegóły dotyczące budowy/montażu drona, śmigieł, obrotów silnika, nadajnika i odbiornika można znaleźć w artykule "Własny dron quadcopter".
Rozpoznawanie twarzy
Na początku wypróbowano moduł obliczeniowy RPi i płyty BalenaFin posiadające 1 GB RAM i 16 GB pamięci masowej, wraz z baterią LiPo. Okazało się jednak, że jest to trochę nieporęczne dla drona. Tak więc, Raspberry Pi 4 został użyty, ponieważ może być zasilany z jednego z czterech ESC użytych w dronie, co okazało się lepszym wyborem.
Do rozpoznawania twarzy należy zamontować RPi 4 oraz kamerę na ramie F450 drona (patrz fotografia 2). Powinny być one przymocowane za pomocą taśmy izolacyjnej, opasek zaciskowych lub spięte linką samoblokującą. Ponieważ płytka kontrolera lotu używa tylko pierwszego pinu ESC do zasilania, pozostałe trzy piny ESC są wolne. Użyj więc jednego z wolnych ESC do zasilania płytki RPi 4. Przetnij dodatni i ujemny przewód jednego z modułów ESC, które są podłączone do kontrolera lotu, a następnie podłącz je do RPi.
Następnie zamontuj moduł kamery RPi na dronie, jak pokazano na fotografii 3.
Kod (dronecode1.py) służący do rozpoznawania osoby (znanej lub nieznanej) znajdującej się przed dronem jest napisany w skrypcie Pythona. W kodzie tym musimy zaimportować trzy biblioteki/moduły: face_recognition, cv2, oraz numpy. Są one zdefiniowane w kodzie jak pokazano na rysunku 4. Musimy utworzyć różne tablice do rozpoznawania twarzy i odpowiadających im imion osób. Należy pamiętać o wpisaniu nazwy pliku z obrazem danej osoby, aby poprawnie rozpoznać jej twarz (patrz rysunek 5). Obraz na żywo osoby (z imieniem) przechwytywanej przez kamerę z drona jest pokazany na rysunku 6.
Alarm dźwiękowy
W następnej części kodu program porównuje twarze przechwycone przez kamerę z tablicą znanych twarzy w bazie danych. Jeśli twarz pasuje, kod uruchamia funkcję syntezatora 'espeak.synth()', aby wywołać imię osoby przez głośnik podłączony do RPi. Może również zawierać komunikat typu "Witam, proszę się nie ruszać", na wypadek gdyby z jego pomocą miał zostać odnaleziony przestępca lub podejrzany. Kod z funkcją 'espeak.synth()' pokazany jest na rysunku 7.
Do RPi można podłączyć cyfrowy wzmacniacz mocy audio PAM8403 oraz głośniki do nadawania komunikatów. Schemat połączenia wzmacniacza audio z pinami GPIO, 5 V i GND RPi 4 pokazano na rysunku 8.
Do wykrywania tłumu
Dron może być wykorzystywany do akcji poszukiwawczych i ratowniczych, szczególnie podczas powodzi lub trzęsienia ziemi. Można go również wykorzystać do monitorowania tłumu podczas publicznych wieców i zgromadzeń. W tym celu musimy zainstalować w Raspberry Pi kilka bibliotek, w tym TensorFlow.
Pierwszym krokiem jest aktualizacja i uaktualnienie systemu operacyjnego RPi 4 oraz instalacja wymaganych bibliotek z poziomu terminala poprzez wpisanie komend podanych poniżej:
sudo apt-get update
sudo apt-get upgrade
sudo nano /etc/dphys-swapfile
Następnie zmień linię CONF_SWAPSIZE=100 na CONF_SWAPSIZE=1024
sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start
sudo pip3 install opencv
sudo pip3 install numpy
wget https://bootstrap.pypa.io/get-pip.py
pip3 install dlib
pip3 install tensorflow
Następnie można przystąpić do klonowania modułów, przykładów i plików TensorFlow za pomocą poniższego polecenia:
git clone https://github.com/tensorflow/
tensorflow.git
Po udanym klonowaniu przejdź do katalogu → folder research → utwórz plik Pythona dronecrowd.py. Otwórz IDE Python3 i zaimportuj następujące moduły w kodzie:
- os
- cv2
- numpy
- tensorflow
- argparse
- sys
- gpiozero
- time
W przypadku wykrywania tłumu i monitorowania ruchu ulicznego, musimy dokonać pewnych ustawień przed rozpoczęciem kodowania. Po pierwsze, musimy stworzyć specjalny plik .pbtxt zawierający nazwy osób/obiektów, które mają być wykrywane. Ponieważ nasz dron ma wykrywać ludzi, więc utwórz plik crowd.pbtxt w folderze Tensorflow → models → research → object detection → data. W pliku crowd.pbtxt należy uwzględnić display_name jako 'people', jak pokazano na rysunku 9.
W pierwszej części kodu (dronecrowd.py) inicjalizowane są wymagane biblioteki (patrz rysunek 10). Wśród nich znajduje się moduł PiCamera, który jest wykorzystywany do pobierania obrazu na żywo i przetwarzania go klatka po klatce w celu wykrycia tłumu podczas publicznych wieców lub zgromadzeń.
Następnie należy zdefiniować w kodzie nazwę pliku crowd.pbtxt, jak pokazano na rysunku 11. Następnie utwórz podłańcuch, który sprawdza liczbę wykrytych osób. Gdy program jest uruchomiony, wywołuje moduły TensorFlow do wykrywania i monitorowania. Oszacuje on liczbę osób i wyświetli na ekranie komputera obrazy osób obecnych w danym obszarze.
Wykrywanie ruchu ulicznego
Ten sam dron może być wykorzystany do monitorowania ruchu samochodowego na ulicach miasta (patrz rysunek 12). W tym celu należy utworzyć plik traffic.pbtxt w folderze projektu i dodać do niego listę obiektów, czyli display_names, takich jak samochód, autobus, ludzie, szyld, ciężarówka itp.
Kiedy program dronetraffic.py jest uruchamiany, najpierw sprawdza plik traffic.pbtxt, aby rozpocząć wykrywanie liczby samochodów, autobusów, rowerów itp. na drodze. Program zapisuje obrazy samochodów i inne szczegóły w pliku tekstowym w folderze. Jeśli wykryje zbyt wiele pojazdów lub ludzi na drodze/ulicy, zaalarmuje władze poprzez wyświetlenie komunikatów takich jak "Duży ruch" w przypadku pojazdów lub "Zbyt wiele osób" w przypadku osób dojeżdżających do pracy na drodze.
Projekt może być rozszerzony do wykorzystania w badaniach lasów i wykrywaniu zwierząt przy użyciu tego samego kodu, ale z innym plikiem .pbtxt. W przypadku wykrywania zwierząt należy utworzyć plik .pbtxt z listą zwierząt, które mają być wykryte, a następnie zmienić podłańcuchy w kodzie, aby wyświetlić wyniki na ekranie komputera.
Testowanie
Należy uruchomić każdy kod (dronecode1.py, dronecrowd.py i dronetraffic.py) osobno w różnych momentach dla różnych zastosowań. Na przykład, gdy droncode1.py jest gotowy i uruchomiony, zamontuj go na dronie. Na ekranie komputera można zobaczyć obrazy na żywo przechwytywane przez kamerę. Możesz wysłać drona z kamerą do wyznaczonego obszaru w celu wykrycia i monitorowania. Odległość, na jaką może polecieć dron, zależy od zasięgu sieci Wi-Fi.