Spisu treści:
- Krok 1: Rzeczy użyte w tym projekcie
- Krok 2: Pomysł ?
- Krok 3: Pierwsze kroki ?
- Krok 4: Nagraj Raspbian na kartę SD?
- Krok 5: Zbieranie zbioru danych ?️
- Krok 6: Projektowanie sieci NN i trenowanie modelu ⚒️⚙️
- Krok 7: Testowanie modelu ✅
- Krok 8: Gra kamień-papier-nożyczki
- Krok 9: Integracja z serwosilnikiem?
- Krok 10: Praca nad projektem ?
- Krok 11: Kod - Repozytorium projektu
Wideo: Rock Paper Scissor AI: 11 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:29
Czy kiedykolwiek czułeś się znudzony w samotności? Zagrajmy w kamień, papier i nożyce przeciwko interaktywnemu systemowi opartemu na inteligencji.
Krok 1: Rzeczy użyte w tym projekcie
Komponenty sprzętowe
- Raspberry Pi 3 Model B+ × 1
- Moduł kamery Raspberry Pi V2 × 1
- Silnik mikro-serwo SG90 × 1
Aplikacje programowe
- Raspberry Pi Raspbian
- Otwórz CV
- Przepływ Tensora
Krok 2: Pomysł ?
Po pracy nad różnymi projektami na różnych domenach planowałem zrobić fajny projekt i postanowiłem zrobić grę kamień-papier-nożyce:)
W tym projekcie stworzymy interaktywną grę i zagramy przeciwko komputerowi, który jest zasilany przez sztuczną inteligencję, aby podejmować decyzje. AI wykorzystuje kamerę podłączoną do Raspberry Pi, aby rozpoznać ruchy użytkownika wykonane ręką, klasyfikować je do najlepszej kategorii (etykiety) kamienia, papieru lub nożyczek. Gdy komputer wykona ruch, silnik krokowy podłączony do Raspberry Pi wskazuje kierunek w oparciu o jego ruch.
Zasady, które należy wziąć pod uwagę w tej grze:
- Rock tępi nożyce
- Papier pokrywa skałę
- Nożyczki tną papier
Zwycięzca zostanie wyłoniony na podstawie powyższych trzech warunków. Zobaczmy tutaj szybkie demo projektu.
Krok 3: Pierwsze kroki ?
Malina Pi
Użyłem Raspberry Pi 3 Model B+, który ma świetne ulepszenia i jest bardziej wydajny niż wcześniejszy Raspberry Pi 3 Model B.
Raspberry Pi 3 B+ jest zintegrowany z 64-bitowym czterordzeniowym procesorem 1,4 GHz, dwuzakresową bezprzewodową siecią LAN, Bluetooth 4.2/BLE, szybszym Ethernetem i obsługą Power-over-Ethernet (z oddzielnym PoE HAT).
Specyfikacje: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bitowy SoC @ 1,4 GHz, 1 GB LPDDR2 SDRAM, 2,4 GHz i 5 GHz IEEE 802.11.b/g/n/ac bezprzewodowa sieć LAN, Bluetooth 4.2, BLE, Gigabit Ethernet przez USB 2.0 (maksymalna przepustowość 300 Mb/s), Rozszerzony 40-pinowy nagłówek GPIO, Pełnowymiarowe porty HDMI4 USB 2.0, port kamery CSI do podłączenia kamery Raspberry Pi, port wyświetlacza DSI do podłączenia wyświetlacza dotykowego Raspberry Pi 4-biegunowe wyjście stereo i kompozyt port wideo, port Micro SD do ładowania systemu operacyjnego i przechowywania danych wejście zasilania 5 V/2,5 A DC, obsługa Power-over-Ethernet (PoE) (wymaga oddzielnego HAT PoE).
Siłownik
Używamy serwo silnika SG-90, silnika o wysokim momencie obrotowym, który może wytrzymać obciążenie do 2,5 kg (1 cm).
Kamera USB
Kamera USB, aby gra była interaktywna z przetwarzaniem obrazu
Niektóre kable Jumper służą do podłączenia silnika krokowego i Raspberry Pi.
Krok 4: Nagraj Raspbian na kartę SD?
Raspbian to ulubiona dystrybucja Linuksa działająca na Raspberry Pi. W tym przewodniku będziemy używać wersji Lite, ale można również użyć wersji Desktop (która zawiera środowisko graficzne).
- Pobierz Etcher i zainstaluj go.
- Podłącz czytnik kart SD z kartą SD w środku.
- Otwórz Etcher i wybierz z dysku twardego plik.img lub.zip Raspberry Pi, który chcesz zapisać na karcie SD.
- Wybierz kartę SD, na której chcesz zapisać swój obraz.
- Przejrzyj swoje wybory i kliknij „Flash!” rozpocząć zapisywanie danych na karcie SD.
Podłącz urządzenie do swojej sieci
- Włącz dostęp SSH, dodając pusty plik ssh, ponownie umieszczony w katalogu głównym woluminu rozruchowego na karcie SD.
- Włóż kartę SD do Raspberry Pi. Uruchomi się za około 20 sekund. Powinieneś teraz mieć dostęp SSH do swojego Raspberry Pi. Domyślnie jego nazwą hosta będzie raspberrypi.local. Na komputerze otwórz okno terminala i wpisz:
Domyślne hasło to malina
Tutaj użyłem osobnego monitora do połączenia z Raspberry Pi.
Krok 5: Zbieranie zbioru danych ?️
Pierwszym krokiem w tym projekcie jest zbieranie danych. System musi rozpoznać gest ręki i rozpoznać akcję i odpowiednio nią wykonać ruch.
Instalujemy kilka bibliotek na Raspberry Pi za pomocą pip install
Komenda.
sudo apt-get aktualizacja && sudo apt-get upgradesudo apt-get zainstaluj libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev instalacja pip opencv instalacja pip numpy pip instalacja scikit-learn pip instalacja scikit-image pip instalacja h5py pip instalacja Keras pip zainstaluj tensorflow pip zainstaluj Werkzeug pip zainstaluj Keras-Aplikacje pip zainstaluj Keras-Przetwarzanie wstępne pip zainstaluj keras-squeezenet pip zainstaluj astor pip zainstaluj tensorboard pip zainstaluj tensorflow-estimator pip zainstaluj mock pip zainstaluj grpcio pip zainstaluj absl-pypip zainstaluj pip zainstaluj pip zainstaluj zadanie pip zainstaluj protobuf pip zainstaluj PyYAML pip zainstaluj sześć
Jeśli napotkasz jakiekolwiek problemy z pakietem OpenCV, zdecydowanie zalecam zainstalowanie tych pakietów.
sudo apt-get zainstaluj libhdf5-dev
sudo apt-get zainstaluj libhdf5-serial-dev sudo apt-get zainstaluj libatlas-base-dev sudo apt-get zainstaluj libjasper-dev sudo apt-get zainstaluj libqtgui4 sudo apt-get zainstaluj libqt4-test
Zainstalowaliśmy wszystkie wymagane zależności dla tego projektu. Zbiór danych jest tworzony przez kolekcje i aranżacje obrazów pod odpowiednią etykietą.
Tutaj tworzymy obrazy zestawu danych dla etykiety kamień, papier i nożyce za pomocą poniższego fragmentu kodu.
ROi = rama[100:500, 100:500]
save_path = os.path.join(img_class_path, '{}.jpg'.format(count + 1)) cv2.imwrite(save_path, roi)
Obraz jest rejestrowany dla każdej etykiety (kamień, papier, nożyce i Brak).
Krok 6: Projektowanie sieci NN i trenowanie modelu ⚒️⚙️
Rdzeniem tego projektu jest klasyfikator obrazów, który klasyfikuje jedną z trzech kategorii. Do stworzenia tego klasyfikatora używamy przeszkolonej sieci CNN (Convolutional Network) o nazwie SqueezeNet.
Tutaj używamy Keras i TensorFlow do wygenerowania modelu SqueezeNet, który może zidentyfikować gest. Obrazy, które wygenerowaliśmy w poprzednim kroku, służą do trenowania modelu. Model jest szkolony przy użyciu zestawu danych wygenerowanego dla żadnej z wymienionych epok (cykli).
Model jest skonfigurowany z hiperparametrami, jak pokazano poniżej.
model = sekwencyjny([SqueezeNet(input_shape=(227, 227, 3), include_top=False), Odpad (0,5), Convolution2D(NUM_CLASSES, (1, 1), dopełnienie='prawidłowy'), Aktywacja('relu'), Globalna średnia Pooling2D(), Aktywacja('softmax')])
Podczas uczenia modelu można znaleźć utratę i dokładność modelu dla każdej epoki, a dokładność wzrasta w pewnym momencie po kilku epokach.
Wygenerowanie modelu z najwyższą dokładnością po 10 epoce zajęło około 2 godzin. Jeśli napotkasz jakiekolwiek błędy alokacji pamięci, wykonaj następujące czynności (podziękowania dla Adriana)
Aby zwiększyć przestrzeń wymiany, otwórz /etc/dphys-swapfile, a następnie edytuj zmienną CONF_SWAPSIZE:
# CONF_SWAPSIZE=100
CONF_SWAPSIZE=1024
Zauważ, że zwiększam wymianę ze 100 MB do 1024 MB. Stamtąd uruchom ponownie usługę wymiany:
$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start
Notatka:
Zwiększenie rozmiaru wymiany to świetny sposób na wypalenie karty pamięci, więc pamiętaj, aby cofnąć tę zmianę i ponownie uruchomić usługę wymiany, gdy skończysz. Możesz przeczytać więcej o dużych rozmiarach uszkadzających karty pamięci tutaj.
Krok 7: Testowanie modelu ✅
Po wygenerowaniu modelu tworzy plik wyjściowy „rock-paper-scissors-model.h5”. Ten plik jest używany jako źródło do sprawdzenia, czy system może zidentyfikować różne gesty rąk i rozróżnić działania.
Model jest ładowany do skryptu Pythona w następujący sposób
model = load_model("kamień-papier-nożyczki-model.h5")
Kamera odczytuje obraz testowy i przekształca wymagany model kolorów, a następnie zmienia rozmiar obrazu do 227 x 227 pikseli (ten sam rozmiar używany do generowania modelu). Obrazy, które zostały użyte do uczenia modelu, można wykorzystać do przetestowania wygenerowanego modelu.
img = cv2.imread(ścieżka pliku)
img = cv2.cvtColor(img, cv2. COLOR_BGR2RGB) img = cv2.resize(img, (227, 227))
Po załadowaniu modelu i pobraniu obrazu przez kamerę model przewiduje przechwycony obraz za pomocą załadowanego modelu SqueezeNet i przewiduje ruchy użytkownika.
pred = model.predict(np.tablica())
move_code = np. argmax(pred[0]) move_name = mapper(move_code) print("Przewidywane: {}".format(move_name))
Uruchom skrypt test.py, aby przetestować model za pomocą różnych obrazów testowych.
python3 test.py
Teraz model jest gotowy do wykrywania i rozumienia gestów rąk.
Krok 8: Gra kamień-papier-nożyczki
Gra wykorzystuje funkcję generowania liczb losowych, aby zdecydować o ruchu komputera. Wyłonienie zwycięzcy następuje zgodnie z powyższymi zasadami. Gra została zaprojektowana z dwoma trybami: Normal Mode i Intelligent, gdzie inteligentny tryb kontratakuje na ruch użytkownika, tzn. Komputer wygrywa wszystkie ruchy przeciwko użytkownikowi.
cap = cv2. VideoCapture(0) # Aby przechwycić obraz z kamery
Teraz stwórzmy grę w trybie Normal, w którym system/ Raspberry Pi robi zdjęcie dłoni i analizuje oraz identyfikuje gesty dłoni. Następnie za pomocą generatora liczb losowych odtwarzany jest ruch komputera. Zwycięzca jest wybierany na podstawie zasad, a następnie wyświetlany na ekranie. Uruchom grę za pomocą następującego polecenia.
python3 play.py
Krok 9: Integracja z serwosilnikiem?
Na koniec dodaj serwomotor do tego projektu. Silnik serwo to pin 17 GPIO Raspberry Pi, który posiada funkcję PWM do kontroli kąta obrotu.
Servo Motor użyty w tym projekcie to SG-90. Może wykonywać obroty zgodnie z ruchem wskazówek zegara i przeciwnie do ruchu wskazówek zegara do 180 °;
Połączenia są podane w następujący sposób.
Silnik serwo - Raspberry Pi
Vcc - +5V
GND - GND
Sygnał - GPIO17
W tym projekcie wykorzystywane są biblioteki takie jak RPi. GPIO i czas.
importuj RPi. GPIO jako GPIO
czas importu
Pin GPIO jest następnie konfigurowany do PWM za pomocą następujących linii
serwoPIN = 17
GPIO.setmode(GPIO. BCM) GPIO.setup(servoPIN, GPIO. OUT)
GPIO Pin 17 jest skonfigurowany do używania jako PWM przy częstotliwości 50Hz. Kąt silnika serwo osiąga się poprzez ustawienie cyklu pracy (Ton i Toff) PWM
cło = kąt/18 + 2
GPIO.output(servoPIN, True) p. ChangeDutyCycle(obowiązek) time.sleep(1) GPIO.output(servoPIN, False) p. ChangeDutyCycle(0)
Spowoduje to uzyskanie pożądanego kąta kroku dla każdego impulsu, co da pożądany kąt obrotu.
Teraz wziąłem wykres i podzieliłem go na trzy sekcje: kamień, papier i nożyce. Silnik Servo jest przymocowany do środka wykresu. Wskaźnik/klapa jest połączona z wałem serwomotoru. Ten wał wskazuje na ruch komputera zgodnie z logiką obliczoną w skrypcie.
Krok 10: Praca nad projektem ?
A teraz czas na zabawę. Zobaczmy, jak działa projekt.
Jeśli napotkałeś jakiekolwiek problemy podczas budowy tego projektu, nie wahaj się mnie zapytać. Proszę sugerować nowe projekty, które chcesz, abym wykonał w następnej kolejności.
Daj kciuki, jeśli to naprawdę ci pomogło i śledź mój kanał, aby znaleźć ciekawe projekty.:)
Udostępnij ten film, jeśli chcesz.
Cieszę się, że subskrybujesz:
Dziękuje za przeczytanie!
Krok 11: Kod - Repozytorium projektu
Kod jest dodawany do repozytorium GitHub, które można znaleźć w sekcji kodu.
Rahul24-06 / Papier-kamień-nożyczki -
Zalecana:
Stwórz własny adapter Rock Band Ekit (bez starszego adaptera), nieniszcząco!: 10 kroków
Stwórz własny adapter Rock Band Ekit (bez adaptera Legacy), niedestrukcyjnie!: Po usłyszeniu popularnego gospodarza podcastu, który wspomniał o swoim zaniepokojeniu śmiercią jego przewodowego, starszego adaptera USB, szukałem rozwiązania DIY, aby podłączyć lepszy / niestandardowy eKit do RB . Podziękowania dla pana DONINATORA na Youtube, który nakręcił film opisujący jego podobną p
Ręczna gra nożyczek Arduino Paper Rock przy użyciu wyświetlacza LCD 20x4 z I2C: 7 kroków
Przenośna gra Arduino Paper Rock Scissors wykorzystująca wyświetlacz LCD 20x4 z I2C: Witam wszystkich, a może powinienem powiedzieć "Hello World!" Jest to podręczna gra Arduino Paper Rock Scissors wykorzystująca wyświetlacz LCD I2C 20x4. I
Korpus Rock Buggy dla RedCat Gen7: 9 kroków (ze zdjęciami)
Rock Buggy Body dla RedCat Gen7: Akcesoria do drukowania 3D Inspiration, a nawet całe ciała, są bardzo popularne wśród społeczności RC, szczególnie w gatunku RC Crawlers. Ja i inni wydaliśmy różnego rodzaju darmowe projekty, ale to, co jest niespotykane, to wydawanie przez producentów
WISH ROCK: 5 kroków (ze zdjęciami)
WISH ROCK: Pasuje do ręki z komfortem, ciepłem i przyjemnym do trzymania.. Uwalnianie energii psychicznej.. Z przewodnikiem po asertywnych kryształowych wskazówkach dla wielu użytkowników;.~ZIELONY == Energia uzdrawiania..~~NIEBIESKI == Medytacja spokojnej duszy
Kontroluj serwo za pomocą Arduino i gitary Rock Band: 5 kroków
Kontroluj serwo za pomocą Arduino i gitary Rock Band: to mój pierwszy instruktażowy, bez nieprzyjemnych komentarzy, jak stworzyłem program