Obsah:
- Krok 1: Veci použité v tomto projekte
- Krok 2: Nápad?
- Krok 3: Začíname?
- Krok 4: Napáliť Raspbian na kartu SD?
- Krok 5: Zhromažďovanie množiny údajov? ️
- Krok 6: Navrhnutie NN a školenie modelu ⚒️⚙️
- Krok 7: Testovanie modelu ✅
- Krok 8: Hra na kameň, papier, nožnice
- Krok 9: Integrácia servomotora?
- Krok 10: Fungovanie projektu?
- Krok 11: Kód - Projekt Repo
Video: Nožnice na papier z kameňa AI: 11 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:57
Už ste sa niekedy nudili sami? Hrajme kameň, papier a nožnice proti interaktívnemu systému, ktorý využíva inteligenciu.
Krok 1: Veci použité v tomto projekte
Hardvérové komponenty
- Raspberry Pi 3 Model B+ × 1
- Modul kamery Raspberry Pi V2 × 1
- Micro-servomotor SG90 × 1
Softvérové aplikácie
- Raspberry Pi Raspbian
- OpenCV
- TensorFlow
Krok 2: Nápad?
Potom, čo som pracoval na rôznych projektoch na rôznych doménach, plánoval som vytvoriť zábavný projekt a rozhodol som sa vytvoriť hru kameň-papier-nožnice:)
V tomto projekte vytvoríme interaktívnu hru a budeme sa hrať proti počítaču, ktorý používa AI na rozhodovanie. AI používa kameru pripojenú k Raspberry Pi na rozpoznanie pohybov, ktoré používateľ urobil rukou, a zaraďuje ich do najlepšej kategórie (štítok) kameň, papier alebo nožnice. Akonáhle sa počítač pohne, krokový motor pripojený k Raspberry Pi ukazuje v smere podľa svojho pohybu.
Pravidlá, ktoré je potrebné pri tejto hre zohľadniť:
- Rock tupí nožnice
- Papier pokrýva skalu
- Strihaný papier nožnicami
O víťazovi sa rozhodne na základe vyššie uvedených troch podmienok. Pozrime sa na rýchlu ukážku projektu tu.
Krok 3: Začíname?
Malinový koláč
Použil som Raspberry Pi 3 Model B+, ktorý má skvelé vylepšenia a je výkonnejší než predchádzajúci Raspberry Pi 3 Model B.
Raspberry Pi 3 B+ je integrovaný so 64-bitovým štvorjadrovým procesorom 1,4 GHz, dvojpásmovou bezdrôtovou sieťou LAN, Bluetooth 4.2/BLE, rýchlejším ethernetom a podporou Power-over-Ethernet (so samostatným PoE HAT).
Špecifikácia: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bitový SoC @ 1,4 GHz, 1 GB LPDDR2 SDRAM, 2,4 GHz a 5 GHz IEEE 802.11.b/g/n/ac bezdrôtová sieť LAN, Bluetooth 4.2, BLE, Gigabit Ethernet cez USB 2.0 (maximálna priepustnosť 300 Mb / s), rozšírený 40-kolíkový konektor GPIO, porty HDMI4 USB 2.0 v plnej veľkosti, port kamery CSI na pripojenie kamery Raspberry Pi, port displeja DSI na pripojenie dotykového displeja Raspberry Pi 4-pólový stereo výstup a kompozitný video port, port Micro SD na načítanie vášho operačného systému a ukladanie dát, 5 V/2,5 A DC vstup, podpora Power-over-Ethernet (PoE) (vyžaduje samostatný PoE HAT).
Servo motor
Používame servomotor SG-90, motor s vysokým krútiacim momentom, ktorý zvládne záťaž až 2,5 kg (1 cm).
USB kamera
USB kamera, vďaka ktorej bude hra interaktívna so spracovaním obrazu
Niektoré prepojovacie káble sa používajú na prepojenie krokového motora a Raspberry Pi.
Krok 4: Napáliť Raspbian na kartu SD?
Raspbian je distribúcia Linuxu, ktorá beží na Raspberry Pi. V tejto príručke budeme používať verziu Lite, ale dá sa použiť aj verzia pre stolné počítače (ktorá je dodávaná s grafickým prostredím).
- Stiahnite si Etcher a nainštalujte ho.
- Pripojte čítačku kariet SD s kartou SD vo vnútri.
- Otvorte aplikáciu Etcher a vyberte z pevného disku súbor Raspberry Pi.img alebo.zip, ktorý chcete zapísať na kartu SD.
- Vyberte kartu SD, na ktorú chcete napísať svoj obrázok.
- Skontrolujte svoje výbery a kliknite na položku Flash! začnite zapisovať údaje na kartu SD.
Pripojte zariadenie k sieti
- Povoľte prístup SSH pridaním prázdneho súboru ssh, ktorý je opäť umiestnený v koreňovom adresári zavádzacieho zväzku na vašej SD karte.
- Vložte kartu SD do Raspberry Pi. Spustí sa zhruba za 20 sekúnd. Teraz by ste mali mať prístup SSH k vášmu Raspberry Pi. V predvolenom nastavení bude jeho názov hostiteľa raspberrypi.local. Na počítači otvorte okno terminálu a zadajte nasledujúci príkaz:
Predvolené heslo je malina
Tu som použil samostatný monitor na prepojenie s Raspberry Pi.
Krok 5: Zhromažďovanie množiny údajov? ️
Prvým krokom v tomto projekte je zber údajov. Systém musí identifikovať gesto ruky a rozpoznať akciu a podľa toho sa pohybovať.
Do Raspberry Pi inštalujeme niekoľko knižníc pomocou inštalácie pip
prí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 nainštalovať tensorflow pip nainštalovať Werkzeug pip nainštalovať 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 šesť
Ak máte problémy s balíkom OpenCVpackage, dôrazne odporúčam nainštalovať tieto 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
Pre tento projekt sme nainštalovali všetky požadované závislosti. Súbor údajov je vytvorený zbierkami a usporiadaním obrázkov pod príslušným štítkom.
Tu vytvoríme obrázky množiny údajov pre štítok, papier a nožnice pomocou nasledujúceho úryvku.
roi = rám [100: 500, 100: 500]
save_path = os.path.join (img_class_path, '{}.jpg'.format (count + 1)) cv2.imwrite (save_path, roi)
Obrázok je zachytený pre každý štítok (kameň, papier, nožnice a žiadny).
Krok 6: Navrhnutie NN a školenie modelu ⚒️⚙️
Jadrom tohto projektu je klasifikátor obrázkov, ktorý klasifikuje jednu z troch kategórií. Na výrobu tohto klasifikátora používame vopred vyškolenú CNN (konvolučnú sieť) s názvom SqueezeNet.
Tu používame Keras a TensorFlow na generovanie modelu SqueezeNet, ktorý dokáže identifikovať gesto. Obrázky, ktoré sme vygenerovali v predchádzajúcom kroku, slúžia na trénovanie modelu. Model je trénovaný pomocou množiny údajov generovanej pre žiadnu z uvedených epoch (cyklov).
Model je konfigurovaný s hyperparametrami, ako je uvedené nižšie.
model = sekvenčný ([SqueezeNet (input_shape = (227, 227, 3), include_top = False), Výpadok (0,5), Convolution2D (NUM_CLASSES, (1, 1), padding = 'valid'), Aktivácia ('relu'), GlobalAveragePooling2D (), Aktivácia („softmax“)])
Kým model trénuje, môžete zistiť stratu a presnosť modelu pre každú epochu a presnosť sa v určitom časovom okamihu po niekoľkých epochách zvyšuje.
Generovanie modelu s najvyššou presnosťou po 10 epochách trvalo zhruba 2 hodiny. Ak narazíte na nejaké chyby alokácie pamäte, vykonajte nasledujúce kroky (Vďaka Adrianovi)
Ak chcete zväčšiť úložný priestor, otvorte súbor /etc /dphys-swapfile a potom upravte premennú CONF_SWAPSIZE:
# CONF_SWAPSIZE = 100
CONF_SWAPSIZE = 1024
Všimnite si, že zvyšujem swap zo 100 MB na 1024 MB. Odtiaľ reštartujte swapovú službu:
$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start
Poznámka:
Zväčšenie veľkosti swapu je skvelý spôsob, ako vypáliť pamäťovú kartu, takže túto zmenu vráťte späť a reštartujte službu swapu, keď budete hotoví. Tu si môžete prečítať viac o poškodení pamäťových kariet veľkých veľkostí.
Krok 7: Testovanie modelu ✅
Akonáhle je model vygenerovaný, vytvorí výstupný súbor "rock-paper-scissors-model.h5". Tento súbor sa používa ako zdroj na testovanie, či systém dokáže rozpoznať rôzne gestá rúk a rozlíšiť akcie.
Model je načítaný do skriptu python nasledovne
model = model_zaťaženia ("rock-paper-scissors-model.h5")
Fotoaparát načíta testovací obrázok a transformuje požadovaný farebný model a potom zmení veľkosť obrázka na 227 x 227 pixelov (rovnaká veľkosť sa používa na generovanie modelu). Obrázky, ktoré boli použité na školenie modelu, je možné použiť na testovanie vygenerovaného modelu.
img = cv2.imread (cesta k súboru)
img = cv2.cvtColor (img, cv2. COLOR_BGR2RGB) img = cv2.resize (img, (227, 227))
Akonáhle je model načítaný a fotoaparát získava obraz, model predpovedá zachytený obrázok pomocou načítaného modelu SqueezeNet a vykoná predpoveď pohybov používateľa.
pred = model.predict (np.array ())
move_code = np.argmax (pred [0]) move_name = mapovač (move_code) print ("Predikované: {}". formát (názov_pohybu))
Spustite skript test.py a otestujte model pomocou rôznych testovacích obrázkov.
python3 test.py
Teraz je model pripravený rozpoznať gestá rúk a porozumieť im.
Krok 8: Hra na kameň, papier, nožnice
Hra rozhoduje o pohybe počítača pomocou funkcie generovania náhodných čísel. Pri určovaní víťaza sa postupuje podľa vyššie uvedených pravidiel. Hra je navrhnutá s dvoma režimami: normálnym režimom a inteligentným režimom, kde inteligentný režim protiútokuje proti pohybu používateľa, t. J. Počítač vyhráva všetky pohyby proti používateľovi.
cap = cv2. VideoCapture (0) # Na zachytenie obrázku z fotoaparátu
Teraz prejdeme k hre v normálnom režime, kde systém/ Raspberry Pi odfotí ruku a analyzuje a identifikuje gesto ruky. Potom sa pomocou generátora náhodných čísel prehrá ťah počítača. Víťaz je vybraný na základe pravidiel a potom je zobrazený na obrazovke. Spustite hru pomocou nasledujúceho príkazu.
python3 play.py
Krok 9: Integrácia servomotora?
Nakoniec do tohto projektu pridajte servomotor. Servomotor je GPIO pin 17 Raspberry Pi, ktorý má funkciu PWM na ovládanie uhla otáčania.
Servomotor použitý v tomto projekte je SG-90. Dokáže otáčať v smere a proti smeru hodinových ručičiek až o 180 °
Pripojenia sú uvedené nasledovne.
Servomotor - Raspberry Pi
Vcc - +5V
GND - GND
Signál - GPIO17
V tomto projekte sú použité knižnice ako RPi. GPIO a čas.
importujte RPi. GPIO ako GPIO
čas importu
Pin GPIO je potom nakonfigurovaný na PWM pomocou nasledujúcich riadkov
servoPIN = 17
GPIO.setmode (GPIO. BCM) GPIO.setup (servoPIN, GPIO. OUT)
GPIO Pin 17 je nakonfigurovaný na použitie ako PWM pri frekvencii 50 Hz. Uhol servomotora sa dosiahne nastavením pracovného cyklu (Ton & Toff) PWM
povinnosť = uhol/18 + 2
GPIO.output (servoPIN, True) p. ChangeDutyCycle (duty) time.sleep (1) GPIO.output (servoPIN, False) p. ChangeDutyCycle (0)
Tým sa vytvorí požadovaný uhol kroku pre každý impulz, ktorý by poskytol požadovaný uhol natočenia.
Teraz som vzal graf a rozrezal ho na tri časti, na kameň, papier a nožnice. Servomotor je upevnený v strede tabuľky. Ukazovateľ/klapka je pripojená k hriadeľu servomotora. Tento hriadeľ ukazuje na pohyb počítača podľa logiky vypočítanej v skripte.
Krok 10: Fungovanie projektu?
A teraz je čas na hranie. Pozrime sa na fungovanie projektu.
Ak máte pri vytváraní tohto projektu nejaké problémy, pokojne sa ma opýtajte. Navrhnite prosím nové projekty, ktoré by som chcel, aby som urobil ďalej.
Dajte palec hore, ak vám to skutočne pomohlo, a sledujte môj kanál pre zaujímavé projekty.:)
Ak chcete, zdieľajte toto video.
Sme radi, že ste sa prihlásili na odber:
Vďaka za prečítanie!
Krok 11: Kód - Projekt Repo
Kód sa pridá do úložiska GitHub, ktoré nájdete v sekcii kódu.
Rahul24-06/Rock-Paper-Scissors-https://github.com/Rahul24-06/Rock-Paper-Scissors
Odporúča:
Interaktívny papier s Makey Makey: 13 krokov
Interaktívny papier s Makey Makey: Tento koncept je prekvapivo ľahko zostaviteľný a môže byť použitý na praktické a zábavné účely. Okrem Makey Makey to nestojí takmer nič a väčšinu zásob už nájdete na väčšine miest. Tieto projekty tiež nevyžadujú veľa
Jednoduché svetlo na papier: 5 krokov
Jednoduché papierové svetlo: úvod Na výrobu jednoduchého svetelného stroja použijem arduino. Tento stroj je veľmi jednoduchý, ale vyžaduje určité materiály, ktoré sa týkajú arduina. Každý človek to môže ľahko zvládnuť
Nožnice na papier z kameňa: 10 krokov
Nožnice na papier Rock: Účel: Po dokončení tohto postupu sa naučíte, ako vytvoriť jednoduchú hru Nôžky na papier, kameň pomocou Code.org. Potrebné materiály / Požiadavky: Základné znalosti syntaxe Javascriptu, počítač, účet Code.org
Držiak na toaletný papier v roli: 7 krokov (s obrázkami)
Držiak toaletného papiera na zvitok telefónu: Potrebujete mať niekde pri nabíjaní telefón, aby bol stále vo zvislej polohe? Odpoveďou na to je držiak na telefón. Leží vám okolo domu niekoľko náhradných roliek toaletného papiera a len malá lepenka? Ak to urobíte, budete
Nástroj robotického ramena nožnice na horúci drôt: 8 krokov (s obrázkami)
Nástroj na rameno horúceho drôtu: Ako súčasť diplomovej práce na KADK v Kodani som sa zaoberal rezaním za tepla a robotizovanou výrobou. Na testovanie tejto výrobnej metódy som vyrobil horúci drôtený nástavec pre rameno robota. Drôt musel mať 700 mm, ale materiál