Spisu treści:
- Krok 1: Podstawowa idea i wymagane części
- Krok 2: Zainstaluj moduł OpenCV
- Krok 3: Drukowanie uchwytu kamery
- Krok 4: Kończenie montażu kamery
- Krok 5: Wyszkolony model uczenia maszynowego
- Krok 6: Kod, który sprawia, że wszystko się dzieje
- Krok 7: Mechanizm otwierania pudełka
- Krok 8: Tworzenie pudełka o tematyce Harry'ego Pottera
Wideo: Prawdziwa działająca różdżka Harry'ego Pottera przy użyciu wizji komputerowej: 8 kroków (ze zdjęciami)
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:30
„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
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
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
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
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
Miałem stare pudełko w kolorze czerwonym, wokół którego używałem do tego projektu.
Dla mechanizmu otwierania pudełka:
- Przykleiłem serwo na gorąco w pobliżu tylnego końca pudełka na kawałku kartonu w pobliżu brzegu pudełka.
- Następnie wziąłem szprychę z koła roweru i przykleiłem ją na gorąco do ramienia serwomechanizmu.
- Drugi koniec szprychy został przymocowany do wieczka pudełka za pomocą kawałka drutu.
- Dodatni sygnał serwa został podłączony do +5V Pin 2 na Raspberry Pi.
- Ujemny z serwa został podłączony do GND Pin 39.
- Sygnał serwomechanizmu został podłączony do pinu 12
Krok 8: Tworzenie pudełka o tematyce 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:
Prawdziwe portrety poruszające się z Harry'ego Pottera!: 11 kroków (ze zdjęciami)
Poruszające się portrety z prawdziwego życia z Harry'ego Pottera!: „Niesamowite! Niesamowity! To jest jak magia!” - Gilderoy LockhartJestem wielkim fanem Harry'ego Pottera, a jedną z rzeczy, które zawsze kochałem w Czarodziejskim Świecie, są poruszające portrety. Natknąłem się na Animowany obraz Kyle'a Stewarta-Frantza
Hakowanie Hexbug Spider XL w celu dodania wizji komputerowej za pomocą smartfona z Androidem: 9 kroków (ze zdjęciami)
Hakowanie Hexbug Spider XL w celu dodania wizji komputerowej za pomocą smartfona z systemem Android: Jestem wielkim fanem oryginalnego Hexbug™ Pająk. Mam już kilkanaście i zhakowałem je wszystkie. Za każdym razem, gdy jeden z moich synów idzie do przyjaciół’ przyjęcie urodzinowe, przyjaciel dostaje Hexbug™ pająk w prezencie. Zhakowałem lub
Działający kapelusz sortowania od Harry'ego Pottera: 8 kroków
Pracujący kapelusz przydziału od Harry'ego Pottera: W naszym mugolskim świecie nie ma magicznej czapki, która przydzieliłaby nas do naszych domów. Skorzystałem więc z okazji kwarantanny, aby zrobić kapelusz sortujący
Neopixel Ws2812 Rainbow LED Glow z M5stick-C - Uruchamianie Rainbow na Neopixel Ws2812 przy użyciu M5stack M5stick C przy użyciu Arduino IDE: 5 kroków
Neopixel Ws2812 Rainbow LED Glow z M5stick-C | Uruchamianie Rainbow na Neopixel Ws2812 Używając M5stack M5stick C Używając Arduino IDE: Cześć chłopaki, w tej instrukcji dowiemy się, jak używać neopikselowych ws2812 LED lub taśmy LED lub matrycy LED lub pierścienia LED z płytką rozwojową m5stack m5stick-C z Arduino IDE i zrobimy wzór tęczy z nim
Korzystanie z sonaru, lidaru i wizji komputerowej na mikrokontrolerach w celu pomocy osobom niedowidzącym: 16 kroków
Korzystanie z sonaru, lidaru i wizji komputerowej na mikrokontrolerach do wspomagania osób niedowidzących: Chcę stworzyć inteligentną „laskę”, która może pomóc osobom z wadami wzroku znacznie bardziej niż istniejące rozwiązania. Laska będzie w stanie powiadomić użytkownika o obiektach z przodu lub po bokach, wydając dźwięk w słuchawkach typu surround