Spisu treści:

Prawdziwa działająca różdżka Harry'ego Pottera przy użyciu wizji komputerowej: 8 kroków (ze zdjęciami)
Prawdziwa działająca różdżka Harry'ego Pottera przy użyciu wizji komputerowej: 8 kroków (ze zdjęciami)

Wideo: Prawdziwa działająca różdżka Harry'ego Pottera przy użyciu wizji komputerowej: 8 kroków (ze zdjęciami)

Wideo: Prawdziwa działająca różdżka Harry'ego Pottera przy użyciu wizji komputerowej: 8 kroków (ze zdjęciami)
Wideo: HARRY POTTER ( CAŁA SAGA ) Szczery Skrót Retrospektywa #harrypotter 2024, Lipiec
Anonim
Image
Image
Prawdziwa działająca różdżka Harry'ego Pottera przy użyciu wizji komputerowej
Prawdziwa działająca różdżka Harry'ego Pottera przy użyciu wizji komputerowej
Prawdziwa działająca różdżka Harry'ego Pottera przy użyciu wizji komputerowej
Prawdziwa działająca różdżka Harry'ego Pottera przy użyciu wizji komputerowej
Prawdziwa działająca różdżka Harry'ego Pottera przy użyciu wizji komputerowej
Prawdziwa działająca różdżka Harry'ego Pottera przy użyciu wizji komputerowej

„Każda wystarczająco zaawansowana technologia jest nie do odróżnienia od magii” – Arthur C. Clarke

Kilka miesięcy temu mój brat odwiedził Japonię i miał prawdziwe czarodziejskie doświadczenie w czarodziejskim świecie Harry'ego Pottera w Universal Studios, możliwe dzięki technologii Computer Vision.

W Czarodziejskim Świecie Harry'ego Pottera w Universal Studios turyści mogą wykonywać „prawdziwą magię” w określonych miejscach (gdzie zainstalowany jest system motion capture) za pomocą specjalnie wykonanych różdżek z odblaskowymi koralikami na czubku. Różdżki można kupić w prawdziwym Sklepie Ollivandera, które są dokładnie takie same jak w filmach o Harrym Potterze, ale pamiętaj: "To różdżka wybiera czarodzieja":P

W tych określonych miejscach, jeśli osoba wykona określony gest różdżką, system przechwytywania ruchu rozpozna gest, a wszystkie gesty odpowiadają określonemu zaklęciu, które powoduje określone czynności w okolicy, takie jak włączanie fontanny itp.

Tak więc w tym Instruktażu pokażę, jak można stworzyć tani i skuteczny system przechwytywania ruchu w domu, aby wykonywać „prawdziwą magię”, otwierając pudełko jednym ruchem różdżki:D za pomocą zwykłej kamery noktowizyjnej, trochę elektroniki, i trochę kodu Pythona przy użyciu biblioteki OpenCV Computer Vision i uczenia maszynowego !!!

Krok 1: Podstawowa idea i wymagane części

Podstawowa idea i wymagane części
Podstawowa idea i wymagane części
Podstawowa idea i wymagane części
Podstawowa idea i wymagane części
Podstawowa idea i wymagane części
Podstawowa idea i wymagane części
Podstawowa idea i wymagane części
Podstawowa idea i wymagane części

Różdżki kupione w Czarodziejskim Świecie Harry'ego Pottera w Universal Studios mają na końcu odblaskowy koralik. Te odblaskowe kulki odbijają dużą ilość światła podczerwonego, które jest emitowane przez kamerę w systemie przechwytywania ruchu. Tak więc to, co my, ludzie postrzegamy jako niezbyt charakterystyczny koniec różdżki poruszającej się w powietrzu, system przechwytywania ruchu postrzega jako jasną plamę, którą można łatwo wyizolować w strumieniu wideo i śledzić, aby rozpoznać wzór narysowany przez osobę i wykonać wymagane działanie. Całe to przetwarzanie odbywa się w czasie rzeczywistym i wykorzystuje widzenie komputerowe i uczenie maszynowe.

Prosta kamera Night Vision może być używana jako nasza kamera do przechwytywania ruchu, ponieważ emituje również światło podczerwone, które nie jest widoczne dla ludzi, ale można je wyraźnie zobaczyć za pomocą kamery bez filtra podczerwieni. Tak więc strumień wideo z kamery jest przesyłany do Raspberry Pi, który ma program Pythona z OpenCV, który służy do wykrywania, izolowania i śledzenia końcówki różdżki. Następnie używamy algorytmu uczenia maszynowego SVM (Simple Vector Machine), aby rozpoznać narysowany wzór i odpowiednio sterować GPIO raspberry pi, aby wykonać pewne czynności.

Wymagane materiały:

1) Raspberry Pi 3 model B i wymagane akcesoria, takie jak klawiatura i mysz;

2) Moduł kamery Raspberry Pi NoIR (bez podczerwieni)

3) Różdżka Harry'ego Pottera z retroreflektorem na końcu: nie martw się, jeśli go nie masz. Można użyć wszystkiego, co ma retroreflektor. Możesz więc użyć dowolnego sztyftu podobnego do różdżki i nałożyć taśmę odblaskową, farbę lub koraliki na końcówkę i powinno działać tak, jak pokazano na filmie Williama Osmana: Obejrzyj wideo

4) 10 diod LED na podczerwień

5) Dowolna drukarka 3D i filament PLA

6) Adapter ścienny 12 V - 1 A i gniazdo prądu stałego

7) Serwomotor

8) Stare pudełko i szprycha z koła roweru

9) Pistolet do klejenia na gorąco

10) Wydruki niektórych logo i obrazów związanych z Harrym Potterem na błyszczącym arkuszu papieru

11) Zielone i żółte aksamitne prześcieradła.

UWAGA: Próbowałem również użyć starej zwykłej kamery internetowej do widzenia w nocy, usuwając filtr podczerwieni, ale skończyło się na uszkodzeniu/przemieszczeniu obiektywu, co znacznie wpłynęło na jakość wideo i nie mogłem z niego korzystać. Ale jeśli chcesz spróbować, możesz przejść przez ten wspaniały instruktażowy Kliknij tutaj

Krok 2: Zainstaluj moduł OpenCV

Teraz nadszedł czas na pierwszy i prawdopodobnie najdłuższy etap całego projektu: zainstalowanie i zbudowanie modułu OpenCV w Twoim Raspberry Pi.

Instalacja zależności dla modułu OpenCV nie zajmuje dużo czasu, ale proces budowania może zająć od 2 do 3 godzin!! Więc zapnij pasy!!:P

Istnieje wiele samouczków online, z których możesz skorzystać, aby zainstalować moduł OpenCV 4.1.0. Oto link do tego, który śledziłem: Kliknij tutaj

UWAGA: Zdecydowanie polecam instalację modułu OpenCV w środowisku wirtualnym, jak pokazano w samouczku, ponieważ zapobiegnie to różnego rodzaju konfliktom, które mogą wystąpić z powodu instalowania zależności różnych modułów lub podczas pracy z różnymi wersjami Pythona.

Krok 3: Drukowanie uchwytu kamery

Drukowanie uchwytu kamery
Drukowanie uchwytu kamery
Drukowanie uchwytu kamery
Drukowanie uchwytu kamery
Drukowanie uchwytu kamery
Drukowanie uchwytu kamery

Pikamera NoIR nie ma filtra podczerwieni, dzięki czemu może być używana jako kamera noktowizyjna, ale nadal nie ma źródła światła podczerwonego. Wszystkie kamery noktowizyjne mają własne źródło światła podczerwonego, które emituje w ciemności niewidoczne gołym okiem promienie podczerwone, które po odbiciu od dowolnego obiektu mogą być zauważone przez kamerę bez filtra podczerwieni.

Tak więc w zasadzie potrzebujemy źródła światła podczerwonego i czegoś do zamontowania kamery. W tym celu zaprojektowałem prosty model 3D obiektu, na którym mogliśmy zamontować kamerę, którą otoczymy 10 diodami IR w okręgu. Model został stworzony w programie SketchUp i wydrukowany z czarnego PLA w około 40 minut.

Krok 4: Kończenie montażu kamery

Wykończenie mocowania kamery
Wykończenie mocowania kamery
Wykończenie mocowania kamery
Wykończenie mocowania kamery
Wykończenie mocowania kamery
Wykończenie mocowania kamery

Po wydrukowaniu modelu najpierw przeszlifowałem go papierem ściernym o ziarnistości 80, a następnie zacząłem umieszczać diody IR w ich otworach zgodnie z powyższym schematem.

Zabezpieczyłem diody na ich miejscu odrobiną gorącego kleju, a następnie połączyłem ze sobą dodatnie i ujemne wyprowadzenia dwóch kolejnych diod, a następnie przylutowałem je, aby utworzyć szeregowe połączenie diod.

Dodatni przewód jednej diody led i ujemny przewód diody obok niej na dole pozostawiono nielutowane w celu połączenia dodatniego i ujemnego końca zasilacza ściennego 12V.

Krok 5: Wyszkolony model uczenia maszynowego

Aby rozpoznać literę narysowaną przez osobę, wytrenowałem model uczenia maszynowego oparty na algorytmie Support Vector Machine (SVM) przy użyciu zestawu danych z odręcznymi alfabetami angielskimi, które znalazłem tutaj. SVM to bardzo wydajne algorytmy uczenia maszynowego, które mogą zapewnić wysoką dokładność, około 99,2% w tym przypadku! Przeczytaj więcej o maszynach SVM

Zestaw danych ma postać pliku.csv, który zawiera 785 kolumn i ponad 300 000 wierszy, gdzie każdy wiersz reprezentuje obraz 28 x 28, a każda kolumna w tym wierszu zawiera wartość tego piksela dla tego obrazu z dodatkową kolumną w początek, który zawiera etykietę, liczbę od 0 do 25, z których każdy odpowiada angielskiej literze. Za pomocą prostego kodu Pythona podzieliłem dane, aby uzyskać wszystkie obrazy tylko dla 2 liter (A i C), które chciałem, i wytrenowałem dla nich model.

Załączyłem wytrenowany model (alphabet_classifier.pkl), a także kod szkoleniowy, możesz go przejrzeć lub wprowadzić zmiany w celu trenowania modelu różnymi literami lub wypróbować różne algorytmy. Po uruchomieniu programu automatycznie zapisuje przeszkolony model w tym samym katalogu, w którym zapisany jest Twój kod.

Krok 6: Kod, który sprawia, że wszystko się dzieje

Kod, który sprawia, że wszystko się dzieje!
Kod, który sprawia, że wszystko się dzieje!

Po utworzeniu wytrenowanego modelu, ostatnim krokiem jest napisanie programu w Pythonie dla naszego Raspberry Pi, który pozwala nam wykonać następujące czynności:

  • Uzyskaj dostęp do wideo z Picamery w czasie rzeczywistym
  • Wykryj i śledź białe plamy (w tym przypadku czubek różdżki, który świeci w nocy) na filmie
  • Rozpocznij śledzenie ścieżki poruszającego się obiektu blob w filmie po pewnym zdarzeniu wyzwalającym (wyjaśniono poniżej)
  • Zatrzymaj śledzenie po kolejnym zdarzeniu wyzwalającym (wyjaśniono poniżej)
  • Zwróć ostatnią klatkę z wzorem narysowanym przez użytkownika
  • Wykonaj wstępne przetwarzanie na ramce, takie jak progowanie, usuwanie szumów, zmiana rozmiaru itp.
  • Użyj przetworzonej ostatniej klatki do przewidywania.
  • Wykonaj jakąś magię, kontrolując GPIO Raspberry Pi zgodnie z przewidywaniami

Na potrzeby tego projektu stworzyłem pudełko z motywem Harry'ego Pottera, które mogę otwierać i zamykać za pomocą serwomotoru, który jest sterowany przez GPIO Raspberry Pi. Ponieważ litera „A” oznacza „Alohamora” (jedno z najsłynniejszych zaklęć z filmów o Harrym Potterze, które pozwala czarodziejowi otworzyć dowolny zamek!!), jeśli osoba rysuje literę A różdżką, pi nakazuje serwo Otwórz pudełko. Jeśli osoba narysuje literę „C”, która oznacza zamknięcie (ponieważ nie mogłem wymyślić żadnego odpowiedniego zaklęcia używanego do zamykania lub blokowania:P), pi nakazuje serwo zamknąć pudełko.

Cała praca związana z przetwarzaniem obrazu/wideo, jak wykrywanie blobów, śledzenie ścieżki blob, wstępne przetwarzanie ostatniej klatki itp., odbywa się za pośrednictwem modułu OpenCV.

W przypadku wspomnianych powyżej zdarzeń wyzwalających na wideo w czasie rzeczywistym tworzone są dwa kółka, zielone i czerwone kółko. Kiedy plamka wejdzie w obszar w zielonym kółku, program zaczyna śledzić ścieżkę, którą pokonał plamka po tym momencie, umożliwiając osobie rozpoczęcie tworzenia litery. Gdy plamka osiągnie czerwone kółko, wideo zatrzymuje się, a ostatnia klatka jest przekazywana do funkcji, która wykonuje wstępne przetwarzanie na klatce, aby przygotować ją do predykcji.

W tym kroku załączyłem pliki kodu. Możesz przez to przejść i wprowadzić dowolne zmiany, jak chcesz.

UWAGA: Musiałem utworzyć dwa oddzielne pliki Pythona pracujące z różnymi wersjami Pythona, jeden, który importuje moduł OpenCV (Python 2.7), a drugi, który importuje moduł sklearn (Python 3.5) do przewidywania po załadowaniu wyszkolonego modelu, ponieważ moje OpenCV zostało zainstalowane dla wersja Python 2.7, podczas gdy sklearn został zainstalowany dla Pythona 3.5. Użyłem więc modułu podprocesów, aby uruchomić plik HarryPotterWandsklearn.py (do przewidywania) z HarryPotterWandcv.py (dla wszystkich prac opencv i nagrywania wideo w czasie rzeczywistym) i uzyskać jego dane wyjściowe. W ten sposób wystarczy uruchomić plik HarryPotterWandcv.py.

Krok 7: Mechanizm otwierania pudełka

Mechanizm otwierania pudełka
Mechanizm otwierania pudełka
Mechanizm otwierania pudełka
Mechanizm otwierania pudełka
Mechanizm otwierania pudełka
Mechanizm otwierania pudełka

Miałem stare pudełko w kolorze czerwonym, wokół którego używałem do tego projektu.

Dla mechanizmu otwierania pudełka:

  1. Przykleiłem serwo na gorąco w pobliżu tylnego końca pudełka na kawałku kartonu w pobliżu brzegu pudełka.
  2. Następnie wziąłem szprychę z koła roweru i przykleiłem ją na gorąco do ramienia serwomechanizmu.
  3. Drugi koniec szprychy został przymocowany do wieczka pudełka za pomocą kawałka drutu.
  4. Dodatni sygnał serwa został podłączony do +5V Pin 2 na Raspberry Pi.
  5. Ujemny z serwa został podłączony do GND Pin 39.
  6. Sygnał serwomechanizmu został podłączony do pinu 12

Krok 8: Tworzenie pudełka o tematyce Harry'ego Pottera

Tworzenie pudełka z motywem Harry'ego Pottera
Tworzenie pudełka z motywem Harry'ego Pottera
Tworzenie pudełka z motywem Harry'ego Pottera
Tworzenie pudełka z motywem Harry'ego Pottera
Tworzenie pudełka z motywem Harry'ego Pottera
Tworzenie pudełka z motywem Harry'ego Pottera

Aby stworzyć pudełko z motywem Harry'ego Pottera, wydrukowałem kilka kolorowych obrazów różnych rzeczy, takich jak logo Harry'ego Pottera, herb Hogwartu, herb każdego z czterech domów itp. na błyszczącym arkuszu formatu A4 i wkleiłem je na pudełku w różnych miejsca.

Użyłem również żółtego aksamitnego arkusza do wycięcia pasków i przykleiłem je do wieczka, aby nadać pudełku ten sam kolor, co w domu Gryffindoru. Wnętrze wieczka i tekturę na serwo pokryłem zielonym aksamitnym prześcieradłem. Na wewnętrznej stronie wieczka wkleiłem więcej symboli i emblemat przedstawiający zwierzęta reprezentujące każdy dom szkoły Hogwart.

Potem w końcu wepchnąłem wszystkie moje rzeczy związane z Harrym Potterem do pudełka, które zawierało tłumik Gryffindoru, pamiętnik z mundurkiem Hogwartu i Starszą Różdżkę używaną w tym projekcie:D

Zalecana: