Obsah:

Nožnice na papier z kameňa AI: 11 krokov
Nožnice na papier z kameňa AI: 11 krokov

Video: Nožnice na papier z kameňa AI: 11 krokov

Video: Nožnice na papier z kameňa AI: 11 krokov
Video: 💦Blackview BV9200 ЧЕСТНЫЙ ОБЗОР ПРОТИВОУДАРНОГО 2024, November
Anonim
Nožnice na papier z kameňa AI
Nožnice na papier z kameňa AI

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?

Image
Image

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?

Začíname?
Začíname?
Začíname?
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?

Napáliť Raspbian na kartu SD?
Napáliť Raspbian na kartu SD?
Napáliť Raspbian na kartu SD?
Napáliť Raspbian na kartu SD?
Napáliť Raspbian na kartu SD?
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:

ssh [email protected]

Predvolené heslo je malina

Tu som použil samostatný monitor na prepojenie s Raspberry Pi.

Krok 5: Zhromažďovanie množiny údajov? ️

Zbierate množinu údajov? ️
Zbierate množinu údajov? ️
Zbierate množinu údajov? ️
Zbierate množinu ú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 ⚒️⚙️

Navrhovanie NN a školenie modelu ⚒️⚙️
Navrhovanie 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 ✅

Testovanie modelu ✅
Testovanie modelu ✅
Testovanie modelu ✅
Testovanie modelu ✅
Testovanie modelu ✅
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 na kameň, papier, nožnice
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?

Image
Image

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: