Tartalomjegyzék:

Rock Paper Scissor AI: 11 lépés
Rock Paper Scissor AI: 11 lépés

Videó: Rock Paper Scissor AI: 11 lépés

Videó: Rock Paper Scissor AI: 11 lépés
Videó: Lipps Inc. - Funkytown (1980) 2024, November
Anonim
Rock Paper Scissor AI
Rock Paper Scissor AI

Unatkozott valaha egyedül? Játsszunk rockot, papírt és ollót egy intelligens intelligens rendszerrel.

1. lépés: A projektben használt dolgok

Hardver alkatrészek

  • Raspberry Pi 3 B+ × 1 modell
  • Raspberry Pi kamera modul V2 × 1
  • SG90 Mikroszervo motor × 1

Szoftver alkalmazások

  • Raspberry Pi Raspbian
  • OpenCV
  • TensorFlow

2. lépés: Ötlet?

Image
Image

Miután különböző projekteken dolgoztam különböző területeken, szórakoztató projektet terveztem, és úgy döntöttem, hogy kő-papír-olló játékot készítek:)

Ebben a projektben egy interaktív játékot fogunk csinálni, és játszani fogunk a számítógép ellen, amely AI segítségével hajtja végre a döntéseket. Az AI a Raspberry Pi -hez csatlakoztatott kamerát használja fel, hogy felismerje, mi mozgatja a felhasználó kezét, és besorolja őket a legjobb kategóriába (címke), kőzetbe, papírba vagy ollóba. Miután a számítógép megmozdult, a Raspberry Pi -hez csatlakoztatott léptetőmotor a mozgása alapján az irány felé mutat.

A játék során figyelembe veendő szabályok:

  • Rock tompítja az ollót
  • Papír borítja a sziklát
  • Olló vágott papírt

A nyertes a fenti három feltétel alapján dől el. Nézzük itt a projekt gyors bemutatóját.

3. lépés: Első lépések?

Elkezdeni ?
Elkezdeni ?
Elkezdeni ?
Elkezdeni ?

Raspberry Pi

Olyan Raspberry Pi 3 B+ modellt használtam, amely nagyszerű fejlesztésekkel rendelkezik és erősebb, mint a korábbi Raspberry Pi 3 B modell.

A Raspberry Pi 3 B+ integrálva van az 1,4 GHz-es 64 bites négymagos processzorral, a kétsávos vezeték nélküli LAN-val, a Bluetooth 4.2/BLE-vel, a gyorsabb Ethernet és a Power-over-Ethernet támogatással (külön PoE HAT).

Műszaki adatok: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64 bites SoC @ 1,4 GHz, 1 GB LPDDR2 SDRAM, 2,4 GHz és 5 GHz IEEE 802.11. B/g/n/ac vezeték nélküli LAN, Bluetooth 4.2, BLE, Gigabit Ethernet USB 2.0-n keresztül (maximális átviteli sebesség 300 Mbps), a kibővített 40 tűs GPIO fejléc, teljes méretű HDMI4 USB 2.0 portok, CSI kamera port a Raspberry Pi kamera csatlakoztatásához, DSI kijelző port a Raspberry Pi érintőképernyős kijelző csatlakoztatásához 4 pólusú sztereó kimenet és kompozit video port, Micro SD port az operációs rendszer betöltéséhez és az adatok tárolásához 5V/2,5A DC tápellátás, Power-over-Ethernet (PoE) támogatás (külön PoE HAT szükséges).

Szervómotor

SG-90 szervo motort használunk, nagy nyomatékú motort, amely képes elviselni a terhelést 2,5 kg-ig (1 cm).

USB kamera

USB kamera, amely interaktívvá teszi a játékot a képfeldolgozással

Néhány Jumper kábelt a léptetőmotor és a Raspberry Pi vezetékezésére használnak.

4. lépés: A Raspbian írása az SD -kártyára?

Írja a Raspbian -t az SD -kártyára?
Írja a Raspbian -t az SD -kártyára?
Írja a Raspbian -t az SD -kártyára?
Írja a Raspbian -t az SD -kártyára?
Írja a Raspbian -t az SD -kártyára?
Írja a Raspbian -t az SD -kártyára?

A Raspbian a Raspberry Pi -n futó Linux -disztribúció. Ebben az útmutatóban a Lite verziót fogjuk használni, de az asztali verzió (amely grafikus környezettel rendelkezik) is használható.

  • Töltse le és telepítse az Etcher programot.
  • Csatlakoztasson egy SD -kártyaolvasót a benne lévő SD -kártyával.
  • Nyissa meg az Etcher alkalmazást, és válassza ki a merevlemezről azt a Raspberry Pi.img vagy.zip fájlt, amelyet az SD -kártyára szeretne írni.
  • Válassza ki azt az SD -kártyát, amelyre a képet be szeretné írni.
  • Tekintse át a választásokat, és kattintson a "Flash!" elkezdeni az adatok írását az SD -kártyára.

Csatlakoztassa az eszközt a hálózatához

  • Engedélyezze az SSH -hozzáférést üres ssh fájl hozzáadásával, amely ismét az SD -kártya rendszerindító kötetének gyökerében található.
  • Helyezze be az SD -kártyát a Raspberry Pi -be. Nagyjából 20 másodperc múlva indul. Most SSH -hozzáféréssel kell rendelkeznie a Raspberry Pi -hez. Alapértelmezés szerint a gazdagép neve raspberrypi.local lesz. A számítógépen nyisson meg egy terminál ablakot, és írja be a következőt:

ssh [email protected]

Az alapértelmezett jelszó a málna

Itt külön monitort használtam a Raspberry Pi -vel való interfészhez.

5. lépés: Az adathalmaz összegyűjtése? ️

Az adathalmaz gyűjtése? ️
Az adathalmaz gyűjtése? ️
Az adathalmaz gyűjtése? ️
Az adathalmaz gyűjtése? ️

A projekt első lépése az adatgyűjtés. A rendszernek azonosítania kell a kézmozdulatot, fel kell ismernie a műveletet, és ennek megfelelően kell mozognia.

Számos könyvtárat telepítünk a Raspberry Pi -re a pip install használatával

parancs.

sudo apt-get update && sudo apt-get upgradesudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev pip install opencv pip telepítés numpy pip telepítés telepítse a tensorflow pip telepítést Werkzeug pip install Keras-Applications pip install Keras-Preprocessing pip install keras-squeezenet pip install astor pip install tensorboard pip install tensorflow-becslő pip install 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 six

Ha bármilyen problémával szembesül az OpenCVpackage programmal, erősen javaslom ezeknek a csomagoknak a telepítését.

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

A projekthez szükséges összes függőséget telepítettük. Az adatkészletet a képek gyűjtése és elrendezése állítja össze a megfelelő címke alatt.

Itt az alábbi részlet segítségével hozzuk létre a szikla, papír és olló címke adatkészlet -képeit.

roi = keret [100: 500, 100: 500]

save_path = os.path.join (img_class_path, '{}.jpg'.format (count + 1)) cv2.imwrite (save_path, roi)

A kép minden címke esetében rögzítésre kerül (kő, papír, olló és nincs).

6. lépés: NN tervezése és a modell betanítása ⚒️⚙️

NN tervezése és a modell betanítása ⚒️⚙️
NN tervezése és a modell betanítása ⚒️⚙️

A projekt lényege egy képosztályozó, amely a három kategória egyikét osztályozza. Ennek az osztályozónak az elkészítéséhez a SqueezeNet nevű, előre betanított CNN-t (Convolutional Network) használjuk.

Itt a Keras és a TensorFlow segítségével generáljuk a SqueezeNet modellt, amely azonosítani tudja a gesztust. Az előző lépésben készített képeket a modell betanítására használjuk. A modell képzése az említett korszakok (ciklusok) számára generált adatkészlet használatával történik.

A modell az alább látható hiperparaméterekkel van konfigurálva.

modell = Szekvenciális ([SqueezeNet (input_shape = (227, 227, 3), include_top = False), Kiesés (0,5), Convolution2D (NUM_CLASSES, (1, 1), padding = 'érvényes'), Aktiválás („relu”), GlobalAveragePooling2D (), Aktiválás (softmax)])

Amíg a modell képzés alatt áll, megtalálhatja a modell veszteségét és pontosságát minden korszakban, és néhány pont után bizonyos ponton megnő a pontosság.

Nagyjából 2 órát vett igénybe a modell legmagasabb pontossággal történő generálása 10 korszak után. Ha bármilyen memóriaelosztási hibával szembesül, tegye a következőket (Adriannak köszönhetően)

A csereterület növeléséhez nyissa meg az /etc /dphys-swapfile fájlt, majd szerkessze a CONF_SWAPSIZE változót:

# CONF_SWAPSIZE = 100

CONF_SWAPSIZE = 1024

Figyelje meg, hogy a csere értékét 100 MB -ról 1024 MB -ra növelem. Innen indítsa újra a csereszolgáltatást:

$ sudo /etc/init.d/dphys-swapfile stop

$ sudo /etc/init.d/dphys-swapfile start

Jegyzet:

A csereméret növelése nagyszerű módja annak, hogy kiégjen a memóriakártya, ezért győződjön meg róla, hogy visszaállítja ezt a módosítást, és ha végzett, indítsa újra a csereszolgáltatást. Itt olvashat bővebben a nagy méretű memóriakártyák sérüléséről.

7. lépés: A modell tesztelése ✅

A modell tesztelése ✅
A modell tesztelése ✅
A modell tesztelése ✅
A modell tesztelése ✅
A modell tesztelése ✅
A modell tesztelése ✅

A modell létrehozása után létrehozza a "rock-paper-scissors-model.h5" kimeneti fájlt. Ezt a fájlt használják forrásként annak tesztelésére, hogy a rendszer képes -e azonosítani a különböző kézmozdulatokat, és képes -e megkülönböztetni a műveleteket.

A modell a következőképpen töltődik be a python szkriptbe

model = load_model ("rock-paper-scissors-model.h5")

A fényképezőgép beolvassa a tesztképet, és átalakítja a kívánt színmodellt, majd átméretezi a képet 227 x 227 képpont méretűre (A modellgeneráláshoz használt méret). A modell oktatásához használt képek felhasználhatók a generált modell tesztelésére.

img = cv2.imread (fájlútvonal)

img = cv2.cvtColor (img, cv2. COLOR_BGR2RGB) img = cv2.resize (img, (227, 227))

Miután a modell betöltődött, és a fényképezőgép megszerezte a képet, a modell megjósolja a rögzített képet a betöltött SqueezeNet modell segítségével, és előrejelzi a felhasználó mozgását.

pred = model.predict (np.array ())

move_code = np.argmax (pred [0]) move_name = leképező (move_code) print ("Predipped: {}". format (move_name))

Futtassa a test.py szkriptet, hogy tesztelje a modellt különböző tesztképekkel.

python3 test.py

Most a modell készen áll a kézmozdulatok észlelésére és megértésére.

8. lépés: Kő-papír-olló játék

Kő-papír-olló játék
Kő-papír-olló játék

A játék véletlenszám -generáló függvényt használ a számítógép lépésének eldöntésére. A győztes kiválasztásához a fenti szabályokat kell követnie. A játék két móddal készült: Normál mód és Intelligens mód, ahol az intelligens mód ellentámadásba lendíti a felhasználó mozgását, azaz a számítógép minden lépést megnyer a felhasználó ellen.

cap = cv2. VideoCapture (0) # Kép rögzítése a kamerából

Most készítsük el a játékot normál módban, ahol a rendszer/ Raspberry Pi felveszi a kezét, és elemzi és azonosítja a kézmozdulatot. Ezután egy véletlenszám -generátor segítségével a számítógép mozog. A nyertest a szabályok alapján választják ki, majd megjelenítik a képernyőn. Indítsa el a játékot a következő paranccsal.

python3 play.py

9. lépés: Szervomotor integráció?

Végül adja hozzá a szervomotort ehhez a projekthez. A szervomotor a Raspberry Pi GPIO 17 -es csapja, amely PWM funkcióval rendelkezik a forgásszög szabályozásához.

A projektben használt szervomotor az SG-90. Elforgathatja az óramutató járásával megegyező és az óramutató járásával ellentétes irányban 180 ° -ig

A kapcsolatok az alábbiak szerint vannak megadva.

Szervomotor - Raspberry Pi

Vcc - +5V

GND - GND

Jel - GPIO17

Ebben a projektben olyan könyvtárakat használnak, mint az RPi. GPIO és az idő.

importálja az RPi. GPIO -t GPIO -ként

importálási idő

A GPIO pin ezután PWM -re van konfigurálva a következő sorok használatával

servoPIN = 17

GPIO.setmode (GPIO. BCM) GPIO.setup (servoPIN, GPIO. OUT)

A GPIO Pin 17 úgy van konfigurálva, hogy PWM -ként használja 50 Hz -es frekvencián. A szervomotor szöge a PWM munkaciklusának (Ton & Toff) beállításával érhető el

szolgálat = szög/18 + 2

GPIO.output (servoPIN, True) p. ChangeDutyCycle (duty) time.sleep (1) GPIO.output (servoPIN, False) p. ChangeDutyCycle (0)

Ez minden impulzushoz előállítja a kívánt lépési szöget, amely megadja a kívánt forgásszöget.

Most vettem a diagramot, és három részre vágtam, szikla, papír és olló számára. A szervomotor a diagram közepére van rögzítve. A mutató/szárny a szervomotor tengelyéhez van csatlakoztatva. Ez a tengely a számítógép mozgására mutat a szkriptben kiszámított logika szerint.

10. lépés: A projekt működése?

Image
Image

És most itt a játékidő. Lássuk a projekt működését.

Ha bármilyen probléma merült fel a projekt építése során, kérdezzen bátran. Kérem, javasoljon új projekteket, amelyeket szeretne, hogy legközelebb tegyek.

Tedd a hüvelykujjad, ha tényleg segített neked, és kövesd a csatornámat az érdekes projektekért.:)

Ossza meg ezt a videót, ha tetszik.

Örülök, hogy feliratkoztál:

Köszönöm, hogy elolvasta!

11. lépés: Kód - Project Repo

A kód hozzáadódik a GitHub adattárhoz, amely a kódrészletben található.

Rahul24-06/Rock-Paper-Scissors-https://github.com/Rahul24-06/Rock-Paper-Sisssors

Ajánlott: