Spisu treści:

Wykrywanie zombie Smart Security Owl (głębokie uczenie): 10 kroków (ze zdjęciami)
Wykrywanie zombie Smart Security Owl (głębokie uczenie): 10 kroków (ze zdjęciami)

Wideo: Wykrywanie zombie Smart Security Owl (głębokie uczenie): 10 kroków (ze zdjęciami)

Wideo: Wykrywanie zombie Smart Security Owl (głębokie uczenie): 10 kroków (ze zdjęciami)
Wideo: TYGODNIOWE DZIWNE WIADOMOŚCI - UFO - Paranormalne - Kosmos - Dziwna Nauka 2024, Listopad
Anonim

Witam wszystkich, witamy w T3chFlicks! W tym samouczku na Halloween pokażemy, w jaki sposób wprowadziliśmy niezwykle upiorny akcent do przyziemnego klasyka gospodarstwa domowego: kamery bezpieczeństwa.

Jak?! Stworzyliśmy sowę noktowizyjną, która wykorzystuje przetwarzanie obrazu do śledzenia ludzi. Och, i to huczy, tak jak w rzeczywistości!

Jesteśmy bardzo podekscytowani tym projektem i czekaliśmy na to odkąd pojawił się nowy Raspberry Pi 4. Ma 4 GB pamięci RAM, co otwiera drzwi do wielu naprawdę ekscytujących możliwości, w tym przetwarzania obrazu z modelami głębokiego uczenia w czasie rzeczywistym.

Jeśli chcesz mieć oko na zbliżające się zombie w Halloween lub po prostu zaglądać do ogrodu przez cały rok, ten jest dla Ciebie. Bezpieczeństwo nie musi być nudne, aby było skuteczne!

Kieszonkowe dzieci

Do tej kompilacji będziesz potrzebować:

  • Raspberry Pi 4 (4 GB pamięci RAM) Amazon
  • Kamera noktowizyjna Amazon
  • Mikroserwo Amazon
  • Fałszywa sowa Amazonka
  • Klej Amazon
  • Pomaluj Amazonkę
  • Śruby Amazona
  • Głośnik USB Amazon
  • Duży (5v+) przenośny zasilacz Amazon
  • Drukarka 3D Amazon

Krok 1: Krok 1: Dekapituj

Krok 1: Dekapituj
Krok 1: Dekapituj
Krok 1: Dekapituj
Krok 1: Dekapituj
Krok 1: Dekapituj
Krok 1: Dekapituj

a. Oderwij głowę od sowy (czasem po prostu musisz być brutalny), ciągnąc mocno za głowę w miejscu, w którym przyczepia się do sprężyny.

b. Głowa sowy łączy się z ciałem za pomocą cylindra, który znajduje się na szczycie dużej sprężyny. Wyjmij ten cylinder, wyjmując śrubę.

C. Zdjęty przed chwilą cylinder składa się z dwóch części, plastikowego kubka i umieszczonego w nim łożyska. Wyjmij łożysko z cylindra za pomocą śrubokręta (lub podobnego narzędzia).

D. Za pomocą śruby łączącej cylinder ze sprężyną przymocuj serwo do cylindra.

mi. Zdejmij sprężynę, odkręcając trzy śruby mocujące ją do korpusu.

F. Zrób otwór w górnej części ciała sowy, który jest wystarczająco duży, aby zmieścić kilka przewodów i kabel kamery. Do tego celu wykorzystaliśmy nieelegancką kombinację wiertarki i śrubokręta.

Krok 2: Krok 2: Dodaj Smart

Krok 2: Dodaj inteligentne
Krok 2: Dodaj inteligentne
Krok 2: Dodaj inteligentne
Krok 2: Dodaj inteligentne
Krok 2: Dodaj inteligentne
Krok 2: Dodaj inteligentne

a. Wydrukuj 3D obudowę aparatu i pomaluj ją tak, aby pasowała do sowy - użyliśmy tanich farb akrylowych. Malowanie nie jest istotnym krokiem, ale radykalnie poprawia ogólny wygląd!

b. Z głową sowy do góry nogami, przykręć górną część obudowy aparatu do wnętrza jej głowy, gdzie wystaje dziób.

C. Włóż kamerę do etui i podłącz kabel kamery.

D. Przyklej serwo do górnego panelu sprężyny.

mi. Podłącz długie przewody do pinów serwa (5V, Gnd, sygnał)

F. Przeprowadź kabel kamery i przewody serwomechanizmu przez sprężynę i przez otwór zrobiony w górnej części korpusu, aby znalazły się wewnątrz wydrążonego korpusu sowy.

Krok 3: Krok 3: Napełnij ją

Krok 3: Napełnij ją
Krok 3: Napełnij ją
Krok 3: Napełnij ją
Krok 3: Napełnij ją
Krok 3: Napełnij ją
Krok 3: Napełnij ją
Krok 3: Napełnij ją
Krok 3: Napełnij ją

a. Usuń zatyczkę z dna sowy i zwiększ rozmiar tego otworu, przecinając plastik. Kontynuuj zwiększanie rozmiaru, aż Raspberry Pi i głośnik zmieszczą się w korpusie sowy.

b. Gdy otwór będzie wystarczająco duży, aby wszystkie elementy zmieściły się w środku, wyciągnij kabel kamery, który poprowadziłeś przez górną część sowy, z podstawy i podłącz go do Raspberry Pi.

C. Podobnie przeciągnij przewody serwa i podłącz je do Raspberry Pi:

  • +5V na serwo => +5V na Pi
  • Serwo uziemienia => uziemienie Pi
  • Serwo sygnałowe => pin 12 Pi

D. Podłącz głośnik USB do Pi.

mi. Włóż kartę SD do Pi.

F. Power Pi za pomocą przenośnego zasilacza.

g. Włóż Pi, zasilacz i głośnik do sowy przez otwór w podstawie.

Krok 4: Krok 4: Skonfiguruj Pi

Krok 4: Skonfiguruj Pi
Krok 4: Skonfiguruj Pi

CAŁY KOD ZNAJDZIESZ NA https://github.com/sk-t3ch/cctv-owl !

a. Pobierz Raspian i prześlij go na kartę SD za pomocą Balena Etcher.

b. Aby uzyskać zdalny dostęp do swojego pi

  • Dodaj plik o nazwie ssh do swojej rozruchowej karty SD
  • Dodaj plik o nazwie wpa_supplicant.conf i umieść swoje dane uwierzytelniające Wi-Fi w

    ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1

    network={ ssid="Moje SSID" psk="MojeHasło" }

C. Włóż kartę SD do pi i spróbuj uzyskać dostęp przez ssh.

Krok 5: Krok 5: Poruszanie głową

Krok 5: Poruszanie głową
Krok 5: Poruszanie głową

Samouczek kodu do poruszania głową (sterowanie serwomechanizmem za pomocą raspberry pi)

Aby kontrolować serwo działające na Pi, stworzymy skrypt kontrolujący piny GPIO, do których serwo jest podłączone.

a. Podłącz serwo do Pi:

  • +5V na serwo => +5V na Pi
  • Serwo GND => GND na Pi
  • Serwo sygnałowe => pin 12 na Pi

b. Musisz najpierw skonfigurować piny gpio, aby używać PWM na pinie sygnałowym serwomechanizmu.

C. Następnie wystarczy wybrać cykl pracy (wyjaśniony tutaj) pinu sygnałowego, aby przesunąć serwo z 90 stopni przy cyklu pracy 7,5 do 0 stopni, gdy cykl pracy wynosi 2,5 i do 180 stopni przy cyklu pracy wynoszącym 12,5

importuj RPi. GPIO jako GPIO

czas importu GPIO.setmode(GPIO. BOARD) GPIO.setwarnings(False) GPIO.setup(12, GPIO. OUT) p = GPIO. PWM(12, 50) p.start(7.5) try: while True: p. ChangeDutyCycle (7.5) # 90 stopni czasu.snu(1) p. ChangeDutyCycle(2.5) # 0 stopni czasu.snu(1) p. ChangeDutyCycle(12,5) # 180 stopni czasu.snu(1) oprócz KeyboardInterrupt: p.stop() GPIO.oczyszczanie()

Krok 6: Krok 6: Rozgrzanie

Krok 6: Rozgrzej się
Krok 6: Rozgrzej się
Krok 6: Rozgrzej się
Krok 6: Rozgrzej się

Samouczek kodu do robienia sowy huk (odtwarzanie dźwięku za pomocą raspberry pi)

a. Podłącz głośnik USB.

b. Pobierz dźwięk - wybraliśmy upiorny huk.

C. Odtwórz dźwięk, uruchamiając to polecenie: omxplayer -o alsa:hw:1, 0 owl_sound.mp3

[D. Jeśli to nie zadziała, sprawdź, jakiego wyjścia używa Twoje Pi i przy jakiej głośności, za pomocą polecenia alsamixer - zostaniesz powitany ekranem miksera, na którym możesz zmienić głośność i wybrać urządzenie multimedialne. Aby zwiększyć głośność dźwięku, wykonaj polecenie takie jak omxplayer -o alsa:hw:1, 0 owl_sound.mp3 --vol 500 Aby odtworzyć ten dźwięk za pomocą Pythona, spójrz na nasz skrypt testowy.]

import podprocesu

command = "omxplayer -o alsa:hw:1, 0 owl_sound.mp3 --vol 500" player = subprocess. Popen(command.split(' '), stdin=subprocess. PIPE, stdout=subprocess. PIPE, stderr=subprocess. RURA)

Krok 7: Krok 7: Przesyłaj strumieniowo wideo z Pi

Krok 7: Przesyłaj wideo z Pi
Krok 7: Przesyłaj wideo z Pi
Krok 7: Przesyłaj wideo z Pi
Krok 7: Przesyłaj wideo z Pi

Samouczek kodu tworzenia strumienia kamery raspberry pi

a. Uruchom python app.py i zobacz w swojej sieci lokalnej pod adresem

b. Ten kod został zaczerpnięty i nieco zaadaptowany od Miguela Grinberga https://blog.miguelgrinberg.com/post/flask-video-… ładnie wyjaśnia, jak to się robi, a jego tutoriale są świetne - deffo sprawdź go! Podstawowa koncepcja polega na tym, że używamy wątków i generatorów, aby poprawić prędkość przesyłania strumieniowego.

Krok 8: Krok 8: Wykrywanie ciała

Krok 8: Wykrywanie ciała
Krok 8: Wykrywanie ciała

Kod do wykrywania ciała (ImageNetSSD w strumieniu wideo z raspberry pi)

a. Ponieważ używamy Raspberry Pi 4, pomyśleliśmy, że najlepiej będzie wypróbować na nim kilka modeli głębokiego uczenia zamiast podstawowej metody HaarCascade, do której do tej pory byliśmy ograniczeni.

b. Przyjrzeliśmy się niektórym wstępnie wytrenowanym modelom, takim jak YOLOv3, który wygląda super fajnie. Małe ciężarki YOLOv3, które byłyby idealne dla Pi, ale nie mogliśmy go uruchomić:(C. Zamiast tego zdecydowaliśmy się na model MobileSSD, który możemy uruchomić za pomocą modułu openCVs DNN (głęboka sieć neuronowa), jak dowiedzieliśmy się z tego kodu: https://heartbeat.fritz.ai/real-time-object-detection-on-raspberry -pi-using-opencv-dnn-98827255fa60 i od bohatera tutoriali do przetwarzania obrazu, Adriana Rosebrocka: https://www.pyimagesearch.com/2017/09/11/object-detection-with-deep-learning-and- otwórzcv/

D. Jednak ponieważ staramy się przesyłać strumieniowo tę zawartość i uruchamiać modele w każdej klatce, powoduje to opóźnione, pofragmentowane wideo. Ponownie nauczyliśmy się od Adriana Rosebrocka https://www.pyimagesearch.com/2017/10/16/raspberry-pi-deep-learning-object-detection-with-opencv/ i wykorzystaliśmy moduł wieloprocesorowy Pythona do umieszczania naszych obrazów w kolejkach gdzie można je przetwarzać bez tak silnego blokowania strumienia kamery.

mi. Spróbuj samodzielnie uruchomić kod:)

Krok 9: Krok 9: Wysyłanie powiadomień Zombie

Krok 9: Wysyłanie powiadomień o zombie
Krok 9: Wysyłanie powiadomień o zombie
Krok 9: Wysyłanie powiadomień o zombie
Krok 9: Wysyłanie powiadomień o zombie

Kod do wysłania powiadomienia (python na telefon)

a. Zdecydowaliśmy się skorzystać z usługi powiadomień

b. Możesz założyć darmowe konto i pobrać aplikację i naprawdę szybko rozpocząć tworzenie powiadomień mobilnych. Powiadomienia stworzyliśmy za pomocą takiego skryptu Pythona.

żądania importu

payload = { "app_key": "APP_KEY", "app_secret": "APP_SECRET", "target_type": "app", "content": "Sowa wykryła zombie." } r = request.post("https://api.pushed.co/1/push", data=payload)

To bardzo proste i możesz dostosować swoją nazwę powiadomienia!

Krok 10: Co za huk

Co za huk!
Co za huk!

Mamy nadzieję, że podobał Ci się nasz projekt Smart Security Owl! To była świetna zabawa i czuję się o wiele bezpieczniej, wiedząc, że mojego domu strzeże nasza wierna sowa.

Jeśli uważasz, że byłby to wspaniały Halloweenowy dodatek do Twojego inteligentnego domu, zagłosuj na nas w konkursie Instructables Halloween i jak zwykle pamiętaj, aby polubić, skomentować i zasubskrybować!

Zapisz się na naszą listę mailingową!

Zalecana: