Obsah:
- Krok 1: Věci použité v tomto projektu
- Krok 2: Nápad?
- Krok 3: Začínáme?
- Krok 4: Vypálit Raspbian na SD kartu?
- Krok 5: Shromažďování datové sady? ️
- Krok 6: Navrhování NN a školení modelu ⚒️⚙️
- Krok 7: Testování modelu ✅
- Krok 8: Hra na kámen, nůžky a papír
- Krok 9: Integrace servomotoru?
- Krok 10: Práce na projektu?
- Krok 11: Kód - Project Repo
Video: Nůžky na papír Rock Paper: 11 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:21
Už jste se někdy nudili sami? Pojďme hrát kámen, papír a nůžky proti interaktivnímu systému s inteligencí.
Krok 1: Věci použité v tomto projektu
Hardwarové komponenty
- Raspberry Pi 3 Model B+ × 1
- Modul kamery Raspberry Pi V2 × 1
- Micro-servomotor SG90 × 1
Softwarové aplikace
- Raspberry Pi Raspbian
- OpenCV
- TensorFlow
Krok 2: Nápad?
Poté, co jsem pracoval na různých projektech na různých doménách, plánoval jsem udělat zábavný projekt a rozhodl jsem se vytvořit hru kámen-nůžky na papír:)
V tomto projektu vytvoříme interaktivní hru a budeme hrát proti počítači, který je při rozhodování poháněn umělou inteligencí. AI používá kameru připojenou k Raspberry Pi, aby rozpoznala, co uživatel hýbe rukou, a zařadil je do nejlepší kategorie (štítků) kamene, papíru nebo nůžek. Jakmile se počítač pohne, krokový motor připojený k Raspberry Pi ukazuje podle jeho pohybu směr.
Pravidla, která je třeba u této hry zohlednit:
- Rock tupí nůžky
- Papír pokrývá skálu
- Nůžky řezaný papír
O vítězi bude rozhodnuto na základě výše uvedených tří podmínek. Podívejme se zde na rychlou ukázku projektu.
Krok 3: Začínáme?
Raspberry Pi
Použil jsem Raspberry Pi 3 Model B+, který má skvělá vylepšení a je výkonnější než předchozí model Raspberry Pi 3 Model B.
Raspberry Pi 3 B+ je integrován s 1,4GHz 64bitovým čtyřjádrovým procesorem, dvoupásmovou bezdrátovou sítí LAN, Bluetooth 4.2/BLE, rychlejším ethernetem a podporou Power-over-Ethernet (se samostatným PoE HAT).
Specifikace: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64bitový SoC @ 1,4 GHz, 1 GB LPDDR2 SDRAM, 2,4 GHz a 5 GHz IEEE 802.11.b/g/n/ac bezdrátová síť LAN, Bluetooth 4.2, BLE, Gigabit Ethernet přes USB 2.0 (maximální propustnost 300 Mb / s), rozšířený 40kolíkový konektor GPIO, porty HDMI4 USB 2.0 v plné velikosti, port kamery CSI pro připojení kamery Raspberry Pi, port displeje DSI pro připojení dotykového displeje Raspberry Pi 4pólový stereo výstup a kompozitní video port, Micro SD port pro načítání vašeho operačního systému a ukládání dat Vstupní napětí 5 V/2,5 A DC, podpora Power-over-Ethernet (PoE) (vyžaduje samostatný PoE HAT).
Servomotor
Používáme servomotor SG-90, motor s vysokým točivým momentem, který zvládne zátěž až 2,5 kg (1 cm).
USB kamera
USB kamera, díky níž bude hra interaktivní se zpracováním obrazu
Některé propojovací kabely se používají k propojení krokového motoru a Raspberry Pi.
Krok 4: Vypálit Raspbian na SD kartu?
Raspbian je distribuce Linuxu, která běží na Raspberry Pi. V této příručce budeme používat verzi Lite, ale lze použít i verzi pro stolní počítače (která je dodávána s grafickým prostředím).
- Stáhněte si Etcher a nainstalujte jej.
- Připojte čtečku karet SD s kartou SD uvnitř.
- Otevřete Etcher a vyberte z pevného disku soubor Raspberry Pi.img nebo.zip, který chcete zapsat na kartu SD.
- Vyberte kartu SD, na kterou chcete zapsat svůj obrázek.
- Zkontrolujte své výběry a klikněte na 'Flash!' zahájíte zápis dat na kartu SD.
Připojte zařízení k síti
- Povolte přístup SSH přidáním prázdného souboru ssh, který je opět umístěn v kořenovém adresáři spouštěcího svazku na vaší SD kartě.
- Vložte kartu SD do Raspberry Pi. Spustí se zhruba za 20 sekund. Nyní byste měli mít přístup SSH ke svému Raspberry Pi. Ve výchozím nastavení bude jeho název hostitele raspberrypi.local. Na počítači otevřete okno terminálu a zadejte následující:
Výchozí heslo je malina
Zde jsem použil samostatný monitor k propojení s Raspberry Pi.
Krok 5: Shromažďování datové sady? ️
Prvním krokem v tomto projektu je sběr dat. Systém musí identifikovat gesto ruky a rozpoznat akci a podle toho se pohybovat.
Do Raspberry Pi instalujeme několik knihoven pomocí pip install
příkaz.
sudo apt-get update && sudo apt-get upgradesudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev pip install opencv pip install numpy pip install scikit-learn pip install scikit-image pip install h5py pip install Keras pip nainstalovat tensorflow pip install Werkzeug pip install Keras-Applications pip install Keras-Preprocessing pip install keras-squeezenet pip install astor pip install tensorboard pip install tensorflow-odhadator pip install mock pip install grpcio pip install absl-pypip install gast pip install joblib pip install Markdown pip install protobuf pip install PyYAML pip install šest
Pokud máte problémy s OpenCVpackage, důrazně doporučuji nainstalovat tyto balíčky.
sudo apt-get install libhdf5-dev
sudo apt-get install libhdf5-serial-dev sudo apt-get install libatlas-base-dev sudo apt-get install libjasper-dev sudo apt-get install libqtgui4 sudo apt-get install libqt4-test
Pro tento projekt jsme nainstalovali všechny požadované závislosti. Datová sada se skládá ze sbírek a uspořádání obrázků pod příslušným štítkem.
Zde pomocí následujícího úryvku vytvoříme obrázky sady dat pro štítek, papír a nůžky.
roi = rámeček [100: 500, 100: 500]
save_path = os.path.join (img_class_path, '{}.jpg'.format (count + 1)) cv2.imwrite (save_path, roi)
Obrázek je zachycen pro každý štítek (kámen, papír, nůžky a žádný).
Krok 6: Navrhování NN a školení modelu ⚒️⚙️
Jádrem tohoto projektu je klasifikátor obrázků, který klasifikuje jednu ze tří kategorií. K vytvoření tohoto klasifikátoru používáme předem vyškolenou CNN (Convolutional Network) s názvem SqueezeNet.
Zde používáme Keras a TensorFlow ke generování modelu SqueezeNet, který dokáže identifikovat gesto. Obrázky, které jsme vytvořili v předchozím kroku, slouží k trénování modelu. Model je natrénován pomocí datové sady generované pro žádnou ze zmíněných epoch (cyklů).
Model je konfigurován s hyperparametry, jak je uvedeno níže.
model = sekvenční ([SqueezeNet (input_shape = (227, 227, 3), include_top = False), Výpadek (0,5), Convolution2D (NUM_CLASSES, (1, 1), padding = 'valid'), Aktivace ('relu'), GlobalAveragePooling2D (), Aktivace ('softmax')])
Zatímco model trénuje, můžete zjistit ztrátu a přesnost modelu pro každou epochu a přesnost se v určitém časovém okamžiku po několika epochách zvyšuje.
Generování modelu s nejvyšší přesností trvalo přibližně 2 hodiny po 10 epochách. Pokud narazíte na jakékoli chyby při přidělování paměti, proveďte následující kroky (Díky Adrianovi)
Chcete-li zvětšit odkládací prostor, otevřete soubor /etc /dphys-swapfile a poté upravte proměnnou CONF_SWAPSIZE:
# CONF_SWAPSIZE = 100
CONF_SWAPSIZE = 1024
Všimněte si, že navyšuji swap ze 100 MB na 1024 MB. Odtud restartujte swapovou službu:
$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start
Poznámka:
Zvětšení velikosti swapu je skvělý způsob, jak vypálit paměťovou kartu, takže tuto změnu vraťte zpět a restartujte službu swapu, až budete hotovi. Zde si můžete přečíst více o poškozování paměťových karet velkých velikostí.
Krok 7: Testování modelu ✅
Jakmile je model vygenerován, vytvoří výstupní soubor „rock-paper-scissors-model.h5“. Tento soubor slouží jako zdroj k testování, zda systém dokáže identifikovat různá gesta rukou a zda je možné akce odlišit.
Model se načte do skriptu pythonu následujícím způsobem
model = model_zatížení ("rock-paper-scissors-model.h5")
Fotoaparát přečte testovací obrázek a transformuje požadovaný barevný model a poté změní velikost obrázku na 227 x 227 pixelů (stejná velikost se používá pro generování modelu). Obrázky, které byly použity pro trénink modelu, lze použít k testování generovaného modelu.
img = cv2.imread (cesta k souboru)
img = cv2.cvtColor (img, cv2. COLOR_BGR2RGB) img = cv2.resize (img, (227, 227))
Jakmile je model načten a obraz je získán kamerou, model předpovídá zachycený obrázek pomocí načteného modelu SqueezeNet a provede předpověď pro pohyby uživatele.
pred = model.predict (np.array ())
move_code = np.argmax (před [0]) move_name = mapovač (move_code) tisk ("Předpovězeno: {}". formát (název_pohybu))
Spusťte skript test.py a model otestujte pomocí různých testovacích obrázků.
python3 test.py
Nyní je model připraven detekovat a porozumět gestům rukou.
Krok 8: Hra na kámen, nůžky a papír
Tato hra využívá funkci generování náhodných čísel k rozhodování o pohybu počítače. Při určování vítěze se postupuje podle výše uvedených pravidel. Hra je navržena se dvěma režimy: normální režim a inteligentní režim, kde inteligentní režim protiútokuje pohyb uživatele, tj. Počítač vyhrává všechny tahy proti uživateli.
cap = cv2. VideoCapture (0) # Pro zachycení obrazu z kamery
Nyní udělejme hru v normálním režimu, kde systém/ Raspberry Pi vyfotí ruku a analyzuje a identifikuje gesto ruky. Poté se pomocí generátoru náhodných čísel přehraje tah počítače. Vítěz je vybrán na základě pravidel a poté zobrazen na obrazovce. Spusťte hru pomocí následujícího příkazu.
python3 play.py
Krok 9: Integrace servomotoru?
Nakonec do tohoto projektu přidejte servomotor. Servomotor je GPIO pin 17 Raspberry Pi, který má funkci PWM pro ovládání úhlu otáčení.
Servomotor použitý v tomto projektu je SG-90. Dokáže otáčet ve směru i proti směru hodinových ručiček až o 180 °
Připojení jsou uvedena následovně.
Servomotor - Raspberry Pi
Vcc - +5V
GND - GND
Signál - GPIO17
V tomto projektu jsou použity knihovny jako RPi. GPIO a čas.
importujte RPi. GPIO jako GPIO
čas importu
Pin GPIO je poté nakonfigurován na PWM pomocí následujících řádků
servoPIN = 17
GPIO.setmode (GPIO. BCM) GPIO.setup (servoPIN, GPIO. OUT)
GPIO Pin 17 je nakonfigurován pro použití jako PWM na frekvenci 50 Hz. Úhel servomotoru je dosažen nastavením pracovního cyklu (Ton & Toff) PWM
povinnost = úhel/18 + 2
GPIO.output (servoPIN, True) p. ChangeDutyCycle (duty) time.sleep (1) GPIO.output (servoPIN, False) p. ChangeDutyCycle (0)
Tím se vytvoří požadovaný úhel kroku pro každý puls, což by poskytlo požadovaný úhel otočení.
Teď jsem vzal graf a rozřezal ho na tři části, na kámen, papír a nůžky. Servomotor je upevněn uprostřed grafu. Ukazatel/klapka je připojena k hřídeli servomotoru. Tento hřídel ukazuje na pohyb počítače podle logiky vypočítané ve skriptu.
Krok 10: Práce na projektu?
A teď je čas hrát. Podívejme se na fungování projektu.
Pokud jste při stavbě tohoto projektu čelili jakýmkoli problémům, neváhejte se mě zeptat. Navrhněte prosím nové projekty, které chcete, abych udělal příště.
Dejte palec nahoru, pokud vám to opravdu pomohlo, a sledujte můj kanál pro zajímavé projekty.:)
Pokud chcete, sdílejte toto video.
Jsme rádi, že jste se přihlásili k odběru:
Děkuji za přečtení!
Krok 11: Kód - Project Repo
Kód se přidá do úložiště GitHub, které najdete v sekci kódu.
Rahul24-06/Nůžky na papír-https://github.com/Rahul24-06/Rock-Paper-Scissors
Doporučuje:
Snadný držák baterie na papír: 5 kroků
Snadný držák papírových baterií: Pokud je pro vás obtížné najít držák knoflíkové baterie při provádění malých projektů se svými dětmi nebo studenty stejně jako já, pak je tento Instructables právě pro vás. Tento držák baterie má také polohu ZAPNUTO nebo VYPNUTO v závislosti na tom, jak zavíráte
Ruční hra Arduino Paper Rock Scissors s použitím 20x4 LCD displeje s I2C: 7 kroků
Ruční hra Arduino Paper Rock Scissors s použitím LCD displeje 20x4 s I2C: Ahoj všichni, nebo bych měl říci „Hello World!“Jedná se o ruční hru Arduino Paper Rock Scissors využívající I2C 20x4 LCD displej. Já
Interaktivní papír s Makey Makey: 13 kroků
Interaktivní papír s Makey Makey: Tento koncept je překvapivě snadno sestavitelný a může být použit v praktických a zábavních účelům. Kromě Makey Makey to nestojí téměř nic a většinu zásob lze již najít na většině míst. Také tyto projekty nevyžadují příliš mnoho
Nůžky na papír: 10 kroků
Rock Paper Scissors: Účel: Po dokončení tohoto postupu se naučíte, jak pomocí Code.org vytvořit jednoduchou hru Rock, Paper Scissors od začátku. Potřebné materiály / požadavky: Základní znalosti syntaxe Javascriptu, počítač, účet Code.org
Vstupní zařízení na papír a cínovou fólii: 5 kroků
Vstupní zařízení na papír a cínovou fólii: Tato příručka vám ukáže, jak vyrobit levné, ošklivé vstupní zařízení pro počítač. V tomto používám logickou desku monome 40h k odesílání signálů do počítače z mřížky tlačítek osm na osm, ale tyto plány lze snadno upravit